Fork me on GitHub

役立ちぬ開発史、それはただのブログ

覚えておくといい、ブログの時代は終わる。いつかその内、きっとたぶん…

うきうきVagrant再入門、覚えてなきゃヤバイ使い方!

| Comments

今回は、前回のChefの話でちょっと話題にしたVagrantについてです。去年まで、周りで全く使ってる人どころか、知っている人がいなかったのですが、2013年に入って一気に有名になった印象です。Vagrantを使う上で必要な操作や、覚えてなきゃヤバイ使い方を書きました。逆に、これを読めば、Vagrantを使いこなせます。(…きっと)

Vagrantとは

Vagrant

Vagrantは、開発環境を作るために使うツールです。簡単に設定が行なえて、何回でも同じ環境を作れるポータブルな開発環境です。なので、一回作った開発環境は、違う環境でも、他の人に渡してもそのまま動きます。もともとはVirtual Boxを自動で設定するために作られました。その後、プラグインによって、Virtual Box以外の仮想環境、amazon EC2などでも出来るようになりました。

なぜVagrantが必要なのか!?それについては、公式ページのWHY VAGRANT?か、日本語訳してあるVagrantを使う理由を読みましょう。
全然、書くのがだるいわけじゃな(ry

Vagrantのインストール

まず、VirtualBoxかVMwareが入っていることが前提です。どちらも無い人は、無料のVirtualBoxをDownload VirtualBoxよりインストールしましょう。

Vagrantをインストールするには、Vagrant Downloadsからインストーラをダウンロードしてから、インストールします。ダウンロードしたら、インストーラに従いましょう。
VagrantのVersionが1.1より前は、RubyGemでインストールしていたみたいです。

Boxのインストール

Boxは、仮想マシンのテンプレートになります。Vagrantbox.esに、さまざまな構成のBoxがあるので、好きなモノを選んでインストールしましょう。今回は、その中のCentOS 6.4 x86_64を使っています。Vagrantbox.esは非公式なので、自己責任で使ってください。

Boxをインストールするには、box addを使います。

1
vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v0.1.0/centos64-x86_64-20131030.box

Boxがインストールされたか、確認しましょう。

1
vagrant box list

Boxのコマンドを見るには、-hを使ってヘルプを出力します。

1
vagrant box -h

インストールしたBoxは~/.vagrant.d/boxesにあります。

1
ls ~/.vagrant.d/boxes

Boxを削除したいときは、removeを使いましょう。

1
vagrant box remove

覚えておくべきVagrantコマンド

Vagrantのチュートリアルに入る前に、Vagrantの覚えておくべきコマンドを紹介します。

  • 仮想マシンを初期化する。
1
2
3
4
vagrant init box名
or
// ネットワーク上のBoxを使用する場合は、Boxを置いてあるURLを追加
vagrant init box名 boxURL
  • 仮想マシンを起動させる。
1
vagrant up
  • 仮想マシンの状態を出力させる。
    • running: 起動中
    • saved: 一時停止中
    • poweroff: 停止中
1
vagrant status
  • 仮想マシンを一時中断させる。
1
vagrant suspend
  • 中断した仮想マシンを再び起動させる。
1
vagrant resume
  • 仮想マシンを停止させる。
1
vagrant halt
  • 仮想マシンを破壊する。
1
vagrant destroy
  • 仮想マシンを再起動する。
1
vagrant reload
  • 仮想マシンにSSH接続する。
1
vagrant ssh
  • 仮想マシンのSSH情報を出力する。
1
vagrant ssh-config

Vagrantのチュートリアル

Vagrantを使ったチュートリアルです。Webページで"Hello Word & Vagrant!"を表示させましょう。

まず、新規のディレクトリを作成し、その中に移動します。

1
2
mkdir vagrant-hello
cd vagrant-hello

移動したら、使用するテンプレートBoxの名前を入れて、初期化します。

1
vagrant init centos64

初期化すると、Vagrantfileが作成されます。Vagrantfileの中を見てみると、Rubyで書かれた設定ファイルになっています。これに仮想マシンの色々な設定を書くことができます。

1
less Vagrantfile

次に、仮想マシンを起動して、SSH接続しましょう。仮想マシンを起動するときは、Vagrantfileのあるところで、コマンドを実行します。起動には、ちょっと時間かかります。

1
2
vagrant up
vagrant ssh

仮想マシンの中に入ると、CentOSで使えるコマンドが使用できます。"Hello World & Vagrant!"をWebページで表示したいので、それに必要なものを揃えます。
中にはなにもないので、まず、Webサーバを導入します。

1
sudo yum -y install httpd

導入したら、起動させます。

1
sudo service httpd start

仮想マシンを再起動しても、起動するようにchkconfigします。

1
sudo chkconfig httpd on

ファイアーウォールが動いていると、設定が色々と面倒です。ローカルなので、ファイアーウォールを切ります。

1
sudo service iptables stop

仮想マシンを再起動しても、起動しないようにchkconfigします。

1
sudo chkconfig iptables off

次に、CentOSの場合は/var/www/htmlで、Webページを作成するので、移動します。

1
cd /var/www/html

index.htmlを作ります。

1
sudo vi index.html

中には、"Hello World & Vagrant!"を書きましょう。

1
<h1>Hello World & Vagrant!<h1>

ちゃんと書けてるか中を確認してから、仮想マシンから出ます。

1
2
cat index.html
exit

Vagrantfileの中に、ネットワークの設定があるので、プライベートネットワークを使えるように編集します。

1
2
3
###26行目:コメントアウトを削除
- # config.vm.network :private_network, ip: "192.168.33.10"
+ config.vm.network :private_network, ip: "192.168.33.10"

設定を変更したら、仮想マシンを再起動します。

1
vagrant reload

再起動が終わったら、ブラウザを開いて、192.168.33.10にアクセスします。そうすると、"Hello World & Vagrant!"が表示されます。表示されない場合は、どこかが間違っているので、見直しましょう。

共有フォルダの設定

いちいちSSH接続するのが面倒くさいっという人向けの設定です。Vagrantには、共有フォルダが設定されています。デフォルトでは、ホストOS(自分のPC)のVagrantfileが置いてあるディレクトリが、SSH接続した後のrootの/vagrantとリンクしています。なので、シンボリックリンクを/var/www/htmlに繋げると、ホストOS(自分のPC)でindex.htmlを変更したら、ブラウザにその変更した内容が反映されます。

1
2
3
4
// 先ほどのチュートリアルを行っていたら、削除してクリアな状態にします。
sudo rm -rf /var/www/html
// シンボリックリンクを繋げる
sudo ln -fs /vagrant /var/www/html

シンボリックリンクを繋げたら、ホストOS(自分のPC)でindex.htmlを作成して、ブラウザを確認してみましょう。作成した内容に変わっているはずです。変わっていなければ、どこか間違っているので、見直しましょう。

Pluginの導入

Vagrantには、色々なプラグインがあります。プラグインの導入はとても簡単です。今回は、Vagrantのプラグインの中でも、よく使われているsaharaを例に導入します。

プラグインを導入するには、plugin installを使います。

1
vagrant plugin install sahara

pluginのコマンドを見るには、-hを使うことでヘルプを出力します。

1
vagrant plugin -h

Pluginがちゃんとインストールされているかは、plugin listで確認できます。

1
vagrant plugin list

必要なくなったPluginは、plugin uninstallでアンインストールできます。

1
vagrant plugin uninstall sahara

確認してみると、なくなっているのがわかります。

1
vagrant plugin list

著作権のあるVagrantプラグインに対するライセンスをインストールには、plugin licenseを使います。

1
vagrant plugin license <name> <license-file>

Saharaの使い方

Saharaでは、sandboxモードを扱うことができます。これは、仮想マシンに何かプログラムをインストールして変更を加えたけど、それが気に入らなかくて、変更を加える前の仮想マシンを戻したいときに使えます。

仮想マシンを起動する前に、sandbox onをします。

1
vagrant sandbox on

SSH接続して、何か変更しましょう。変更したら、仮想マシンから出ます。そのあとに、sandbox rollbackをします。

1
vagrant sandbox rollback

すると、sandbox onしたときの状態に仮想マシンが戻ります。

変更が気に入って、次にrollbackしたとき、変更したところから戻りたいときは、sandbox commitをします。
commitするときに注意することは、仮想マシンをsuspendするなどして止めましょう。仮想マシンを止めずにcommitすると恐ろしいいほど時間かかりますので、本当に注意しましょう。

1
vagrant sandbox commit

sandboxモードを終わらせるときは、sandbox offをすれば大丈夫です。

1
vagrant sandbox off

また、sandboxの状態をsandbox statusで、調べることができます。

1
vagrant sandbox status

おわりに

Vagrantで開発する際に、必要な操作はある程度書きました。これだけを覚えてしまえば、問題なくVagrantを使って開発ができるはずです。
紹介しきれなかったVagrantの素敵な機能が、まだまだあります。その中には、ChefとVagrantを強力にするものがあります。なので、今度はそれを紹介します。
むしろ、そのためにChefとVagrantの記事を書いてたのです!
また、使う頻度があまり多くない機能もあるので、それらについては、いつか時間があるときに書こうと思います。(…きっと)

Vagrantの書籍でメジャーなのは、これでしょう。読んだこと無いのでわかりませんが、書いてある内容はググれば分かるレベルと聞きます。なので、お金を出したくない人は頑張って調べましょう。発売時期はかなり役立ったかも知れませんが、今回の記事も含めて、まとまった情報が今は沢山あるので、上手く調べれば事足りるかもしれません。また値段も安いので、買って損はありません。

参考先:

Chef + VagrantによるPHP5.3 + MySQL + nginxの開発環境 Vagrantの使い方
Vagrant入門
VAGRANT DOCUMENTATION
Vagrant日本語ドキュメント

Comments