はじめに
Rails 5.0.0.beta1が2015年12月18日にリリースされました。
また、それにあわせてRuby on Railsの公式ブログに主な変更点がまとめられています。(投稿者はあのDHH氏のようです)
Rails 5.0.0.beta1: Action Cable, API mode, Rails command
beta1がリリースされたということは、Rails 5.0の正式リリースもそろそろ近いということです。
(ちなみにRails 4.0ではbeta1の4ヶ月後に正式版がリリースされました。)
Railsユーザーであれば、みなさん早かれ遅かれRails 5.0を使うことになると思うので、事前に予習しておきましょう!
というわけで、上記の公式ブログの内容を翻訳してみました。
これを読めばRails 5.0でどういう変化が起きるのか、だいたい理解できるはずです!
翻訳の方針について
翻訳は日本語としての読みやすさを重視してところどころ意訳しています。
もし完全に間違った訳になっていたり、意訳しすぎて原文のニュアンスが変わってしまったりしているところがあれば、コメントや編集リクエスト等でやさしく指摘してやってください。
Rails 5.0.0.beta1: Action Cable, APIモード, Railsコマンド(翻訳)
Rails 5.0.0.beta1: Action Cable, API mode, Rails command(元記事)
Rails 5.0ですよ!信じられますか? つい先日、私たちはRails 1.0の10周年を祝ったばかりです。仲のいい友人と楽しんでいるときはあっという間に時間が過ぎますよね。私たちにとってRailsのコミュニティほど楽しい空間と仲間たちは他にありません。なので、時間が音を立てるように過ぎていくのは当然です!Rails 5.0はこれで最初のベータリリースになったばかりです。しかし、Rails 5.0.0.beta1 はBasecamp 3の本番環境ですでに稼働中です。
Action Cable
Rails 5.0 で注目すべき新機能は WebSocket を扱う全く新しいフレームワークである、Action Cable です。このフレームワークはEventMachineを使ったコネクションループ、サーバーサイドの処理を実行するスレッド化されたチャンネルレイヤー、それにクライアントサイドのやりとりを実行するJavaScriptレイヤーを完璧に統合したフレームワークです。Action Cableはびっくりするぐらい使いやすく、チャットや通知、存在確認といったリアルタイムに実行される機能をずっと簡単に設計できるようになります。Basecamp 3に実装された新機能はまさにAction Cableのおかげです。実際にBasecamp 3を使ってみればその動きがわかるでしょう。
Action Cableの本当に素晴らしいところは、WebSocketの中でActive RecordやPORO(訳注:普通のRubyオブジェクト)で実装されたドメインモデルにアクセスできる点です。Rails 5.0では ActionController::Renderer
という新しい仕組みも追加されています。これを使うとコントローラの外で簡単にテンプレートをレンダリングできるようになります。これにより、サーバーサイドに置いたテンプレートをWebSocketのレスポンスとして再利用できます。
開発環境では、Action Cableはアプリケーションと同じプロセス上で実行されます。これを実現するために、Rails 5.0ではデフォルトの開発サーバーをWebrickからPumaに変更しました。本番環境では、Action Cable用のサーバーを用意して、専用のプロセスで実行することも可能です。実際、Basecampではそのようにして大規模な処理に対応しています。
こうした機能が実現できたのは Pratik Naik と Javan Makhmali のおかげです。
2015.12.22 追記:チャットアプリの作り方を解説しました!
DHH氏がデモ動画を公開していたので、その内容をQiita記事としてまとめてみました。
こちらもあわせてご覧ください!
Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より) - Qiita
APIモード
Railsを選択すべきシーンは、フルスタックアプリケーションを構築するときだけではありません。HTMLテンプレートをサーバーサイドでレンダリングするときだけでなく、クライアントサイドで動くJavaScriptアプリケーションやネイティブアプリケーションを構築する場合でも便利に使えます。こうしたアプリケーションはバックエンドでJSONのやりとりをするだけです。これをもっと簡単に実現するため、Rails 5.0では新たに --api モードを用意しました。rails new backend --api
のようなコマンドを使うと、HTMLではなくJSONを使うように設定された、スリムな構成のRailsアプリケーションが作られます。
この機能については、まだまだやらなければいけないことがありますが、ひとまず素晴らしいスタートを切ることができました。APIモードではデフォルトでモデルクラスの #to_json メソッドを呼び出すだけです。しかし、JBuilder や Active Model Serializers を使うこともできます。それに加えて、もっと高度な機能が必要であれば、新しく登場した JSONAPI::Resources もあるのでチェックしてみてください。
この機能を作ってくれた Santiago Pastorino と Jorge Bejar に感謝します。
一つのRailsコマンドは全てを統べる
bin/rails
を使うコマンドと bin/rake
を使うコマンドが分かれているのは、なぜなんでしょう?これはよくある質問で、Rails初心者は特に疑問に思うようです。この質問に対するよい答えが今まで私たちにはありませんでした(技術的な言い訳ならたくさんあるのですが)。そこでRails 5.0では bin/rails
に必要なコマンドを全部詰め込むことにしました。これまでのrakeコマンドはすべてbin/rails
経由で実行できます。現時点では単なる橋渡し役でしかありませんが、将来的には多くのrakeコマンドをrailsコマンドに移動させる予定です。というわけで、これからはbin/rake db:migrate
ではなく、bin/rails db:migrate
と入力してください。きっと数ヶ月もすれば慣れるはずです!
このプロジェクトは Kasper Timm Hansen がリードしてくれました。
その他のハイライト
- 新しい Attributes API(Sean Griffinによって開発されました)
- Test runnerがテストの失敗を実行途中に表示するようになりました。これにより、テストスイートが全部完了するのを待たなくても、おかしな点を確認できます。
- ApplicationRecord がジェネレータで作られたモデルのデフォルトの親クラスになりました。
- ActiveRecord::Relation#in_batches が追加されました。このメソッドを使うとメモリの消費を抑えつつ、大量のレコードを一度に処理することができます。
- Post.where('id = 1').or(Post.where('id = 2')) と書けば、期待通りの動きをします!
- 最後のステートメントがfalseを返したために、予期せずActive Recordのコールバックが停止してしまった・・・なんてことはもう起きません。Rails 5.0では throw(:abort) を明示的に呼んで停止させることになっています!
Rails 5.0では上記のようなハイライトがありますが、本来であれば以下のCHANGELOGを全部読んでほしいところです。それぞれのフレームワークですばらしい新機能がたくさん追加されています。
- Action Mailer CHANGELOG
- Action Pack CHANGELOG
- Action View CHANGELOG
- Active Model CHANGELOG
- Active Record CHANGELOG
- Active Support CHANGELOG
- Active Job CHANGELOG
- Railties CHANGELOG
Claudio氏がこちらに素敵な短いスライドを作ってくれています。これを読めば、彼のお気に入りの新機能が(それに削除された機能も!)一通りわかります。
また、Rails 5と並行リリースするために、Turbolinks 5(※1)も開発中であることに注目してください。これはネイティブiOS/Androidのラッパー実装(※2)です!Turbolinks 5の開発状況は basecamp/turbolinks/v5 でチェックできます。
訳者による補足・その1
以下のツイートにあるように、Turbolinksの次期バージョンはTurbolinks 3ではなく、Turbolinks 5としてゼロから書き直されるようです。
@rafaelfranca Complete rewrite with a bigger scope and some backwards-incompatible changes, and @dhh wanted to sync it up with Rails 5.
— Sam Stephenson (@sstephenson) September 21, 2015
訳者による補足・その2
「ネイティブiOS/Androidのラッパー実装」が何を意味するのかはハッキリわかりませんが、ヒントになりそうなツイートがこちらにあります。
4) New iOS & Android frameworks for building fast, flicker-free, memory-efficient hybrid apps with Turbolinks using a shared web view. Soon!
— Sam Stephenson (@sstephenson) September 21, 2015
このツイートを訳すと次のようになります。
新しいiOS/Androidフレームワークが登場します。これを使えば、高速に動作し、画面がチラつかず、メモリの使用効率がよいハイブリッドアプリケーションを構築できます。この機能はWeb viewを共有するTurbolinksを使います。まもなく登場です!
というわけで、次期バージョンのTurbolinksはiOS/Androidアプリケーションと何かしらの関連を持つようです。
今後のメンテナンス計画
私たちのメンテナンスポリシーに基づけば、Rails 5.0がされると不具合修正は5.0.xにしか行われなくなります。標準的なセキュリティ修正は5.0.xと4.2.xにだけ適用され、深刻なセキュリティ修正もまた5.0.xと4.2.xにだけ適用されます(ただし、5.1がリリースされた場合は、5.1.xと5.0.xと4.2.xが対象になります)。つまりこれは、4.1.x以下のバージョンはサポート対象外になることを意味します!さらに、Ruby on RailsがサポートするRubyのバージョンも2.2.2以上になっています。
Rails 5.0が安定するよう、ご協力をお願いします!
今回のような大きなリリースの前は、不具合やアップグレードにまつわる問題をあぶり出すために、コミュニティのみなさんからのフィードバックが不可欠です。なので、Rails 5.0を実際のアプリケーションで使ってみてください。また、ある程度Railsに関する知識がある人で、これから新しいRailsアプリケーションを作ろうとしている人は、beta1を使ってもらうと嬉しいです。
IssueはこちらのGithub issues trackerで管理されています。
すでに789人もの人がこの新しいRailsのリリースに貢献してくれました。あなたもそのうちの一人になってください!
Rails 5.0のリリースマネージャーとして精力的に活動してくれているのは、 Eileen M. Uchitelle と Sean Griffin の二人です。また、プルリクエストが最も多くマージされているのはダントツで Rafael França です!
(翻訳はここまで)
あわせて読みたい
RailsガイドにRails 5.0のリリースノートが公開されています。
こちらも一緒に読むと、より網羅的に新機能や変更点を確認できると思います。
Ruby on Rails 5.0 リリースノート | Rails ガイド
Rails 4からRails 5(正式版)へのアップグレード手順をまとめた記事です。
既存のRailsアプリケーションをアップグレードする際に参考にしてください。
これでもう怖くない!?Rails 4.1からRails 5.0にアップグレードする手順を動画付きで解説します - Qiita
Rails 5.1の新機能はこちらにまとめてあります。