Rails7の情報を追いかけてみたメモ
最近DHH本人がRails7について語る動画や記事をよく見かけるようになったので、内容を追ってみたメモです。
- Rails 7 will have three great answers to JavaScript in 2021+
- Modern web apps without JavaScript bundling or transpiling
- Alpha preview: Modern JavaScript in Rails 7 without Webpack - YouTube
ざっくり概要
- Rails7ではWebpacker, Turoblinks, UJSをやめてimport map, Stimulus, Hotwireに置き換える
- webpackも使えるesbuildがおすすめ
- APIモードは引き続き使える
おさらい
Webpacker
webpackをRailsで使えるようにしたラッパー。JavaScript, CSS, 画像などの静的ファイルを管理できる。
Sprocketsとの違いはNPMパッケージとの統合に優れている点。
Turbolinks
Railsに同梱されているライブラリでAjaxの動きを実現している。<a>
タグに対してクリックハンドラが追加される。
リンクをクリックした際は<body>
全体をレスポンスの<body>
に置換する。
Rails で JavaScript を使用する - Railsガイド
このブログでも書いたことがありますが、Turbolinksが原因で意図しない挙動になることがときどきあるので個人的にはあまり好いていません..
Railsアプリケーションでscroll-behaviorが正常に動作しない場合の対処
Import mapsとは
- WICG/import-maps: How to control the behavior of JavaScript imports
- Import mapsでDenoのパッケージのバージョンを管理したい | WEB EGG
import文とそれに対応するURLをコントロールする仕様。これを使うと論理的な名前指定でブラウザからダイレクトにモジュールをimportすることができる。
Rails7について調べている中ではじめて知りました😅
- Yarn, npmなどパッケージマネージャを使う必要がなくなる。Railsではそれ用のGemが用意されている、おそらくRails7ではこれがデフォルトでinstallされる。
- このアプローチによって大きな1つのJavaScriptファイルではなくて、小さなJavaScriptを複数配信するといったことができる。HTTP2によってパフォーマンスにはほとんど悪影響を与えない。
Hotwireなどもimport mapを通して読み込まれる。ブラウザで見ると<script type='importmap'>
が該当する箇所。
Railsはどこに向かうのか
Rails 7 will have three great answers to JavaScript in 2021+の最後の方から引用です。
Rails needs to be a wonderful framework for developing traditional single-page JavaScript applications – complete with client-side routing, heavy state management, and all the other complexities of that style. And it's going to be.
Railsはクライアントサイドのルーティング、状態管理などを含むSPA開発でも使えるようなまさにフルスタックなフレームワークを目指しているようです。JavaScriptのデフォルトをどうするかはDHH自身が長年悩んで、Rails7ではその回答を導き出したとのこと。
Rails has supported this path for a long time with --api, and will continue to do so. This is not a path I'd recommend for small-to-medium-sized teams, but if you're inside a large organization committed to making SPAs with high walls between front-end and back-end departments, it might make sense.
バックエンドはRails APIでフロントエンドはReact等でSPA化するなどはDHHはあまり推していない印象です。特に小さいチームでは。 RailsがJavaScriptに関しても面倒を見てSPAを作れるようにするから、それらをうまく使ってくれという感じかなと思います。
色々考えさせられる系の記事
DHHの考え方がフロントエンド界隈の人から指摘を受けていることを思い出しました。ruby.jsのSlackコミュニティでもフロントエンドのスタンダードとの乖離がうまれそう、といった意見を見受けました。
- Railsを主戦場としている自分が今後学ぶべき技術について(随筆) | うなすけとあれこれ
- Re: Rails を主戦場としている自分が今後学ぶべき技術について
- Railsの未来についての一考察 - okuramasafumiのブログ
StimulusやHotwireなども少し学習で触りましたが、それなりに学習コストがかかるので、Rails7の上でDHHが推しているJavaScriptの書き方でやっていくと、「Railsの上ではJavaScriptが書ける」みたいな状態になりそうに思います。