blog

これから始める Ruby on Rails シリーズ$ bundle exec を省略する

    • Ryuichi Nonaka
    この記事は書かれてから1年以上経過しており、内容が古い場合があります。

    はじめに

    $ bundle execを毎回入力してきたわけですが、そろそろ面倒に感じる頃合い。ということで$ bundle execを省略する方法を調べてみました。

    参考サイト

    調べてみると、いくつかの方法がある。

    悩んだ結果rbenv-binstubs(rbenvのプラグイン)を使ってプロジェクトルートからだけ$ bundle execを省略(追記:下層でも省略できた)でき、下層ではaliasを使うことにした。gemをグローバルな環境にインストールしたくないので(path=vendor/bundle)この方法をとっている。

    binstubsプラグインのインストール

    .rbenvフォルダはrootにある。プラグインディレクトリを作りgitからcloneしてくる。

    $ mkdir ~/.rbenv/plugins
    $ cd ~/.rbenv/plugins
    $ git clone git://github.com/ianheggie/rbenv-binstubs.git
    

    PATHの設定

    シェルにPATHの設定をする。

    $ vi ~/.zshrc
    

    .zshrc

    プロジェクトルートに余計なファイルを作りたくないので、--path=vendor/bundleと同じようにvendor/binを指すよう指定。自分はzshなので、.zshrcに追記した。また、aliasも合わせて追記する。

    # rbenv binstubs setting
    export PATH=./vendor/bin:$PATH
    alias be='bundle exec'
    

    変更を反映させる

    シェルの再起動かsourceを使う、自分はうまくいかなかったのとでとりあえず再起動。

    source ~/.zshrc
    

    サンプルプロジェクトを作る

    まずはbundlerをアップデート。

    $ bundle update
    

    ディレクトリを作る

    適当にディレクトリを作りrubyのバージョンを指定する。

    $ mkdir bundle.alias.rails
    $ cd bundle.alias.rails
    $ rbenv local 2.1.0 
    

    gemのインストール

    Railsをbundlerを使ってインストールする。

    $ bundle init
    Writing new Gemfile to /Users/nukos/Projects/Labs/Gemfile
    

    Gemfile

    railsのコメントを外す。

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

    Railsのインストール

    pathを指定してvendor/bundle下にgemをインストール。また、binstubsをvendor/binとする。

    $ bundle install --path=vendor/bundle --binstubs=vendor/bin
    

    新規Railsアプリを作る

    すでにbundleからインストールしているので--skip-bundleを加えて実行します。

    $ bundle exec rails new . --skip-bundle
    bundle exec rails new . --skip-bundle
           exist
          create  README.rdoc
          create  Rakefile
          create  config.ru
          create  .gitignore
        conflict  Gemfile
    Overwrite /Users/nukos/Projects/Labs/step2.scaffold.rails/Gemfile? (enter "h" for help) [Ynaqdh]
           force  Gemfile
          create  app
          create  app/assets/javascripts/application.js
          create  app/assets/stylesheets/application.css
          create  app/controllers/application_controller.rb
          create  app/helpers/application_helper.rb
          create  app/views/layouts/application.html.erb
          create  app/assets/images/.keep
          create  app/mailers/.keep
          create  app/models/.keep
          create  app/controllers/concerns/.keep
          create  app/models/concerns/.keep
          create  bin
          create  bin/bundle
          create  bin/rails
          create  bin/rake
          create  config
          create  config/routes.rb
          create  config/application.rb
          create  config/environment.rb
          create  config/secrets.yml
          create  config/environments
          create  config/environments/development.rb
          create  config/environments/production.rb
          create  config/environments/test.rb
          create  config/initializers
          create  config/initializers/assets.rb
          create  config/initializers/backtrace_silencers.rb
          create  config/initializers/cookies_serializer.rb
          create  config/initializers/filter_parameter_logging.rb
          create  config/initializers/inflections.rb
          create  config/initializers/mime_types.rb
          create  config/initializers/session_store.rb
          create  config/initializers/wrap_parameters.rb
          create  config/locales
          create  config/locales/en.yml
          create  config/boot.rb
          create  config/database.yml
          create  db
          create  db/seeds.rb
          create  lib
          create  lib/tasks
          create  lib/tasks/.keep
          create  lib/assets
          create  lib/assets/.keep
          create  log
          create  log/.keep
          create  public
          create  public/404.html
          create  public/422.html
          create  public/500.html
          create  public/favicon.ico
          create  public/robots.txt
          create  test/fixtures
          create  test/fixtures/.keep
          create  test/controllers
          create  test/controllers/.keep
          create  test/mailers
          create  test/mailers/.keep
          create  test/models
          create  test/models/.keep
          create  test/helpers
          create  test/helpers/.keep
          create  test/integration
          create  test/integration/.keep
          create  test/test_helper.rb
          create  tmp/cache
          create  tmp/cache/assets
          create  vendor/assets/javascripts
          create  vendor/assets/javascripts/.keep
          create  vendor/assets/stylesheets
          create  vendor/assets/stylesheets/.keep
    

    試す(サーバーの起動)

    インストールが完了したらプロジェクトルートで$ rails sを打ってサーバーを起動してみる。

    $ rails s
    => Booting WEBrick
    => Rails 4.1.6 application starting in development on http://0.0.0.0:3000
    => Run `rails server -h` for more startup options
    => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
    => Ctrl-C to shutdown server
    [2014-10-06 16:07:50] INFO  WEBrick 1.3.1
    [2014-10-06 16:07:50] INFO  ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
    [2014-10-06 16:07:50] INFO  WEBrick::HTTPServer#start: pid=5004 port=3000
    

    うまく起動できたら成功。aliasも問題なく使えるけど誤算だったのが下層でも$ rails sを試したらこれもうまくいった。想定と違うけどこういうもんなんだろうか。何かわかれば追記する予定。情報提供、ご指摘も受け付けてます。

    ではでは。

    シリーズ

    1. Ruby on Railsの最初の一歩
    2. Ruby on RailsアプリをHerokuにデプロイしてみる
    3. $ bundle exec を省略する
    4. Ruby on Railsで静的ページを作る
    5. Ruby on Rails:RSpecとCapybaraで初めてのインテグレーションテスト
    6. Ruby on Rails:埋め込みRubyを使った簡単な動的ページを作る
    7. Ruby on Rails:Guardを使ったテストの自動化

    コメント・フィードバック