開発環境の構築・共有を簡単にするVagrant入門

2015年3月19日(木)
前佛 雅人(ぜんぶつ まさひと)

Vagrantとは?

Vagrantは、開発環境の構築と共有を簡単に行うためのツールです。どこでも同じ環境を再現できるように仮想マシン環境を管理する機能と、Atlasを通して共有する仕組みが提供されています。

VagrantとAtlasの関係

Vagrantは、アプリケーションやシステム開発のバックエンドを簡単にパッケージ化し、共有するためのツールです。このパッケージ化された環境を、「box」と呼ばれる単位で管理します。このboxには、標準で対応しているVirtualBoxをはじめ、AWSなどの各種マシン・イメージに対応したプラグインを介してアクセスします。またboxを共有するための機能としてAtlasという名前のインターネット上のサービスが提供されています。なお、Atlasは以前VagrantCloudと呼ばれていたものですが、現在はHashiCorpの他のツール(Packer、Terraform、Consul)とも連携できるように拡張されています。

VagrantとAtlasの関係

図1:VagrantとAtlasの関係(クリックで拡大)

VirtualBoxとの違い

Vagrantは、yumやapt-getのようなコマンドの実行や、ChefやAnsible等のツールを使って自動的にアプリケーションやミドルウェアをセットアップするプロビジョニング機能を備えています。また、ネットワークの設定などVirtualBoxのGUIを通さず、VirtualBoxの設定ファイル上で管理することができます。そのため、自分の作業環境を別の場所で再現したり、あるいは、チームや社内で設定環境を共有したりする際に役立つでしょう。

Vagrantが管理できる仮想マシンは、VirtualBoxやVMwareのものだけでなく、AWS等のパブリック・クラウド上の仮想マシンも操作できます。Vagrantが各種の仮想マシンを操作するのに使うのが、プロバイダと呼ばれるものです。VirtualBox用のプロバイダが初めからインストールされていますが、それ以外にもVagrantのプラグイン機能を通して、様々なプロバイダを使い分けることができます。

今回は、Vagrantを使ってできることを具体的に見ていきます。

Vagrantのセットアップ

VagrantはMac OS X、Windows、Linuxに対応したパッケージが配付されています。自分の環境にあったものをダウンロードし、セットアップを行いましょう。またVagrantに加えて、VirtualBoxのダウンロードも必要です。

Vagrantのダウンロード

http://www.vagrantup.com/downloads.html

VirtualBoxのダウンロード

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

それぞれインストールが完了しますと、Vagrantが利用できるようになります。以降の操作では、Vagrantを使って仮想マシンの起動・停止を行いますが,その際にVirtualBoxの設定を行う必要はありません。

ここではVirtualBoxを使う前提で説明を進めますが、前述のようにVirtualBoxを使わずに、VMwareやパブリック・クラウドとの連携も可能です。

初めての仮想マシン起動と操作

それでは、実際に仮想マシンを起動し、ウェブサーバの自動設定や、SSHで仮想マシン内にログインしてみましょう。以下の手順で仮想マシンを起動します。

  1. 作業用ディレクトリでVagrantfileを作成し、仮想マシン・イメージ(box)を指定
  2. コマンドラインで「vagrant up」を実行

仮想マシンの環境設定

VagrantをインストールしたPC上の、任意のディレクトリで名称「Vagrantfile」という名前のファイルを作成します。ファイルにはリスト1のような内容を記述します。

リスト1:Vagrantfileの内容

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
end

1行目は、設定ファイルのバージョンが2であることを意味します。これは、将来の互換性を保持するためのものです。2行目の「config.vm.box」は、Vagrantが扱う「box」と呼ばれる仮想マシン・イメージの形式を指定します。ここでは「hashicorp/precise64」という名称のUbuntuが動作するboxを指定しています。

boxは、Atlas(旧VagrantCloud)で公開されているものや組織で共有しているものの他に、URLやファイル名のパスで指定することもできます。Atlasで公開されている boxイメージは、Vagrantfileで名前を指定するだけで自動的にダウンロードされます。その他のイメージ、例えばVagrantbox.esなどで配付されているboxは、「vagrant box add 」の形式で登録してから利用します。また公式サイトには、ユーザが自分でboxを作る方法も紹介されています。

Vagrantfileは新たに作成せずに、他の場所からコピーしてきても構いません。あるいは「vagrant init」コマンドの実行で、サンプルが記述されたVagrantfileが作成されますので、そちらを参考に設定を行うこともできます。

仮想マシンの起動

仮想マシンを起動するには、コマンドライン上で「vagrant up」コマンドを実行します(リスト2)。最初の実行時には、ローカルの環境にboxが存在しないのでAtlasからダウンロードが始まります。そのためネットワーク環境によっては、長い時間がかかるでしょう。しかし次回以降は、ローカルに保存しているboxを使って起動しますので、すぐに起動するようになります。

リスト2:Vagrantで仮想マシンを起動する

$ vagrant up

これで、仮想マシンが自動的に起動しました。先ほどの「vagrant up」を実行し、boxイメージのダウンロード後は、自動的にVirtualBoxを操作して仮想マシンが起動されていきます。VirtualBoxの画面を見ますと、自動的に仮想マシンが起動していることも確認できますが、通常はVirtualBoxを意識する必要はありません。

仮想マシンのログインと操作

仮想マシンにログインするには、「vagrant ssh」を実行します(リスト3)。成功するとvagrantアカウントでログインした状態となります。また、rootにスイッチするには「sudo su」と実行します。

リスト3:Vagrantで仮想マシンにログインする

$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2
vagrant@precise64:~$

この他にも、覚えておきたい基本的なコマンドがいくつかありますので、まとめて表にしておきます。

Vagrantの基本的なコマンド

コマンド機能
vagrant up仮想マシンを起動
vagrant ssh仮想マシンにログイン
vagrant halt仮想マシンを停止
vagrant suspend仮想マシンを一時停止
vagrant status仮想マシンの起動状態を確認
vagrant destroy仮想マシンを破棄

このように、Vagrantがあれば単純な操作で開発環境を構築できて、すぐ開発に取り組むことができます。

プロビジョニング機能

Vagrantは、「vagrant up」で仮想マシンを起動したあと、自動的なコマンドの実行やアプリケーションの設定を行うプロビジョニング機能を備えています。この機能を活用することで、OSの初期設定や、アプリケーションのインストール作業を迅速かつ正確に行えるようになります。

vagrant up実行後の処理

図2:vagrant up実行後の処理(クリックで拡大)

プロビジョニング機能を使うには、Vagrantfile中で設定を記述します。リスト4の例は、dateコマンドの実行結果を出力するものです。

リスト4:プロビジョニング機能の実行例。dateコマンドを実行している

 config.vm.provision "shell", inline: "date > /vagrant/date.txt"

Vagrantfileにリスト4を追加した後に「vagrant up」を行いますと、OS起動時にdateコマンドが実行されます。既に仮想マシンが起動状態の場合は、コマンド「vagrant provision」でプロビジョニング部分だけを実行できます。反対に「vagrant up --no-provision」とオプションを追加することで、Vagrantfileに書かれたプロビジョニングを実行せずに起動することもできます。

さらにPC上にあるスクリプトの実行も可能です。例えばprovision.shを実行したい場合はリスト5のように記述します。

リスト5:手元のPC上にあるスクリプトを実行する

 config.vm.provision "shell", path: "provision.sh"

また、リモートにあるファイルの実行も可能です。リスト5の「provision.sh」の代わりに、GitHubなどウェブサーバのURLも指定できます(リスト6)。

リスト6:リモートファイルを実行する

  config.vm.provision "shell", path: "https://gist.githubusercontent.com/xxxx/provision.sh"

そのほか、ChefやPuppetやAnsible等のプロビジョニング・ツールとも連携できます。詳細はドキュメントを参照してください。

Provisioning - Vagrant Documentation

http://docs.vagrantup.com/v2/provisioning/index.html

著者
前佛 雅人(ぜんぶつ まさひと)
クリエーションライン株式会社

Technology Evangelist
ホスティングサービスで運用保守サポートに携わった後、現職へ。サポート業務や新技術検証や開発業務を行う傍ら、実家で農作業のため東京と富山を往復する日々。趣味で監視や自動化に関するOSS検証や翻訳を行う。とりわけ運用・監視の省力化・最適化に興味。辛口の日本酒が大好き。
Twitter: @zembutsu (https://twitter.com/zembutsu)

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています