イントロダクション
この記事は英語の原文を日本語に翻訳したものです。原文: https://adoptingerlang.org/docs/introduction/
翻訳元: adoptingerlang/adoptingerlang 2025-12-18(コミット 899008f)
Erlangについて調べ始め、チュートリアルや書籍もいくつか読んできたものの、自分たちのチームのために最新のプロジェクトをどう構築すればよいかを教えてくれるものが見当たらず、そうしてこの文章にたどり着いた、という方も多いのではないでしょうか。Erlangコミュニティはこれまで何年もかけて入門コンテンツを書き溜めてきており、その多くは今でも十分に通用する内容です。それなのに、なぜまた新しい本が必要なのでしょうか。
正直なところ、世に出回っている資料の大半はErlangの基礎を教えるという点では非常にしっかりしており、私たちはそれらを置き換えるつもりも、同じ内容をもう一度説明し直すつもりもありません。その代わりに、著者である私たちは、それらの資料が多くの領域で盤石である一方、いくつかの死角をカバーする手助けができるのではないかと考えました。
たとえば、次のような興味深い書籍があります。
- Programming Erlang(Joe Armstrong著)は、Erlangの背後にある哲学を学ぶのに最適です
- Erlang Programming(Cesarini & Thompson著)は、言語とOTPの一部を学ぶための非常にバランスの取れた実践的なアプローチを取っています
- Erlang and OTP in Action(Logan, Merritt & Carlsson著)は、OTPを軸に教え、より広範なシステム設計にも触れようとする最初のErlang書籍です
- Learn You Some Erlang(Fred Hebert著)は、基本的なErlangからOTPを支える設計原則、リリース、その他もろもろまでをすべてカバーしようとする、ErlangとOTPの両方への入門としておそらく最も親しみやすい一冊です
- Études for Erlang(J. David Eisenberg著)は、他の多くのErlang書籍と組み合わせて使える、実践的な補完教材として優れた練習問題集です
- Concurrent Programming ERLANG(Williams & Armstrong著)は、90年代の初期のErlangがどのようなものだったか、それが実世界の問題にどう適用されていたかを示す、歴史的に貴重な一冊です
- Introducing Erlang(Simon St. Laurent著)は、書籍という形で得られる最も簡潔なErlang体験です
- Erlang in Anger(Fred Hebert著)は、本番環境のErlangシステムをデバッグするための完全なガイドを含む唯一の書籍です
- Designing for Scalability with Erlang/OTP(Cesarini & Vinoski著)は、実世界寄りの視点を持つ、おそらく最も現代的なErlang/OTPシステムへのアプローチです
- The BEAM Book(Erik Stenmanと多くのコミュニティ貢献者による)は、仮想マシン内部に関する最も高度な資料です
- Property-Based Testing with PropEr, Erlang, and Elixir(Fred Hebert著)は、Erlang向けのプロパティベーステストを教えてくれる唯一の書籍です
他にもいくつかあります。
私たちはこれらのどれも置き換えるつもりはありません。しかし、これらの書籍のほとんど(あるいはすべて)に共通する大きな欠落があります。それは、Erlang/OTP単体に焦点を当てがちだという点です。実際、これらの多くはコミュニティの働き方に大きな変化が起きる以前に書かれたものです。たとえば『Learn You Some Erlang』は非常に完成度の高い一冊ですが、コミュニティ主導のビルドツールが広く採用される以前、そしてOTPリリースのような概念が広く使われるようになる以前に書かれています。コンテナ化されたプラットフォームが当たり前になった今の時代を踏まえて書かれたものは、これらの中にはほぼありません。そして、オープンソースのErlangエコシステムにうまく収まるようにプロジェクトをどう構成すべきかに触れているものも、ほとんどありません。
そこで登場するのが本書『Adopting Erlang』です。この本(そしてこのウェブサイト!)は、他の書籍やマニュアルがこれまでうまくカバーしきれていなかったニッチな領域を埋めることをすべての目的としています。このページで学べる内容には、次のような実際に役立つものが含まれます。
- 複数のErlangバージョンを使い分けられるようにする方法。現実の世界では、職場や仲間内で使う複数のプロジェクトのために複数のErlangバージョンを実行する羽目になるからです
- エディタやその他のツールのセットアップ方法。基礎はすでに見たことがあっても、実は良いErlang環境を用意できていないことが多いからです
- トップダウンでOTPシステムに取り組む方法。世の中の資料の多くはボトムアップのアプローチを取りますが、私たちは初日から正しいプロジェクト構成を持てるようにしたうえで、必要に応じて他の資料で穴を埋めてもらいたいと考えています
- 良いプロジェクトに必要なもの。依存関係の扱い、いくつかのテストの実践、設定とドキュメントの扱いなど
- 一般的なオープンなプラットフォーム上で良い継続的インテグレーション(CI)パイプラインをセットアップする方法。コードレビューと自動テストが最大限の恩恵を受けられるようにするためです
- 誰もちゃんと教えてくれない厄介な事柄への対処法。文字列、特にUnicode、時刻、適切なSSL/TLS設定の扱いなど
- 自己実行可能なファイル一式としてErlangシステムをデプロイする方法
- ErlangシステムをDockerイメージとして適切にパッケージし、Kubernetesでそのライフサイクルを管理する方法を示すこと
- VMが提供する範囲の外側で運用とメトリクスの収集を計画する方法。ロギングや分散トレーシング、メトリクスダッシュボードを得るためのプラットフォームなど
- 商用プロジェクトでErlangを使い始めるチームを作る方法
- 最初のErlangの専門家や開発者を面接する方法
- コードレビューや経験の共有といった実践をどう構成するか
反対に、基本的なErlang、コアとなるOTPビヘイビアなどはあえて扱いません。それらはすでに他の資料で何度も扱われており、その多くが無料で利用可能だからです。それでも、必要なときに参照できるチートシートの付録はまとめてあります。
私たちは基本的に、『Adopting Erlang』が、様々な入門書と、『Erlang in Anger』のような本番環境でのデバッグを教えてくれるより高度な資料との間の欠けたリンクになることを望んでいます。この本を通じて、「基礎はだいたいわかった」という状態から「よし、このプロジェクトを始めよう、それも正しいやり方で」という状態まで到達できるようになってほしいと考えています。本書を読み終える頃には、Erlangコミュニティの一員としてうまくやっていくためのベストプラクティスが何なのか、正確に把握できているはずです。