【フェニックス】

Phoenix とは?

💡 不死鳥のように落ちない!数百万接続をさばくWebフレームワーク
📌 このページのポイント
Phoenix LiveView リアルタイム通信フロー ブラウザ LiveView JS(軽量) 差分HTMLを自動適用 JSほぼ書かなくてOK WebSocket 常時接続・双方向 HTML差分のみ送信 イベント 差分HTML Phoenix サーバー LiveView プロセス 状態管理 + HTML生成 差分を自動計算 Erlang VM(BEAM) プロセス1 ユーザーA プロセス2 ユーザーB プロセス3 ユーザーC 数百万 同時接続
Phoenix LiveView のリアルタイム通信フロー
ひよこ ひよこ

PhoenixってRuby on Railsみたいなもの?

ペンギン先生 ペンギン先生

構造は似てるけど、中身は全然違うよ。PhoenixはElixirという言語で書かれていて、Erlang VMの上で動く。最大の強みは「同時にたくさんの接続をさばける」ことなんだ

ひよこ ひよこ

同時接続が得意って、具体的にどのくらい?

ペンギン先生 ペンギン先生

有名な事例だと、1台のサーバーで200万のWebSocket接続を同時に維持できたという記録があるよ。普通のフレームワークだと数万で限界がくるから桁違いだね

ひよこ ひよこ

えっ、そんなに!?どうしてそんなに多く処理できるの?

ペンギン先生 ペンギン先生

Erlang VMが超軽量プロセスを使っていて、1接続あたりのメモリ消費がとても小さいんだ。しかもプロセス同士が独立してるから、1つがクラッシュしても他に影響しないんだよ

ひよこ ひよこ

LiveViewって何?JavaScriptなしでリアルタイム更新って本当?

ペンギン先生 ペンギン先生

本当だよ!LiveViewはサーバー側でHTMLの差分を計算して、WebSocketで送信するんだ。クライアントは小さなJSライブラリが差分を適用するだけ。SPAのような体験がサーバーサイドのコードだけで作れるんだよ

ひよこ ひよこ

htmxとも考え方が似てる?

ペンギン先生 ペンギン先生

いい着眼点だね!両方とも「サーバーHTMLを返す」思想だけど、LiveViewはWebSocketで常時接続してリアルタイム双方向通信ができる点が違う。チャットや株価ボードみたいな用途にはLiveViewの方が向いてるんだよ

ひよこ ひよこ

使い分けが大事なんだね

ペンギン先生 ペンギン先生

そうだね。Phoenixは特にリアルタイム性と耐障害性が求められるシステムで真価を発揮する。WhatsAppのバックエンドErlang VMで動いていて、その系譜にあるフレームワークなんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Phoenix」って出てきたら「リアルタイム通信が得意な高並行Webフレームワーク」と思えればだいたいOK!
📖 おまけ:英語の意味
「Phoenix」 = 不死鳥
💬 ギリシャ神話の不死鳥フェニックスが由来。障害があっても復活する堅牢性をイメージしているよ
← 用語集にもどる