3この記事は2799文字で約7分で読めます毎回Macの環境構築めんどくさい。開発用MacBookの構成管理がしたくなり、AnsibleとServerspecを使って作りました。記事が長くなりそうなので、今回は前半戦ということでAnsibleの設定について解説します。結論AnsibleAnsibleとはPython製のOSS構成管理ツールです。さまざまな構成をYaml形式でパパっとかけることがポイントです。冪等(べきとう)性、つまり何回実行しても結果が変わらないことを保証したり、エージェントレスで構成管理対象のサーバーに事前インストールが必要ないことが評価されている点です。MacでAnsibleを使うローカル環境であるMacの構成管理にもAnsibleが使えます。ansible_connectionというパラメータをlocalにすることで、localhost上のマシンに対してコマンドが発行できるのでそれをうまく使います。Macでパッケージをインストールするときにたびたびお世話になるHomebrewもAnsibleのモジュールにちゃんと用意されていますのでそちらを使います。Homebrewでのインストールは次のように定義します。'present'簡単そうですね。└─main.ymlAnsibleのディレクトリ構成は上記のようにしてます。Ansibleのplaybookを作るにはざっくり3つの手順を取ります。実際の構成情報を記載したRoleを設定InventoryとRoleをひとまとめにしたplaybookを設定では早速Inventoryの設定から進めていきます。Inventoryを設定するInventoryは複数のサーバーをグルーピングして、同時にプロビジョンするためにサーバーの接続情報をまとめておくコンフィグです。今回はMacに適用するため、接続先情報はlocalとなります。inventoryをコマンドで指定しない場合にdefalutで設定されるdefalutファイルに下記を設定します。[local]localhostこれで、特にInventoryを指定しない場合はlocalhostとして接続がされます。InventoryGroupとしてlocalを指定しているため、group_vars/localにlocalとして共通の変数を定義できます。今回は複数サーバーで共有させる変数が見当たらないので特に設定しません。'local'と設定しておけばいいです。次にRoleを設定していきます。開発者のMacデザイナーのMac運用者のMacとそれぞれインストールするアプリが異なる場合、全員に共通して入れたい設定やAさんは開発者兼デザイナーで両方のアプリが入れたいなどの要求もある場合はそれぞれ、dev-toolsdesign-toolsops-toolsみたくRoleをわけておくのがセオリーです。今回は開発者用のRoleだけつくればいいことにしますので、dev-toolsだけ用意します。各RoleにはTaskというプロビジョニングの実行単位があります。Pythonを入れるTask、Node.jsを入れるTaskという具合です。AnsibleではTasksディレクトリのmain.ymlが読み込まれるため、各Taskごとに分けたYamlをmain.ymlでIncludeして上げればいいわけです。'docker.yml'とIncludeさせるだけです。'present'と記載すればインストールが実現できます。用意されているモジュールを使うことで、すでにインストール、設定済みでも、エラーにならずプロビジョニングが終了しますのでなるべく使えるモジュールがないか探しましょう。構成のなかでいくつかPATHを通す必要があり、bash_profileに環境変数のexportを記載する必要がでてきました。-)"fiそのようなときに役立つのがinlinefileとblockinlineです。fiのように呼び出すだけでbash_profileに冪等性を保ったまま、コンフィグを書き込むことができます。inlinefileとblockinlineの違いは一行か複数行かということです。blockinlineで複数行を記載するとblockの中身の順番が担保されます。shellモジュールが見あたらなく、プロビジョニングができないときは仕方なくshellモジュールを使うことができます。yesただし、冪等性は保たれないため、すでに環境ができていた場合、エラーになってしまう可能性があります。使うことでエラーがでても読み飛ばして次のタスクに進むことができます。yesした部分をServerspecで確認する形でOKとしてます。変数を管理したくなったらvarsに記載することでtask側でも呼び出すことができます。}}"'と宣言すれば利用できます。playbookの設定Ansible最後はplaybookです。'dev-tools'とすれば出来上がりです。playbooks/my-mac.ymlのように実行すればansibleの実行が可能です。仕上げにMakefileをディレクトリルートに作り、煩わしいコマンドから解放されましょう。playbooks/my-mac.ymlのように設定しました。TARGET=macで実行可能になりました。長くなったのでServerspecは次項で話します。Ansibleはディレクトリが複雑なイメージがありますが、意味を理解すれば簡単です。みなさまもMacの構成管理にトライしてみてください。