関連サイト
本書の関連ページが用意されています。
内容紹介
プログラミング言語Elixirを学ぶ
Elixir(エリクサー)は、並行処理を得意とするプログラミング言語ErlangのVM(エンジン部分)を基盤とし、Erlangよりもなじみやすい文法を採用したプログラミング言語です。
本書は、RubyやElixirの伝道師として、そして「達人プログラマー」として知られるDave Thomas氏による、プログラミング言語Elixirの定番解説書、Programming Elixir 1.6(Pragmatic Bookshelf, 2018)の日本語訳です。基本的なプログラミングから、並行処理、さらなる応用へと順を追って進む構成になっています。本書を読むことで、Elixirらしいプログラミングを学ぶことができます。
第2版では、内容が大幅にアップデートされ、Elixir 1.6以降に対応しただけではなく、開発ツールの利用を含めたアプリケーション開発の実際についての解説が、より充実したものになっています。またこの日本語版第2版には、Elixir 1.6以降の周辺事情や、開発現場で知っておきたい情報をまとめた補遺が追加されています。
書誌情報
- 著者: Dave Thomas(著), 笹田耕一, 鳥井 雪(訳)
- 発行日: 2020-12-04 (紙書籍版発行日: 2020-12-01)
- 最終更新日: 2020-12-04
- バージョン: 1.0.0
- ページ数: 424ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: オーム社
対象読者
向上心のあるプログラマ・Elixirに興味のある人・Rubyユーザ・Erlangユーザ・プログラミングを学んでいる学生・情報系の大学生
著者について
Dave Thomas
クールなものを伝道するのが好きなプログラマ。The Pragmatic Programmer(『達人プログラマー』)の共著者で、アジャイルソフトウェア開発宣言の著者の一人でもある。彼の著書Programming Ruby(『プログラミングRuby』)は、プログラミング言語Ruby を世界に紹介し、Agile Web Development with Rails(『Rails によるアジャイルWeb アプリケーション開発』)はRails が一世を風靡する最初の一押しとなった。
笹田耕一
プログラミング言語Ruby を開発するプログラマ。クックパッド株式会社エンジニア、一般財団法人Ruby アソシエーション理事。楽天テクノロジーアワード2008 ルビー賞、The Ruby Hero Awards 2016 等受賞。他の監訳に『アンダースタンディング コンピュテーション』(オライリー・ジャパン、2014)。好きなElixir の機能はマクロとプロセス。プロセスに相当するRactor をRuby3 に導入するための研究開発が佳境。
鳥井 雪
プログラミング言語Ruby を使用するプログラマ。株式会社万葉所属。楽天テクノロジーアワード 2013 ルビー賞受賞。他の訳書に『ルビィのぼうけん』シリーズ(翔泳社、2016 ~)、『Girls Who Code 女の子の未来をひらくプログラミング』(日経BP、2019)。好きなElixir の機能はパイプ演算子とパターンマッチ。どちらもRuby に入りそうになったり試験的に入ったりして、なかなかエキサイティングなユーザー体験です。
目次
Elixir作者による前書き
はじめに(正当化のむなしい試み、再び)
第1章 赤いカプセルをとれ
- 1.1 プログラミングはデータの変換をするものだ
- 1.2 Elixirのインストール
- 1.3 Elixirの実行
- 1.4 この本を読むにあたって
- 1.5 練習問題
- 1.6 Think Different(ly)
第 I 部 伝統的なプログラミング
第2章 パターンマッチ
- 2.1 代入:あなたの考える代入は、私の考える代入ではない
- 2.2 もっと複雑なマッチ
- 2.3 _(アンダースコア)で値を無視する
- 2.4 変数の束縛は(マッチの中で)一度だけ
- 2.5 等号記号の別の見方
第3章 不変性
- 3.1 あなたは既に(いくつかの)不変データを知っている
- 3.2 不変データは既知のデータ
- 3.3 不変性の性能への影響
- 3.4 不変データでコーディングする
第4章 Elixirの基礎
- 4.1 組み込みの型
- 4.2 値型
- 4.3 システム型
- 4.4 コレクション型
- 4.5 マップ
- 4.6 日付と時間
- 4.7 名前、ソースファイル、慣習、演算子など
- 4.8 変数のスコープ
- 4.9 基礎の終わり
第5章 無名関数
- 5.1 関数とパターンマッチ
- 5.2 一つの関数、複数のボディ
- 5.3 関数は関数を返すことができる
- 5.4 関数を引数として渡す
- 5.5 関数はElixirの中核だ
第6章 モジュールと名前付き関数
- 6.1 モジュールのコンパイル
- 6.2 関数のボディはブロックだ
- 6.3 関数呼び出しとパターンマッチ
- 6.4 ガード節
- 6.5 デフォルトパラメータ
- 6.6 プライベート関数
- 6.7 素晴らしきパイプ演算子 |>
- 6.8 モジュール
- 6.9 モジュールの属性
- 6.10 モジュールの名前:Elixir、Erlang、そしてアトム
- 6.11 Erlangのライブラリにある関数の呼び出し
- 6.12 ライブラリを見つける
第7章 リストと再帰
- 7.1 ヘッドとテイル
- 7.2 ヘッドとテイルによるリストの処理
- 7.3 ヘッドとテイルを使ったリストの構築
- 7.4 map関数の作成
- 7.5 リストを単一の値にまとめる
- 7.6 より複雑なリストのパターン
- 7.7 実践Listモジュール
- 7.8 リストと仲良くなろう
第8章 マップ、キーワードリスト、セット、構造体
- 8.1 マップとキーワードリスト、どちらを使うべきか
- 8.2 キーワードリスト
- 8.3 マップ
- 8.4 マップのパターンマッチと更新
- 8.5 マップの更新
- 8.6 構造体
- 8.7 入れ子になった辞書構造体
- 8.8 セット
- 8.9 大いなる力には大いなる誘惑が伴う
第9章 寄り道:型とは何か?
第10章 コレクションの処理 ── EnumとStream
- 10.1 Enum ── コレクションの処理
- 10.2 ストリーム ── 遅延列挙
- 10.3 Collectableプロトコル
- 10.4 内包表記
- 10.5 神業との訣別
第11章 文字列とバイナリ
- 11.1 文字列リテラル
- 11.2 「文字列」という名前
- 11.3 シングルクオートで囲まれた文字列 ── 文字コードのリスト
- 11.4 バイナリ
- 11.5 ダブルクオート文字列はバイナリ
- 11.6 バイナリとパターンマッチ
- 11.7 見慣れた、けれど奇妙な
第12章 制御フロー
- 12.1 ifとunless
- 12.2 cond
- 12.3 case
- 12.4 例外の発生
- 12.5 例外を使った設計
- 12.6 少ない努力で、大きな成果
第13章 プロジェクトを構成する
- 13.1 プロジェクト:GitHubからIssuesを取得
- 13.2 ステップ1:Mixを使って新しいプロジェクトを作る
- 13.3 変換:コマンドライン解析
- 13.4 基本的なテストを書く
- 13.5 リファクタリング:大きな関数注意報
- 13.6 変換:GitHubからの取得
- 13.7 ステップ2:ライブラリを使う
- 13.8 変換:レスポンスを加工する
- 13.9 変換:データを並び替える
- 13.10 変換:最初のn個を取り出す
- 13.11 変換:テーブルに整形
- 13.12 ステップ3:実行可能なコマンドを作成
- 13.13 ステップ4:ロギングの追加
- 13.14 ステップ5:プロジェクトドキュメントの生成
- 13.15 データの変換によるコーディング
第14章 ツールの利用
- 14.1 IExでのデバッグ
- 14.2 テスト
- 14.3 コードの依存関係
- 14.4 サーバモニタリング
- 14.5 ソースコードの整形
- 14.6 予想どおり、もっとある
第 II 部 並行プログラミング
第15章 複数のプロセスを使う
- 15.1 シンプルなプロセス
- 15.2 プロセスのオーバヘッド
- 15.3 プロセスが死ぬとき
- 15.4 Parallel Map ── Erlangの“Hello, World”
- 15.5 フィボナッチサーバ
- 15.6 Agents ── 難問
- 15.7 プロセスで考える
第16章 ノード ── 分散システムの要
- 16.1 ノードの名前付け
- 16.2 プロセスの名前付け
- 16.3 入力、出力、PID、ノード
- 16.4 ノードは分散の基本
第17章 OTP:サーバ
- 17.1 OTPでのいくつかの定義
- 17.2 OTPサーバ
- 17.3 GenServerコールバック
- 17.4 プロセスの名前を付ける
- 17.5 インターフェースの整理
- 17.6 サーバをコンポーネントにする
第18章 OTP:スーパーバイザ
- 18.1 スーパーバイザとワーカ
- 18.2 ワーカの再起動オプション
- 18.3 スーパーバイザは信頼の要
第19章 さらに複雑な例
- 19.1 Duperの導入
- 19.2 Duperアプリケーション
- 19.3 さて動くかな?
- 19.4 自分のElixirアプリケーションを計画しよう
- 19.5 次に来るのは?
第20章 OTP:アプリケーション
- 20.1 これは伝統的なアプリケーションではない
- 20.2 アプリケーション仕様ファイル
- 20.3 SequenceプログラムをOTPアプリケーションにする
- 20.4 スーパーバイザが信頼性の基盤
- 20.5 コードのリリース
- 20.6 Distillery ── Elixirのリリースマネージャ
- 20.7 OTPは大きい、信じられないくらい大きい
第21章 タスクとエージェント
- 21.1 タスク
- 21.2 エージェント
- 21.3 大きめの例
- 21.4 エージェントかタスクか、それともGenServerか?
第 III 部 より高度なElixir
第22章 マクロとコードの評価
- 22.1 if文の実装
- 22.2 マクロはコードを注入する
- 22.3 コードとして表現を利用する
- 22.4 値の注入のためのバインディングの利用
- 22.5 マクロは健全
- 22.6 コード片を走らせる他の方法
- 22.7 マクロと演算子
- 22.8 さらに深掘り
- 22.9 とんでもなく深掘り
第23章 モジュールのリンク:ビヘイビアとuse
- 23.1 ビヘイビア
- 23.2 useと__using__
- 23.3 総まとめ ── 関数呼び出しのトレース
- 23.4 useを使う
第24章 プロトコル ── ポリモーフィック関数
- 24.1 プロトコルの定義
- 24.2 プロトコルの実装
- 24.3 利用可能な型
- 24.4 プロトコルと構造体
- 24.5 組み込みプロトコル
- 24.6 プロトコルはポリモーフィック
第25章 かっこいい機能いろいろ
- 25.1 自前のシジルを書く
- 25.2 複数アプリケーションのアンブレラプロジェクト
- 25.3 お楽しみはこれからだ!
付録A 例外:rais、try、catch、throw
- A.1 例外を起こす
- A.2 catch、exit、throw
- A.3 独自の例外の定義
- A.4 今はこの付録を無視してほしい
付録B 型仕様と型チェック
- B.1 いつ型仕様が使われるか
- B.2 型の指定
- B.3 新しい型の定義
- B.4 関数とコールバックの型仕様
- B.5 Dialyzerの利用
付録C 参考文献
付録D Elixir 1.6以降の状況と開発運用の実際
- D.1 処理系のバージョン管理
- D.2 リリース
- D.3 アプリケーションのデリバリー
付録E 日本語版に寄せて
- E.1 Elixir作者より
- E.2 Elixir作者より(第2版発行に寄せて)
- E.3 原著者より
- E.4 訳者より