はじめまして。エンジニアの栗山です。
エニグモでも、ついに、Vagrant と Chef で 開発環境を構築出来るようにしました。
経緯
以前は、開発者が各々のMacに手順書にそってApacheをインストールしたりPHPをコンパイルしたり等々していました。
しかしこれだと以下のような問題が出てきます。
- 本番はCentOSで動いているので、開発環境と本番で差異が出てきてしまう。
- 何か新しいミドルウェアを入れたり、フレームワークのバージョンを上げたり、言語のバージョンを上げたりということが気軽に出来ない
- 新しいミドルウェアを入れると全員のエンジニアがそれを自分のPCに入れる作業をしないといけない
- Macを新しくするたびに開発環境を構築するのが面倒
- デザイナーさんは自力で開発環境を構築できない
ということで、一念発起して、Chefレシピを書き、Vagrantも入れ、簡単に開発環境を構築出来るようにしました。
構成や使っているツール
構成を説明するとまずVagrantがあって、Vagrantプラグインとしてvagrant-omnibusとsaharaを入れています。 vagrant-omnibusは、boxにChefが入っていなければ自動的にインストールしてくれるプラグインです。 saharaは、boxのスナップショットをとったり、スナップショットの状態までロールバックしたりすることができるようになるプラグインです。 Chefを書いていると"前の状態に戻したい!"ということが頻繁に起きるので必須のプラグインとなっています。
Chefのcookbookを管理するツールとして、Berkshelfを使っています。 Berkshelfを使うとBundlerのように簡単にサードパーティのcookbookが管理できて非常に便利です。
ちなみにboxファイル自体は、時雨堂さんのpacker-templatesを使ってboxファイルを生成しています。 生成されたboxファイルに対し、Chefレシピを実行する流れです。
Macとboxファイル内のソースコードの同期の仕方ですが、Mac側からソースコードを修正することが多いので、shared foldersではなくnfsを使っています。nfsのほうが速くて快適です。
まとめ
Vagrant + Chefで開発環境が構築できるようになったため、デザイナーさんでも簡単に環境が構築できるようになり、またChefによって常にみんな同じ環境が保てるようになりました。 そしてChefレシピによって何をインストールしてどんな設定をしているかが見えるようになりました。
これから
今後はChefレシピを修正してGitにpushしたら、自動的に、 「boxファイルの生成、Chefレシピの実行、serverspecでのテスト、テスト結果の通知」 がされるようにしたいと考えています。