mitamae

Itamaeの代替実装(alternative implementation)。mrubyで駆動する、高速・軽量・単一バイナリの構成管理ツール。MITライセンス。

3つの設計目標

READMEが挙げる特徴はそのまま設計上の割り切りになっている。

  • Fast — ローカル実行に最適化されている。他ツールが1操作ごとにシェルコマンドやSSH接続を経由するのに対し、mitamaeは可能な限りmrubyライブラリのC関数で処理する。
  • Simple — Chef Server、Berkshelf、Data Bags、RubyGemsのいずれも不要。coreは本質的な機能だけを提供する。
  • Single Binary — バイナリ1つを転送すれば動く。MRI(標準Ruby処理系)のインストールも不要。

使い方

GitHub Releasesからプラットフォーム向けのバイナリを落として実行するだけ。

curl -O -L https://github.com/itamae-kitchen/mitamae/releases/latest/download/mitamae-x86_64-linux
chmod +x ./mitamae-x86_64-linux
./mitamae-x86_64-linux help

レシピはItamae/Chef風のRuby DSL。

# recipe.rb
package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
end
mitamae local recipe.rb
mitamae local recipe.rb --log-level=debug  # 何が実行されているか詳しく見る

directory, file, template, package, service, user, group, link, execute, git, http_request, remote_file, remote_directory, local_ruby_block, gem_packageといったリソース、Definitions(独自リソース定義)、Including Recipes、Node Attributesの仕様は本家Itamaeに準拠しており、Itamaeのwikiがそのままドキュメントとして使える。

Itamaeとの差分

mitamae独自の機能(いずれ本家へポートしたい、とREADMEに書かれているもの)。

  • not_if / only_if にコマンド文字列ではなくブロックを渡せる
  • file / remote_file / template に atomic_update 属性がある
  • run_command が --log-level debug または log_output: true でログをストリームする

mrubyであることの制約

DSLの土台がMRIではなくmrubyなので、Chefのレシピをそのまま持ってくると詰まる箇所がある。READMEの移行表から主なもの。

Chef mitamae
ruby_block local_ruby_block を使う
shell_out! run_command(Open3.capture3やsystemでも可)
Chef::Log.* MItamae.logger.*
Digest::*.hexdigest sha1sumなどのコマンドで代用
cookbook_file sourceでパスを指定したremote_file/template
directory の recursive true mitamaeではrecursiveがデフォルト

使えるmruby機能はビルドに組み込まれたmrbgemの範囲に限られる。ERB・JSON・YAML・Dir::glob・Etc・Tempfile・Shellwords・open3・URIあたりはmrbgemとして同梱されている。

リモートサーバーへの適用

mitamaeにはSSHで入って適用するモード(itamae ssh相当)がない。バイナリとレシピをサーバーへ配ってから現地で実行する、という前提の設計になっている。READMEが挙げる方法は2つ。

  • rsync + ssh — 数台程度なら、rsyncで送ってsshで叩く。これを行うツールとしてhochoがある。SSH越しではあるが、操作ごとにSSH接続を張るitamae sshよりはるかに速い。
  • デプロイツール — 台数が増える場合は、各サーバーにエージェントを置き、オブジェクトストレージからバイナリとレシピを取得して実行させる。AWS CodeDeployなどが例として挙げられている。

つまり「push型かpull型か」をツール自身が決めず、配布の仕組みは外部に委ねている。

実際の利用例

プラグイン

mitamae-plugin-*という命名でリソースを追加できる。cron、runit_service、deploy_revisionなどChefにあってcoreにないリソースはプラグインで補う。Itamae用プラグインでmitamaeに対応しているものもある。

対応プラットフォーム

Serverspecと同じ基盤ライブラリ(Specinfra、mitamae側はmruby-specinfra)を使っているため、Serverspecがサポートするすべてのアーキテクチャ・OS向けにバイナリが配布されている。

構成管理ツールの中での位置づけ

Itamaeをmrubyで書き直し、単一バイナリ配布・高速化を実現した派生実装。シンプルさを追求する路線をさらに推し進め、リモート実行の責務すら外部ツールに逃がしている。

#infrastructure-as-code #ruby #mruby

出典

作成日時: 2026-08-19 15:26 / 更新日時: 2026-09-08 15:08