ボクココ

個人開発に関するテックブログ

Rails5 が示したサービス開発の新しい指針についての考察。

ども、@kimihom です。

f:id:cevid_cpp:20160702014256p:plain

Rails5.0 の正式版がついにリリースされた。

Riding Rails: Rails 5.0: Action Cable, API mode, and so much more

Rails 5といえば、 ActionCable での WebSocket によるサーバープッシュのリアルタイム処理が注目されがちだが、個人的には今後のシステムの開発指針を Rails が示した重要なリリースになっていると感じている。その原動力となっているのが、 あの "Turbolinks" だ。

マルチプラットフォーム開発に対する提案

ではどんな話かっていうと、まず Rails としては JavaScript で複雑なロジックをたくさん書いたり状態を管理するような処理を書かないことを選んでいる。以下の動画は今後の Rails において非常に重要な意味を持っている。

RailsConf 2016 - Turbolinks 5: I Can’t Believe It’s Not Native! by Sam Stephenson - YouTube

ではどうするのかっていうと、 Turbolinks によるページの書き換えだ。処理は全て Ajax を通じてサーバーサイドのHTMLレンダリングを通して中身を JavaScript で書き換える。そうすれば状態管理をしなければならないのは相変わらず Rails の DB 側になり、フロントエンド側のロジックが一気に減ることになる。

これだとスマホアプリが作れない? それが最新の Turbolinks のすごいところで、 iOS, Android 用になんと Turbolinks がネイティブと WebView を組み合わせてスマホアプリとスマホWebの垣根を限りなく少なくしてくれたのだ。そうすると各ネイティブアプリで書かなければならないロジックは本当に少なくなって、最も重要な部分は Web で統一化されているのである。私たちが Web の開発によりフォーカスを当てることができる。

この考えは確かに割と前からあった。ただし、 ネイティブの WebView があまりにも残念だったため、やっぱネイティブのJavaやSwiftで書かないとダメだよねーってのが共通認識だった。しかしながら スマホとHTML5 の発展により、そうした問題が解消しつつある。満を持してついに Rails が Turbolinks と WebView ベースを組み合わせたアプリの開発手法を提案してくれたのだ!

レスポンシブ対応な Webアプリケーションを作れば、 PC Web, Tablet Web/App, SP Web/App の5つに対応したものが高速で開発できる。これが次の世代の Rails のレールなのである。

Rails API で他の道も示している

このような開発手法だと、 Webアプリベースのサービスを アプリ化するにはちょうどいいのだけど、ネイティブビルドに大きく依存するようなサービスを開発する上では Turbolinks だけでやるのは不可能なことである。その場合は Rails API を使って JSON ベースでやりとりするような設計になるだろう。作りたいサービスが Turbolinks にマッチしなければ Rails API もあるよって意味合いで Rails API を公開している感が強い。

もちろん React や Angular 好きのためにってのもあるんだろうけど、それは付随的なものであって Basecamp 的主張で言えば、React や Angular を Rails で使うのはあまりイケてない感がある。なぜなら上記プレゼンの中にも「We are not Google. We are not Facebook」 ってある。これはそんな大規模なアプリを作れるようにするために Rails が存在するのではなく、小規模のスタートアップがより早く優れたものを作れるようにするためのフレームワークであるからって意味でとても納得できる。 ま、それらを使っても Rails のレールから外れるっただけなので、苦労してでもやりたきゃやればって感じなのだろう。

Rails 5 へのアップデートは。

こうやって正式リリースが出ると早くアップデートしたくなるものではあるが、Rails 4を本番で稼働している場合はまだやるべきではないと思う。依存 Gem の問題もあるし、まだ出たばかりなので激しい頻度でアップデートが繰り返されていくことだろう。そこまでしてアップデートした先にあるメリットって自慢できるくらい? あとは ActionCable とか 新しい Turbolinks を使わないといけないみたいな場面だったらアリかもくらいか。

この辺は個人の好みなのでやりたければどうぞと言ったところである。

私はそんなことよりも新規プロジェクトを Rails 5 で作り、 Turbolinks の新しい設計思想に触れてみたいと思っている。これは誰にとってもバージョンアップ作業をするよりも大事なことであろう。

今回の Rails 5 の登場がサービス開発手法の新しいスタンダードになることを期待している。