こんにちは、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が使われています。
画像は 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
とあります。
大まかに言えば、ページ遷移のたびにJavaScriptとCSSをブラウザに再度コンパイルさせるのではなく、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への愛着が増すかもしれません。
おまけ
It’s really awesome to be on the Rails core team and have no idea that Action Cable existed until today! #RailsConf
— Aaron Patterson (@tenderlove) April 21, 2015
参考
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
http://mwdesilva.com/posts/111-rails-5-action-cable-demystified