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

約束の地

あの日あの時のキャロの想い出

rbenv を使って Ruby のバージョンを変えて Rails の環境を構築する方法(Ubuntu 16.04 LTS)

Rails で用いる Ruby のバージョンを手軽に変更する

rbenv を用いて Ruby のバージョンを自由に変更して Rails の環境を構築する方法です*1。対象としているのは Ubuntu 16.04 LTS ですが、他の場合でもだいたい一緒だと思います。

流れ

大まか流れは以下のとおりです。途中でエラーが出た場合はこの記事の下の部分にある「注意点」も参照してみて下さい。

  1. rbenvを手動でインストールする
  2. シェルでrbenvにパスを通す
  3. ruby-buildを手動でインストールする
  4. 任意のバージョンの Ruby をインストールする
  5. Rails で用いる Ruby のバージョンをrbenvで任意のものに変更する
  6. 上記のバージョンの Ruby を用いて Rails そのものの gem を一時的にインストールする
  7. 上記の gem を用いてrails newする

環境構築

ではやっていきましょう。

1. rbenvを手動でインストールする

git cloneでよいです。~/.rbenvに入れます。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

2. シェルでrbenvにパスを通す

.bashrcに以下の二行を追加してパスを通しましょう。異なるシェルを使っている場合は適宜読み替えて書き換えて下さい。

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

追加した設定を反映させることを忘れずに。場合によってはログインし直しです。

$ source ~/.bashrc

3. ruby-buildを手動でインストールする

ruby-buildをインストールします。これは Ruby を落としてきてインストール(コンパイル)する際に必要になります。所定の場所(~/.rbenv/plugins/ruby-build)にgit cloneすればいいだけです。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

4. 任意のバージョンの Ruby をインストールする

任意のバージョンの Ruby をインストールするために、まず、インストールが可能な Ruby のバージョン一覧をrbenvコマンドを用いて表示させます。

$ rbenv install -l

2017年4月18日現在だと以下のあたりがでてきました。

  2.3.0
  2.3.1
  2.3.2
  2.3.3
  2.3.4
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.4.1
  2.5.0-dev

私は2.4.1を入れたいので、rbenv installを使って入れます。ソースをダウンロードしコンパイルをするため、けっこうな時間がかかりますのでのんびり待ちましょう。

$ rbenv install 2.4.1
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /home/foobar/.rbenv/versions/2.4.1

5. Ruby のバージョンを rbenv で任意のものに変更し、それを用いて Rails の gem を一時的にインストールする

ここまで進んできても、ruby -vしたら以下のようにグローバルのバージョンが表示されます。

$ ruby -v                                                                 
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

これは当然なわけで、まだバージョンを変更する操作をしていないからです。rbenvを使ってバージョンを変更しましょう。

rbenvのコマンドを実行する際のオプションにはgloballocalがあります。前者はシステム全体の Ruby のバージョンを変更するもので、後者は実行したディレクトリ配下のみ、Ruby のバージョンを変更するものです。

ここではlocalオプションを用いて、Rails の開発環境だけを2.4.1にしてみましょう。まずは Rails の開発用のディレクトリ~/rails_appを作りその中に入ります。

$ mkdir ~/rails_app
$ cd ~/rails_app

そしてこの中でrbenv localを以下のように実行して、このディレクトリの配下のみで2.4.1を適用させましょう*2

$ rbenv local 2.4.1

これでこのディレクトリに.ruby-versionというファイルが生成され、このディレクトリ配下で実行される Ruby のバージョンが以下のように2.4.1となりました*3

$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

6. 上記のバージョンの Ruby を用いて Rails そのものの gem を一時的にインストールする

ここまではrbenvの説明でした。いよいよ Rails の環境を作ります。

まずは何はともあれbundlerを入れます。ただしここで注意してください。以下のようにrbenv execを先頭に付与してコマンドを実行し、「現在適用されている Ruby のバージョンにおけるインストール」であることを明確にして下さい。そうでないとグローバル環境にインストールすることになります。

$ cd ~/rails_app
$ rbenv exec gem install bundler
Fetching: bundler-1.14.6.gem (100%)
Successfully installed bundler-1.14.6
Parsing documentation for bundler-1.14.6
Installing ri documentation for bundler-1.14.6
Done installing documentation for bundler after 4 seconds
1 gem installed

さて、Rails をインストールしていきます。まず基礎となるGemfileを手っ取り早く作るためにbundle initをしましょう。今回もrbenv execを忘れずに。rbenv execが不要なのは原則としてrubyコマンドそのものだけです*4

$ cd ~/rails_app
$ rbenv exec bundle init
Writing new Gemfile to /home/foobar/rails_app/Gemfile

生成されたGemfileは以下のようになっているはずです。

# frozen_string_literal: true
source "https://rubygems.org"

# gem "rails"

これを以下のようにgem "rails"が有効になるように書き換え(コメントアウト)ましょう。

source "https://rubygems.org"
gem "rails"

これでbundleすれば Rails の gem が入ります。ここでインストールする gem は一時的なものなので、インストール先のディレクトリ名は適当なもので構いません*5。少々時間がかかります。なお、ここでのbundleコマンドではrbenv execは無くても構いません*6

$ cd ~/rails_app
$ rbenv exec bundle install --path ./tmp
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/.
Resolving dependencies...
Installing rake 12.0.0
...
Bundle complete! 1 Gemfile dependency, 38 gems now installed.
Bundled gems are installed into ./tmp.

ようやく準備ができました。

7. 上記の gem を用いてrails newする

あとはrails newするだけです!

$ cd ~/rails_app
$ rails new myapp
      create  
      create  README.md
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
...
* bin/rake: spring inserted
* bin/rails: spring inserted

無事 Rails の環境構築が完了しました!ではサーバを起ち上げてみましょう。

$ cd ~/rails_app/myapp
$ rails server -b 0.0.0.0 -p 3000
=> Booting Puma
=> Rails 5.0.2 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.4.1-p111), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

そしてさっそくローカルの 3000番ポート にアクセスしてみましょう。Yay! You’re on Rails!

f:id:gregminster:20170418185814p:plain

注意点

予めインストールしておくべきもの

Vagrant などでまっさらな環境にインストールする場合は以下がインストールされていないといろんなところでコケます*7

  • gcc
  • build-essential
  • libssl-dev
  • libreadline-dev
  • zlib1g-dev
  • libsqlite3-dev
  • nodejs

Ruby のバージョン一覧表示

rbenvでインストールされている Ruby のバージョン一覧を確認したい場合はrbenv versionsで確認できます。*が付いているバージョンが、現在のディレクトリで適用されているバージョンです。

$ rbenv versions
  system
* 2.4.1 (set by /home/foobar/rails_app/.ruby-version)

rbenv rehashについて

少し昔の時期に書かれた解説ページに記載されているrbenv rehashコマンドは現時点では不要になっています。

一時ファイルの削除

「6.」の一番最後にrbenv exec bundle install --path ./tmpで作成したtmpディレクトリは、今後使う見込みながければ削除して構いません。

参考ページ

感謝感謝感謝です。

*1:特に Rails の環境構築に限った話ではないですが

*2:ここのディレクトリ配下以外ではグローバルでインストールされている 2.3.1 が実行されます

*3:私の場合は一回ログアウトしないと変わりませんでした

*4:パスを通したので不要になる

*5:ただし必ず明示的に指定しましょう

*6:あっても構わない

*7:コケました

Powered by はてなブログ