scramble cadenza

技術ネタのガラクタ置き場

ローカル環境構築を MItamae で自動化した話

イントロ

お仕事用 MacMac book pro に変わってしまった。
環境構築をやるのも久々だったのだけれども、dotfiles のボリュームが増えたのと、実はコード化出来ていない部分が多かったりして、かなり面倒だった。

ちゃんともう一度やり直そう、と思って選んだのが MItamae

  • ansible は活用例が多いっぽいけど、yaml だと表現力が気になる(食わず嫌い)
  • Itamae は良さそうだけど、gem をインストールすることで、環境汚すのはちょっと嫌だ。ruby に依存するし。
  • となると chef も同様
  • puppet は思った以上にデカかった
  • boxen はへんじをしない。ただのしかばねのようだ
  • go で環境構築したら、Mac 以外の環境構築も楽になるのでは説を思いつく
  • itamae-go を発見
  • そういえば mrubyItamae ってなかったっけ
  • Itamaeのmruby実装「MItamae」が大体いい感じになった話 - k0kubun’s blog を発見
  • MItamae にしてみるか

みたいな流れで行き着きました。

今まではどうしていたか

rake で色々やってた。
自前で rake task を定義していて、rake コマンド叩くことで各種 dotfile の配置が完了する。
shell よりは書きやすいと思ったのと、ruby の勉強のために rake を使っていた、という経緯がある。

実際にやってみてどうだったか

mruby がほんの僅かに理解できた

結論から言うと MItamae を使うだけなら、mruby の学習自体は殆ど要らなかった。
ただし mruby でいう gem の取扱いは、CRuby と全然違うので、ここを知らないと大分混乱する。

mruby と mgem と rbenv と - Qiita

MItamae の install は簡単

Mitamae のバイナリが github で配布されているので、curl でダウンロードでおk。

ここが mruby のすごいところで、CRuby とは違う点。
今までは gem を install する時には、ruby を入れて、gem install コマンドを実行していたけど、mruby の gem は、gem 自体それぞれ binary になっているようだ。
(正しい表現かはわからない)

ディレクトリ構成は chef っぽく落ち着く

シンプルな Chef なので、書き方は自由。
だが、試行錯誤していくうちに、結局 Chef みたいな構成に落ち着いていった。
Itamaewiki にも(Chef みたいな構成とは書いてないが)ベストプラクティスが載っている。

Best Practice · itamae-kitchen/itamae Wiki

レシピの実行順序は ruby で担保する

chef で言う run_list 的なやつは MItamae には存在しないっぽい。

どうやるのが良いかわかってないが、今のところ mitamae local xxx.rb コマンドで渡す ruby のコードの中で、include_recipe を順番に並べて管理している。

MItamae で使っている gem を見る

mitamae の DSL の中で、どの程度自由にやれるのかというと、以下のファイルを見れば良いっぽい。

mitamae/mrbgem.rake at master · k0kubun/mitamae

add_dependency に追加されている gem は使える。
DSL の中からやりたいこと、という意味では大体揃っている。

結果

dotfile がすごいすっきりした。嬉しい。
.emacs.d とか .bundle 等の実体は cookbooks の中に押し込んでいる。

mgi166/dotfiles: dotfiles

おわり

k0kubun/dotfiles: Configuration management of development environment がよく出来すぎていて、大体まねっこになってしまった。

MItamaemruby もすごい便利です。

参考