2021/1/9 HotwireのRails版デモアプリをPhoenixに移植してみた
Hotwireはバックエンドは何でもよく、Phoenixで使うこともできる。
hotwired/turbo-railsを読みつつ、Rails用のデモアプリケーションであるhotwired/hotwire-rails-demo-chatのPhoenix版を書いてみた。
成果物
en30/hotwire-phoenix-demo-chat
感想
結構ありなんじゃないかなと思う。モデルとしてはPhoenix LiveViewの方がシンプルで理解し易いし、複雑な状態を持つものならPhoenix LiveViewを使うほうが良さそう。ただ別に排他的なわけではないので、どちらも組み合わせて使うのがいいような気がする。
Hotwireの根本はユーザにとっても開発にしてもProgressive Enhancement。
プロトタイプ、MVPはmix phx.gen.htmlとTurbo Driveでさっさと作ってしまう
重要な部分をTurbo Framesで改善する。ちょっとしたJSはStimulusで書く。
重要な部分をTurbo Streamsか、Phoenix LiveView、Phoenix LiveComponentでさらに改善する
本当にJSが必要な重要なところをJSでバリバリ書く
と進めていける。
Turbo Nativeと(恐らくそのうち出るStrada)で、ネイティブアプリの最低ラインまですぐに手を伸ばせるのもよい。そしてこちらもまた、重要な部分のみをSwiftやKotlinに書き換えていけばいい。
Turbo Streamsをサーバからのプッシュで使うラインあたりからはPhoenix LiveViewを使う方がシンプルになりそうな気がする。これはブラウザ側が状態を持ち始めて、それがサーバ側での結果とズレ始めるときといえるかも。
なのでthechangelog/changelog.comが採用していたTurbolinks + Phoenix LiveViewの構成に、Turbo Framesを使う選択肢も追加されたという感じで使っていくのがよさそう。
脳死でRESTfulなルートを作るのでいいところでも、Phoenix LiveViewだとまだパターンが定まりきっていないところがある。mix phx.gen.liveで生成されるものもどうもしっくりこない。こういう部分はTurbo Driveと普通のコントローラで進めることでサクサク進めると思う。またTurbo FramesはHTTPでのキャッシュとの相性もいいので、活きるところがあると思う。