Vagrant + Chef でらくらく開発環境構築

はじめまして。エンジニアの栗山です。

エニグモでも、ついに、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でのテスト、テスト結果の通知」 がされるようにしたいと考えています。