Ruby on Rails 4.0正式リリースとBootstrapの正しい設定法

過去記事「Ruby on Rails 4.0RC1とBootstrapの設定」は、リリース候補1でBootstrapが使えなくなったために講じた応急処置的な方法だったが、その後、Rails 4.0が正式リリースされ、以前の設定法(本当はこちらが正統派)でBootstrapが簡単にセットアップできるようになった。以下、その設定法を手短にまとめてみた。

Rails 4.0のセットアップ

先ずは、RVMやrbenv等のRubyバージョン管理ツールで、最新バージョンが利用できる状態にしておく。現時点でのRubyの最新バージョンは、2.0.0.-p247。

準備が整ったら、Rails4.0をセットアップ。お試し用として新規プロジェクトtestを作る。

$ gem install rails --version 4.0.0 --no-ri --no-rdoc
$ rails new test

続いて、Gemfileをテキストエディタで開き、次の一行をアンコメント(行頭の#マークを外す)。

# gem 'therubyracer', platforms: :ruby

ここで、端末からbundle installコマンドを実行した後、rails serverコマンドを実行。

Rails40setup

http://localhost:3000にアクセスして、About your application’s environmentリンクをクリックして、Railsが正しくセットアップされているかどうかを確認する。

Bootstrapのセットアップ

Railsが動作していることが確認できたら、テキストエディタでGemfileを開き、次の3行を追加する。

gem 'less-rails'
gem 'twitter-bootstrap-rails'
gem 'execjs'

続けて、次の一行をコメントアウト。

gem 'sass-rails'

いったんここでGemfileの変更を保存して、bundle installコマンドを実行。続けて、次のコマンドでBootstrapを設定する。

$ rails g bootstrap:install
$ rails g bootstrap:layout application

以上で、Bootstrapの設定は終了。/app/views/application.html.erbがBootstrap用に書き換えられている。後は、このファイルと/app/assets/stylesheets内のcssファイルで調整すればよい。例えば次のような外観になる。

BootstrapSetup01

なお、前回の応急処置的な方法では、BootstrapのIconが使えなかったが、今回の設定法だと、例えばナビメニューの項目を次のようなタグで囲めば、各項目の頭にIconを表示させることができるようになる。

<i class="icon-home"></i>

<i class="icon-user"></i>
  • Takuro Onoue

    application.rb に config.assets.enabled = true が必要ではないでしょうか?

    • ubiqlog

      コメントありがとうございます。
      Rails4.0では、config.assets.enabledはデフォルトでtrueになっている(バージョン3.2からだったでしょうか?)ので、ご指摘の記述は特に必要ないと思います。
      アセットパイプラインを無効にしたいときのみ、application.rbにconfig.assets.enabled = falseを記述することになったようです。

      • Takuro Onoue

        リプライありがとうございました。

        私の環境では、(Rails4.0.0, RubyGem 2.0.2, Ruby 2.0.0)で、このページのように設定していくと、以下のようになります。

        $ rails g bootstrap:install
        /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/less-rails-2.2.6/lib/less/rails/railtie.rb:22:in `block in ‘: The less-rails plugin requires the asset pipeline to be enabled. (RuntimeError)

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:30:in `instance_exec’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:30:in `run’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:55:in `block in run_initializers’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:180:in `each’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:54:in `run_initializers’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:215:in `initialize!’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/railtie/configurable.rb:30:in `method_missing’

        from /Users/onoue/heroku/unkoo/config/environment.rb:5:in `’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:189:in `require’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:189:in `require_environment!’

        from /Users/onoue/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:45:in `’

        from bin/rails:4:in `require’

        from bin/rails:4:in `’

        そこで試しに config.assets.enabled = true を記述してみたら、以後の設定はうまくできました。

        ちなみに debugger でみると、application.rbの実行時点では config.assets.enabled の値は nil になっていました。

        • ubiqlog

          Railsのバージョンはこちらも4.0.0ですが、RubyGemとRubyのバージョンはそれぞれ、2.0.3と2.0.0.-p247ということで、微妙な違いがあるようです。
          環境によっては、application.rbにconfig.assets.enabled = trueを記述しなければならない場合もあるのかも知れませんね。

          • Takuro Onoue

            rbenvでruby 2.0.0-p247 をインストールしたので、再度やってみました。(ruby 2.0.0-p247 rubygem 2.0.3)

            今回は

            config.assets.enabled = true

            を入れなくてもBootstrapの設定ができました。

            いろいろと、ありがとうございました。

          • ubiqlog

            こちらこそ、貴重な情報ありがとうございました。