Ruby on Railsチュートリアルの環境構築をvagrant上でやってみたまとめ


##はじめに

### 経緯
社内でRailsの勉強会をやりたい、という話をしていました。

そこで「[Ruby on Rails Tutorial](http://railstutorial.jp/)
をハンズオン形式でやってみよう！」という話になったのですが、それぞれが使っているOSの違いなどが原因で、上手く進行できなかったりすることもあるかな、というのが懸念としてありました。

「じゃあvagrantを使ってみんな同じ環境で(だめだったら簡単にやり直せるし！)進めていこう！」

というわけで社内向けにvagrantのセットアップからtutorialの第1章(環境構築)までをやってみたまとめを作ったのですが、せっかくなので投稿します。
(僕もRailsやったことないので、間違っているところがあるかも知れません。ご指摘があれば、是非お願いします。。)

### Railsを動かすOS
- CentOS6.5


### RubyとRailsのバージョン
- Ruby 2.1.0
- Rails 3.2

(tutorialの[Rails 3.2/4.0 のどっちから始めるべき？](http://railstutorial.jp/#sidebar-rails_3_4)というコラムによると、
初学者はまず3.2をやってみるのが良いそうです。)

### 方針
`rails server`ができるようになるまでに叩いたコマンドを羅列していきます。

ほとんどはtutorialの内容を転記しただけですが、たまにtutorialには記載のないコマンドを叩く必要もありました。

RVMやGemのインストールなどは基本的にtutorialに沿っていって、うまくいかないところがあったら確認する、という用途で使えればと思っています。
(まだ勉強会開催前なので、実績はありません。。)

## vagrantとvirtual boxのインストール
下記よりインストール。
書いている時点でvirtual boxは4.3.10、vagrantは1.5.2でした。
- [virtual box](https://www.virtualbox.org/wiki/Downloads)
- [vagrant](http://www.vagrantup.com/downloads.html '')

## vagrantのセットアップ
### 初期化及びboxを追加
[http://www.vagrantbox.es/](http://www.vagrantbox.es/)より選択します。

今回はCentOSの6.5を使います。

```bash
vagrant init https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
```

### ネットワークの設定
Vagrantfileを開き、下記のコメントを外します。

```Vagrantfile
config.vm.network "private_network", ip: "192.168.33.10"
```

これで192.168.33.10のアドレスで、ホストOSからゲストOSにアクセスできるようになります。

### 共有ディレクトリの設定
RailsはVM上で動かす想定ですが、コーディングはホスト側の使い慣れた環境やエディタで行いたいので、ソースディレクトリを共有します。

同じようにコメントアウトされている行があるので、下記のように設定します。

```Vagrantfile
config.vm.synced_folder "~/src/rails_projects", "/home/vagrant/rails_projects"
```

`config.vm.synced_folder "ホスト側のディレクトリ", "ゲスト側のディレクトリ"`という設定になります。

ホスト側はどこでもいいので、適当にディレクトリを作って設定してください。
ゲスト側はtutorialで指定されている名前にしたいので、なるべく変えない方が良いと思います。


### 起動
```bash
vagrant up
```

初回は結構時間がかかります。。

## 色々インストール

仮想マシンにSSHでログインして作業を行います。

```bash
vagrant ssh
```

### yumのupdate

まずはyumを最新にしておきます。

```bash
sudo yum update
```

### RVM

rubyの管理には、チュートリアル通りにRVMを使います。

#### インストール
```bash
curl -L https://get.rvm.io | bash -s
```

インストールが終わった段階で、.bash_profileに`source ~/.profile`を追記しておいてください、と言われました。

```bash
* WARNING: You have '~/.profile' file, you might want to load it,
  to do that add the following line to '/home/vagrant/.bash_profile':

    source ~/.profile
```

追記して、`source ~/.bash_profile`で読み込んでおきます。

```bash
vi ~/.bash_profile #編集する
source ~/.bash_profile
```

#### 最新化

```bash
rvm get head && rvm reload
```

#### 必要なパッケージをインストール

```bash
rvm requirements
```

#### rubyのインストール

```bash
rvm install 2.1.0 --with-openssl-dir=$HOME/.rvm/usr
```

### gem

#### gemset作成

```bash
rvm use 2.1.0@rails3tutorial2ndEd --create --default
```

#### gemのupdate
gemをtutorialの指定バージョンでupdateします。

```bash
gem update --system 1.8.24
```

### Rails

#### インストール

```bash
gem install rails -v 3.2.14
```

#### アプリケーションの作成
Railsのアプリケーションを作成してみます。

Vagrantfileに共有ディレクトリの設定を行ったので、ディレクトリはもう作られているはずです。

```bash
cd rails_projects
rails new first_app
```

そうすると、`bundle install`のところで怒られました。

```
/home/vagrant/.rvm/rubies/ruby-2.0.0-p451/bin/ruby extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
```

sqlite-develをインストールし、再度`bundle install`します。

```bash
sudo yum install sqlite-devel
bundle install
```

再び`rails server`を実行すると、今度はJavaScriptのruntimeがないと怒られます。

```bash
/home/vagrant/.rvm/gems/ruby-2.0.0-p451@rails3tutorial2ndEd/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
 ```

tutorialを見ると、nodejsがおすすめですと書いてあるので、素直にnodejsをインストールします。

```bash
sudo yum install nodejs
```

再度`rails server`を実行すると、今度は成功！

[http://192.168.33.10:3000/](http://192.168.33.10:3000/)にホスト側のブラウザからアクセスして、Railsの初期画面が表示されれば成功です！

![スクリーンショット 2014-04-17 1.09.52.png](https://qiita-image-store.s3.amazonaws.com/0/28883/6c01e957-1891-9c8a-2f02-3377617ae33c.png "スクリーンショット 2014-04-17 1.09.52.png")


## 終わりに
ここまでで一章の半分ぐらい(1.5まである中の、1.2.5)です。
勉強会の進行を妨げそうな環境構築作業はもうないかな、という感じがしているのでここで終わります。

まだ読み進めたばかりですが、Rails tutrialは1つ1つのトピックについて幅広く、背景まで含めて深く説明してくれているので、すごく勉強になります。

勉強会が楽しみです！