トップ «前の日記(2015-04-30) 最新 次の日記(2015-09-23)» 編集

2015-09-06 [長年日記]

_ ItamaeとChefについての比較メモ

Chef Solo がオワコンというので気になってちょっと調べてみた感想。

背景

自分は Chef Solo を Vagrant と組み合わせて誰でも開発環境を作れるように、という目的で使っている。頑張ったのは 2013 年の話。

この時に頑張って以降はたまに pear package の install に失敗するとか、こまごました調整しかしてない。新しめの開発環境はわざわざ OS ごと仮想化しなくてもいいものを採用するので、古いものしかここにはない。これにプラスして Capistrano を導入して、commit されているものが deploy される、を実現した。今思うと遠い昔のようだ。(この春からは一部で GitHub + CircleCI + Heroku で自動 deploy にしている。)

production 環境の provisioning には使っていない。(特に変更を加えていないし、どうしても必要なものは手作業)

気になっていたこと

Itamae は Chef-like DSL というのは分かっていたけど、Chef-like だったらそもそもそんなにシンプルじゃないはずで、違いはどこにあるのか、といった辺りが気になっていた。

分かったこと

Chef は使い始めるのに必要なツールが案外多く、Chef を使いたいのに Knife を振りかざしてて、しかもこの Knife のサブコマンドがまた多くて、これ何やってるんだっけ感が強い。たぶん Rails の generator とかに影響受けてるんだと思うけど、さすがにボリューミーでつらい。

対して Itamae は itamae コマンドが叩ければok. ここのシンプルさはとても偉大だ。

resource を仮想化したあとにコマンドを叩く部分では Specinfra に依存している。この関係性は先にもっと大きく取り上げてよいように思う。自分の場合は Specinfra は Serverspec 用のものだと理解していたので、ちょっと悩んだ。

Specinfra がよくできているおかげで、Itamae で定義されたレシピは local でも ssh を通じた remote 上でも動く。remote には Itamae がインストールされている必要はない。

ということは Chef と同様のレシピがそのまま動くわけではない。Chef はレシピの実行にすべて Ruby が関わっているので、実行時にも Ruby の強力な記述力を活かせる。対して Itamae ではレシピの定義は Ruby だが OS にタッチする操作自体は Ruby で行っていない。ssh コマンド上で実行できる通常の OS のコマンドで実現する必要がある。

自分がそれを特徴的に感じたのは全 resource 共通で使える only_if, not_if 属性。

Chef ではここに文字列だけでなく Ruby の block も使える。Itamae はレシピ適用対象の OS で利用可能なコマンドを文字列で指定する。確かに。これしか方法はない。local でも remote でも使えるようにするための大きなトレードオフだと思う。

そうすると、複雑な条件を書こうと思うと sh script で使う test コマンドが活躍することになる。Ruby DSL で宣言的に記述できるという触れ込みがここで破綻する。ここは急に sh script の文脈になる。

新たに気になったこと

Itamae のドキュメント単体では node や attribute などの知識の補完が難しそう。そうすると結局 Chef のドキュメントに当たるのか、という問題がある。今後のドキュメントの整備が課題か。

まとめ

自分は provisioning の宣言的な記述には YAML より Ruby DSL の方がよいと思っている。Ansible の独自拡張 YAML は disposable infra にはいいかもしれないけど、変更を加えたり冪等性を確保するといった目的には使いにくいように思う。そして開発環境の provisioning は Docker をうまく使わない限りは disposable って難しいんじゃないかなと思っている。(開発環境だからこそ disposable じゃんていう指摘は正しいんだけど、ちょっとした変更のたびにゼロから環境作らなきゃいけなくてそれに長い時間掛かると、更新サボっちゃうでしょ?)

Itamae は Chef が持っている機能のうち DSL を切り出し、agent 的に動いてほしい部分は他のツールを併用して補うようにするなど、上手な割り切り方をしているように思う。何より itamae コマンド一つですぐに試せるのがサイコーによい。

古い環境とか Windows 対応は恐らく Chef の方にまだ一日の長がありそうだが、より新しめの環境にはマッチするのではないか。

ということで、次に新たに OS 丸ごと相手にしなければいけない時には Itamae を検討したい。

参考