関連サイト
本書の関連ページが用意されています。
内容紹介
絶対に落ちてはいけないサーバアプリの開発にも数多く利用されているプログラミング言語Erlang(あーらん)。その独特の構文から並行プログラミングの基礎、OTPと呼ばれる強力なツール群の使い方、分散処理、テスト、アプリケーションのリリース方法、型を用いた静的解析ツールDialyzerにいたるまで、Erlangのすべてをクセのあるイラストと親しみやすい例題を使って徹底的に解説した"Learn You Some Erlang for Great Good!"の翻訳です。
書誌情報
- 著者: Fred Hébert(著), 山口能迪(訳)
 - 発行日: 2014-07-04 (紙書籍版発行日: 2014-07-01)
 - 最終更新日: 2014-07-04
 - バージョン: 1.0.0
 - ページ数: 624ページ(PDF版換算)
 - 対応フォーマット: PDF, EPUB
 - 出版社: オーム社
 
対象読者
プログラマー、Erlang入門者、Erlangを実用的に学びたい人、関数型言語に興味のある人、『すごいHaskellたのしく学ぼう!』の読者
著者について
Fred Hébert
            Fred Hébertは、さまざまな言語によるWeb フロントエンド、Web サービス、汎用バックエンドの開発経験を持つ独学のプログラマ。彼のオンラインチュートリアル“Learn You Some Erlang for Great Good!”は、Erlangを学ぶうえで最良の方法とみなされている。Erlang Solutions 社で教材を執筆し、広く西洋でErlang を教えていた。現在はリアルタイム広告入札のプラットフォーム(AdGear)で仕事をしており、Erlang User of the Year 2012に選ばれた。
山口能迪

グーグル株式会社デベロッパーアドボケイト。現実世界の問題が技術で解決されていくことに楽しみを感じている、TechnoとHouseとJazzが好きなエンジニア。アイラウイスキーも好き。好きなプログラミング言語の傾向は、実用志向で標準の必要十分に重きを置くもので、特にPython とGoを好んでいる。
目次
訳者序文
本書に寄せて
はじめに
謝辞
イントロダクション
第1章 始めましょう
- 1.1 Erlangシェルを使ってみる
 - 1.2 Erlangの基礎をいくつか
 - 1.3 バイナリデータを扱う
 
第2章 モジュール
- 2.1 モジュールとは
 - 2.2 モジュールを作る
 - 2.3 コードをコンパイルする
 - 2.4 マクロを宣言する
 - 2.5 モジュールについてもっと詳しく
 
第3章 関数の構文
- 3.1 パターンマッチ
 - 3.2 ガードだ、ガード!
 - 3.3 Ifってなんだ?!
 - 3.4 もしも…の場合(In Case ..of)
 - 3.5 どれを使えばいいの?
 
第4章 型(あるいはそれを欠いています)
- 4.1 動的で強い型付け
 - 4.2 型変換
 - 4.3 データ型を守るために
 - 4.4 型ジャンキーのために
 
第5章 再帰さん、こんにちは!
- 5.1 再帰の動き
 - 5.2 さらに末尾関数
 - 5.3 リストを超えて
 - 5.4 再帰的に考える
 
第6章 高階関数
- 6.1 関数型っぽくいこう!
 - 6.2 無名関数
 - 6.3 map、filter、foldなど
 
第7章 エラーと例外
- 7.1 エラー大集合
 - 7.2 例外を上げる
 - 7.3 例外を処理する
 - 7.4 二分木でtryをトライする
 
第8章 関数型っぽく問題を解く
- 8.1 逆ポーランド記法計算機
 - 8.2 ヒースローからロンドンへ
 
第9章 一般的なデータ構造への小さな旅
- 9.1 レコード
 - 9.2 キーバリューストア
 - 9.3 これぞセット
 - 9.4 有向グラフ
 - 9.5 キュー
 - 9.6 小さな旅の終わりに
 
第10章 並行性ヒッチハイク・ガイド
- 10.1 パニクるな!
 - 10.2 並行性の概念
 - 10.3 すべてが線形にスケールするわけではない
 - 10.4 さようなら、いままで魚をありがとう!
 
第11章 マルチプロセスについてもっと
- 11.1 状態を述べろ
 - 11.2 メッセージ大好きだけど秘密にしておいて
 - 11.3 タイムアウト
 - 11.4 選択的受信
 
第12章 エラーとプロセス
- 12.1 リンク
 - 12.2 モニター
 - 12.3 プロセスに名前を付ける
 
第13章 並行アプリケーションを設計する
- 13.1 問題を理解する
 - 13.2 プロトコルを決める
 - 13.3 土台にすえる
 - 13.4 イベントモジュール
 - 13.5 イベントサーバ
 - 13.6 試運転
 - 13.7 監視を追加する
 - 13.8 名前空間(あるいは名前のない空間)
 
第14章 OTPの紹介
- 14.1 共通プロセスを抽象化すると
 - 14.2 基本的なサーバ
 - 14.3 特化vs汎用
 - 14.4 コールバック・トゥ・ザ・フューチャー
 - 14.5 スコッティ、転送を頼む
 
第15章 レイジ・アゲインスト・ザ・有限ステート・マシーン
- 15.1 有限ステートマシンとは何か
 - 15.2 汎用の有限ステートマシン
 - 15.3 取引システムの仕様
 - 15.4 プレーヤー二人のゲーム内取引
 - 15.5 たいしたもんです
 - 15.6 実世界に適用できるの?
 
第16章 イベントハンドラ
- 16.1 こいつをなんとかハンドルしろ!(ショットガンをガチャリ!)
 - 16.2 汎用イベントハンドラ
 - 16.3 カーリングの時間です!
 
第17章 誰が監督を監督するの?
- 17.1 スーパバイザの概念
 - 17.2 スーパバイザの利用
 - 17.3 バンドで練習
 - 17.4 動的な監視
 
第18章 アプリケーションを作る
- 18.1 プロセスプール
 - 18.2 スーパバイザを実装する
 - 18.3 ワーカに取り組む
 - 18.4 ワーカを書く
 - 18.5 プールよ、走れ
 - 18.6 プール清掃
 
第19章 OTP流、アプリケーションの作り方
- 19.1 私のもう一台の車はプールです
 - 19.2 アプリケーションリソースファイル
 - 19.3 プールを変換する
 - 19.4 アプリケーションビヘイビア
 - 19.5 カオスからアプリケーションへ
 - 19.6 ライブラリアプリケーション
 
第20章 カウント伯爵アプリケーション
- 20.1 OTPアプリケーションからリアルアプリケーションへ
 - 20.2 アプリケーションよ、走れ
 - 20.3 同梱アプリケーション
 - 20.4 複雑な終了
 
第21章 これぞリリース
- 21.1 水漏れパイプを直す
 - 21.2 systools でのリリース
 - 21.3 reltool でのリリース
 - 21.4 reltool レシピ
 - 21.5 リリースからの解放
 
第22章 プロセスの冒険(Process Quest)でレベルを上げる
- 22.1 appupとrelup のしゃっくり
 - 22.2 Erlang 地獄の最下層
 - 22.3 Process Quest
 - 22.4 Process Questを改良する
 - 22.5 relup の復習
 
第23章 バケツいっぱいのソケット
- 23.1 IO リスト
 - 23.2 UDPとTCP:兄弟プロトコル
 - 23.3 inet でもっと制御する
 - 23.4 sockserv、再登場
 - 23.5 これからどこに向かおう
 
第24章 国際Erlang 単体テスト理事会EUnit
- 24.1 EUnit、はてEUnit とはなんぞや
 - 24.2 テストジェネレータ
 - 24.3 フィクスチャー
 - 24.4 Regis をテストする
 - 24.5 誰が良いニット(EUnits)を編むのか
 
第25章 Bears, ETS, Beets:無料のインメモリNoSQL!
- 25.1 なぜETSなのか
 - 25.2 ETSのコンセプト
 - 25.3 ETS、オウチ、デンワ
 - 25.4 マッチを擦る
 - 25.5 あなたは選ばれました
 - 25.6 DETS
 - 25.7 おしゃべりをやめて、もうちょっと手を動かしましょう
 
第26章 名状しがたい分散
- 26.1 これが俺のひのきのぼうだ
 - 26.2 分散コンピューティングの落とし穴
 - 26.3 死か、死んでるけど生きてるか
 - 26.4 帽子じゃないほうのCAP
 - 26.5 Erlang クラスタを設定する
 - 26.6 Cookie
 - 26.7 リモートシェル
 - 26.8 隠しノード
 - 26.9 火の壁を前にゴーグルは役に立たなかった
 - 26.10 彼方からの電話
 - 26.11 名状しがたい分散を葬る
 
第27章 分散OTPアプリケーション
- 27.1 OTPにさらに追加
 - 27.2 テイクオーバーとフェイルオーバー
 - 27.3 魔法の8ボール
 
第28章 珍しいテストのためのよくあるテスト
- 28.1 Common Test とは
 - 28.2 コモンなテストケース
 - 28.3 簡単なテストスイートを作成する
 - 28.4 状態付きでテストする
 - 28.5 テストグループ
 - 28.6 戻ってきたテストスイート
 - 28.7 テストスペック
 - 28.8 大規模テスト
 - 28.9 EUint をCommon Test 内に統合する
 - 28.10 さらにオプションはないの?
 
第29章 Mnesiaと記憶術
- 29.1 Mnesiaとは何か
 - 29.2 データストアは何を保存すべきか
 - 29.3 レコードからテーブルへ
 - 29.4 Mnesiaのスキーマとテーブルについて
 - 29.5 テーブルを作成する
 - 29.6 アクセスとコンテキスト
 - 29.7 読み、書き、Mnesia
 - 29.8 初めてのリクエストを実装する
 - 29.9 ボスに合わせる
 - 29.10 目の前でブツを消す
 - 29.11 クエリリスト内包表記
 - 29.12 Mnesiaを忘れるな
 
第30章 型仕様とDialyzer
- 30.1 PLTは最高のサンドイッチ
 - 30.2 成功型付け
 - 30.3 型推論と食い違い
 - 30.4 型の種類についてタイプする
 - 30.5 関数を型付けする
 - 30.6 型付けの慣習
 - 30.7 型をエクスポートする
 - 30.8 型付けされたビヘイビア
 - 30.9 多相型
 - 30.10 ユー・アー・マイ・型
 - 30.11 同士よ、以上だ
 
あとがき
付録A Erlang の構文について
- A.1 テンプレート
 - A.2 英文
 - A.3 かつ、または、おしまい
 - A.4 最後に
 
付録B 追伸:マップ
- B.1 この付録について
 - B.2 EEP! EEP!
 - B.3 マップはどうあるべきか
 - B.4 早期リリースのための短い一歩
 - B.5 つばぜり合い
 - B.6 本書がマップでどのように改訂されるか
 
