Elixir えりくさー
簡単に言うとこんな感じ!
Elixirは「めちゃくちゃ大勢の人が同時にアクセスしてきても落ちないシステムを作るのが得意」なプログラミング言語だよ!電話網を動かすために生まれた超堅牢な仕組みの上で動くから、チャットや通知システムみたいなリアルタイムなサービスを作るのにピッタリなんだ!
Elixirとは
Elixirは、2012年にJosé Valim(ジョゼ・ヴァリム)によって開発されたプログラミング言語です。Erlang VM(BEAM) という、もともと電話交換機の制御システムのために作られた実行基盤の上で動作します。この「電話網品質」の実行環境により、数百万の同時接続を処理しながらも高い可用性(システムが止まらない性質) を実現できます。
Elixirの特徴は大きく2つあります。1つ目は関数型プログラミングのスタイルを採用していること。データは「変更しない(イミュータブル)」が原則で、バグが混入しにくい設計になっています。2つ目は並行処理の得意さです。Elixirは「プロセス」と呼ばれる超軽量な実行単位を大量に起動でき、1台のサーバーで数十万〜数百万のプロセスを同時に動かすことができます。
ビジネス的な観点では「チャット機能」「リアルタイム通知」「IoTデバイス管理」など、大量の接続を同時に捌きながら止まらないことが求められるシステムに向いています。逆に、単純な業務処理や科学計算には他の言語の方が向いていることもあります。
Elixirの主な特徴・構造
| 特徴 | 内容 | 実務での意味 |
|---|---|---|
| BEAM(Erlang VM)上で動作 | 30年以上実績のある実行環境を利用 | 「99.9999999%稼働率」の実績を持つ基盤 |
| 関数型パラダイム | データを変更せず、関数で変換を繰り返す | バグが混入しにくく、テストがしやすい |
| 軽量プロセス | OS のスレッドより遥かに軽い並行実行単位 | 1台で数百万同時接続も可能 |
| パターンマッチング | 値の形に応じて処理を分岐する記法 | コードがシンプルで読みやすくなる |
| 耐障害性(Let it crash) | プロセスが落ちても自動で再起動する仕組み | システム全体が落ちにくい |
| マクロ(メタプログラミング) | 言語自体を拡張できる機能 | DSL(専用小言語)を作れる柔軟性 |
覚え方:「エリクサー=不老不死の霊薬」
Elixir(エリクサー)は「不老不死の霊薬」という意味を持つ英単語です。その名のとおり、プロセスが死んでも蘇り(自動再起動)、止まらない(高可用) システムを作れる言語、と覚えると特徴がスッと入ってきますよ!
Elixirコードの雰囲気
# パイプ演算子(|>)で処理をつなぐのがElixirらしい書き方
"hello world"
|> String.upcase() # "HELLO WORLD"
|> String.split(" ") # ["HELLO", "WORLD"]
|> Enum.join("-") # "HELLO-WORLD"
# パターンマッチング
case HTTPClient.get(url) do
{:ok, response} -> process(response)
{:error, reason} -> Logger.error(reason)
end
パイプ演算子(|>)で処理を「流れるように」つなぐのがElixirの書き方の特徴で、読みやすいコードが書けます。
歴史と背景
- 1986年 — Ericsson社がErlang言語を開発。電話交換機制御という「止まったら人命に関わる」用途向けに、高可用性・並行処理を最優先設計
- 1998年 — ErlangがオープンソースとしてEricsson社から公開される
- 2010年 — José ValimがRuby on Railsのコアメンバーとして活躍しながら、Erlangの堅牢性とRubyの書きやすさを組み合わせた言語の開発を開始
- 2012年 — Elixir v0.1をリリース。Erlang VMの上でRubyライクな構文を実現
- 2014年 — Webフレームワーク Phoenix がリリース。高速なリアルタイムWeb開発を可能にする
- 2016〜 — Discord(ゲーマー向けチャット)、WhatsApp競合、PagerDutyなど大規模サービスでの採用が相次ぐ
- 2020年代 — LiveView(ブラウザをリアルタイムで更新する仕組み)の普及により、フルスタック開発でも注目度が急上昇
ElixirとほかのWebシステム向け言語の比較
Elixirのエコシステム:主要ライブラリ・ツール
| 名称 | 役割 |
|---|---|
| Phoenix | Elixir製Webフレームワーク。リアルタイム通信(LiveView)も標準装備 |
| Ecto | データベース操作ライブラリ(RailsのActive Recordに相当) |
| Mix | プロジェクト管理・ビルドツール |
| Hex | ElixirのパッケージリポジトリサービスNodenpmに相当) |
| OTP(Open Telecom Platform) | Erlang由来の並行・分散処理の基盤ライブラリ群 |
| Nerves | IoTデバイス向けにElixirを組み込む仕組み |
関連する規格・RFC
※ Elixir自体に対応するIETF RFCやISO規格は存在しませんが、基盤となるErlang VMや関連プロトコルには以下の規格が関連します。
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 6455 | WebSocket プロトコル。PhoenixのLiveView・Channelが利用 |
| RFC 7540 | HTTP/2。Phoenixが対応するHTTPプロトコル |
関連用語
- 関数型プログラミング — データを「変換」する考え方でプログラムを書くパラダイム
- Erlang — Elixirが動作するBEAM VMを生んだ電話通信向け言語
- 並行処理 — 複数の処理を同時に進める仕組み。Elixirが最も得意とする領域
- Phoenix Framework — ElixirのWebフレームワーク。リアルタイム通信に強い
- マイクロサービス — システムを小さなサービスに分割するアーキテクチャ。Elixirと相性が良い
- WebSocket — ブラウザとサーバーが双方向通信するプロトコル。Phoenixが標準対応
- IoT — モノのインターネット。ElixirのNervesプロジェクトで組み込み開発も可能
- Ruby on Rails — Elixir作者が元コアメンバーだったWebフレームワーク。設計思想に影響を与えた