PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog

当ブログは下記URLに移転しました。
https://developers.prtimes.jp/

仮想環境自動化ツール「Vagrant」 - Windows編

PR Timesエンジニアの落合です。

エンジニアのみなさん開発環境自動化してますか!?
今回は、弊社で使用している開発環境についてをご紹介したいと思います。

今まで、開発環境について

今までの環境では、Linuxで開発サーバーを構築するか、自分のWindowsマシンに仮想サーバーを作成したり、
簡単に使えるXamppをインストールしたりと、いろんな環境を試してきました。
開発サーバーを構築すると、複数人で開発する際、コンフリクトが起こり、開発が進みづらくなる時があり、
仮想サーバーを構築した場合、各々のマシンに環境を用意しなければなりません。
また、ミドルウェアの設定等も、各自のマシンで設定されてしまう為、設定漏れが発生する可能性も・・・。
Xamppも非常に有効なツールですが、やはり最終的にはLinuxで動作させる為、
何故かLinuxでは動かないとか、LinuxコマンドをPHPから実行する事も難しくなってしまい、
複数PHPのバージョンを設定する事ができません。
そこで、弊社では、最近注目されている開発支援ツールVagrant」を導入しました。
今回の記事では、Vagrantの基本的な概念とセットアップ方法や、簡単な操作方法を紹介したいと思います。

仮想マシンの作成や環境構築等を自動化するツールVagrant

WEBの開発現場では、自分のマシンに構築した仮想マシンにテスト環境を作成し、そこで開発やテストを行うスタイルが一般的かと思います。
先ほども書きましたが、環境を構築するのに、半日~1日かかってしまい、中々開発に入れないという事もあったかと思います。
Vagrantを使用すれば、ほんの数行で仮想マシンが作成できてしまします。
また、気軽に環境を捨てられるのも特徴的です。
開発途中で環境に変更が加えられて、全く別な環境を用意したとしても、「vagrant destroy」と入力すれば、
簡単に破棄することができます。

Vagrantのインストール

VagrantVagrantをインストールしただけでは、仮想環境を構築する事ができません。
VirtualBox等の仮想化ソフトウェアが必要となります。
まずは、VirtualBoxからインストールしていきましょう。
VagrantとVirtualBox4.3.10の相性が良くないという情報がありましたので、
今回は旧バージョンの4.2.24をインストールする事にしました。
こちらからダウンロードする事ができます。
f:id:breaktimes:20140517152233p:plain
インストーラーに従って、インストールしていけば、問題はありません。

次に、Vagrantをインストールしたいと思います。
Vagrantに関しては、最新版をインストールしていきましょう。
こちらからダウンロードする事ができます。
f:id:breaktimes:20140517152236p:plain
こちらもインストーラーに従って、インストールしていけば問題ありません。

両方ともインストールが完了すれば、準備完了です!

VagrantBoxの追加

Vagrantのインストールが完了したら、次はBoxの追加です。
Boxとは、環境を構築する為のテンプレートのようなもので、事前にOSや設定等が含まれているものです。
そのBoxをダウンロードして、Vagrantに追加しておく事でその環境を利用して、仮想マシンをセットアップする事ができます。
以下のコマンドをコマンドプロンプトで実行する事で、boxを追加する事が出来ます。

$ vagrant box add BOX名 パス(URL)

Boxは色んな所で公開されていますが、基本的なものは「vagrantbox.es」で公開されています。
vagrantbox.esはこちら→A list of base boxes for Vagrant - Vagrantbox.es
f:id:breaktimes:20140517152237p:plain
f:id:breaktimes:20140517152239p:plain

今回は、http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20131103.boxを選択してみました。
VirtualBox用のCentOS6.4で最小構成になっています。

$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20131103.box

ダウンロードに時間がかかる為、先にダウンロードしておくのもいいかと思います。

Vagrantfileの生成

Boxの追加が完了したら、次はvagrantコマンドを使用して、Vagrantfileというファイルを生成します。
Varantfileは、仮想サーバーを構築する為の設定ファイルのようなものです。
今後仮想サーバーを作成する度に、作成していく事になります。
まずは、Vagrantコマンドを実行する前に、ファイルの作成場所を作成しておこうと思います。
今回は、Cドライブの直下に「centos」というフォルダを作成しました。

$ cd C:\
$ mkdir centos

次に、vagrant initコマンドを実行します。

$ vagrant init Box名

追加したBox名を入力する事で、それを利用して作成するようのVagrantファイルを生成してくれます。
今回は、以下のようにして実行しました。

$ vagrant init centos64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

レスポンスで上記のように記載されていれば、生成成功となります。
早速、生成されたファイルを確認してみましょう。
VagrantfileはRubyで記述されています。
コメントアウトしている部分を省略すると、以下のようになっていると思います。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos64"
end

こういった形式で色んな設定を行う事が出来ます。
早速ネットワークの設定を行っておきましょう。
26行目あたりに、以下のようなコードがあると思います。
コメントアウトを外して、修正してください。

26 #config.vm.network "private_network", ip: "192.168.33.10"
↓
26 config.vm.network "private_network", ip: "192.168.33.10"

今後、ここで設定したIPアドレスを使用して仮想サーバーへSSH接続します。
ここでは紹介しませんが、この他にもかなりの設定を行う事が可能です。
興味のある方は、ぜひ調べてみてください。

Vagrantコマンドを使ってサーバー起動

Vagrantの設定が終わったら、まずは以下のコマンドを実行して、
仮想マシンの起動を行います。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ....
==> default: Clearing any previously set network interfaces...
・・中略・・
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.2.16
    default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
    default: /vagrant => ...

たったこれだけで、仮想サーバーの完成です!

仮想サーバーへの接続

vagrantのコマンドを使用して、SSH接続する事が出来るのですが、
コマンドプロンプトの初期状態ですと、接続する事が出来ません。
オススメは、Cygwin等のWindows上で動作するUNIXライクな環境を設定しておくことです。
ですが、tera termなどのターミナルエミュレーターを使用する事でも接続する事が出来ますので、
そちらを使用するものいいかと思います。
接続する際の設定は、以下の通りです。

主なVagrantコマンドのご紹介

Vagrantには、仮想マシンを操作する為のコマンドが複数存在しています。
また、Boxの操作に関しても、コマンドがありますので、
それを紹介しておきたいと思います。

仮想マシンの終了(シャットダウン)

Vagrantが管理しているマシンをシャットダウンします。

$ vagrant halt

仮想マシンの中断

ゲストマシンの状態を正確に保存します。
そのため、再開した時には、完全な起動処理とは異なり、保留にした時点での状態にすぐに戻ります。

$ vagrant suspend

仮想マシンの再開

suspendした仮想マシンを再開します。

$ vagrant resume

仮想マシンへのSSH接続

仮想マシンSSH接続します。
※ただし、初期状態のコマンドプロンプトでは実行できません。

$ vagrant ssh

仮想マシンの状態確認

マシンの状態を表示します。

$ vagrant status

仮想マシンの再起動

haltした後に、upして仮想マシンを再起動します。

$ vagrant reload

BOXの作成

先ほど実行したとおり、BOXを追加して、NAMEで保存します。

$ vagrant box add NAME URL

BOXの一覧

既に追加されているBOXの一覧を表示します。

$ vagrant box list

BOXの削除

boxをVagrantから削除します。

$ vagrant box remove NAME

この他にも、たくさんのコマンドが用意されていますが、
良く使うコマンドをピックアップしてみました。

このように、簡単に仮想マシンをセットアップする事が出来て、すぐに使えるようになります。
Chefのようなプロビジョニングツールと連携して、短期的にサーバーを構築するように
実装しておけば、今後開発メンバーが変更された時にも、即日受け入れする事が出来ると思います。
また、今回は紹介していませんが、作成した仮想マシンをBOX化する事が出来ますので、
それを共有したりする事でも、短期的な開発環境の提供が出来るようになると思います。

今後もこのような便利ツールや、開発手法など、面白いものを発見したら、公開していきたいと思います!

今回実行した環境

ホストOS: Windows7 x64
VirtualBox: 4.2.24
Vagrant: 1.6.1
ゲストOS: CentOS6.4 x64
f:id:breaktimes:20140517152233p:plainf:id:breaktimes:20140517152236p:plainf:id:breaktimes:20140517152237p:plainf:id:breaktimes:20140517152239p:plain