🔥

RailsにHot Reloadを追加する Hotwire-Sparkを導入する

2025/01/14に公開

Hotwireのチーム内に作成されている、ホットリロードを追加するHotwire-SparkをRailsに導入して動きを見てみます
https://github.com/hotwired/spark

導入

導入としてはシンプルで、Gemfileに以下のように記述するだけです。

group :development do
  gem 'hotwire-spark'
end

あとは rails server にフックして起動するのでserverを起動した状態でViewファイル等を保存するとActionCableで接続されたWebSocket経由で最新のhtmlやjs、cssなどが配信されます。

25年1月14日現在ではrails serverを起動していないとenabledの条件を満たさないので起動出来ないですが将来的には単独で起動することができるようになるかもしれません
https://github.com/hotwired/spark/blob/3161548fbd1d1d06365f78ec89c25419c560e049/lib/hotwire-spark.rb#L25-L27

https://github.com/hotwired/spark/issues/57

また、例えばViewComponentなどを利用している場合は app/components を監視対象のディレクトリにいれると問題なく動作すると思います(未確認)

config/environments/development.rb
config.hotwire.spark.html_paths += %w[ app/components ]

その他のオプションに関しては以下があるので必要に応じて柔軟に対応出来そうです。
https://github.com/hotwired/spark/blob/3161548fbd1d1d06365f78ec89c25419c560e049/lib/hotwire/spark/default_options.rb#L13-L24

その他の気づき

内部的にファイル監視をどうやって行っているのだろうと思っていたのですがGuardのlisten gemを利用しているようでした。
https://github.com/guard/listen

フルスタックフレームワークとしてRailsが発展してきたからこそ、依存関係を増やしすぎず機能拡張できるのはさすがだなと思いました。

Discussion