今夜がλ

夜だけプログラマー

「Phoenix LiveView 勉強会: SPA 開発の新潮流」に参加してきた

Phoenix LiveViewの勉強会に参加してきました。

daimon-ex.connpass.com

Phoenix LiveViewはElixirConf2018で発表され、2019年3月にリリースされたPhoenixフレームワークのライブラリです。リアルタイムなSSR(Server Side Rendering)を行うための機能を持っており、一般的にReactやVue.jsなどのJSフレームワークで取り扱っていた仮装DOMに関する差分再構築の処理をElixirで行うことができます。 技術的にはWebSocketを利用しており、RubyのAction Cableのような形で処理を行っているものと見て取れます。

github.com

qiita.com

ここで重要なのは、差分再構築をサーバーサイドで行っているということです。通常、JSフレームワークではイベントごとに仮装DOMの差分を計算し、必要な箇所だけ再構築する処理をクライアント側で行いますが、LiveViewではサーバーサイドで行うため、セキュリティ的な意味でデータ管理がしやすいというメリットがある一方で、ネットワークに常時接続する必要がある・サーバーに負荷がかかるというデメリットもあります。デメリットについては、「一般的にクライアント側で処理するのが厳しいような激しいレンダリング処理」が生じるシーンではメリットになりそうだな、という印象です(処理の遅さをサーバーのスケールアップで解決できる)。また、予め頻繁に発生する再構築処理をキャッシュするような多少複雑な処理も実装しやすくなるのではないかと感じています。

勉強会では、複雑な仕様を持つSPAをLiveViewで開発する実例として、株式会社コアジェニック(旧商号:株式会社オイアクス)の黒田さんが開発されているWebサービス「Teamgenik(チームジェニック)」をデモアプリとして見せていただきました。

Rails + Vue.jsPhoenix + LiveViewの違いを図で示されており、普段実務でSPAを構築したことのない私でも容易に理解できました。

SPAの場合、サーバーサイドをBFF(Backend for Frontend)としてクライアントと分ける形が主流となっていますが、Phoenix LiveViewを利用することで、モノリシックなSPAを構築することが可能となります。

黒田さんのお話によると、現在はバージョン1系ということでところどころバグがあり、一部イベント(マウスオーバーやドラッグアンドドロップなど)を検知できない(JSで別途記述する必要がある)ため、プロダクションとして利用するには多少のリスクがあるようです。しかし、基本的にElixirで一貫してSPAを作り上げることができるため、開発速度の向上やサーバーサイドエンジニアとフロントエンドエンジニアのコミュニケーションコストを下げることができるのは非常に魅力的だと思います。

今までのSPAはサーバーサイドとクライアントサイドを分けたSPAJavaScriptでのモノリシックなSPAという選択肢が主流でしたが、WebSocketを利用したモノリシックなSPAという新たな選択肢に期待が膨らむ勉強会となりました。
ありがとうございました。