Rails3.0リリースアナウンス超訳(2010.08.30)

2010.08.30リリースのRails3.0の公式リリースノート公式リリースアナウンス超訳です。以前Rails3.0ベータ版のリリースノートとはかなり内容が違います。原文は http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done。大意が汲めればOKレベルの訳ですが、間違いや改善したほうが良い表現があればご指摘いただけると喜びます。

# 2010.09.02 追記
なんと!一生懸命訳していたのにこれはただのリリースアナウンスでリリースノートではないとのご指摘が。ということで正式なリリースノートはこちら(http://guides.rubyonrails.org/3_0_release_notes.html)を御覧ください。
#追記終わり

Rails3.0の開発が進められてきたこの2年間、最終的にリリースへ辿りつくまで我々(開発陣)には膨大なプレッシャがかかっていた。その中で我々は1600人以上のコントリビュータとともにあらゆるものを改善し、高速化し、綺麗に美しくしてきた。

第三世代のRailsは数千のコミットからなっており、何が特徴か拾い上げるのは大変すぎて不可能だ。しかしRails3の主要な変更点をあげてみよう。

新しいActiveRecordエンジン

ActiveRecordはscopeやqueryをもっと首尾一貫してわかりやすくするため、新しく「the ARel query engine」に置き換えられた。これにより幾つかの実装における複雑なqueryを構築するのがかなり簡単になった。またそのqueryが実際に必要になるまで実行されないようにもした。簡単なサンプルは以下のとおり。

users = User.where(:name => "david").limit(20)
users.where("age > 29")

# SELECT * FROM users
# WHERE name = "david" AND age > 29
# ORDER BY name
# LIMIT 20
users.order(:name).each { |user| puts user.name }

詳しくは「new ActiveRecordguide」や「Dive into Rails3: Arel video」を見て欲しい。

ActionControllerのための新しいroute

我々がRails2でコントローラをRESTベースの新しいアプローチに切り替えたとき、その試みがうまくいくように既存のrouterに新しい文法のパッチを追加した。

RESTベースの新しいアプローチは結果としてうまくいったが、Rails3では文法を改めて完全にREST方式に適合させた上で、無駄が減って柔軟になるよう刷新した。

resources :people do
  resource :avatar

  collection do
    get :winners, :losers
  end
end

# /sd34fgh/rooms
scope ':token', :token => /\w{5,5}/ do
  resources :rooms
end

# /descriptions
# /pl/descriptions
# /en/descriptions
scope '(:locale)', :locale => /en|pl/ do
  resources :descriptions
  root :to => 'projects#index'
end

詳しくは「new routing guide」を見て欲しい。

新しいActionMailer

Action Mailerはモデルとコントローラ半々から成り立つ二重人格状態だった。Rails3で我々はAction Mailerを完全にコントローラにする選択をした。それが意味するのは使い方や機能がよりAction Controllerに近づくということで、事実Action MailerとAction Controllerは基礎的なコード群を共有している。どんな感じに動くかを以下に示す。

class Notifier < ActionMailer::Base
  default :from =>
    "Highrise <system@#{APPLICATION_DOMAIN}>" 

  def new_project(digest, project, person)
    @digest, @project, @person = digest, project, person

    attachments['digest.pdf'] = digest.to_pdf
    attachments['logo.jpg']   = File.read(project.logo_path)

    mail(
      :subject => "Your digest for #{project.name}",
      :to => person.email_address_with_name
    ) do |format|
      format.text { render :text => "Something texty" }
      format.html { render :text => "Something <i>texty</i>" }
    end
  end
end

新しいAction Mailerはthe new Mail gemにも構築されている。TMailの頭痛にさようならを言おう。

Bundlerによる依存管理

Railsアプリの依存関係を管理するのは継ぎ接ぎ仕事的面倒さを伴ってきた。config-gemやCapistrano、カスタマイズしたrake setup task、その他の不完全な解決方法だ。

Budlerはそれら全部を綺麗にしてくれて、あなたのアプリが依存しているライブラリ、フレームワーク、プラグインを指定できる。全てのRails3アプリは全てを管理するGemfileと一緒にセットアップできる。詳しくはBundlerのサイトを見て欲しい。

XSS保護をデフォルトに

インターネットは恐ろしいところだが、Rails3はあなたのためにデフォルトで注意してくれる。我々はフォーム経由のCRSF対策とSQLインジェクション対策を当初から備えていたが、Rails3ではXSS対策についても装備した。(Djangoでの対策方法が我々を納得させてくれた)

XSSについてのRailscastを見てRails3に触れて欲しいCross-site scriptingについてのビデオもある。

encodingの不具合にさよならを言おう

もしあなた頻繁にインターネットを見ているなら、多分 �的な文字を見かけることがあるだろう。この問題はとても蔓延していてその原因は異なる文字コードが混在することにある。

Railsのような仕組みではDB、テンプレート、その他のソース、あるいはユーザ由来のデータからコンテンツが成り立っている。Ruby1.9にはこれらの問題を考慮した素のツールが提供されているが、Rails3と組み合わせることで� 的文字は過去のものとなる。ユーザがMS Wordデータから張り付けた汚いデータによって悩まされることは二度と無くなる!

ActiveModel:全てのモデルでValidation、Callbackなどなどを利用可能に

我々はActiveRecordの良く使われる構成要素を新しいActiveRecordフレームワークに抽出した。これによってActiveRecordのvalidation、callback、serialize、i18nサポートをORMのMongoidのように使えるようになった。

加えてActionControllerを書き直したことでActive Recordを直接参照している箇所を取り除き、各種ORMから利用可能なきれいでシンプルなAPIを定義した。もしあなたがAPIに準拠したORM(DataMapper, Sequel, or Mongoidのような)を使えば、特に何か作業しなくてもORMのオブジェクトでform_for, link_to and redirect_toといった機能を使うことができる。

プラグイン向けの公開されたAPI

Active RecordやAction Mailerといった全てのRailsフレームワークが新しいプラグイン向けAPIを使えるという目標のため、我々はRailtiesも書き直した。これによってDataMapperやRSpecのようなRailsプラグインからもActive RecordやTest::Unitといった組み込みサポートと同じレヴェルで全ての内部実装へのアクセス手段を得たことになる。

新しいRailtieAPIは組み込みジェネレータの変更やrake taskの追加、Railsオプションのデフォルト値の設定、あるいは指定したコードを簡単に実行したり必要になるまで実行を遅らせたりすることが可能にする。DeviseのようなRailsプラグインはRails3でより良い実装を追加することが可能になった。数ヵ月後にはもっと多くの成果をお見せできるので期待して欲しい。

内部の書き換え

我々はAction PackとRailtiesの内部を書き直した。それらをより柔軟で拡張しやすくするためだ。一枚岩でできたActionController::Baseの代わりに、Rails3はAPIがきちんと定義されたモジュール群を提供する。それらはあなたが特別な利用目的に合わせて混ぜたり組み合わせて自分専用のコントローラを作るのに適している。Action MailerとCellプロジェクトもこの新機能に大いに使われている。

あなたは(昨年)Yehudaが投稿したブログ記事を読むことができる。新しいアーキテクチャでRackと ActionController::Metalを連携させてDjangoスタイルの通常のアクション類をいかに簡単に実装したかわかるだろう。

Railsのジェネレータの仕組みも刷新された。みんなが知っているRailsフレームワークの上に一枚岩で構成されたジェネレータのかわりに、それぞれのジェネレータは一連のhookを呼ぶ。hookには例えば:test_frameworkや:ormがあげられる。プラグインはそれらを取り扱うために登録できるようになっている。この仕組みによってrSpecや DataMapperやHamlを使ってるときにそれらのプラグインのためにカスタマイズしたscaffoldも生成できる。

jQuery,rSpec,DataMapperで”agnosticism”に到達

内部の書き直しと新しいプラグインAPIはRails3を構成するフレームワークの全構成要素に真の不可知論をもたらした。DataMapperの方がActive Recordより好き?問題ない。Prototypeの代わりにjQueryを使いたい?そうすればいい。test/unitの代わりにrSpecでテストしたい!ほらできた。

— ↓この文章よくわからないのでコメント欄でヘルプしてください!
It’s never been easier to Have It Your Way™ with Rails 3. And at the same time, we’ve made that happen without making using the excellent default stack any more complicated.

文書

Rails3は長期の開発サイクルを経ていいるので、みなさんがいくらか性急になってきた部分もあるかもしれない。その期間は書籍やチュートリアル筆者にとってはキャッチアップしたり用意をするチャンスを与えることにもなっている。順分な質のRails3の文書が既にあるが、すぐにもっと多くの書籍類が出てくると思う。

「The Agile Web Development with Rails 4th Ed book(アジャイル本第四版)」は既にほぼ用意ができているが、それ以外の非常にたくさんの書籍も出版予定になっている。全ての新しいガイドや公式ヴィデオ、Railscasts、チュートリアルをチェックして欲しい。詳しくは新しく更新された文書類の一覧を見て欲しい。

インストール方法

gem install rails --version 3.0.0.

ソースについてはRails v3.0.0のタグと、3-0-stableブランチがあるよ。

Rails3.0はRuby1.8.7、Ruby1.9.2、JRuby1.5.2以上で動くよう設計されている。

謝意と次のステップについて

私は個人的にもこのリリースを信じられないほど誇りに思う。私はRailsのために7年以上働いてきて、こんにち我々の手にあるRailsというフレームワークの質は正に目覚しいものと言える。これはコミュニティの努力だけでなく驚異的な開発者達による進歩(ウィンク)。全てのみなさん、どうもありがとう。

我々はRails3の開発及び修正作業に入っており、Rails3.1のstableブランチを微調整してすぐにmasterへ反映できると思う。

One Response to “Rails3.0リリースアナウンス超訳(2010.08.30)”