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

【Mac】Ruby on Railsの環境構築とbundlerについて

Ruby Ruby on Rails Gem
スポンサーリンク

Ruby on Railsの環境構築について調べるとbundlerでRuby環境を汚さないようにするという記事をよくみますが、やり方がいまいち統一されてなかったりしたので、自分なりに試してみて最適解を探してみました。今の所これが一番シンプルで簡単なんじゃないかと思うのでまとめておきます。

事前準備

rbenv と bundler のインストールをします。
 【Mac】Ruby開発環境の準備+rbenvの使い方 - TASK NOTES

Ruby on Railsをインストール

Railsをインストールすると色んなGemが一緒についてきてしまうので、Ruby環境に入れないようにローカルにインストールします。

まずはRailsプロジェクト用のディレクトリ作成です。本来はRails new <project_name>で指定しますが先に作っておきます。

$ mkdir railstest && cd railstest

作成したディレクトリに移動してbundle initでGemfileを作成します。インストールするGemはRailsだけです。

$ bundle init
Writing new Gemfile to /Users/tasukujp/dev/ruby/railstest/Gemfile
$ vi Gemfile
source "https://rubygems.org"

gem "rails", "4.1.7"   # インストールしたいRailsのバージョンを指定。指定しなければ最新版になる。

Gemfileを編集したらbundle installを実行します。--path vendor/bundleの指定を忘れるとRuby環境にインストールされてしまいますので忘れないようにしてください。

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Installing rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.2
Installing minitest 5.5.1
Installing thread_safe 0.3.4
Installing tzinfo 1.2.2
Installing activesupport 4.1.7
Installing builder 3.2.2
Installing erubis 2.7.0
Installing actionview 4.1.7
Installing rack 1.5.2
Installing rack-test 0.6.3
Installing actionpack 4.1.7
Installing mime-types 2.4.3
Installing mail 2.6.3
Installing actionmailer 4.1.7
Installing activemodel 4.1.7
Installing arel 5.0.1.20140414130214
Installing activerecord 4.1.7
Using bundler 1.7.9
Installing hike 1.2.3
Installing multi_json 1.10.1
Installing thor 0.19.1
Installing railties 4.1.7
Installing tilt 1.4.1
Installing sprockets 2.12.3
Installing sprockets-rails 2.2.2
Installing rails 4.1.7
Your bundle is complete!
It was installed into ./vendor/bundle

実行後は以下のようなディレクトリ構成になります。

$ ll
total 16
drwxr-xr-x   6 tasukujp  staff   204  1 10 16:58 .
drwxr-xr-x  13 tasukujp  staff   442  1 10 16:55 ..
drwxr-xr-x   3 tasukujp  staff   102  1 10 17:08 .bundle
-rw-r--r--   1 tasukujp  staff    52  1 10 16:57 Gemfile
-rw-r--r--   1 tasukujp  staff  1835  1 10 16:58 Gemfile.lock
drwxr-xr-x   3 tasukujp  staff   102  1 10 16:57 vendor

configファイル内には指定したPATHが保存されています。これ以降、このディレクトリ内でbundle installを実行する時は--path vendor/bundleの指定は必要ありません

$ cat .bundle/config
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'

Railsプロジェクトの作成

Rails は bundler でローカルにインストールしてますのでbundle execを付けて実行します。rails new .としてカレントディレクトリに作成します。最初にディレクトリを作成したのはこのためです。Gemfileが存在してるため上書きするか聞いてくるので上書きします。

$ bundle exec rails new .
       exist
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
    conflict  Gemfile
Overwrite /Users/tasukujp/dev/ruby/railstest/Gemfile? (enter "h" for help) [Ynaqdh] y

bundle exec rails new . -d mysqlとすることで使用する DBMS が MySQL に変わります。デフォルトは sqlite3 です。

create の最後にbundle installが自動で実行されますが、上述したRails のインストール時に .bundle/configファイルが作成されているため--path vendor/bundleが指定されてなくても大丈夫です。

       force  Gemfile
      create  app
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
...
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.keep
         run  bundle install
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using rake 10.4.2
Using i18n 0.7.0
Using json 1.8.2
...
Installing sqlite3 1.3.10
Installing turbolinks 2.5.3
Installing uglifier 2.7.0
Your bundle is complete!
It was installed into ./vendor/bundle
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

これで必要なGemは全てvendor/bundle内にインストールされ、Ruby環境を汚さずにRailsプロジェクトが作成できました。ちなみにGemのインストール箇所で Using とあるのは Rails をインストールした時に既にvendor/bundle内にインストールされていたGemです。Gemfile.lock も更新されています。

bundle installを実行したくない場合

オプションで--skip-bundleを付けて実行します。

$ bundle exec rails new . --skip-bundle

参考サイト

基本は次のサイトを参考にさせていただきましたが、やり方は少し変えてます。

 Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで) - Qiita

関連記事

 【Mac】Ruby開発環境の準備+rbenvの使い方 - TASK NOTES

 【Ruby】bundlerの使い方 (Gem管理) - TASK NOTES