KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

vagrantを使った開発環境構築


ケイズのホームページに写真公開されてしまった林です。
他の方々に比べていやに短足感が目立ちます・・・。ちゃんとズボンあげまくって学生かよ!!って突っ込まれるくらいやればよかった。

pythonの記事は後日執筆します。というか他のメンバーのほうが既に詳しくなってきたんじゃないかという感じもありますが。。。
断じて飽きた訳ではないです。ちょっとfabricのほうが楽しくて浮気しちゃってますけど。pyramidの興味が一気に失せる程いいよ、fabric。

Introduction

さてさて、本題です。
まぁ普通に巷で使われているVagrantについて書いてみようかなと思います。

Vagrant。これは「ゔぇいぐらんと」と読むらしいです。最初「ゔぁぐらんと」とか読んでいたのは秘密。
本家URLはこちら。vagrant

これを使うと何がいいかってところは下記。
1. さくっと全く同じ環境が作れる。
2. いらなくなったら捨てれる。
3. 必要になったらまた同じ環境が作れる。

ポイ捨て自由なんすよ、Vagrant!
開発環境をVMとかでやってると無駄にVMが乱立していきますよね。
またVMを作って、これ使ってーって渡すのもいいですけど、ユーザーがうんぬんかんぬん。やり方がなんか違うだうんぬんかんぬん。
そしてどんどん圧迫していくVMさん。。。

Vagrantさんを使うと使いたいときにさっと使えて、必要なくなったら削除できる。
そんな感じで開発環境にはもってこいです。dockerは現在お勉強中です^^

では使い方から。

Install

インストール方法は至って簡単。
公式サイトからインストーラーをダウンロードしてきてダブルクリックで一発終了。
DownLoad
ちなみにvagrantはrubyで作成されているのでrubyは必要です。
あと仮想環境用にVirtualBoxですかね。他にもAWSやVMware Fusionでも動くみたいです。

Linuxの場合はwgetとかでダウンロードしてきて、rpmで入れたり、apt-getしたりって感じですね。
MacとWinはインストーラーが用意されているのでそれでさくっと入れられますよ。

Windowsで環境をやる場合はそもそも仮想環境作れないとか色々あると思いますが、
その辺は調べれば出るくらいの情報はあるのであしからず。

使用方法

まぁ使用方法は色々なところで書いていただいているのですが、一応参考までに。

BOX(イメージファイル)は自分で作成した方がいいですね。そのほうがsecureにもなるし、配布用にも使えますわな。
参考サイト様 Ryuzee.com
ちなみに一応イメージが集約されているサイトはあります。
が、当然何を仕込まれているかは分からないので使用については自己責任でお願いします。
Vagrantbox.es

インストールが完了するとvagrantコマンドが使用できるようになります。
基本コマンドは以下の通り。

# vagrant初期ファイル作成(VagrantFileを作成します。)
vagrant init

# Boxを追加 BOX_NAMEには指定したい名前、URLはイメージURLを追加します。社内で使うなら社内用イメージ作成した方がよし。
vagrant add box BOX_NAME URL

# vagrantインスタンスを立ち上げ。
vagrant up

# インスタンスを停止
vagrant halt

# インスタンスのステータス確認
vagrant status

# インスタンスを削除
vagrant destroy

# インスタンスへssh接続
vagrant ssh

# プリインストールを実行。(後述)
vagrant provision

とりあえずこれだけ覚えておけばそれなりに使えます。

まずは適当なところにvagrant用のフォルダを作成してください。
作成が終わったらそのディレクトリに移動して、以下のコマンド

vagrant init

そうするとVagrantfileが作成されるので、編集します。
とりあえずこんな感じで。

Vagrant.configure("2") do |config|
  config.vm.box = "centos_vagrant"
  config.vm.box_url = "ほにゃららー"
  config.vm.provision :shell, :path => "~/vagrant/bootstrap.sh"
  config.vm.network :forwarded_port, host: 4567, guest: 80
end

一つ一つ説明すると…

Vagrant.configure("2") do |config|

ここはお約束。vagrant2系を利用する、ということらしいんですが、実はまだよくわかってないです。
1というのもあるらしいのですが。。。

config.vm.box

これはボックス名の設定。適当でいいです。

config.vm.box_url

ボックスのURLを指定します。これを指定するとイメージファイルをダウンロードしてきて、展開するって感じです。

config.vm.provision :shell, :path => "~/vagrant/bootstrap.sh"

これはイメージ作成が完了した後に色々やってくれます。いろいろというのはshellスクリプトに記載されている内容をローディングしてくれるというイメージでOKです。

例えば

#!/usr/bin/env bash

yum -y update
yum -y groupinstall "Development Tools"
yum -y install openssl openssl-devel readline-devel zlib-devel curl-devel libyaml-devel flex libxml2-devel zlib-devel libpng-devel libjpeg-devel libXpm-devel freetype freetype-devel
yum -y install httpd
rm -rf /var/www
ln -fs /vagrant /var/www
# vimの為にmarcurialとgitをインストール
yum -y install hg
yum -y install git
yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel

こう書いておくとyum updateして、groupinstallしてくれて色々yum installしてくれてうんぬんかんぬん。
って感じです。これをイメージが立ち上がる前にやってくれるんですね。便利。

ちなみに

vagrant provision

とやるとvm.box.provisionに設定されているシェルスクリプトを実行してくれるので、何回でも試せますよ。
オプションが:shell以外にもありそうなので、色々やれそうですねー。

config.vm.network :forwarded_port, host: 4567, guest: 80

ここはイメージファイルのローカルのmacなりwinなりからhttp://localhostにアクセスすると、
vagrantのvmのport80に転送しますよ、って設定です。確か。
ポート転送とかもできるのでいい感じです。network周りをいじらなくてもOKっていうのがまたいいですね。

とまぁここまででイメージの立ち上げは終わったと思うので、あとはターミナルやらsshクライアントから

vagrant ssh

とうてばVM環境にssh接続できます。
winの場合は作成したイメージ次第、ってところでしょうか。

次はdockerとかfabricとかの内容を書きたいと思っています。
以上、ざっとかなり長くなりましたが、vagrantの使い方とかのご紹介でしたー。

 

【関連記事】
Pythonプロフェッショナルプログラミング
開発を学ぶにあたって、思うこと。
Mac Book Airのストレージの交換
Python3.4 + Pyramid + SQLAlchemy その1
redmineのbacklogプラグイン