Rails7の情報を追いかけてみたメモ

最近DHH本人がRails7について語る動画や記事をよく見かけるようになったので、内容を追ってみたメモです。

ざっくり概要

  • Rails7ではWebpacker, Turoblinks, UJSをやめてimport map, Stimulus, Hotwireに置き換える
  • webpackも使えるesbuildがおすすめ
  • APIモードは引き続き使える

おさらい

Webpacker
webpackをRailsで使えるようにしたラッパー。JavaScript, CSS, 画像などの静的ファイルを管理できる。

Sprocketsとの違いはNPMパッケージとの統合に優れている点。

Webpacker の概要 - Railsガイド

Turbolinks
Railsに同梱されているライブラリでAjaxの動きを実現している。<a>タグに対してクリックハンドラが追加される。 リンクをクリックした際は<body>全体をレスポンスの<body>に置換する。

Rails で JavaScript を使用する - Railsガイド

このブログでも書いたことがありますが、Turbolinksが原因で意図しない挙動になることがときどきあるので個人的にはあまり好いていません..

Railsアプリケーションでscroll-behaviorが正常に動作しない場合の対処

Import mapsとは

import文とそれに対応するURLをコントロールする仕様。これを使うと論理的な名前指定でブラウザからダイレクトにモジュールをimportすることができる。
Rails7について調べている中ではじめて知りました😅

Hotwireなどもimport mapを通して読み込まれる。ブラウザで見ると<script type='importmap'>が該当する箇所。

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コミュニティでもフロントエンドのスタンダードとの乖離がうまれそう、といった意見を見受けました。

StimulusやHotwireなども少し学習で触りましたが、それなりに学習コストがかかるので、Rails7の上でDHHが推しているJavaScriptの書き方でやっていくと、「Railsの上ではJavaScriptが書ける」みたいな状態になりそうに思います。

SourceCode