Vagrant + VirtualBoxでつくるRails 5の環境構築

Rails 5.0.0.beta1が発表されました。
いち早く新たなバージョンに手を付け、あわよくばRailsにプルリクできたらいいなー。と思いたち、このエントリーを書きました。

バージョンは以下のとおりです
Vagrant 1.8
VirtualBox 5.0.12
Rails 5.0.0.beta1
Ruby 2.2.3
rbenv 1.0.0
Node.js 0.10.37
PostgreSQL 9.3
Redis 3.0.6

ということで、Vagrant + VirtualBoxでつくるRails 5の環境構築です。


# 1. VagrantとVirtualBoxをインストール

Vagrant は[こちら](https://www.vagrantup.com/downloads.html) からインストール
VirtualBox は[こちら](https://www.virtualbox.org/wiki/Downloads)  からインストール

# 2. Vagrantのセットアップ

```bash
$ cd your_project_directory
$ vagrant init
```

Vagrantfileが生成されるので、編集します

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64" # Ubuntu 14.04 を使用
  config.vm.network "forwarded_port", guest: 3000, host: 3000 # Railsで利用するポートを設定
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048" # メモリを多めに設定
  end
end
```

VirtualBoxを起動します

```bash
$ vagrant up # ubuntu/trusty64のboxがダウンロードされていない場合は、しばらく時間がかかります
```

起動が済んだら、ログインします

```bash
$ vagrant ssh
```

# 3. Ubuntuのパッケージをセットアップ
パッケージをアップデートして、必要なパッケージをインストールします

```bash
$ sudo apt-get -y update
$ sudo apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
```

# 4. Rubyのセットアップ

rbenvでRubyをセットアップします

```bash
$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
$ echo 'gem: --no-ri --no-rdoc' > ~/.gemrc
$ exec $SHELL
```

Rubyとbundlerをインストール

```bash
$ rbenv install 2.2.3 # ※結構時間がかかります
$ rbenv global 2.2.3
$ rbenv rehash
$ gem install bundler
```

# 5. Node.jsのセットアップ
Railsで必要なので、Node.jsも入れます

```bash
$ sudo add-apt-repository -y ppa:chris-lea/node.js
$ sudo apt-get -y update
$ sudo apt-get -y install nodejs
```

# 6. PostgresSQLのセットアップ
Herokuが好きなので、DBはPostgresSQLです。（SQLite3を使う方は1.で入れたので、セットアップ不要です）

```bash
$ sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
$ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get -y update
$ sudo apt-get -y install postgresql-common
$ sudo apt-get -y install postgresql-9.3 libpq-dev
$ sudo -u postgres createuser vagrant -s # vagrantユーザを追加 
$ sudo -u postgres psql # psqlにログインして
postgres=# \password vagrant # vagrantユーザにパスワードを設定
Enter new password: # 何も入力せずにEnter
Enter it again: # 何も入力せずにEnter
postgres=# \q # psqlプロンプト終了
```

※開発環境なので、パスワード無しにしましたが、本番環境では強いパスワードの設定をお忘れなく


# 7. Redisのセットアップ
Rails 5の新機能であるActionCableを利用するために、Redisをインストールします

```bash
$ sudo apt-get -y install tcl8.5
$ wget http://download.redis.io/releases/redis-stable.tar.gz
$ tar xzf redis-stable.tar.gz
$ cd redis-stable
$ make
$ make test
$ sudo make install
$ cd utils
$ sudo ./install_server.sh # すべてEnterで進める
```

以上で下準備が終了です

# 8. Railsプロジェクトの追加

個人的には、現在設定しているRubyに直接gemを追加していくのは好きではないので、
以下のようにプロジェクトをつくっていきます。

```bash
$ cd /vagrant
$ mdkir blog
$ cd blog
$ bundle init
```

生成されたGemfileを編集します

```ruby:Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem "rails", "5.0.0.beta1"
```

Railsをプロジェクトのgemとしてインストールします

##### A. ホストがMacの場合

```bash
$ bundle install --path vendor/bundle
```

##### B. ホストがWindowsの場合
###### ※共有フォルダの/vagrant配下にnative extensionsを利用するgemをインストールすると、エラーなるための処置です。/vagrant配下以外なら問題ないはず。

```bash
$ sudo mkdir /usr/local/src/bundles
$ sudo chown -R vagrant:vagrant /usr/local/src/bundles
$ bundle install --path /usr/local/src/bundles/blog
```

# 9. アプリケーションを作成する

```bash
$ bundle exec rails new . --database=postgresql --skip-spring
...
Overwrite /vagrant/blog/Gemfile? (enter "h" for help) [Ynaqdh] Y # Gemfileは上書きするの Y を入力
...
$ bin/rails db:create
$ bin/rails g scaffold post title:string content:text
$ bin/rails db:migrate
$ bin/rails s -b 0.0.0.0
```

```http://localhost:3000/posts``` にブラウザでアクセスする


#  10. 備考
ということで、手作業の設定をご説明しましたが、3-7までの手順を ```vagrant up```のときに実行するシェルスクリプトを書いたので、もしよろしければお使いください。Vagrantfileと同じディレクトリにをおけば、OKです。
[gentamura/setup.sh](https://gist.github.com/gentamura/b95601b1f57dbd2b9d1f)
その際のVagrantfileは以下のとおりです。

```ruby:Vagrant
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64" # Ubuntu 14.04 を使用
  config.vm.network "forwarded_port", guest: 3000, host: 3000 # Railsで利用するポートを設定
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048" # メモリを多めに設定
  end
  config.vm.provision "shell", path: "setup.sh", privileged: false # <= ここを追加
end
```

この環境構築で [Rails 5 + ActionCableで作る！シンプルなチャットアプリ（DHH氏のデモ動画より）](http://qiita.com/jnchito/items/aec75fab42804287d71b) が試せると思います。（実はこれをしたくて、環境構築を改めてまとめてました）

以上です、お役に立てば幸いです！

via [https://gorails.com/setup/ubuntu/14.04](https://gorails.com/setup/ubuntu/14.04)