Rails 3.1 を試してみる(導入編)

Rails3.1の機能を試せると聞いたので、早速下記サイトを参考にローカル環境に入れてみました。噂のCoffeeScriptやSCSSが使えるようになっています。

インストールその1

rvmにRails3.1専用のgemsetを用意しました。Rubyのバージョンは Ruby 1.9.2-p180 です。

rvm gemset create rails31
rvm gemset use rails31

この状態だとRakeしか入っていません。

$ gem list
 
*** LOCAL GEMS ***
 
rake (0.8.7)

Railsアプリ用のディレクトリを作成します。

mkdir rails_app
cd rails_app
vim Gemfile

Gemfileを作ってRailsのGithubリポジトリを指定します。

# Gemfile
source "http://rubygems.org/"
gem 'rails', :git => 'git://github.com/rails/rails.git'

BundlerとRails3.1をインストールします。

gem install bundler
bundle install

インストールされたRailsのバージョンを確認してみましょう。

$ bundle exec rails -v
Rails 3.1.0.beta

無事入ってそうです。

インストールその2

Railsが入ったことを確認出来たら、実際にRailsアプリを生成してみます。先ほど作成したGemfileとコンフリクトしますが、気にせず上書きしてしまいましょう。

$ bundle exec rails new .
       exist  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
       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/mailers
      create  app/models
      create  app/views/layouts/application.html.erb
      create  app/mailers/.gitkeep
      create  app/models/.gitkeep
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/secret_token.rb
      create  config/initializers/session_store.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  doc
      create  doc/README_FOR_APP
      create  lib
      create  lib/tasks
      create  lib/tasks/.gitkeep
      create  log
      create  log/.gitkeep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/index.html
      create  public/robots.txt
      create  public/images
      create  public/images/rails.png
      create  script
      create  script/rails
      create  test/fixtures
      create  test/fixtures/.gitkeep
      create  test/functional
      create  test/functional/.gitkeep
      create  test/integration
      create  test/integration/.gitkeep
      create  test/unit
      create  test/unit/.gitkeep
      create  test/performance/browsing_test.rb
      create  test/test_helper.rb
      create  tmp/cache
      create  tmp/cache/.gitkeep
      create  vendor/assets/javascripts/jquery.js
      create  vendor/assets/javascripts/jquery_ujs.js
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.gitkeep
      create  vendor/plugins
      create  vendor/plugins/.gitkeep 

新しく生成されたGemfileを眺めてみます。

source 'http://rubygems.org'
 
gem 'rails', '3.1.0.beta'
 
# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'
# gem 'arel',      :git => 'git://github.com/rails/arel.git'
# gem 'rack',      :git => 'git://github.com/rack/rack.git'
# gem 'sprockets', :git => "git://github.com/sstephenson/sprockets.git"
 
gem 'sqlite3'
 
# Asset template engines
gem 'sass', '~> 3.1.0.alpha'
gem 'coffee-script'
 
# Use unicorn as the web server
# gem 'unicorn'
 
# Deploy with Capistrano
# gem 'capistrano'
 
# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'
 
group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

相変わらず標準のDBはSQLite3のようです。またsassとcoffee-scriptのgemが書かれていますね。さて、このままbundle installを実行するとRubygemsにrails 3.1.0.beta’なんて無いと怒られてしまうのでコメントアウトし、コメントアウトされているBundle edge Rails instead以下を有効にします。

# gem 'rails', '3.1.0.beta'
 
# Bundle edge Rails instead:
gem 'rails',     :git => 'git://github.com/rails/rails.git'
gem 'arel',      :git => 'git://github.com/rails/arel.git'
gem 'rack',      :git => 'git://github.com/rack/rack.git'
gem 'sprockets', :git => "git://github.com/sstephenson/sprockets.git"

再度bundle installを実行。

bundle install

Scaffoldで生成されたものを覗く

実際何が変わったかはScaffoldで生成されたファイルを見てみるのが一番早いと思いますので、適当にジェネレートしてみます。

$ bundle exec rails g scaffold article subject:string body:text
      invoke  active_record
      create    db/migrate/20110419121620_create_articles.rb
      create    app/models/article.rb
      invoke    test_unit
      create      test/unit/article_test.rb
      create      test/fixtures/articles.yml
       route  resources :articles
      invoke  scaffold_controller
      create    app/controllers/articles_controller.rb
      invoke    erb
      create      app/views/articles
      create      app/views/articles/index.html.erb
      create      app/views/articles/edit.html.erb
      create      app/views/articles/show.html.erb
      create      app/views/articles/new.html.erb
      create      app/views/articles/_form.html.erb
      invoke    test_unit
      create      test/functional/articles_controller_test.rb
      invoke    helper
      create      app/helpers/articles_helper.rb
      invoke      test_unit
      create        test/unit/helpers/articles_helper_test.rb
      create  app/assets/stylesheets/scaffold.css.scss
      invoke  assets
      create    app/assets/javascripts/articles.js.coffee
      create    app/assets/stylesheets/articles.css.scss

現状のRails EdgeだとまだRSpecが標準にはなっていないようです。その代わりapp/assetsというディレクトリが新たに出現していて、その中に.coffeeと.scssなファイルが作られています。

app/assets/stylesheets/scaffold.css.scssを覗いてみましょう。

body { background-color: #fff; color: #333; }
 
body, p, ol, ul, td {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size:   13px;
  line-height: 18px;
}
 
pre {
  background-color: #eee;
  padding: 10px;
  font-size: 11px;
}
 
a { 
  color: #000;
  &:visited { color: #666; }
  &:hover { color: #fff; background-color:#000; }
}
 
div.field, div.actions {
  margin-bottom: 10px;
}
 
#notice {
  color: green;
}
 
.field_with_errors {
  padding: 2px;
  background-color: red;
  display: table;
}
 
#error_explanation {
  width: 450px;
  border: 2px solid red;
  padding: 7px;
  padding-bottom: 0;
  margin-bottom: 20px;
  background-color: #f0f0f0;
  
  h2 {
    text-align: left;
    font-weight: bold;
    padding: 5px 5px 5px 15px;
    font-size: 12px;
    margin: -7px;
    margin-bottom: 0px;
    background-color: #c00;
    color: #fff;
  }
  
  ul li {
    font-size: 12px;
    list-style: square;
  }
}

まとめ

今回はRails3.1をインストールし、Scaffoldの生成物を眺めただけです。。。実を言うと、私は最近までCoffeeScriptもSCSSも完全にノーマークでして、両方ともさわり程度しか知りませんでした(^^; 油断するとあっという間に置き去りにされそうです。

次回はCoffeeScriptとSCSSがどれくらい便利なのか色々触ってみたいと思います(多分)。