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へ反映できると思う。

リヴァプール 1 vs 1 アーセナル

プレミアが開幕した!いきなりリヴァプールvsアーセナルである。

  • 開幕GKスタメンはアルムニア。現時点の、ね。シュウォーツァが開幕ベンチ入りしなかったとのことで早く来て欲しい。
  • ホジソンはおじさんっぽいおじさん。ベニテスがいないのはまだ違和感あるなあ。
  • 前半終了間際にJohがコシールニにカニバサミで一発Red。気合空回り。
  • 後半始まったと思ったらクリアミスをかっさらったNgogがニアをぶち抜く。
  • 守備なら得意なリヴァプールが活き活きしだす。どっちが10人やねん。
  • ロシツキ&ウォルコット投入で流れが変わる。
  • ロシツキのショートクロスからシャマクとレイナが竸ってこぼれ球をレイナがオウンゴール。レイナざまみろ(レイナがW杯祝勝会でセスクにバルサユニを着せたことを皆忘れてないぞ!)
  • 終盤コシールニがいらないハンドでイエロー2枚→退場。あれ?次節CBが足りません(>_<)

アーセナル開幕スタメン

アルムニア、サーニャ、コシールニー、ヴェルメーレン、クリシ、エブエ、ナスリ、ディアビ、ウィルシャー、アルシャビン、シャマク。

報道

  • シャマク:プレッシャーを感じているのはリヴァポの方だ
    http://www.skysports.com/story/0,19528,11670_6313846,00.html
    “There is pressure at a club like Arsenal, but Liverpool will be under more pressure because they had a bad season last year

    “It’ll be difficult for us but it’ll be difficult for Liverpool too.

    “We have an edge because we don’t have any pressure on us since it’s an away match.

    “I know it will be hard but I am confident. We’ll do everything we can to bring points back from up there.”

アストンヴィラ VS ウエストハム

アストンヴィラはマーチン・オニールが開幕直前に電撃辞任。ミルナーの移籍、あるいは補強方針でクラブと対立したのが原因と言われている。チェルシー、マンU、アーセナル、トッテナム、シティ、ヴィラの6強が形成されつつあっただけに残念。ケビンマクドナルドは暫定監督が二回目だそう。

ヴィラ、前半に先制するとそのまま主導権を握る。右の若手オルブライトン始め左右から気持ちのいいクロスがポンポン入る。ウエストハムはグラントが監督。前線のカールトンコールが孤立していて打つ手なし。

2点目も右から綺麗に崩してショートクロスにペトロフが飛び込んで加点。これでオニールがいなくなると寂しいなあ。もったいなさすぎる。

今日はアグボンラホールが欠場でカリューが出場。カリューは前半から判定に納得いかないようで散々主審に文句を言っている。「俺はイライラしてるんだぜ!」と丸わかり。

後半ヴィラは60分過ぎにヤングが痛んで座り込んでしまう。必要性を考えればさっさと交代させてしまえば良いのに。その直後フリーキックからオルブライトンが縦に抜けだしてミルナーが追加点。大雨で双方にスペースが出来てきた矢先だった。

▼今日のtweet:昇格組のBlackpoolがWiganを一蹴!
Twitter _ MirrorFootball_ Blackpool 3-0 up at Wigan. ...

転職のお知らせ

ご挨拶が遅くなり申し訳ありませんでしたが7月末日でアプリケーションプラス株式会社を退職し、株式会社サンゼロミニッツ(以下30min.)へ転職しました。前職在職中にお世話になった皆様、ありがとうございました。深く御礼申し上げます。

30min.は http://30min.jp/というタウン情報サイトを運営しています。ブログやtwitterからの投稿を活用して職場や自宅から30分圏内程度の近場の情報収集に役立つサービスを目指しています。30min.ではPCサイト、携帯サイト、iPhone/iPadアプリ、Androidアプリと各媒体に展開していますが私はRailsを使ってPCサイトの機能強化を加速する予定です。

なおMitaka.rbは引き続き三鷹を中心に開催されていく予定です。今後ともよろしくお願いします。

P.S.
新しく個人サイトとして http://hara19.jp/ を立ち上げました。新しい職場の原宿を開拓していく様子を御覧ください。

プレミアリーグ開幕:トッテナム 0 vs 0 シティ

プレミアリーグが開幕した。ほぼメンバー同じのトッテナムに対しシティは出入が激しい。

コラロフ、ボアテング、ダビド・シルバ、ヤヤ・トゥレ、バロテッリが加入、シルビーニョ、ペトロフ、ボジノフ、ムワルワリが放出。

前半はホームのトッテナムが圧倒。シュート13本中8本オンターゲット。シティのゴールキーパー、ハートが当たっていてことごとく止める。

後半なんとか勝ち越したいスパーズはパブリチェンコとキーンを投入。残り10分でスパーズが元バルサのドスサントス、シティがアデバイヨルを投入。シティの方は本当は引き分け御の字だと思うのでアリバイ的かな。試合は結局ドロー。スパーズ的には勝てる試合を落とした、という感じだろう。

  • シティは連携ができていない感じ。ひとりひとりはいい選手なんだが・・・
  • ドスサントスはワールドカップでがんがん斬り込んで良い出来だったので今季は出場機会を貰えるのではないか。
  • マンチーニは髪を短くしてイメチェン。TLでは「無駄にイケメン」が飛び交っていた。
  • プレミア合間の曲が緩すぎ。。。

▼今日の一言w