書評「Chef活用ガイド」と「Chef実践入門」について

https://dl.dropboxusercontent.com/u/5390179/chef-books.jpg

同じような時期にChefの書籍が2冊(厚い方と普通の方)発行されるという
大変おもしろい現象もあり、日本のChefコミュニティは
これからより多くの人が活用する段階に入ってきたのかなという印象を持っています。

2013/03に発売された@naoya_ito氏による「chef-solo本」から1年と少し

薄い本(chef-solo本)、普通の本(Chef実践入門)、厚い本(Chef活用ガイド)の3冊をもって
Chef三種の神本として本棚に祀ることをおすすめいたします。

書籍毎によるおすすめ

chef-solo本(薄い本)

  • 本を読むのが苦手、取り敢えずChefというものを動かしてみたい人向き

Chef実践入門(普通の本)

  • Chefはどのようなものか、手元でVagrantなどを利用して手で動かしながら学びたい人向き

Chef活用ガイド(厚い本)

  • 普段からChefを利用しているユーザのリファレンス、およびふとした瞬間に開いて発見したい人向き

Chefを初めてさわる人へ

Chefを取り敢えず触ってみようという人が
どちらを購入すべきか迷われる可能性は多いにあるかと思うので、
参考程度に違いを記載します。

Chefの導入自体が、会社にとって大変大掛かりなタスクになる可能性がある場合は
まずご自身がChef実践入門を読み、手を動かしどのようなものか理解された上で、
Chef活用ガイドを読み、Chefに関連する知識を埋めるという流れをおすすめしたいです。

理由は、Chef実践入門の書籍自体が手を動かしながら
理解を深めることに重きを置いており、
Chef活用ガイドはChefに対するリファレンス的な要素が大きいからです。

もちろんChef実践入門にもChef Serverやtest-kitchen、
Serverspecを利用したテスト方法など記載されています:)
Chef活用ガイドはコーディングやcookbookの実行のされ方
LWRPについてなど、少し深い情報がリファレンス的に情報に辿りつけ
2冊ともよく棲み分けがされている印象です。

両方読んでみて

私自身は、あまり深いところまでChefを利用しているわけではないのですが
2年ぐらいChefを扱って仕事を行っているので(もう2年ぐらい経つのか...)
何の気なしに知っているような感覚にもなりますが、
ohai pluginについては全く知らなかったので、目からウロコでした。

Chef実践入門のPackerとVagrantの設定を読みながら、自分のものを見直します。 Chef活用ガイドのコラムは大変面白いですね。(ohaiの由来、考えたこともありませんでした)

まとめ

Chefの他にもSaltStack社のsalt、Puppet Labs社のpuppet
国内では最近だとAnsible社のansibleなどが流行っていたりしますね。

流行りにのっかるというのもエンジニアとして大切なモチベーションではありますが
書籍が充実しているから選択する。という選択の方法も十分あり得るのかもしれません。

あわせて読みたい


各書籍の目次

Chef活用ガイド

第1部 Chefってなに?
第1章 Chefの概要
1.1 Chefとは
1.2 Chefの背景とInfrastructure as Codeの概念
第2章 Chefの利用形態
2.1 Chef-Server/Client構成
2.2 Chef-Solo
2.3 どちらの構成を採用するか
2.4 Chefの機能要素
2.5 Chef-Repo
第3章 Ohai
3.1 Ohai概要
3.2 Ohaiが収集するNode Attribute
3.3 Ohaiの活用
3.4 Ohaiリファレンス
第4章 Chef-Server
4.1 Chef-Serverの種類
4.2 Chef-Serverのコンポーネント
4.3 Chef-Serverの導入
4.4 Chef-Serverの設定
第5章 Chef-Client
5.1 Chef-Clientとは
5.2 Chef-Client主要オブジェクト解説
5.3 Chef-Clientの動作の流れ
5.4 Chef-Clientの導入
5.5 Chef-Clientの設定
5.6 Chef-Clientの実行
5.7 Chef-Clientの機能を拡張する
5.8 イベントディスパッチャ(Chef::EventDispatcher)
第6章 Workstation
6.1 WorkstationとKnife
6.2 Knifeの役割
6.3 Knifeのセットアップ
6.4 Knifeの設定
6.5 knifeコマンドラインの共通オプション
6.6 knifeサブコマンド
6.7 Knifeの基本操作
6.8 Knifeを使ったワークフロー
6.9 WorkstationからNodeを管理する
6.10 Knifeの拡張
6.11 独自のKnifeプラグインを作成する
第2部 もっと詳しく
第7章 Search API
7.1 問い合わせ書式
7.2 検索対象オブジェクト
7.3 問い合わせキー
7.4 問い合わせパターン
7.5 論理演算子
7.6 特殊文字の取り扱い
7.7 Partial Search
第8章 Data Bag
8.1 Data Bagの構成
8.2 Data Bagの作成
8.3 暗号化Data Bag
8.4 Data Bagの利用
第9章 Environment
9.1 Environmentの構成と基本要素
9.2 要素の詳細と記述例
9.3 Environment _defaultについて
9.4 EnvironmentをNodeに適用する
第10章 Role
10.1 Roleの構成と基本要素
10.2 要素の詳細と記述例
10.3 RoleをNodeに適用する
第11章 Cookbookの基本
11.1 Cookbookとは
11.2 Cookbookの基本要素一覧
11.3 Cookbook要素の読み込み順序
11.4 Recipe
11.5 Resource共通項目
11.6 Attribute
11.7 Recipe DSL
11.8 ResourceとProviderの関係
11.9 ディープマージ
第12章 他のCookbookコンポーネント
12.1 Cookbook Metadata
12.2 Cookbook Version
12.3 Cookbook File
12.4 Cookbook Template
12.5 Cookbook Library
12.6 Cookbook Definition
第13章 Lightweight Resources and Providers(LWRP)
13.2 LWRPの組み込み
13.3 簡単なLWRPを作成する
13.4 Lightweight Resource
13.5 Lightweight Provider
13.6 LWRPの活用と作成例
第14章 テスト
14.1 knife cookbook testサブコマンド
14.2 foodcritic
14.3 ChefSpec
14.4 test-kitchen
14.5 Cookbookを継続的インテグレーションする
第15章 Cookbookの管理ツール
15.1 Cookbook管理のアンチパターン
15.2 Berkshelf
15.3 Librarian-Chef
第16章 Chefの運用
16.1 Chefとシステム構築
16.2 Enterprise Chef Server有償アドオン
16.3 事例紹介
付録A Chef-ClientのEventDispatcherイベント一覧
付録B Chef公式LWRP
付録C ResourcesとProvidersの一覧
付録D IaaS系Knifeプラグイン

Chef実践入門

第1章:DevOpsの潮流とChef
1.1 今なぜChefが注目されているのか
1.2 Infrastructure as Code
1.3 Chefの概要
第2章:Chef Soloによるローカル開発環境の自動構築
2.1 Chef Soloとは
2.2 検証環境を構築する
2.3 Chef Soloをインストールする
2.4 Chefを動かしてみる
2.5 Chef Soloでパッケージをインストールする
2.6 knife-soloでchef-soloをリモート実行する
2.7 Chef SoloでApache,MySQLをセットアップする
2.8 Chefリポジトリの扱い
2.9 Vagrant以外のサーバへChefを実行する
2.10 Chefの考え方
第3章:レシピの書き方
3.1 リソースとは
3.2 td-agentのレシピを読む
3.3 主要なリソースの解説
3.4 そのほかのリソース
3.5 AttributeとData Bag
3.6 クックブックのディレクトリレイアウト
4.1 コミュニティクックブックを利用する
4.2 Chef Soloで複数ノードを管理する
第5章:Vagrantによるクックブック開発環境の構築
5.1 Vagrantから直接クックブックを適用する
5.2 Saharaを使って何度もクックブック適用を試す
5.3 Packerで開発環境用のboxを作成する
5.4 変更を加えたboxを配布する
5.5 VagrantでVMware Fusionを利用する
5.6 VagrantでAmazon EC2を利用する
第6章:アプリケーション実行環境の自動構築
6.1 PHP環境を構築する
6.2 Ruby環境を構築する
6.3 MySQLを構築する
6.4 Fluentdを構築する
第7章:テスト駆動インフラ構築
7.1 インフラ構築用のコードにテストを用意する意味
7.2 Test Kitchenによるテスト
7.3 継続的インテグレーション
第8章:Chefをより活用するための注意点
8.1 Chefユーザの共通の悩み
8.2 共通の悩みを解消する基本的な方針
8.3 レシピの書き方の注意点
8.4 Chefをデプロイツールとして使う際の問題点
8.5 大きくなったクックブックを分割する
8.6 クックブックと実際の環境の食い違い
8.7 クックブックの依存関係を管理する
8.8 Chefのレシピが実行されるまでのサイクル
8.9 Chefを拡張する
第9章:Chef Serverによる本番環境の構築と運用
9.1 Chef Serverを利用するメリット
9.2 Chef Serverをセットアップする
9.3 knifeコマンドを利用したオペレーション
9.4 Chef Serverを使った運用フロー
Chef Serverと認証する
chef-clientコマンドを実行する
第10章:Chef Serverによる大規模システムの構築と運用

cookbookの書き方とか勉強させてもらお