Erlangとは|並行処理と耐障害性・Elixirとの関係・案件動向を解説
最終更新日:2026/07/03
Erlangとは、スウェーデンのEricsson社が電気通信システム向けに開発した、並行処理と耐障害性を強みとする関数型プログラミング言語です。「Elixirとの違いがわからない」「今から学ぶ価値はあるのか」といった疑問を持つフリーランスエンジニアに向けて、言語の特徴、Elixirとの関係、案件動向、学習の入口までを整理します。
先に結論
ErlangはEricssonが交換機ソフト向けに開発した関数型言語で、BEAMという仮想マシン上で動作します
強みは軽量プロセスによる大量並行処理と、プロセス監視ツリー(OTP)による耐障害性です
Elixirは同じBEAM上で動くモダンな兄弟言語で、文法・エコシステムは別物です。Erlangの資産はそのまま使えます
日本のフリーランス市場でErlang単独の公開案件は多くありません。Elixir/Phoenix系のバックエンド案件の中でErlang知識が加点される構図です
Web開発者が「関数型と並行処理の設計思想」を学ぶ言語として価値があり、通信・メッセージング・分散システムに関わるなら実務価値も高い部類です
この記事でわかること
Erlangの成り立ちと、BEAM/OTPという用語が指すもの
Elixirとの関係と、どちらを使うべきかの判断軸
Go・Rust・Scala・Clojure・Haskellと比較したときのErlangの立ち位置
フリーランス案件で求められるスキルと、報酬レンジの目安(観測ベース)
学習ロードマップと、途中で詰まりやすいポイント
目次
Erlangとは何か
Erlangの主な特徴
ElixirとErlangの関係と違い
他の並行処理向け言語との比較
Erlangが使われている領域とプロダクト事例
フリーランスエンジニア視点:Erlangの案件動向と報酬
Erlangの学習ロードマップ
よくある失敗と対策
Erlangを触るべきエンジニア・見送るべきエンジニア
まとめ
よくある質問
Erlangとは何か
Erlangとは、BEAM仮想マシン上で動作し、大量並行処理と耐障害性に強みを持つ関数型プログラミング言語です。1986年にEricsson社の社内プロジェクトとして誕生し、1998年にオープンソース化されました。同社の電話交換機ソフトウェアの実装言語として実戦投入され、非常に高い可用性が要求される通信領域で使われてきました。
誕生の背景と設計思想
電話交換機は「落ちない」ことが最優先です。数百万の通話を並行に処理し、一部の障害でシステム全体が止まらないよう、Erlangは次の設計思想を初期から組み込みました。
軽量なプロセスを大量に立ち上げ、状態は各プロセス内に閉じる
プロセス間はメッセージパッシングだけで通信し、共有メモリは持たない
障害はプロセス単位で発生させ、監視プロセスが検知して再起動する(「Let It Crash」)
稼働中のシステムを止めずにコードを差し替える(ホットコードリロード)
これらの設計思想は、後年のActorモデルやBEAM系言語(Elixir)、並行処理設計の議論でもしばしば参照されます。
BEAM VMとErlang/OTP
Erlangを語るとき避けて通れないのが BEAM と OTP の2語です。
BEAM: Erlangコードを実行する仮想マシン。JVMやCLRに近い立ち位置で、軽量プロセスのスケジューリングやガベージコレクションを担います
OTP(Open Telecom Platform): Erlangに同梱される標準ライブラリ・フレームワーク群。プロセス監視、状態管理、分散ノード管理などを担う「設計パターン集+実装」です
現場では「ErlangはBEAM上のOTPを使う言語」と表現するほどOTPが中核です。OTPの理解を飛ばして「Erlangの文法だけ学ぶ」と実務では通用しにくくなります。
Erlangの主な特徴
Erlangの特徴は、他言語では別物のライブラリで解決する要件を言語・ランタイムレベルで解決している点にあります。
軽量プロセスと大量並行処理
BEAMのプロセスはOSプロセスやOSスレッドとは別物です。1プロセスあたりの初期メモリが小さく、ワークロード次第では1つのBEAMインスタンス上で数十万規模のプロセスを扱える設計になっています。
Go言語のgoroutineに近いモデルですが、Goが共有メモリとchannelの両方を使えるのに対し、BEAMプロセスは原則としてメモリを共有せずメッセージパッシングで通信します。競合状態の発生源が構造的に減るため、並行処理のデバッグ負担が軽くなる傾向があります。Goとの並行モデルの違いはGo言語(Golang)とは? 特徴・用途から年収・将来性まで解説と併読すると理解しやすいはずです。
耐障害性と「Let It Crash」哲学
一般的な言語では例外を握りつぶし、想定外の状態でも動き続けるコードを書きがちです。Erlangは逆方向のアプローチを取ります。
想定外の入力が来たらプロセスを落とす
監視ツリーの上位(Supervisor)が落ちたプロセスを検知して再起動する
再起動時にプロセスの状態は初期化されるため、壊れた状態を引きずらない
これは「例外処理を書かなくてよい」という意味ではありません。責務を分割し、失敗を局所化する設計を強制する哲学として理解するのが実態に近い書き方です。
ホットコードリロード
BEAMは、稼働中のシステムを止めずにモジュールを差し替える機能を持ちます。24時間365日稼働が要求される通信基盤で、パッチ適用のたびに切断できない事情から発展した機能です。
現代のクラウドではブルーグリーンデプロイやローリングアップデートで代替するプロジェクトも多く、ホットコードリロードを使うかは設計判断になります。「機能として使える」と「毎回それで運用する」は別なので、実案件では運用方針を確認してください。
関数型・不変データ・パターンマッチ
Erlangは純粋関数型ではありませんが、変数は原則として再代入不可でリスト・タプル・マップは不変です。パターンマッチによる制御構造が中心で、命令型言語からの移行では文体そのものを書き直す必要があります。
純粋関数型と比較したい場合はHaskellとは|純粋関数型言語の特徴・年収・案件・将来性を解説、Lisp系の関数型と比べたい場合はClojureとは|関数型Lisp系言語の特徴・年収・将来性を解説を参照すると、Erlangの位置づけが立体的に見えます。
ElixirとErlangの関係と違い
Erlangを検索する人が最も混乱するのがElixirとの関係です。ここは分けて整理します。
ElixirはBEAM上で動くモダンな別言語
同じ: 実行環境(BEAM)、並行モデル(軽量プロセス+メッセージパッシング)、標準フレームワーク(OTP)、コンパイル済みのライブラリ資産
異なる: 文法(ElixirはRubyに影響を受けた見た目)、マクロ機能、Webフレームワーク(Elixir側にPhoenix)、コミュニティの盛り上がり
Elixirは2011年にJosé Valim氏が開発したBEAM上の新言語で、Erlangの資産を全部使えるがモダンな書き心地を目指した設計です。Elixirから既存のErlangライブラリを呼ぶことも、その逆も可能です。
どちらを使うべきかの判断軸
少なくともWeb開発寄りの新規案件では、Elixirを第一候補にするチームが比較的多く見られます(Phoenixの成熟、日本語情報の相対的な充実、Rubyistの流入などが背景)。ただし次のケースではErlangを直接使う選択も残ります。
状況 | Erlang | Elixir |
|---|---|---|
電気通信・大規模メッセージング基盤の保守 | 既存資産がErlangで書かれているならそのまま | 新規モジュールをElixirで足す構成もあり |
Webアプリケーション新規開発 | Cowboy等で書けるが選択理由が要る | Phoenixが定番。生産性で優位 |
学習目的(並行モデルを理解したい) | 純度が高く教材が古典 | 現代的な書き心地で入りやすい |
RabbitMQ・CouchDB等のErlang製OSSの改造 | 本体はErlang。読み書き可能に | 拡張プラグインでの併用は可能 |
「Elixirを学べばErlangは要らないか」という質問はよく聞かれます。実務ではElixirを主に書きつつ、依存OSSがErlangで書かれている部分を読める程度のErlang力があると詰まりにくくなります。
他の並行処理向け言語との比較
Erlangを検討する人が並行して比較するのが、Go・Rust・Scala/Akka・Clojureです。結論から言うと、Erlangの差別化ポイントは「共有メモリを避けた並行モデル」と「OTPによる障害回復パターンの標準化」の2点です。並行モデルと得意領域で整理します。
言語 | 並行モデル | 得意領域 | 学習難度 |
|---|---|---|---|
Erlang | 軽量プロセス+メッセージ(メモリ分離) | 通信・分散・耐障害性 | 中〜高(OTPが山場) |
Go | goroutine+channel(メモリ共有可) | ネットワークサービス全般 | 低〜中 |
Rust | async/await+所有権 | 高性能・低レイヤ・安全性 | 高 |
Scala/Akka | Actorモデル(Erlang影響) | JVMエコシステム統合 | 高 |
Clojure | STM+core.async | JVM上の関数型・データ処理 | 中 |
Erlangを選ぶ動機が「並行処理と耐障害性」なら、Scalaとは?Javaとの違いや特徴・年収・将来性について解説で扱うAkkaと直接的な代替関係になります。「並行処理と高性能」ならRustとは? 特徴・用途から年収・将来性まで解説やGo言語(Golang)とは?が候補になります。
Erlangが使われている領域とプロダクト事例
Erlangは「表舞台の言語」ではありませんが、インフラの中で静かに動いているタイプの言語です。代表的な採用領域と事例を挙げます。
メッセージング: WhatsAppの初期システムはErlangを大量採用したことで有名で、少人数チームで大量接続をさばいた事例としてしばしば引用されます
メッセージブローカー: RabbitMQはErlang製。多くのシステムの裏側で動いています
分散データベース: CouchDB、Riak(開発終了)などがErlang製
XMPPサーバ: ejabberd(Erlang製)は現在も企業内メッセージング基盤で使われています
金融・トレーディング: 一部のマッチングエンジンや決済系で採用例あり
ゲームサーバのバックエンド: 大量接続・低レイテンシが要求される領域
これらは「一般ユーザーが触れるアプリのUI言語」ではなく、大量接続・高可用性が要求される裏方での採用です。フリーランスとして関わるなら、業界としては通信・メッセージング・金融基盤・大規模SaaSのバックエンドあたりが接点になります。
フリーランスエンジニア視点:Erlangの案件動向と報酬
ここは読者が最も気になる部分ですが、観測できる母集団が小さいため断定はしません。フリコン内部の傾向と、公開情報から見える範囲で書きます。
日本のフリーランス市場でのErlang案件
2026年時点で主要フリーランスエージェント数社の公開案件検索を確認した範囲では、Erlang単独の募集は一桁〜十数件程度にとどまります(時期・エージェントにより変動)
同条件で見るとElixir案件のほうが相対的に見つけやすい傾向があり、Erlangは「Elixirプロジェクト内でErlang資産の保守もできる人」を求める文脈で出るケースが目立ちます
業種は通信、メッセージング、決済、SaaSバックエンドが中心です
数を確認したい場合は各エージェントの検索窓で「Erlang」「Elixir」を検索比較すると母集団が体感できます。この記事の数字も時点情報であり、キャリア判断は最新の公開案件で必ず再確認してください。
報酬レンジの目安
2026年時点で公開されている週5・業務委託の案件を見る限り、Elixir/Erlang系バックエンド案件では月額70万〜100万円台の募集が見られます(首都圏中心・フルタイム想定・実務経験を要件とするもの)
月額100万円台の上位レンジで募集されるのは、BEAM系の実務経験3年以上、OTP設計・分散ノード運用の実績、テックリード相当の裁量を求めるものが中心です
Erlang単独では公開案件の母集団が小さく、単価は「Elixir案件+Erlang読める加点」で成立する構図が現実的です
高単価帯の条件は誰でも満たせるわけではありません。Elixir/Erlangでのプロダクション運用経験、OTPの設計を自分で切れること、分散環境の障害対応経験あたりが揃って初めて狙える帯域と考えたほうが実態に近くなります。
案件で求められる典型スキル
Elixir/Erlangでのプロダクションレベルの実装経験
OTPを使ったプロセスツリーの設計、GenServer・Supervisorの実装
BEAM上での性能計測・チューニング(observer、recon等)
分散環境の障害切り分けとログ設計
PostgreSQL等のRDBとの接続、テスト設計、CI/CD
Webエンジニアの標準スキル(Node.jsとは?やDjangoとは?を書けるレベル)に、BEAM固有の設計力が乗る構図です。フリーランスバックエンドの全体感はバックエンドエンジニアとは?も参照してください。
Erlangの学習ロードマップ
Erlangは、バックエンドの実務経験者であれば文法理解は数日〜数週間で進みますが、OTPを含めて実務で使えるまでは3〜6か月を見ておくと現実的です。
ステップ1: 文法と基本データ構造(1〜2週間)
変数・パターンマッチ・リスト・タプル・マップ
再帰と末尾呼び出し最適化
レコード・バイナリ・ビット構文
命令型言語だけを書いてきたエンジニアは、「変数に再代入できない」ことに慣れるのがいちばんの山です。ここはHaskellやClojureの学習経験があると入りやすくなります。
ステップ2: プロセスとメッセージパッシング(2〜3週間)
spawn、send(!)、receive
モニタとリンク
単純なワーカープロセスの実装
ここで並行処理の書き方が体に入ってくると、Erlangを学ぶ意義を実感できます。
ステップ3: OTPの中核(1〜2か月)
gen_server、gen_statem、supervisorのビヘイビア
アプリケーション設計と監視ツリー
分散ノード(epmd、Node間通信)
OTPを飛ばすとErlangを学んだ意味の半分以上を失います。文法学習で満足せず、必ずこの層まで手を動かしてください。
ステップ4: 実務投入と周辺ツール(継続)
Rebar3(ビルドツール)、Hex(パッケージ管理・Elixirと共用)
observer・reconによる稼働中プロセスの観察
テスト(EUnit、Common Test)
Elixirとの併用(新規部分はElixirで書く選択も含めて)
日本語書籍は限られるため、公式のLearn You Some Erlang for Great Good!やErlang公式ドキュメントを読みながら進めるのが標準ルートです。有償ではPragmatic Programmersの「Programming Erlang」(Joe Armstrong著)が定番教材として挙がります。
よくある失敗と対策
Erlang学習・案件参画で詰まりやすい典型パターンを挙げます。
命令型のクセを引きずったコードを書く
for文で回し、変数を書き換え、状態をグローバルに持ちたくなります。Erlangでは同じ結果を再帰とプロセス状態で書き直す必要があり、この書き換えを飛ばすと読みにくいコードになります。パターンマッチと再帰で書き直す訓練を意識的に入れてください。
プロセス設計をせずに書き始める
「とりあえずgen_server立ててみる」で書き始めると、Supervisor構造がぐちゃぐちゃになりがちです。どのプロセスが状態を持ち、どのプロセスが監視するかを先に紙に書いてから実装に入るほうが結果的に速くなります。
OTPを軽視する
「文法は分かった、次は業務ロジック」でOTPを飛ばすと、単一プロセスのアプリしか書けなくなります。Erlangの価値の大半はOTP側にあるため、遠回りに見えても先にビヘイビアを一通り触ってください。
Elixirとの棲み分けを整理せず並行学習
同時に手を出すと文法が混乱します。まずどちらか片方を軸に決め、もう一方は「相互運用が必要になったときに読める」程度から始めるのが安全です。
Erlangを触るべきエンジニア・見送るべきエンジニア
学習コストと市場性のバランスから、判断チェックリストを用意しました。
状況・志向 | 推奨度 | 理由 |
|---|---|---|
通信・メッセージング・決済基盤の実務に関わりたい | 高 | 現役採用ドメインと直結する |
Elixirの実務で使うために基礎から理解したい | 高 | BEAM/OTPを底から理解できる |
関数型・並行処理の設計思想を体系的に学びたい | 中〜高 | 教材が古典的で学習効率がよい |
Web開発の第一言語を1つ選びたい | 低 | RubyやPython、TypeScriptのほうが案件母集団が大きい |
フリーランス転向直後で最初の1本目の武器にしたい | 低 | 案件数が限定的で最初の1本目には不向き |
短期的に単価を上げたい | 低 | 学習コストに対するリターンが遅い |
「並行処理と耐障害性を語れるエンジニアになりたい」という長期志向の学習には向いています。一方、転向直後や次案件のためのスキルアップとしては優先度は下がるというのが実態です。
まとめ
Erlangは、電気通信領域で鍛えられた並行処理と耐障害性のための言語です。BEAM/OTPという実行環境と設計思想が価値の中核であり、文法だけを学んでもErlangを学んだことにはなりません。
Ericsson発の関数型言語で、BEAM VM上で動作する
軽量プロセス、メッセージパッシング、Let It Crash、OTPが四本柱
ElixirはBEAM上の兄弟言語で、新規開発ではElixir中心+Erlangを読める体制が現実的
日本のフリーランス市場では案件母集団は小さめ。Elixir案件の加点として機能する
学習期間は文法1〜2週間、OTPまで含めると3〜6か月
通信・メッセージング・決済基盤に関わりたい人には価値が大きい。最初の1本目の武器としては優先度が下がる
Erlangを本格的に学ぶならErlang公式ドキュメントとLearn You Some Erlang for Great Good!を軸に、実案件探しはフリコンを含む複数のフリーランスエージェントを併用する構成が現実的な出発点です。
よくある質問
ErlangとElixirはどちらを先に学ぶべきですか?
新規学習者にはElixirから入るケースが多く見られます。文法がRuby寄りで学習曲線が緩く、日本語情報も相対的に豊富です。ErlangはOTPを深く扱う段階で並行して触ると定着しやすくなります。ただしErlang資産のOSSを保守する仕事が確定しているなら、逆順(Erlang→Elixir)でも問題ありません。
Erlangは古い言語ですが、今学ぶ意味はありますか?
言語仕様は1986年発祥ですが、BEAM/OTPは現在も継続的にアップデートされており、Elixirを通じてエコシステムは活発です。Web系の主流言語にはならないものの、並行モデルと耐障害性設計を体系的に学べる稀有な言語として、学ぶ意味は残っています。
Erlangを本業で使わないフリーランスにとって、学習は無駄になりますか?
無駄にはなりにくい部類です。Actorモデル、監視ツリー、メッセージパッシングといった概念は、Akka(Scala)やGo、分散システム設計全般に応用が効きます。ただし「学べば案件が来る」というリターンは薄いため、思想の理解が主目的と割り切って学ぶのが健全です。
Erlangの案件はリモートワークが可能ですか?
公開案件を見る限りでは、Elixir/Erlang系のプロジェクトはリモート可の募集も一定数見られます。プロダクト特性上、少人数の分散チームで運用されるケースがあり、リモート親和性は比較的高い部類に入ります。個別の可否は募集要項で必ず確認してください。フリーランスエンジニアのリモートワーク案件の実際と特長も参考になります。
Erlangを学ぶのに必要な前提知識は何ですか?
Erlangとgoroutine(Go)の違いは何ですか?
いずれも軽量な並行単位ですが、メモリモデルが異なります。goroutineは共有メモリ+mutex/channelで同期するのに対し、Erlangプロセスはメモリを完全に分離しメッセージパッシングだけで通信します。結果として、Erlangは競合状態が発生しにくい代わりに、状態共有を必要とする処理は工夫が要ります。
Erlangで作ったアプリはどうデプロイしますか?
Rebar3を使ったリリースビルド、DockerイメージへのBEAMランタイム同梱、Kubernetesクラスタでのデプロイが一般的な選択肢です。ホットコードリロードは使わずに、通常のローリングアップデートで運用する現場も多く、案件参画時に運用方針を確認しておくと安心です。
BEAM上で動く他の言語には何がありますか?
Elixir、Gleam(静的型付け)、LFE(Lisp Flavored Erlang)などがあります。実務投入で見かけるのはElixirがほぼすべてで、Gleamは静的型付けを求めるコミュニティで注目が集まりつつあります。
Erlangを覚えると年収は上がりますか?
Erlang単独で年収を大きく引き上げる効果は限定的です。Elixir案件で高単価帯(月額100万円前後)を狙う際の加点材料として機能する傾向があります。年収を上げる手段としては、フリーランスエンジニアの単価相場と単価を上げるのに重要なことで扱う汎用的な戦略と併用するのが現実的です。
独学で実務レベルに到達できますか?
文法とOTPまでは独学で到達可能です。ただし分散環境の障害対応や性能チューニングは本番運用経験がないと身につきにくく、業務案件参画がスキル完成の必須ピースになります。副業やOSS貢献で実運用経験を積むルートも検討する価値があります。
Erlangの求人はどこで探せばよいですか?
日本のフリーランスエージェント各社の検索、GitHubの求人ボード、Elixir Forumの求人カテゴリ、海外リモート専門のサイトが接点です。案件母集団が小さいため、複数チャネルを併用するのが現実的です。エージェントに登録する際は「ElixirとErlang両方経験あり」と伝えると引き合いが出やすくなります。
Erlangを使い続けるとキャリアの選択肢は狭まりませんか?
BEAM特化のキャリアだけを積むと選択肢は絞られます。Elixir/Erlangをコアにしつつ、周辺スキル(クラウド、DB、フロントエンド)を並行して持つ構成にすれば、案件を横断できるバックエンドエンジニアとして機能します。




