vagrant
初心者

【Vagrant】vagrantを導入しよう

今回はVagranについて基本的な事柄をまとめました。
自分も含めた初心者向けに、Vagrantとはなにか?、実際の導入手順、知っていると便利な機能といったことについて触れていきたいと思います。もし記事の内容に間違っている箇所がございましたら、ご指摘ください。

1.Vagrantとは

Vagrantは仮想環境の構築とその共有を簡単に行うためのツールです。
通常、VirtualBoxなどによって、仮想マシンを立ち上げ、そこに開発環境を構築するとなると、手間と時間がかかります。
作業の自動化によって、その負担をいくらか軽くしてくれるのがVagrantです。
Vagrantfileという設定ファイルに仮想環境の設定を記載することで、ツール側で自動的に環境の設定を行ってくれます。

Vagrantを導入することで得られるメリットは主に以下の点が挙げられます。

  • 同一の仮想環境を、簡単に複数人へ提供できる
  • 同一の仮想環境を、簡単に複数回にわたって構築できる
  • 別々の環境に、同じ設定の環境を簡単に構築することが出来る

1.同一の仮想環境を、簡単に複数人に提供できる
Vagrantfileを共有することによって、複数人に同一の環境を簡単に提供することが可能となります。
たとえば、エンジニアAさんが仮想マシン上に環境を構築したあと、その際に生成したVagrantfileをエンジニアBさんやデザイナーCさんに共有することで、Bさん、Cさんも自分の手元にAさんと同じ開発環境を用意することができるようになるのです。

2.同一の仮想環境を、簡単に複数回にわたって構築できる
Vagrantは構築した仮想環境の破壊も、コマンド1つで簡単に行うことが出来ます。
1度破壊したあと、再度必要となったときは以前作成したVagrantfileを用いることで、同じ環境を再構築することができます。
簡単に仮想環境の構築・破壊ができるので、学習用の環境の構築にも適しています。

3.別々のホストマシンに、同じ設定の環境を簡単に構築することが出来る
みなさんは自分の手元にあるPCの開発環境とテストで使用するサーバの環境の設定が、微妙に違って困ったという経験はありますか。
開発環境、テスト環境、そして本番環境はなるべく設定を揃えて、開発を行いたいものです。
なぜなら、開発環境では上手く動作していたのに、テスト環境に移した途端動かなくなった、といった環境由来の不具合を未然に防ぐことが出来るためです。
Vagrantなら別々のホストマシンに同一の仮想環境を提供することも容易となります。

2.導入手順

つぎにVagrantを導入して、仮想マシンを構築する手順を紹介します。
今回使用するOS、ソフトウェア、バージョンは以下の通りとなります。

今回導入した環境・使用したソフト

Windows10

Vagrant 2.0.1

VirtualBox 5.2.4

1.VagrantとVirtualBoxの入手

以下のサイトからそれぞれのソフトウェアをダウンロード、インストールをします。

Vargant

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

VirtualBox

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

Vagrantのインストールが完了したら、コマンドプロンプトを立ち上げ、以下のコマンドを入力します。

[実行するコマンド]

vagrant -v

コマンドプロンプトにバージョンが出力されれば、インストール成功です。

[出力例]

vagrant -v
Vagrant 2.0.1

2.初期化

まず適当な場所にフォルダを作成します。このフォルダに、仮想マシンの設定を記載するvagrantfileなどが出力されます。

以下に記載したコマンドをコマンドプロンプト上に入力してください。
例として、ここでは「test」というフォルダを作成します。

[実行するコマンド]

mkdir test
cd test

testフォルダに移動後、下記のコマンドを入力します。
このコマンドは、フォルダ内の初期化を行うもので、実行するとフォルダ内にVagrantfileが生成されます。

[実行するコマンド]

vagrant init

初期化の手順は以上です。
ここまでで使用したコマンドと、そのほかに覚えておきたいコマンドを表にしました。

コマンドリスト

コマンド 機能
vagrant -v インストールされているVagnratのバージョン表記
vagrant -h Vagrantのヘルプを出力
vagrant init ディレクトリ(フォルダ)をVagrant環境として初期化

3.ボックスの追加

次にボックスを追加します。
ボックスというのは、OSのイメージファイルや、そのOSで構築した環境設定を1つのパッケージとしてまとめたものです。

今回はVagrantの公式ドキュメントに従って、「hashicorp / precise64」というボックスを使用します。
UbuntuのOSイメージがパッケージングされたボックスです。
まずは下記のコマンドで「hashicorp / precise64」をダウンロードします。

[実行するコマンド]

vagrant box add hashicorp/precise64

次に下記のコマンドで、ダウンロードが完了したことを確認します。
これはVagrant上にダウンロードしたボックスを一覧することが出来るコマンドです。

[実行するコマンドとその出力結果]

vagrant box list
hashicorp/precise64 (virtualbox, 1.1.0)

今回は「hashicorp/precise64」を使用しましたが、Vagrant公式サイトで公開しているVagrantCloudでは様々なボックスが公開されています。
公開されているボックスの中には、既にRubyやPHPの開発環境を構築済みで
仮想マシンを立ち上げればすぐに開発ができるようになっているものもあるようです。
目的に合わせて、使用するボックスを選べば環境構築の手間が省けますね。

ボックス追加の手順は以上です。
ここまでで使用したコマンドと、そのほかに覚えておきたいコマンドを表にしました。

コマンドリスト

コマンド 機能
vagrant box add [name] 指定したボックスをVagrantに追加(インストールする)
vagrant box remove [name] 指定したボックスをVagrantから削除する
vagrant box list Vagrantにインストールしたボックスを一覧表示する
vagrant box update ボックスファイルの更新を行う。オプションとして「--box [name]」を指定することで、[name]で指定したボックスだけを更新することが出来る

ちなみに
「2.初期化」でvagrant initを行う際に、引数としてボックス名を入力することによって生成されるVagrantfileに指定したボックス名が設定された状態で出力されます。

[コマンドの入力例]

vagrant init hashicorp/precise64

4.仮想マシンの起動・停止

ボックスの追加が出来たら、次はいよいよ仮想マシンを起動します。
その前にVagrantfileを編集しましょう。
Vagrantfileを開き、以下の「base」の部分を「hashicorp/precise64」に変更します。
ここで、立ち上げ時にどのボックスを使用するか指定しています。

[変更前]

Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

[変更後]

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

Vagrantfileの保存が完了したら、いよいよ仮想マシンの起動です。
コマンドプロンプトに以下のコマンドを入力しましょう。初回の起動は少し時間がかかります。

[実行するコマンド]

vagrant up

仮想マシンの起動に成功すると、コマンドプロンプトに以下のようなメッセージが出力されます。

[出力例]

==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run

さっそくログインしてみましょう。
以下のコマンドを入力することによってコマンドプロンプトから直接仮想マシン内へログインすることが出来ます。その後の操作はUNIX上のものと同一です。

[実行するコマンド]

vagrant ssh

また、TeratermやPuTTYなどのSSHクライアントからログインすることもできます。その際のIPアドレス・ID・パスワードは以下の通りとなります。

項目
IPアドレス 127.0.0.1
ポート 2222
ID vagrant
パスワード vagrant

立ち上げた仮想マシンを停止する場合は以下のコマンドを入力します。

[実行するコマンド]

vagrant halt

仮想マシンが不要となった場合はvagrant destroyで破棄しましょう。
一度破棄してしまった環境も、vagrant upを入力することで再度立ち上げることが出来ます。

[実行するコマンド]

vagrant destroy

Vagrantの基本的な導入手順は以上です。
導入手順の締めとして、仮想マシンの操作をするうえで覚えておきたいコマンドを表にしました。

コマンドリスト

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

以降は、Vagrantで仮想環境を構築するうえで覚えておきたい機能の一部をご紹介します。

3.その他便利な機能

1.共有フォルダ

Vagrantは、標準でホスト側(仮想マシンを立ち上げている側のPC)のフォルダと仮想マシン内の「Vagrant」ディレクトリをリアルタイムで同期させることができます。
ここで注意したいのが、ここで指している「Vagrant」ディレクトリというものは、絶対パスで表現するところの「/home/Vagrant」ではなく「/Vagrant」だということです。

同期させるフォルダは、Vagrantfile内に以下のような記述をすることによって変更することができます。
以下の例ではホスト側の「data」フォルダと仮想マシン側の「vagrant_data」ディレクトリを同期させるように変更しました。
記載は、[ホスト側のフォルダ][仮想マシン側のフォルダ]の順に記載していきます。

[記載例]

Vagrant.configure("2") do |config|
  config.vm.synced_folder "../data", "/vagrant_data"
end

2.プロヴィジョニング

仮想マシンの初回起動時に実施したい処理を予め設定しておくことが出来ます。
vagrantfile内に以下の記述を行うことでプロビジョニングを設定することが出来ます。
以下の例は、起動後に「hello world!」と出力する設定です。

[記載例]

config.vm.provision "shell", inline: echo "hello world!"

ホスト側のPC上にあるシェルスクリプトの実行も可能です。
例えば以下の例はフォルダ内に格納されている「provision.sh」を実行する、というものです。

[記載例]

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

例えば、この「provision.sh」に以下の記載をすることで初回起動時に
インストールされているインデックスファイルのアップデート、
webサーバとなるapache2 をインストールと起動、
vagrantディレクトリからvar/www/以下へのシンボリックリンクを貼る、という複数の操作をVagrant側で自動的に行ってくれます。

[provision.shに記載した内容]

apt-get update
apt-get install -y apache2
apt-get install -y sysv-rc-conf
sudo service apache2 start
sysv-rc-conf apache2 on
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi

また以下のコマンドを実行することで、構築済みの仮想マシンへプロヴィジョニングをすることが出来ます。

vagrant provisioning

コマンドリスト

コマンド 機能
vagrant provisioning 構築済みの仮想マシンへプロヴィジョニング

3.ネットワーク接続

Vagrantで構築した仮想マシンのIPアドレスはデフォルトでは「127.0.0.1」となっています。
いわゆるループバックアドレスです。

Vagrantfileに以下の記載をすることによって、仮想マシンに静的なIPアドレスを割り振ることができます。

config.vm.network "private_network", ip: "192.168.33.10"

4.ボックスの作成

vagrantで立ち上げた仮想マシンは、vagrant packageを実行することで、
立ち上げた仮想マシンの状態をそのままボックス化することができます。

vagrant package

vagrant packageの実行後、ホストPC側のフォルダ内に「package.box」というボックスファイルが生成されます。
作成したボックスは以下のコマンドのように、ボックス名を指定し(ここでは「my_box」としています)、
次に追加したいボックスのファイル名(ここでは「package.box」を指定しています)を指定することで、追加することが出来ます。

vagrant box add my_box package.box

次に再度、vagrant box listをすると、「my_box」という名前でリストに追加されていることが分かります。
あとはvagrant initでボックス名を指定することによって、仮想マシンを立ち上げることが出来ます。

vagrant box list

コマンドリスト

コマンド 機能
vagrant package 構築済みの仮想マシンをボックス化

4.最後に

Vagrantの基礎的な事柄をまとめてみました。
もっと詳しく知りたい場合は公式ドキュメントを参照することをおすすめします。英語のドキュメントではありますが、google翻訳などを使用すれば理解できるかと思います。
ではみなさん、よい仮想環境構築ライフをお送りください!

参考にした記事一覧
Vagrant公式サイト
Vagrant入門-ドットインストール
開発環境の構築・共有を簡単にするVagrant入門