Rails 5.0で追加される主な新機能（Ruby on Rails公式ブログより）

## はじめに

Rails 5.0.0.beta1が2015年12月18日にリリースされました。
また、それにあわせてRuby on Railsの公式ブログに主な変更点がまとめられています。（投稿者はあのDHH氏のようです）

[Rails 5.0.0.beta1: Action Cable, API mode, Rails command](http://weblog.rubyonrails.org/2015/12/18/Rails-5-0-beta1/)

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（元記事）](http://weblog.rubyonrails.org/2015/12/18/Rails-5-0-beta1/)

Rails 5.0ですよ！信じられますか？ つい先日、私たちは[Rails 1.0の10周年](http://weblog.rubyonrails.org/2005/12/13/rails-1-0-party-like-its-one-oh-oh/)を祝ったばかりです。仲のいい友人と楽しんでいるときはあっという間に時間が過ぎますよね。私たちにとってRailsのコミュニティほど楽しい空間と仲間たちは他にありません。なので、時間が音を立てるように過ぎていくのは当然です！Rails 5.0はこれで最初のベータリリースになったばかりです。しかし、Rails 5.0.0.beta1 は[Basecamp 3](https://basecamp.com/)の本番環境ですでに稼働中です。

## Action Cable

Rails 5.0 で注目すべき新機能は WebSocket を扱う全く新しいフレームワークである、[Action Cable](https://github.com/rails/rails/tree/master/actioncable) です。このフレームワークはEventMachineを使ったコネクションループ、サーバーサイドの処理を実行するスレッド化されたチャンネルレイヤー、それにクライアントサイドのやりとりを実行するJavaScriptレイヤーを完璧に統合したフレームワークです。Action Cableはびっくりするぐらい使いやすく、チャットや通知、存在確認といったリアルタイムに実行される機能をずっと簡単に設計できるようになります。[Basecamp 3](https://basecamp.com/)に実装された新機能はまさに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](https://github.com/lifo) と [Javan Makhmali](https://github.com/javan) のおかげです。

### 2015.12.22 追記：チャットアプリの作り方を解説しました！

DHH氏がデモ動画を公開していたので、その内容をQiita記事としてまとめてみました。
こちらもあわせてご覧ください！

[Rails 5 + ActionCableで作る！シンプルなチャットアプリ（DHH氏のデモ動画より） - Qiita](http://qiita.com/jnchito/items/aec75fab42804287d71b)

## APIモード

Railsを選択すべきシーンは、フルスタックアプリケーションを構築するときだけではありません。HTMLテンプレートをサーバーサイドでレンダリングするときだけでなく、クライアントサイドで動くJavaScriptアプリケーションやネイティブアプリケーションを構築する場合でも便利に使えます。こうしたアプリケーションはバックエンドでJSONのやりとりをするだけです。これをもっと簡単に実現するため、Rails 5.0では新たに --api モードを用意しました。`rails new backend --api` のようなコマンドを使うと、HTMLではなくJSONを使うように設定された、スリムな構成のRailsアプリケーションが作られます。

この機能については、まだまだやらなければいけないことがありますが、ひとまず素晴らしいスタートを切ることができました。APIモードではデフォルトでモデルクラスの #to_json メソッドを呼び出すだけです。しかし、[JBuilder](https://github.com/rails/jbuilder) や [Active Model Serializers](https://github.com/rails-api/active_model_serializers) を使うこともできます。それに加えて、もっと高度な機能が必要であれば、新しく登場した [JSONAPI::Resources](https://github.com/cerebris/jsonapi-resources) もあるのでチェックしてみてください。

この機能を作ってくれた [Santiago Pastorino](https://github.com/spastorino) と [Jorge Bejar](https://github.com/jmbejar) に感謝します。

## 一つの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](https://github.com/kaspth) がリードしてくれました。

## その他のハイライト

- [新しい Attributes API](https://github.com/rails/rails/blob/8c752c7ac739d5a86d4136ab1e9d0142c4041e58/activerecord/lib/active_record/attributes.rb)（[Sean Griffin](https://github.com/sgrif)によって開発されました）
- 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](https://github.com/rails/rails/blob/v5.0.0.beta1/actionmailer/CHANGELOG.md)
*   [Action Pack CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/actionpack/CHANGELOG.md)
*   [Action View CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/actionview/CHANGELOG.md)
*   [Active Model CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/activemodel/CHANGELOG.md)
*   [Active Record CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/activerecord/CHANGELOG.md)
*   [Active Support CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/activesupport/CHANGELOG.md)
*   [Active Job CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/activejob/CHANGELOG.md)
*   [Railties CHANGELOG](https://github.com/rails/rails/blob/v5.0.0.beta1/railties/CHANGELOG.md)

Claudio氏がこちらに[素敵な短いスライド](https://speakerdeck.com/claudiob/rails-5-awesome-features-and-breaking-changes)を作ってくれています。これを読めば、彼のお気に入りの新機能が（それに削除された機能も！）一通りわかります。

また、Rails 5と並行リリースするために、Turbolinks 5（※１）も開発中であることに注目してください。これはネイティブiOS/Androidのラッパー実装（※２）です！Turbolinks 5の開発状況は [basecamp/turbolinks/v5](https://github.com/basecamp/turbolinks/tree/v5) でチェックできます。

**訳者による補足・その1**
以下のツイートにあるように、Turbolinksの次期バージョンはTurbolinks 3ではなく、Turbolinks 5としてゼロから書き直されるようです。

<blockquote class="twitter-tweet" lang="en"><p lang="en" dir="ltr"><a href="https://twitter.com/rafaelfranca">@rafaelfranca</a> Complete rewrite with a bigger scope and some backwards-incompatible changes, and <a href="https://twitter.com/dhh">@dhh</a> wanted to sync it up with Rails 5.</p>&mdash; Sam Stephenson (@sstephenson) <a href="https://twitter.com/sstephenson/status/646005026704371713">September 21, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

**訳者による補足・その2**
「ネイティブiOS/Androidのラッパー実装」が何を意味するのかはハッキリわかりませんが、ヒントになりそうなツイートがこちらにあります。

<blockquote class="twitter-tweet" lang="en"><p lang="en" dir="ltr">4) New iOS &amp; Android frameworks for building fast, flicker-free, memory-efficient hybrid apps with Turbolinks using a shared web view. Soon!</p>&mdash; Sam Stephenson (@sstephenson) <a href="https://twitter.com/sstephenson/status/645993392485171200">September 21, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

このツイートを訳すと次のようになります。

> 新しいiOS/Androidフレームワークが登場します。これを使えば、高速に動作し、画面がチラつかず、メモリの使用効率がよいハイブリッドアプリケーションを構築できます。この機能はWeb viewを共有するTurbolinksを使います。まもなく登場です！

というわけで、次期バージョンのTurbolinksはiOS/Androidアプリケーションと何かしらの関連を持つようです。

## 今後のメンテナンス計画

私たちの[メンテナンスポリシー](http://guides.rubyonrails.org/maintenance_policy.html)に基づけば、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](https://github.com/rails/rails/issues)で管理されています。

すでに[789人もの人がこの新しいRailsのリリースに貢献してくれました](http://contributors.rubyonrails.org/edge/contributors)。あなたもそのうちの一人になってください！

Rails 5.0のリリースマネージャーとして精力的に活動してくれているのは、 [Eileen M. Uchitelle](https://github.com/eileencodes) と [Sean Griffin](https://github.com/sgrif) の二人です。また、プルリクエストが最も多くマージされているのはダントツで [Rafael França](https://github.com/rafaelfranca) です！

（翻訳はここまで）

## あわせて読みたい

RailsガイドにRails 5.0のリリースノートが公開されています。
こちらも一緒に読むと、より網羅的に新機能や変更点を確認できると思います。

[Ruby on Rails 5\.0 リリースノート \| Rails ガイド](http://railsguides.jp/5_0_release_notes.html)

Rails 4からRails 5（正式版）へのアップグレード手順をまとめた記事です。
既存のRailsアプリケーションをアップグレードする際に参考にしてください。

[これでもう怖くない！？Rails 4\.1からRails 5\.0にアップグレードする手順を動画付きで解説します \- Qiita](http://qiita.com/jnchito/items/fa680e104d4bf49ae06f)[![](http://b.st-hatena.com/entry/image/http://qiita.com/jnchito/items/fa680e104d4bf49ae06f)](http://b.hatena.ne.jp/entry/http://qiita.com/jnchito/items/fa680e104d4bf49ae06f)

Rails 5.1の新機能はこちらにまとめてあります。

[Rails 5\.1の変更点まとめ \- Qiita](http://qiita.com/jnchito/items/b0b47ecfc33de4f9b72f)[![](http://b.st-hatena.com/entry/image/http://qiita.com/jnchito/items/b0b47ecfc33de4f9b72f)](http://b.hatena.ne.jp/entry/http://qiita.com/jnchito/items/b0b47ecfc33de4f9b72f)