読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

Vagrant+VirtualBoxでRubyのWebアプリ開発環境構築メモ

Ruby Vagrant Webアプリ

VagrantはVirtualBox仮想マシンを簡単に作成するためのツールです。これを使えば面倒な作業をだいぶ省略できます。 今までは,仮想マシンなんて使わずにMac OS X上でそのまま開発していたのですが,さまざまなパッケージやソースコードなどが溢れかえってきて精神衛生上よくない...

仮想マシンなら,ゴチャゴチャしてきてもOKなので,開発は全部仮想マシン上で行なうことに! そこで今のうちに開発環境の構築方法をメモ

ちなみにRuby以外にもSqlite3やActiveRecord,Sinatra,Ruby on Railsもインストールしておく。

仮想マシンの作成

まずはいつもどおりVagrantでサクッと仮想マシンを作成する。 Vagrantを使ったことがない人は,導入方法や使い方をまとめてますので,参考にしてみて下さい。

Rubyの開発環境としてCentOS6.4を選びました。具体的には↓のようにして作成していく。

$ mkdir rubydev
$ cd rubydev
$ vagrant init centos64
$ vim Vagrantfile
 ...26行目ぐらいにある#を外して,ipアドレスの設定をする
$ vagrant up

もし起動に失敗したら,VirtualBoxを再起動してみてください。

$ sudo /Library/StartupItems/VirtualBox/VirtualBox restart
$ vagrant up

仮想マシンの設定をしていく

まずはログインしてyumのアップデート

$ vagrant ssh
 ...仮想マシンにログイン
$ sudo yum update -y

次はネットワークの設定

$ sudo vi /etc/resolv.conf

でresolv.confを開いた後,↓のようにファイルの中身を変更

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
 ... 6行目ぐらいにあるenabled=1を1→0に書き換え

Rubyの開発環境を整えていく

Rubyはデフォルトでインストールされているが,バージョンが古いので最新版をrbenvで導入する。

$ 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
$ rbenv
 ...rbenvの情報が表示されればrbenvのインストール成功

これでrbenvのインストール完了。いよいよruby-buildを使ってRubyのインストール。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -v 2.0.0-p247
$ rbenv rehashrbenv global 2.0.0-p247
$ rbenv global 2.0.0-p247
$ rbenv versions
$ ruby -v
 ...rubyのバージョンが表示されることを確認。

Rubyのインストールが終わったので,次はgemでsqlite3やActiveRecord,Sinatra,Ruby on Rails,RSpec(テストツール)を導入する。

$ gem update --system
$ gem install activerecord
$ gem install sqlite3
$ gem install sinatra
$ gem install sinatra-contrib
$ gem install rails --no-ri --no-rdoc -V
$ rbenv rehash
$ rails -v
$ gem install rspec
$ gem install rspec-rails
$ rbenv rehash
$ rspec -v

仮想マシンではvimで作業をするので,vimもインストールしておく。

$ sudo yum install vim
$ vim ~/.vimrc

vimrcの設定は↓のようにした。

" 行番号の表示
set number
" 色付け
syntax on
" タブをスペース4つ分の大きさにする
set tabstop=4
set shiftwidth=4
" インデントを自動で合わせてくれる
set autoindent
" タブをスペースとして扱う
"set expandtab
" ~.swpファイルを作らない
set noswapfile

これでRubyの開発環境がととのった。

作業用フォルダを共有する

詳しくはこちらに詳しく解説されてる。 実はvagrantで作成した仮想マシン/vagrantというフォルダは,mac側の仮想マシンのフォルダとの共有フォルダとなっています。

Rubyの開発に使うフォルダと/vagrantシンボリックリンクを作成することで,仮想マシンを立ち上げていない時でもMac側からソースコードの参照ができる。 そこでCentOS上でRubyの開発を行う時は,Rubyの勉強用フォルダとWebアプリ開発用フォルダを使い分け,Webアプリ開発用フォルダはMacと共有することに...(説明下手ですいません)

とりあえず手順は↓のような感じ

$ vagrant ssh
$ ls /vagrant/
Vagrantfile
$ sudo ln -fs /vagrant /home/vagrant/dev_webapp

共有されているか確認

$ cd dev_webapp
$ touch test
$ exit
 ... 仮想マシンからログアウト
$ ls
Vagrantfile test

ちゃんと同期されてる!

今までの設定からBoxを作成する

今までは,ダウンロードしてきたBoxをRuby用にカスタマイズしてきました。今後,Ruby用に同じ構成の仮想マシンを作りたくなった時に,またこのような設定を繰り返すのは面倒なので,Boxを作っておきましょう。

Boxの作成方法はこちらが分かりやすいです

$ vagrant package
$ ls
Vagrantfile package.box
$ vagrant box add devruby_box package.box
$ vagrant box list
centos64    (virtualbox)
devruby_box (virtualbox)
precise32   (virtualbox)
$ rm package.box

vagrant box listの実行結果より,今作成したBoxが追加されていることが確認できる。 これを使えば,次からはvagrant init devruby_boxとするだけで,Ruby開発用の仮想マシンが作成できる!

これはかなり便利な機能! ちなみにBoxの削除は$ vagrant box remove ボックス名です。

Hosterの設定

今の状態では,仮想マシンのなかで作成したWebアプリの動作確認を行なうには,ブラウザ欄でIPアドレスを直接打たないといけない。 面倒臭いのでHosterでHostsファイルを編集してドメインを割り当てる。 今回はIPアドレス192.168.33.10dev.ruby.comというドメインを割り当てました。

動作確認

SinatraでHelloWorldと表示するWebアプリを動作させてみる。 仮想マシン上で,↓のようなファイルを作成.

require 'rubygems'
require 'sinatra'
 
get '/' do
    "hello world"
end

gemでインストールしたパッケージであるsinatraをrequireする時は,rubygemsもrequireしなければいけないらしいです。 これをmain.rbという名前で保存して実行してみると...

$ ruby main.rb -o 192.168.33.10

f:id:nwpct1:20131031210903p:plain

ちゃんと動作してる! あとはRubyの勉強に集中できる


メタプログラミングRuby

メタプログラミングRuby