Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Phoenix LiveViewをプロダクション利用してみた所感
Search
mokichi
May 18, 2022
Programming
3
960
Phoenix LiveViewをプロダクション利用してみた所感
mokichi
May 18, 2022
Tweet
Share
More Decks by mokichi
See All by mokichi
Elixir以外の言語もよく使うエンジニアが考える、Phoenix LiveViewの使いどころ
mokichi
1
400
Rubyistから見たElixir
mokichi
1
450
動的画像変換サービス「imagepix」のご紹介
mokichi
1
270
Phoenix1.6で標準搭載されたLiveViewに入門してみよう
mokichi
0
240
Ractorが出たからRubyの並列処理をおさらいする
mokichi
0
770
WebエンジニアのためのKubernetesサクッと入門
mokichi
1
160
未来予知できない凡人の生存戦略
mokichi
0
82
Other Decks in Programming
See All in Programming
Devvox Belgium - Agentic AI Patterns
kdubois
1
100
The Flutter Journey of Building a Live Streaming App — With a Side of Performance Tuning
u503
1
100
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
180
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
200
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.2k
Swift Concurrency - 状態監視の罠
objectiveaudio
2
490
CSC509 Lecture 06
javiergs
PRO
0
260
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
480
明日から始めるリファクタリング
ryounasso
0
130
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
170
CSC509 Lecture 04
javiergs
PRO
0
300
Devoxx BE - Local Development in the AI Era
kdubois
0
110
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Faster Mobile Websites
deanohume
310
31k
The Cost Of JavaScript in 2023
addyosmani
53
9k
Documentation Writing (for coders)
carmenintech
75
5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
RailsConf 2023
tenderlove
30
1.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
Transcript
Phoenix LiveViewを プロダクション利用してみた所感 2022/05/18 @ElixirImp#20 株式会社スマートアルゴリズム 齋藤 和也
自己紹介 名前:齋藤 和也 HN:mokichi 年齢:34歳 居住:東京都 出身:福岡県 🍜 Twitter:@mokichi_s12m 株式会社スマートアルゴリズム 代表取締役 複数社で技術顧問を務める
クラウドインフラを含むサーバサイド開発やDevOps が得意 Elixirを触り始めて4年ぐらい?
2022/02 WEB+DB PRESSデビューしました 🎉 WEB+DB PRESS Vol.127 特集2「作って学ぶPhoenix」 Elixirコミュニティのメンバーと共著 担当:第5章
LiveViewによるフロントエンドの開発
LiveViewの簡単な紹介
LiveViewとは • (ほぼ)JSを書かずにElixirだけでSPAを開発できる • 宣言的な記述ができたり、機能やUIをコンポーネントに分割できたりと、 現在主流になっているSPA開発の開発体験とかなり近い • 加えて、データの更新を各クライアントにリアルタイムに反映するといった、一般的 に面倒なことがとても簡単にできる •
「Twitterクローンを15分で作る」という動画が話題に https://www.youtube.com/watch?v=MZvmYaFkNJI (Phoenixの公式サイトに載ってます)
現在主流になっているSPA開発の問題点 • フロントエンドとバックエンドの両方を高いクオリティで対応できるエンジニアは稀 で、分業化が進みがち • ある機能を実装する際に、バックエンド側を対応しないとフロントエンド側が進めら れず、ボトルネックが発生する(逆のパターンもあり) 教えてくれ、PM。俺たちはあと何本APIを作ればいい? • OGPの設定が必要な場合のSSRや、JSのバンドルサイズが大きくなることによる
Core Web Vitalsの各指標の悪化に頭を悩ませがち
LiveViewの特徴 • (ほぼ)JSを書かずにElixirだけでSPAを開発できる ◦ フロントエンドとバックエンドがデータをやりとりするための APIを何本も作らなくていい (つまりAPIドキュメントも作らなくていい) • すべてのクライアントとWebSocketでつながっている ◦
状態をサーバに保持し、状態の更新をクライアントに反映させている ◦ ブラウザのCookieやLocalStorageのことを気にしなくていい ◦ サーバの負荷は当然増えるが、昨今はリソース調達が容易なためさほど大きな問題ではない
正式なお仕事として使ってみた所感 といってもレビューがメインでした...
どんなシステムを開発したのか • 企業の人がとある業務で使うためのSaaS(BtoB) • ユーザ向け画面と管理画面がある • 基本的なCRUDの画面がほとんど • 一部複雑なUIの画面がある
LiveViewの良かったところ • JSをほとんど書かず、ElixirだけでSPAを開発 ◦ APIを大量に作る必要がなかった ◦ フロントエンド/バックエンドを分業していなかったが、 LiveViewだけ触ればいいため コンテキストスイッチは少なかった(ように思う) ◦
業務で利用するサービスで、 JSゴリゴリみたいな要件がなかったというのもある • ReactやVue.jsといった人気ライブラリと似た開発体験 ◦ 宣言的な記述、コンポーネント分割 ◦ CSSに関する仕組みはないが、 Tailwind CSSを導入することでスタイリングの収拾が つかなくなるようなことはなかった ◦ CSSフレームワークを使わないのであれば、ほぼ Tailwind CSS一択な予感
LiveViewのハマりどころ • JSのライブラリと違ってサーバサイドで状態を持つため、ステートフルなシ ステムになって扱いが難しくなる ◦ データを更新しようとしたらすでに DBから削除されていた、みたいなことが起こる ◦ LiveViewが保持しているデータをそのままビジネスロジックに渡すのではなく、 APIを叩くときのよ
うにDBから再取得するようにしたほうが安心できる • ファイルアップロード周りのエコシステムが充実しておらず、自前実装が多 くなる(LiveViewだけの問題ではない) ◦ バリデーションやDB・外部ストレージとの連携など、他言語だと当たり前にライブラリがあるような ものの開発があまり盛り上がっていない ◦ 自前で実装すると、どうしてもバグや考慮漏れが発生しやすくなる
どんなときにLiveViewを選ぶのが良いか • 地図やグラフ、3DCGといった、JSのライブラリを使わないと実現が難しい ような機能が少ない場合 ◦ Hooksという機能を使えばJSとLiveViewを連携できるようになるが、そればかりになるなら JSで SPA作ったほうがいい(APIやWebSocketサーバはPhoenixで作れるよ!) ◦ ツール系のサービスや管理画面の開発とかだとすごく向いてそう
• Webアプリのみ提供する場合 ◦ スマホアプリを提供するなら APIを作って共通利用したほうがいい • 利用者の通信環境がそこそこ良いことが保証される場合 ◦ WebSocketでつなぎっぱなしになるため、通信環境が貧弱だとまともに利用できなくなる
LiveViewがこの先生きのこるには
適材適所とエコシステムの充実 • 何にでも言えるが、LiveViewにも向き不向きがあるため、 技術やチーム、サービスの特性を考慮して技術選定しよう ◦ 当然ながら銀の弾丸ではないが、使える範囲は思っている以上に広いと思う ◦ 採用実績を地道に作っていけば、次第に使われるようになっていくはず ... •
QiitaやZenn等への投稿やライブラリの開発でエコシステムを充実 させ、Elixir界隈を盛り上げよう ◦ 特に、ファイルアップロード系のライブラリは個人的に作ってみたい • そもそもLiveViewはまだバージョン1にも達していない(伸びしろ!)
もっとElixirでお仕事したいよぉ〜〜