Why It Fits
選ぶ理由
- 軽量プロセスで桁違いの並行性
- 耐障害性(監視ツリー)
- Phoenix でリアルタイム Web が得意
Language Profile
José Valim / 2011年登場
Erlang VM(BEAM)上で動く関数型言語。軽量プロセスによる大量の並行処理と耐障害性が強みで、リアルタイム Web(Phoenix)やチャット基盤に向く。
Specifications
Introducing
Decision Guide
採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。
Why It Fits
Trade-offs
Best Fit
Deep Dive
Elixir は José Valim が 2011 年に作った関数型言語で、Erlang VM(BEAM)の上で動きます。Ruby に似た親しみやすい文法をまといながら、Erlang が長年培ってきた並行性と耐障害性の基盤をそのまま受け継いでいる点が特徴です。
BEAM 上では、OS スレッドとは別の極めて軽量なプロセスを大量に立ち上げられます。これにより、桁違いの数の同時接続を捌けます。プロセスは互いに独立しているため、1 つが落ちても全体は止まらず、監視ツリーが自動で再起動します。異常時に握りつぶさず「let it crash」して任せる設計思想です。
# 別プロセスを起動して非同期にメッセージを送る
pid = spawn(fn -> receive do
msg -> IO.puts("受信: #{msg}")
end end)
send(pid, "hello") # プロセスへ送信
データを書き換えられない(イミュータブル)前提や、プロセス間でメッセージをやり取りする並行モデルは、命令型に慣れた人ほど発想の転換が要ります。
リアルタイム性と高可用性が要のサービス、たとえばメッセージング基盤や通知配信、IoT のバックエンドで力を発揮します。
Language Decision
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
リアルタイム Web(Phoenix / LiveView)
型付け: 動的・強い型付け / 実行方式: BEAM(Erlang VM) / パラダイム: 関数型(並行・耐障害)
耐障害性(監視ツリー)
CPU バウンドな数値計算は不得手
First Step
IO.puts("Hello, World!")公式ドキュメント