採用に向く条件
選ぶ理由
- 軽量プロセスで桁違いの並行性
- 耐障害性(監視ツリー)
- Phoenix でリアルタイム Web が得意
プログラミング言語
José Valim / 2011年登場
Erlang VM(BEAM)上で動く関数型言語。軽量プロセスによる大量の並行処理と耐障害性が強みで、リアルタイム Web(Phoenix)やチャット基盤に向く。
基本情報
選定ガイド
採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。
採用に向く条件
事前に確認する条件
向いている用途
詳しい解説
Elixir は José Valim が 2011 年に作った関数型言語で、Erlang VM(BEAM)の上で動きます。Ruby に似た親しみやすい文法をまといながら、Erlang が長年培ってきた並行性と耐障害性の基盤をそのまま受け継いでいる点が特徴です。
BEAM 上では、OS スレッドとは別の極めて軽量なプロセスを大量(数十万〜)に立ち上げられます。各プロセスはメモリを共有せず、メッセージのやり取りだけで協調します(アクターモデル)。
横にスクロール
pid = spawn(fn -> receive do
msg -> IO.puts("受信: #{msg}")
end end)
send(pid, "hello") # プロセスへ送信
| 観点 | Elixir/BEAM | Go | スレッド型 |
|---|---|---|---|
| 並行単位 | 軽量プロセス(分離) | goroutine | OS スレッド |
| メモリ | 共有しない・メッセージ | 共有+channel | 共有(ロック要) |
| 耐障害 | 監視ツリーで自動復旧 | 自前で設計 | 自前 |
| 得意 | 高可用・大量接続 | 汎用サーバー・CLI | 汎用 |
データを書き換えられない(イミュータブル)前提や、プロセス間でメッセージをやり取りする並行モデルは、命令型に慣れた人ほど発想の転換が要ります。まず OTP の GenServer/Supervisor という定石に沿うと、耐障害な設計を素直に書けます。
総じて Elixir は、BEAM の軽量プロセスと監視ツリーによる耐障害性を、親しみやすい文法で扱える、高可用・リアルタイム分野に強い関数型言語です。
言語選定
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
リアルタイム Web(Phoenix / LiveView)
型付け: 動的・強い型付け / 実行方式: BEAM(Erlang VM) / パラダイム: 関数型(並行・耐障害)
耐障害性(監視ツリー)
CPU バウンドな数値計算は不得手
最初の一歩
IO.puts("Hello, World!")公式ドキュメント