こんにちは、hachi8833です。
今回はrbenvを使ってRails 5のrails new
を実行できるまでの環境づくりについてメモします。
以前のTechRacho記事「Rails4でサイト構築をする – Rails環境構築編」ではrvmを使いましたが、今回はBPS Webチームでも主流のrbenvにします。
1. rbenvとruby-buildをインストールする
- rbenv
- 複数バージョンのRubyをインストールして簡単に切り替えるソフトウェアです。
- ruby-build
- rbenvのプラグインで、さまざまなバージョンのRubyの取得元が保存されています。新しいバージョンのRubyがリリースされるとruby-buildも更新されるので、これを取得することで新しいバージョンのRubyをrbenvで簡単にインストールできるようになります。
詳しくは本家Readmeにすべて書いてあります。
aptコマンドが使えるLinux環境の場合
apt-get install
コマンドでインストールが完了します。
$ apt-get install rbenv ruby-build
※yumやDNFを使うLinuxディストリビューションの場合、rbenvはgit cloneでインストールします。
新しいRubyがリリースされたら、以下を実行してruby-buildを更新できます。他のパッケージもついでに更新されます。
$ apt-get update
$ apt-get upgrade
注: 開発環境を念頭に置いているので、本番環境ではaptコマンドをむやみに実行しないようご注意ください。
Mac + homebrewの場合
homebrewを使ってインストールするのが楽です。
通常であれば、以下のようにrbenvとruby-buildをhomebrewでインストールします。
$ brew install rbenv ruby-build
私も当初上の方法でインストールしていましたが、homebrewのruby-buildはRubyの新バージョンリリース後すぐに更新されないことがよくあったので(1日〜2日ほどの遅れ)、以下の方法でホームディレクトリの.rbenv/pluginsの下に直接ruby-buildをインストールする方法に切り替えました。
$ brew install rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
git clone
でruby-buildをインストールした場合、新しいRubyがリリースされたときに次の方法でruby-buildを更新できます。
$ cd ~/.rbenv/plugins/ruby-build
$ git pull
補足: rbenv rehashは現在は不要
以前のrbenvでは、Rubyをインストール/アンインストールした後にrbenv rehash
を実行する必要がありました。
これが面倒だということで、rbenv-gem-rehashというプラグインをインストールするのが流行ったことがあります。
しかしその後rbenvでrehashが不要になったため、rbenv-gem-rehashプラグインも非推奨(Deprecated)になりました。
補足: Macでpryに日本語を入力する
必須ではありませんが、Macのpryで日本語を入力できない場合、以下の方法で入力できるようになります(ついでにOpenSSLライブラリもインストールしています)。
Rubyをインストールする前に以下を実行します。
$ brew install readline openssl
通常ならこれでRubyをインストールすればpryで日本語を入力できるようになりますが、私のMac環境では以下の方法でRubyをインストールしないとpryで日本語を入力できませんでした。
$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install <バージョン>
必ずやらなければならないものでもないので、日本語が入力できない場合にどうぞ。
2. rbenvを設定する
2-1. パスの設定
以下を~/.bash_profileに追記し、シェルを再起動するか新しいシェルを起動するとパスが有効になります(.bash_profileが.bashrcで読み込まれるようになっているのが前提です)。
export PATH="$HOME/.rbenv/bin:$PATH"
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
パスをすぐに有効にしたい場合は、以下を実行します。
$ source ~/.bash_profile
2-2. デフォルトgemの設定
rbenvをインストールすると、ホームディレクトリの.rbenvに以下のファイル/ディレクトリが作成されます。
このうちdefault-gemsというファイルにgemの名前だけを記入しておくと、rbenvで新しいRubyをインストールするときにそのgemも自動でインストールしてくれます。
このファイルを有効にするには、Rubyをインストールする前にbrew install rbenv-default-gems
を実行する必要があります。
default-gemsにはどのgemを指定するのがよいか
default-gemsにどんなgemを記入しておくのがよいかは、Rubyの利用目的によってさまざまだと思います。
しかし、Rails開発であればdefault-gemsにはbundlerだけを記入するのがおすすめです。
bundler
default-gemsにたくさんのgemを追加するとRubyのインストールが遅くなるためです。
なお、私の場合はRailsと別にRubyを単独で使うことも多いので、pryとpry関連のgemだけ追加しています。
bundler
pry
pry-byebug
pry-stack_explorer
pry-doc
gemがインストールされる場所
- rbenvを利用すると、default-gemsおよび
gem install
コマンドでインストールされるgemは~/.rbenv/versions/<バージョン>/lib/ruby/gems
以下に置かれます。 -
Railsのproduction環境では、
--deployment
オプションをつけることでプロジェクトフォルダのvendor/bundle以下にgemがインストールされます。これはrbenvとは無関係です。
参考: Railsのbundle install –deploymentとは何なのか
3. rbenvでRubyをインストールする
rbenvが準備できたので、最新バージョンのRubyをインストールしてみましょう。
3-1. ruby-buildのアップデート
以下の方法で最新のruby-buildを取得します。
- aptが使えるLinux:
apt-get update; apt-get upgrade
- Mac:
cd ~/.rbenv/plugins/ruby-build; git pull
3-2. Rubyバージョンの確認とインストール
rbenv install -l
を実行し、ruby-buildで利用できるバージョンのリストを確認します。-
インストールしたいバージョンを見つけたら、次を実行してRubyをインストールします。
# rbenv install <インストールするバージョン>
rbenvはRubyのソースコードを取得してビルドするので、それなりに時間がかかります。これは仕方がないですね。
rbenv versions
を実行し、Rubyがインストールされたことを確認します。*
が付いているバージョンが現在アクティブなバージョンです。ディレクトリに.ruby-versionファイル(後述)があると、そこで指定しているバージョンが強制的にアクティブなバージョンになるのでご注意ください。
3-3. Rubyバージョンを切り替える
rbenv global <バージョン>
を実行すると、デフォルトのRubyバージョンを指定できます。- バージョン抜きで
rbenv global
を実行すると、現在のグローバルなバージョンが表示されます。 - Railsの特定プロジェクトのみ別のバージョンを指定するには、プロジェクトディレクトリで
rbenv local <バージョン>
と入力します。
rbenv local
を実行すると、そのディレクトリに.ruby-versionという名前のファイルが作成されます。ファイルにはバージョン番号のみが指定されます。したがって、echo <バージョン> >.ruby-version
で作成しても同じ結果になります。
.ruby-versionファイルで指定されたバージョンは、そのディレクトリのサブディレクトリでも有効になります。
4. Railsプロジェクトを生成する
長くなりましたが、やっとRailsプロジェクトを生成できる環境が整いました。
以下の手順を使うことで、bundler以外のすべてのgemを新たにrubygems.orgから取り込んでrails new
できます。
4-1. Gemfileを作成する
プロジェクトディレクトリを作成し、プロジェクトディレクトリに移動します。
$ mkdir プロジェクト名
$ cd プロジェクト名
以下の内容のGemfileを作成します。
source "http://rubygems.org"
gem "rails", "5.1.0" #利用するバージョンを指定する
プロジェクトでrubyのバージョンを指定したい場合は、例のrbenv local <バージョン>
を実行して.ruby-versionファイルをプロジェクトディレクトリに作成します。
4-2. bundle install
Gemfileを置いたディレクトリで以下を実行します。--path vendor/bundle
を指定しないと、gemがシステム側(この場合はrbenv)にインストールされてしまうのでご注意ください。
# --pathオプションを付けて実行
$ bundle install --path vendor/bundle
4-3. rails new
後はbundle exec rails new .
を実行して好きに料理します。Gemfileを上書きするかどうかを尋ねられたら、上書きを指定します。
.
を指定することで、カレントディレクトリ名がそのままプロジェクト名になるのがポイントです。
上で作ったGemfile、Gemfile.lock、vendorディレクトリはインストールのためだけのものなので、削除しておきます。
参考
- rbenv Readme
- ruby-build Readme
- rbenv で ruby の環境を整える
- Rails開発環境の構築(複数バージョン共存可能)(Homebrew編)
- システムのgemにrailsをインストールせずrails newする