Vagrant で開発環境構築を自動化しよう

世間では、それほど注目されていないようだが、Vagrant というとてもすばらしいツールがあることを知った。実は同様のツールを自作しようとしていたが、このツールにすべて機能がそろっていた。

Vagrant とは

Vagrant は、Ruby で組まれたスクリプトで、仮想マシン上の開発環境の構築・配布の自動化を支援するためのツール。仮想マシン環境(VirtualBox) と構成管理ツール(Chef, Puppet)を利用することで実現している。これを使えば、コマンド一つで、開発に必要な環境を用意できるようになる。

Vagrant: http://www.vagrantup.com/
日本語の記事: http://docs.komagata.org/4673

物理マシン上での開発の悩み

実際に、開発環境を用意するとなると結構な手間がかかってしまう。しかも、開発者が複数いる場合は、各自に同じ作業をやってもらうことになる。開発者全員が、システムの細かい設定まで精通している訳ではないので、実際動かせるようになるまで結構時間がかかることが悩み。

また、複数システムの開発環境をひとつの物理マシンに同居させるとなると、色々コツが必要であることも悩みの種であった。

仮想マシン環境 (VirtualBox)

仮想マシンのプラットフォームとして Oracle VirtualBox を前提としている。VirtualBox は、とても多機能で、しかもフリーな仮想マシン環境。ひとつのシステムを複数人で開発する際に、仮想マシンのディスクイメージを開発者に配布して利用してもらう考え方も、一般化したことと思う。

開発における VirtualBox の便利な機能としては、「共有フォルダ」というものがある。共有フォルダを設定すれば、物理マシンのフォルダを仮想マシンのディレクトリとしてマウントできるようになる。たとえば、仮想マシンの Apache のドキュメントルートを共有フォルダとしておけば、物理マシン上でHTMLの編集の内容が、そのまま仮想マシンに反映されることになる。編集用のツールの中には、とてもじゃないけど仮想マシンでは動作が無理なものもある(Adobe製品とか)ので、この機能は、とても便利だと思う。

もう一つは、ネットワーク機能。 NAT 接続の場合、ポートフォワードを設定することで、仮想マシンのサービスを物理マシンから利用できるようになる。例えば、仮想マシンの 22番ポートを物理マシンの 2222番ポートにポートフォワードすると、物理マシンの ssh クライアントで仮想マシンへログインすることができる。また、80番ポートを 8080番ポートにフォワーディングしておけば、仮想マシンに GUI 環境を用意しなくても、物理マシン上のブラウザで、動作を確認できる。物理マシン中心にした開発が行えるところがメリット。

VirtualBox: http://www.virtualbox.org/

構成管理ツール (Chef, Puppet)

ただし、それだけでは問題が残る。仮想マシンのディスクイメージは、サイズが大きい。複数システムのイメージを用意するとなると、保存用にディスク容量が必要になる。仮想マシンを構成しているソフトウェアは共通している部分が多く、無駄にディスクを消費していることになる。また、サイズが大きいため、利用するための配布元からのダウンロードの時間も馬鹿にならない。配布元が更新されるたびに、利用側も毎回ダウンロードするとなるとやはり手間になる。

できれば、仮想マシンのディスクイメージはひな形となる環境のみ用意して、各システム別に差異がある部分は、別の方法でなんとか構築したい。もちろん自動化したい。

そこで、 Chef や Puppet などの構成管理ツールを利用することになる。構成管理ツールを仮想マシンにインストールしておけば、開発環境に必要なソフトウェアのインストールや設定を自動化してくれる。

Chef: http://www.opscode.com/chef/
Puppet: http://www.puppetlabs.com/

結論

仮想マシン環境や構成管理ツールは単体でも十分便利なのだが、それらを連携して、より洗練された開発環境を作ろうというものが Vagrant。システム構成の自動化という分野は奥が深い。Vagrant は、まだ検証を始めたばかりだが、今後もネタがたまれば、記事にしていきたい。