Vagrantを利用したローカルPCの環境整備

テスト環境や本番環境と比べ、開発者のローカルPCのサーバ環境(APサーバ、DBサーバ、メッセージングサーバなど)は開発者個人の裁量で構築することが多く、十分に整備されてない傾向があります(例えば、データベースにオラクルを利用する場合、ローカルPCにオラクルをインストールする人は少ないと思います)。その場合、ローカルPCできちんとした検証ができず、品質や生産性を落とすことになります(例えば、オラクルじゃないとシステムが動かないのでローカルPCで検証できないなど)。

この問題を解決する手段として、仮想マシンで構築したサーバ環境を開発者に配布するという方法があります。そして、Vagrantというツールを用いると、この方法をより効果的に行うことができます。

Vagrantは、仮想化製品のVirtualBoxをラップして、仮想マシンの配布や更新、複数の仮想マシンの起動/停止を簡単に行うツールです。

例えば、Oracle(DB)とWebSphere(APサーバ)で構成されたサーバ環境を開発メンバに配布するとしましょう。サーバ環境として、Oralceがインストールされた仮想マシンと、WebSphereがインストールされた仮想マシンを配布します。


開発リーダの作業

最初に、開発リーダは、OracleがインストールされたBoxと、WebSphereがインストールされたBoxをそれぞれ用意します。Boxとは、Vagrant仮想マシンを作成するためのテンプレートのようなものです(Boxの用意の仕方の説明は省略します。このブログでは、Boxを用意した後に、開発メンバがいかに簡単にサーバ環境を入手できるかの説明を目的にしています)。開発リーダは、用意したBoxのファイルをHTTPで公開します。ここでは、ファイル名をそれぞれ「db.box」「ap.box」とします。

次に、開発リーダは、Vagrantの設定ファイルであるVagrantfile(ファイル名もVagrantfile)を作成し公開します(公開の仕方は何でも良いですが、バージョン管理したい場合はSCMで公開するのが良いです)。Vagrantfileでは、仮想マシンIPアドレスやホスト名など、仮想マシンの基本的な設定が行えます(システム自動管理ツールと連携しさまざまな環境設定を行うことも可能ですが、このブログでは説明を省略します)。ここでは、2つの仮想マシンを使用する例を示します。

Vagrant::Config.run do |config|
  config.vm.define :ap do |ap_config|
    ap_config.vm.box = "ap"
    ap_config.vm.network :hostonly, "192.168.1.10"
  end

  config.vm.define :db do |db_config|
    db_config.vm.box = "db"
    db_config.vm.network :hostonly, "192.168.1.11"
  end
end

詳細な説明は省略しますが、「ap」と「db」の2つのBoxを使って仮想マシンを作成し、それぞれIPアドレスを割り振る設定を行っています。

開発メンバの作業

開発メンバは、以下のVagrantのコマンドを使って、2つのBoxを入手します(事前に、VirtualBoxVagrantをインストールする必要があります)。

vagrant box add ap http://ホスト名/ap.box
vagrant box add db http://ホスト名/db.box

※「ホスト名」は、Boxを公開しているコンピュータのホスト名です

2つのBoxをダウンロードし、それぞれ「ap」「db」の名前で保管します。

次に、開発メンバは、開発リーダが作成したVagrantfileを入手し、任意のディレクトリに格納します。格納するディレクトリは、開発プロジェクトごとに作成するのが良いでしょう(複数の開発プロジェクトに携わる場合は、複数のディレクトリでそれぞれVagrantfileを配置する)。

その後、Varantfileが配置されたディレクトリ上で、以下のコマンドを実行します。

vagrant up

このコマンドで、それぞれOracleとWebShpereがインストールされた2つの仮想マシンがBoxから作成され、起動します。開発メンバは、以上の作業だけで、サーバ環境をローカルPCに構築することができるのです。

仮想マシンを停止する場合は、以下のコマンドを実行します。

vagrant halt

このコマンドで、2つの仮想マシンが停止します。

また、仮想マシン上のファイルを間違って消してしまったりして環境が壊れた場合、以下のコマンドで、もとの状態に戻せます。

vagrant destroy
vagrant up

最後に

Vagrantを利用することで、開発メンバは、自分のローカルPCに、非常に簡単にサーバ環境を構築することができます。また、ローカルPC上のサーバ環境を壊しても、他の開発者に迷惑がかかるわけではないので、自由にいろいろなことが試せます。このことは、開発の生産性を大きく向上すると思います。