Rails 8でPWAを作りたい
Rails 8がついにリリースされたようだ。
Railsというのは良くも悪くもメジャーバージョン、マイナーバージョンで大きく変わる。
今ではActionCableを好意的に受け止めることができているが、ActionTextやActiveStorageなどの新しいものが追加され、 ときにはCoffeeScript、UglifierやWebpackerなどは消えていった。
良くも悪くもRailsというもののサイクルに取り込まれているなかでそのバージョンに対する理解が深まったタイミング、いわゆる過不足なく作れるような自信を得た頃からおよそ新しいバージョンの告知が始まる。
そして私もRails 7でようやくこれから満足にやっていける自信がついたと思ったらまたRails 8がリリースされてしまった。 私などはまだよいほうで、仕事で扱うRailsはこの流れにすらついていけるプロジェクトはさらに少ない。
今回のRails 8: The Demoを見てこれまで感じたのは、それまでのRailsは初期のアプリケーションは極めてミニマルで、Scaffoldのコードは非常に洗練されたものに感じていた。
それがSimple.cssの登場であったり、dev
スクリプトの追加だったり、デフォルトの変更がずいぶん追加されることに違和感を覚えるようになっている。
とはいえこれらのコードはなんの制約もないのだがDockerfileひとつ取っても便利さよりは、これまで自分で追加してきたコードは間違いだったのかと言われている気がしないでもない。
好意的に捉える箇所があるとすればビルトインでauthenticate
がサポートされるようになったことだろうか。
長らくRailsの世界ではDeviseがデファクトだったが、趣味のアプリケーションで使うには機能も多すぎたしほとんど使っていなかった。 たまに自分で簡単な認証機能を作ることはあった。
そのように切り離されがちだった認証機能が今度はライブラリ側で担保しようというのだから、ずいぶんといい時代になったものだ。 いくらRailsのベストプラクティスを遵守したところでオレオレ認証は一定のリスクが伴いがち、というか避けるべきというブログの主張を長らく守っていたので公式というお墨付きが手に入るのは実に大きい。
別の動画ではあるが、Dev Containersは今後取り入れていきたい技術のひとつだ。
7.2から使えるようになったようだが、普段使うRailsのバージョンは7.1系なので私はまだ試せていない。 もともとVS Codeの技術だったが、得体のしれないものだったので使ったことはなかった。
こういった技術の調査に対する積極性もやや失われつつある自分が悲しい。
それで表題のPWAに戻るのだけども、さきほどのRails 8のビデオでようやく私はPWAに対する造詣を深めるきっかけを得た。
はっきりいうとPWAはCreate React Appの時代からずっと存在するものだから当然認知はしているのだが、ユースケースをまるで理解しきれていなかった。
Stradaがいつの間にかHotwire Nativeに変わってしまっているが、Apple App StoreやGoogle Play Storeで自前のアプリケーションを公開するハードルが下がることを期待するよりもPWAを作ったほうがずっと現実的である。
残念ながらどれだけアプリケーションを作ったとしても実用性が足りていない。
足りていないので簡単に放棄することができてしまう。
だからプライベートなアプリケーションですら本番運用することの経験もつめないループからbreak
できない。
今悩んでいるのはブラックフライデーのついでにメールサーバーを契約しようか悩んでいるが、これがもしプッシュ通知で代替できればそれに勝るものはない。
そもそも普段Firefoxを使っているのでPWAというものを認知できていなかった。 iOSにしてもAndroidにしてもPWAは当然オプトイン形式なので、そんな便利な機能があっても一生気づけない気すらしている。
本来であればこんな真夜中に投稿するのは控えようとは思っていたのだが、今私の中にある最もやってみたいことのひとつはPWA化である。 実際にPWAをインストールしてみてこれはイケるという実感を得たのが大きいかもしれない。
おそらく最初はもっと簡単なものから着手するつもりだが、Rails 8の登場よりもPWAを改めて知ったきっかけに大いに興奮している。
それからほどなく少し試してみて、PWA化そのものだけであればそこまでハードルは高くないということがわかった。
PWA単体ではブラウザのブックマークに毛が生えただけのレベルにすぎない。 ただこれだけでもモバイル端末の活用できそうな点では試してみる価値はありそうだ。
オフライン対応に関しては手動でファイルを管理するのは難しそうなので、これはrails側の対応に期待したい。
個人的にはPush通知と生体認証が手軽に使えるようになると理想かもしれない。
Push通知はService Workerを使う。 iOSの実装例では動作しないものもいくつかあったが、全く動作しないわけでもないようなので時間をかければできるようになるかもしれない。
Push通知に関して以前はFirebaseくらいしか選択肢がないのかと思ったが、以前もブログの話題に出したNtfyが使えそうだった。 ただしNtfyをサーバーとしてPWA化させたアプリケーションで通知を受け取るにはすぐにはわからなかった。 いずれ対応できるようにしたい。