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