仮想環境構築ツール「Vagrant」で開発環境を仮想マシン上に自動作成する

図2 Mac OS X向けのVagrant配布パッケージ。インストーラが含まれている

 アプリケーションの開発やテストを行うために仮想マシンを利用するのは近年では珍しくない。仮想マシンを利用することで、開発者ごとに個別の環境を割り当てることも容易だが、いっぽうでその分だけ開発・テスト環境を構築する作業が必要となる。今回紹介する「Vagrant」は、仮想マシンの構築と開発・テスト環境の構築をまとめて行える支援ツールだ。

仮想マシンの作成や環境構築、仮想マシンの破棄までを自動化するツール「Vagrant」

 近年、Web開発の分野ではPC上に構築した仮想マシン上にテスト用の環境を作成し、そこで開発やテストを行う、というスタイルが一般的になっている。その場合に問題になるのが、本番環境とテスト/開発環境が同一になっていない、というケースだ。また、複数人の開発者が関わるプロジェクトでは開発者がそれぞれ自身のマシン上に仮想環境を構築して開発するという例も多いが、この場合開発者ごとのテスト/開発環境がそろっていないという問題が発生することもある。

 こういった問題を防ぐため、近年ではChefPuppetといった設定管理ツールを利用して運用環境と同一の環境を作るという方法が提唱されているが、これをさらに一歩進め、仮想マシンの作成と環境構築をまとめて実行できるようにしたツールが今回紹介するVagrantだ。

 Vagrantでは構成情報を記述した設定ファイルを用意してコマンドを実行するだけで仮想ディスクイメージのダウンロードや仮想マシンの作成および起動、そしてプロビジョニング用のコマンドの発行といったタスクを実行できる(図1)。

図1 Vagrantの動作イメージ
図1 Vagrantの動作イメージ

 プロビジョニングでは任意のコマンドを実行できるほか、ChefやPuppetといった設定管理ツールの設定ファイルを仮想マシンに転送して設定管理を実行する、といったことも可能だ。

Vagrantはどのような環境で有用なのか

 Vagrantを利用することで、同一構成の複数の仮想マシンを簡単に作成できる。そのため、複数人や複数台のマシンでテスト用の仮想環境が必要な場合に有用だ。また、Windows環境でも利用できるので、Windows上でLinuxサーバー向けの開発を行っている場合などでも有用だろう。

 いっぽう、実運用環境をVagrantで作成することは推奨されていない。コマンドで簡単に仮想マシンを破棄できるからだ。そのため、実運用環境をChefなどの設定管理ツールで構築し、それをVagrantに転用する、というスタイルを取ることが多い。

Vagrantの動作環境と必要なソフトウェア

 VagrantはRubyで実装されており、WindowsおよびMac OS X、Linux(Debian、Ubuntu、CentOS、Red Hat Enterprise Linux、Fedora)で動作する。ただし、Windowsについては一部機能制限やほかのOS環境と挙動が異なる点がある。

 また、Vagrant自体には仮想化に関する機能は搭載されておらず、別途仮想化ソフトウェアが必要となる。現在公開されている最新版であるVagrant 1.7系ではVirtualBoxがデフォルトの仮想化ソフトウェアとなっており、またDockerやHyper-Vもサポートされている(Hyper-VはWindows 8.1環境でのみサポート)。そのほか、別途プラグインを導入することでVMware(VMware FusionおよびVMware Workstation)やXen、KVMなども利用可能だ。ただし、組み合わせる仮想化ソフトウェアによってはVagrantの一部機能が利用できない場合があるので注意したい。

Vagrantを利用するための準備

 それでは、Vagrantを利用してテスト用の仮想環境を作成する基本的な流れを紹介しよう。

Vagrantのインストール

 Vagrantは公式Webサイトのダウンロードページからダウンロードできる。Mac OS X、Windows、Linux向けのパッケージが用意されており、Linux向けについてはDeb形式(DebianおよびUbuntu)とRPM形式(RHELおよびFedora)のパッケージが用意されている。

 例えばCentOS(x86_64)上の環境の場合、RPM形式のパッケージをダウンロードし、次のようにrpmコマンドでインストールすれば良い。たとえばバージョン1.7.2の場合、以下のようになる。なおバージョンによってファイル名は異なるので、適宜対応したファイル名を使用してほしい。

# rpm -ivh vagrant_1.7.2_x86_64.rpm

 ちなみにVagrantはRubyで実装されているが、パッケージでインストールした場合Vagrantが使用するRuby環境(Ruby 2.0)も同時にインストールされるため、別途Rubyをインストールしておく必要はない。Linux環境の場合、このRuby環境は/opt/vagrant/embeddedディレクトリ以下にインストールされる。

 また、Mac OS XやWindows環境の場合は、配布されているインストーラを実行し、指示に従ってインストール作業を進めれば良い(図2)。

図2 Mac OS X向けのVagrant配布パッケージ。インストーラが含まれている
図2 Mac OS X向けのVagrant配布パッケージ。インストーラが含まれている

VirtualBoxのインストール

 Vagrantはデフォルトでは仮想化ソフトウェアとしてVirtualBoxもしくはVMwareを使用する。今回はオープンソースソフトウェアであるVirtualBoxを利用する例を紹介しよう。

 VirtualBoxは、GPLv2ライセンスで公開されている仮想化ソフトウェアだ。ソースコードに加え、ダウンロードページにてWindowsおよびMac OS X、Linux、Solaris向けのバイナリが公開されている。WindowsおよびMac OS X環境においては、ここから入手できるインストーラでインストールを行えば良い。

 また、Linux環境については、apt-getおよびyum向けのリポジトリが公開されており、そちらからインストールできる。詳しくはVirtualBoxのWebサイト上にあるLinux環境向けのインストール方法解説ページを参照してほしい。

 たとえばRed Hat Enterprise Linux(RHEL)系の環境の場合、以下のようにしてリポジトリ設定情報が記述されたファイルをダウンロードし、/etc/yum.repos.dディレクトリ以下に配置するだけでOKだ。

$ wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
# cp virtualbox.repo /etc/yum.repos.d/

 リポジトリの追加後は、「yum install」コマンドでVirtualBoxのインストールを実行できる。

# yum install VirtualBox-4.3

 また、インストール後にVirtualBoxが利用するカーネルモジュールのビルドも必要となる。この際にはkernel-develパッケージが必要となるので、別途インストールしておこう。

# yum install kernel-devel

 なお、稼働中のカーネルのバージョンが最新のものではない場合、kernel-develパッケージによってインストールされたカーネル設定ファイル(kenrel-headers)のバージョンと稼働中カーネルのバージョンが一致しない場合があるので注意したい。稼働中カーネルのバージョンは、「uname -r」コマンドで確認できる。

$ uname -r
2.6.32-431.el6.x86_64

 もしこれが、/usr/src/kernelsディレクトリ以下にあるカーネル設定ファイルのディレクトリと異なっていた場合、稼働中カーネルをアップデートするか、もしくは稼働中カーネルのバージョンに対応したkernel-develパッケージをインストールする必要がある。

$ ls /usr/src/kernels/
2.6.32-431.el6.x86_64

 カーネル設定ファイルのインストールが完了したら、「/etc/init.d/vboxdrv setup」コマンドを実行するとカーネルモジュールのビルドおよび組み込みが実行される。

# /etc/init.d/vboxdrv setup

 なお、オープンソースで公開されているのはVirtualBoxの本体のみで、「Extension Pack」については非オープンソースのライセンス(個人使用および評価目的での使用のみ可)となっているので注意したい。