複数バージョン共存可能なRails環境の構築
目的
- Ruby環境はrbenvを使用し、複数のバージョンを切替え可能とする。
- Bundlerを使用し、Railsをローカルディレクトリにインストールし、複数のバージョンのRailsプロジェクトの作成、共存を可能とする。
Rubyのインストール
rbenv とは
Rubyを管理するツール。複数バージョンのRubyの管理/切替えができる。
rbenvのインストール
Homebrewでインストール実施。
(Xcodeインストール -> Command Line Tools for Xcodeインストール -> Homebrewインストール済)
尚、ruby-build(rubyをビルドインするプラグイン)は、rbenvインストールでインストール済み。インストールする場合は、以下。(インストール済みの場合は、already installedと表示。
PATHを通す
ターミナルへrbenvを使用するためのPATH設定を行う。
$ touch ~/.bash_profile
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
最新のRubyをインストールする
rbenvからインストール可能なRubyのバージョンを確認
$ rbenv install -l
最新が 2.3.1 であることを確認。
現状MacBookにインストール済みRubyバージョンを確認
$ ruby -v
ruby 2.0.0であることを確認。
最新バージョン 2.3.1をインストール
$ rbenv install 2.3.1
デフォルトで利用するバージョンを指定
$ rbenv global 2.3.1
$ ruby -v
ruby 2.3.1であることを確認
インストールディレクトリ確認
$ which ruby
~/.rbenv/shims/ruby
Railsチュートリアルで使用するバージョン2.2.1をインストール
$ rbenv install 2.2.1
インストール済みで利用可能なrubyのバージョンを確認
$ rbenv versions
2.2.1 と 2.3.1 が表示されていることを確認。
system
2.2.1
* 2.3.1
ローカルディレクトリにRails環境を構築
ワークスペース用ディレクトリの作成
Railsプロジェクト用のワークスペースディレクトリを作成。
(Railsプロジェクトは今後、~/rails_wkspディレクトリ下に作成予定のため)
$ mkdir ~/rails_wksp
$ cd ~/rails_wksp
Railsチュートリアル実施用ディレクトリ作成
※新規Railsアプリケーション開始時は基本的にここから実施。(別バージョンのRubyを使用する場合は、Rubyのインストールから実施。)
Railsチュートリアル実施のため、Railsアプリケーションを開発するためのディレクトリを作成。この環境にRuby2.2.1を適用。
$ mkdir ~/rails_wksp/sample_app
$ cd ~/rails_wksp/sample_app
以降、本ディレクトリで作業実施。
使用するRubyのバージョン 2.2.1を指定。
$ rbenv local 2.2.1
$ ruby -v
ruby 2.2.1を確認。
$ rbenv versions
以下を確認。
system
* 2.2.1
2.3.1
Bundlerをインストール
Railsで使用するGemを各プロジェクト毎に管理するため、bundlerのインストールを行う。bundlerはgemの管理システムであり、bundler自体もgemの一種。
RubyGems => gemをインストールするためのアプリケーション(ただしシステム全体に影響してしまう)
bundler => プロジェクトごとに使用するgemやgemのバージョンを設定できる(システム全体に影響しない)
$ rbenv exec gem install bundler
Successfully installed bundler-1.13.6
$ rbenv rehash
Bundlerを使用し一時的にrailsをローカルにインストール
Railsアプリケーションを作成するために一時的にrailsをローカル(sample_app下)にインストール。
- Gemfile作成
どんなRubyのライブラリ(gem)を使うのかを示すGemfileを作成
$ rbenv exec bundle init
作成されたGemfileをの「# gem "rails"」の箇所をエディタで変更
source "https://rubygems.org"
# gem "rails"
チュートリアルで使用するRailsのバージョン4.2.2を使用するよう以下に変更。
gem "rails", "4.2.2" - Railsのインストール実施
$ rbenv exec bundle install --path vendor/bundle
Installing rails 4.2.2
Bundle complete! 1 Gemfile dependency, 35 gems now installed.
Bundled gems are installed into ./vendor/bundle.
補足:オプション「--path vendor/bundle」を付けることによりgemは、アプリケーション限定の領域(vendor/bundleディレクトリ)にインストールされる。(オプションがない場合、Mac全体で共有される領域にインストールされる。)
システム全体で共有される領域へgemをインストールしても、管理されていれば基本的に問題はないが、依存問題等のリスクを考慮し、アプリケーション毎に隔離独立していることを担保することとした。 - 以下作成を確認
$ ls
Gemfile Gemfile.lock vendor
補足:vendorディレクトリ下に、「vendor/bundle/ruby/2.2.0」のファイルがあるが、末尾のバージョン(tiny)は無視されているようですので、2.2.0 〜 2.2.x でも .../2.2.0 になる模様。
Railsアプリケーションの新規作成
先にbundleでインストールしたgemパッケージを利用し、Railsアプリケーション「sample_app」を作成。なお、すでに作成済みの「sample_app」ディレクトリをアプリケーション名とするので、「rails new アプリケーション名」は「rails new .」とする。
- Railsアプリケーションの新規作成
$ rbenv exec bundle exec rails new . --skip-bundle
先に一時的に同一ディレクトリでrailsをインストールしているため、以下のようにGemfileの上書きの確認がされるが、許可を実施。
conflict Gemfile
Overwrite /Users/s-asano/rails_wksp/sample_app/Gemfile? (enter "h" for help) [Ynaqdh] Y
force Gemfile
補足:bundleでインストールしたgemパッケージを利用するため「bundle exec」というプレフィックスを指定。そして、bundle installが発動し現在有効なrubyにrailsがインストールされないよう「--skip-bundle」オプションを指定。(後述の「Railsアプリケーションの環境セットアップ」で実施。) - 以下、生成を確認。
$ ls
Gemfile Rakefile config lib test
Gemfile.lock app config.ru log tmp
README.rdoc bin db public vendor
Railsアプリケーションの環境セットアップ
- 必要に応じてsample_appのGemfileの内容を編集
- Railsの標準gemのインストール実施。「--path vendor/bundle」オプションをつけ、アプリケーションに閉じた状態でGemをインストール
$ bundle install --path vendor/bundle
Installing rails 4.2.2
Bundle complete! 12 Gemfile dependencies, 56 gems now installed.
Bundled gems are installed into ./vendor/bundle.
これにより、Rails(及び関連Gem)が、新規作成Railsアプリケーションのvender/bundleディレクトリ以下にインストールされる。
Railsアプリケーションの起動
- Railsアプリケーションを起動
$ bundle exec rails server
*railsやrakeといったコマンドを実行する際は、bundle exec を介する必要がある。 - ブラウザを立ち上げ、アドレスバーに「http://localhost:3000」を入力しRailsの初期画面が表示されることを確認。
その他
Gitの管理対象について
容量、復元の容易さの観点から、vendor/bundle ディレクトリはGitの管理対象から を外す。
全てのgemのアンインストール方法
$ gem uninstall -axI `gem list --no-versions | egrep -v 'test-unit|rdoc|psych|minitest|io-console|rake|bigdecimal|json'`
不要になったRubyのアンインストール
$ rbenv uninstall -f 2.2.1
$ rbenv rehash
参考サイト
以下のサイト様の情報を参考にさせていただきました。感謝いたします。