なぜVagrantを使うのか

Vagrantとは

VagrantVirtualbox やその他仮想マシンの上に開発環境を自動的に構築するためのツールです。Vagrant自体は仮想マシンの管理をするもので、環境構築はChefやAnsibleといったインフラの構築ツールを使用します。 VagrantはOS X、Windows、Debian系LinuxとRPM系Linuxを公式にサポートしています。私は開発時にVagrantとAnsibleを使用して開発環境の構築を自動化しています。

Vagrantは仮想マシンを利用しますが、ホスト(仮想マシンを動かすOSです)とゲスト(仮想マシン内で動かすOSです)の間でディレクトリを共有できます。ホストでの編集は即時にゲストに反映されるため、ホスト側でいつも通り、お気に入りのIDEやエディタを使用して開発することができます。実行環境のみをゲストに移すのです。特にWebアプリケーションは本番ではLinux系OSの上で動作させるものが多いです。開発時から本番と同じ、もしくは近い構成を使用することは、運用時のトラブルを軽減します。

ここではゲストOSにLinuxを使用することを想定しています。

Vagrantを使うメリット

「自分の環境では動いた」からの開放

Vagrantを使うと開発環境を一から自動的に構築できるため、多人数で開発する場合に、全員にまったく同じ環境を提供することができます。これにより、Aさんの環境では動作したが、Bさんの環境では動作しなかった等という問題が起きにくくなります。

いつでもクリーンな環境で開発できる

「このパソコンではサービスAしか開発しない。サービスBを開発するときは別のパソコンを使う。一サービス、一パソコン。」ということはあまりないと思います。複数のサービスを同じパソコン内で開発をすると、それぞれがお互いに何らかの影響を与えてしまうことが多々あります。例えば、ポートが被ってしまった、など。仮想マシンを利用するVagrantはこの問題から開放してくれます。サービスAとサービスB、それぞれで別の仮想マシンをVagrantから扱えば良いのです。

Vagrantを使うデメリット

イニシャルコストがある

これは新しい物に手を出すのであれば常に伴う痛みです。Vagrantの場合は、仮想マシンを使った開発に慣れなければならないことと、ChefやAnsibleを利用した環境の構築に慣れる必要があります。特に実行環境がUnix系OSの場合、Windows上での開発経験しかなく、Unixの知識に乏しい場合にはさらに覚えなければならないことが増えるでしょう。

開発機にメモリが多く必要

仮想マシンを利用するため、OSが同時に複数走ります。そのため必然的にメモリが多く必要になります。GUIを使用しない場合、動かすアプリケーションにもよりますが、ゲストは256MBもメモリがあれば十分な場合もあります。

Vagrantを使わず仮想マシンを使って開発するのではダメなのか

Vagrantは仮想マシンを利用した開発のフレームワークを提供します。Vagrantを使わずに、仮にVirtualBoxを使って開発するとしましょう。開発開始までにこれらの手順を踏むことになります。

  1. 仮想マシンのOSのためにisoファイルをダウンロード
  2. 仮想マシン内にOSをインストール
  3. 仮想マシン内に開発環境と実行環境を構築

一番と二番は時間がかかります。二番は特に手間をかけさせられます。ユーザ名の入力やパスワードの入力からパーティション構成やらなんやら、開発には直接関係ないことをたくさん聞かれます。

慣れた人ならこの作業すら自分で自動化していることでしょう。また、一番と三番をシェルスクリプトで行うことも可能です。しかし、Vagrantはそれらすべてをうまくやってくれます。乗りましょう、Vagrantに。

仮想マシンのスナップショット機能でいいのではないか

仮想マシンはスナップショット機能を備えているものがあります。これは仮想マシンのある瞬間をコピーするイメージです。これにより、仮想マシンは好きなときにスナップショット間を移動できます。また、仮想マシンの本物のコピーを作ることで、多人数へまったく同じ環境を配布することもできます。とても便利です。そうは言っても、開発の最中にサーバの構成を変更しなければならなくなった場合、一から作り直す必要に迫られるかもしれません。構成を手動で変更することは、本番でのサーバ構築を難解にします。

コメント

2015 - 2017 (c) 成瀬基樹