僕は職場でWindows、自宅でMacという状態。Rubyの開発してるとWindowsでgemのインストールでコケるわMacだと何故かActiveSupportがrequireできないわ、おまけに少々事情があってRubyのverも1.9.3と2.0.0とずれている。

あゝ。環境の違いって面倒

そんな状態で色々触っていると、動く動かないで開発がスムーズにいかなかったり、メイン開発環境とサブ環境がだんだん混乱したりプラグインやカスタマイズで汚れて困る事が多々ある。

そんなある日、ちょいと仕事でVagrantを勉強している時に

自分の開発環境を作ってbox化すれば勉強も環境も出来る!

と思ったので自分の開発環境をbox化してみた。その時に必要だった事を覚書。

VagrantとVirtualBoxのインストールと動作確認は終えている前提です リンク:Vagrantの入門に関する勉強メモ また、この記事は2014年4月7日の記事です。

とりあえず仮想環境の準備

まずはCentOSのboxを落としてvagrantfileを作る。

$ vagrant add box centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box
$ mkdir rubydev
$ cd rubydev
$ vagrant init centos64

ブラウザで表示できるように「Vagrantfile」の下記部分をアンコメント。

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

とりあえずこれでvagrantが起動(vagrant up)できる。起動したらsshで接続する。

$ vagrant up
$ vagrant ssh

vagrant upしてからの下準備

こっからCentOSの設定。ここは何度か入力するうちに覚えてきたけど、自分で色々考えて設定できるよう勉強し直し、変更があったら編集する。

$ sudo yum update -y
$ sudo yum install wget
$ sudo vi /etc/resolv.conf

resolv.conf」が開けたら以下のようなコメントを書き足して:wqする。

options single-request-reopen

; generated by /sbin/dhclient-script
nameserver 10.0.2.3

そしてまた色々設定。

$ sudo service iptables stop
$ sudo chkconfig iptables off
$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo rpm -Uvh epel-release-6-8.noarch.rpm
$ sudo rpm -Uvh remi-release-6.rpm
$ sudo vi /etc/yum.repos.d/epel.repo

epel.repo」の6行目ぐらいにあるenable=1を0に書き換え。

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearchfailovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

Rubyの開発環境を作る

ここからRubyの開発環境を作る。コマンドの順番はすごく大事なので注意する事。

$ sudo yum install -y git
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.1.0
$ rbenv global 2.1.0
$ ruby -v

Rubyのバージョンが表示されればok。次にgem関連のダウンロード。本当はbundleから破ったほうが良い気もする。さらに言えばこういう時にsaharaとかのサンドボックスを利用すべきなんだろうけど、何も考えずインストールした。

$ gem update --system
$ gem install pry
$ gem install pry-doc
$ gem install activerecord
$ gem install sqlite3
$ gem install sinatra
$ gem install sinatra-contrib
$ gem install rails
$ gem install devise
$ gem install jekyll
$ gem install roo
rbenv rehash

何も考えずインストールしたけど、これ新しくgemインストールした時とかバージョン変わった時はさすがに面倒だな……。あとで自動化に関して調べる。

動作確認

これで一先ず開発環境が整った。httpdも書こうかと思ったけど、Rubyの開発だったらSinatraかRailsなんで必要無しとして省略。

vagrant initしたディレクトリ(「Vagrantfile」があるディレクトリ)とVagrantで起動している仮想環境の中の/vagrantは共有フォルダとなっているので、ソースコードなどはそこに置いて作業する。

[vagrant@localhost ~]$ cd /vagrant

簡単な動作確認の為にSinatraで確認用ページを書く。

# test.rb
require "rubygems"
require "sinatra"

set :bind, '0.0.0.0'

get '/' do
  "Hello world!"
end

ruby test.rbで実行。そのままブラウザでhttp://192.168.33.10:4567/にアクセスして「Hello world!」が表示されたらok。

現在の環境をbox化

ここまでの作業で出来た環境をbox化し、そのboxを他のPC/Macに持って行ってvagrant add box hoge package.boxするだけでまったく同じ仮想環境を作る事が可能。たとえばrubydevというディレクトリに作りたい場合は冒頭のコマンドをpackageしたboxなどに変えるだけ。

$ vagrant package
  これでpackage.boxが作成される

$ vagrant box add rubydev package.box
$ mkdir rubydev
$ cd rubydev
$ vagrant init rubydev

Vagrantfileだけはinitで生成されるので修正が必要(これも自動化できるのかな)。

これでいつでもWinでもMacでもコードをLinux上でビルドできるし、開発環境が汚れてうわーとなる事もないし、テストも気楽に簡単になった。

参考にしたサイト

実践 Vagrant
実践 Vagrant
posted with amazlet at 14.04.07
Mitchell Hashimoto
オライリージャパン
売り上げランキング: 86,615