Rails 5 の足音

こんにちは、Misoca開発部のtaiki-tです。
名古屋に引っ越して半年が経ちました。良いところですね。
さて、GWも終わってしまいましたが、2015年は9月にシルバーウィークがあるので、それまで頑張りましょう。
今回は、RailsConf 2015で紹介されたRails 5 についての話を少し紹介したいと思います。

Rails5から加わる主な機能

ActionCable

ActionCableの「Cable」は、WebSocketを表します。 WebSocketというcableでユーザとアプリケーションをつなげる、というコンセプトに基づきます。

WebSocketと聞いてピンときたかもしれませんが、ActionCableは、Railsにリアルタイム通信の仕組みを取り入れるものです。 これまではRailsでリアルタイム通信を行おうとすると、結構たいへんでしたが、Rails 5からは標準機能でできるようになります。

これにより、チャットや、PinterestのようなUIで、ポーリングをしなくてよくなります。
ActionCableの実装には、Redisのpub/subやEventMachineが使われています。

f:id:taiki-t:20150507174022p:plain:w300:h300

画像は RailsConf 2015 Room 202 Day 1 - YouTube より抜粋

RailsConf2015の動画から抜粋したコード例はこちらに少しあります。 http://mwdesilva.com/posts/111-rails-5-action-cable-demystified

Turbolinks 3.0

Turbolinksはページ遷移を高速化する機能です。
Turbolinksのレポジトリから説明を引用すると、

Turbolinks makes following links in your web application faster. Instead of letting the browser recompile the JavaScript and CSS between each page change, it keeps the current page instance alive and replaces only the body (or parts of) and the title in the head. - rails/turbolinks · GitHub

とあります。
大まかに言えば、ページ遷移のたびにJavaScriptCSSをブラウザに再度コンパイルさせるのではなく、bodyとtitleのみを差し替えることで高速化しています。

Turbolinks 2系では、ページ全体の差し替えでしたが、Turbolinks 3.0 では、部分的な更新が可能になります。
これにより、次のようなことが可能になります。

例:

  • 動画とコメントがあるページの、コメントのみの更新
  • ページ更新時に、特定のものは更新しない(グローバルナビゲーションなど)
<body>
  <section id="navigation" data-turbolinks-permanent>
    # Lazy-loaded
  </section>
</body>

Rails API

Rails API自体は結構前からあるのですが、今回Rails本体に取り込まれることになりました 。
Rails APIによって、API用途では不要な要素(viewなど)が省かれた、APIに特化したRailsのアプリをはじめから作ることができます。
Rails 5 では、こんな感じで初期化することになりそうです。

$ rails new --api myapp

ActionCable, Turbolinks 3.0, Rails APIと、Rails 5 では昨今のSingle Page Applicationの流れに乗って行ってる感じがしますね。

https://github.com/rails/rails/pull/19832

Rails APIの目下の議論は、json生成に使う、ActiveModel::SerializersとjBuilderのどちらをデフォルトにするか、といったところです。

Rails5/これらの機能が加わった背景

DHHは、RailsConf2015の基調講演で「小さなチームのためのRails」という考えを強調しています。少人数のチーム、それがたとえ一人であっても、Railsがあれば世界を変えていけるようなものにしていくこと。それがDHHの大きなモチベーションになっています。
Railsが出た当時は、それだけで十分なwebサービスが作れましたが、10年経った今では十分とは言えません。それが、今回のTurbolinks 3 や ActionCableにつながっています。
DHHは、自分がこれまで築いたすべて(Basecampや、そのチーム)を、今失うことになっても、また一人でもスタートしていけるものを作っていくといっています。それを使って、他の人も戦えるといいね、という話でした。

RailsConf 2015 Room 202 Day 1 - YouTube

DHHの基調講演は、25分ぐらいからです。 最初の方で、DHHがどんな思いでRailsを作っているかを聴くことができます。
聴いてみると、Railsへの愛着が増すかもしれません。

おまけ

参考

Riding Rails: This week in Rails: RailsConf 2015 Edition

RailsConf 2015 Room 202 Day 1 - YouTube

Why Rails 5 / Turbolinks 3.0 / Action Cable matter, and why @dhh was right all along

Existential crisis at Railsconf | Hacker News

A New Sense of Purpose for Rails

Upcoming changes in Rails 5.0 - Intercity

Rails API to Be Part of Rails 5 - WyeWorks’ Blog

Microservices, ClientMVC, Turbolinks 3 and ActionCable - Why Ruby on Rails is Still The Choice for Innovative Apps - ÆLOGICA

http://mwdesilva.com/posts/111-rails-5-action-cable-demystified

rails-api/rails-api · GitHub

rails/rails · GitHub