「プログラミングElixir」を読んだ

プログラミングElixir第2版を翻訳者笹田さんから頂けました。ありがとうございます。

プログラミング Elixir(第2版)

プログラミング Elixir(第2版)

  • 作者:Thomas,Dave
  • 発売日: 2020/12/01
  • メディア: 単行本

ElixirについてはErlangVMを利用した言語であり、なんだかRubyインスパイアな部分があるらしい関数型言語であると何年も前に知ったものの特に学習はしていないという状態でした。

また、本書の原著者Dave ThomasはRubyの普及に大きな影響があったと語られるピッケル本の作者であるのみならず、まさに世界のレジェンドプログラマーRubyをメイン言語として愛用する自分としてはRubyの良さを広めた彼が次にお気に入りの言語としてElixirを挙げているのは結構気になっていました。 さらにタイムリーなことに弊社でもElixirの機運が上がっており、まさに渡りに船というタイミングでいただけることになったのでした。

まず、本書はElixir習得のための総合的な入門書です。某所ではよくこういう書籍に関して「プログラマ初心者にとっての本ではない」というレビューがつくことがありますが、本書もプログラミング初心者のための本ではありません。プログラミング的な知見をある程度備えたElixir初心者、もしくは学習済みの人が知識を総ざらいするための本です。

序盤はまずElixirのもつ型や構造体の説明ののち、関数型言語の特徴的な扱いというか、考え方について解説が割かれます。パターンマッチに始まり、例えば、本書で whileloop といった代表的な繰り返し制御構造を見ることはありません。その代わり何度も再帰を使う場面に出会います。Rubyやその他いわゆるオブジェクト指向言語では再帰を使えてもあまり積極的に使う場面は少ないと思うのですが、Elixirではこういう風にするとクールだというふうに聞こえるぐらい再帰を使います。パターンマッチと再帰になじんでくると、なんだか関数型言語っぽい書き方ができるようになってきたなという感じになります。リストの扱いもオブジェクト指向言語たちでは見かけないやり方なので、Emacs LispCommon Lispになじんでなければリストの扱いにはもう少し苦労したかもしれません。

中盤になると、組み込みの依存管理ツール兼プロジェクト管理ツールである mixGithubと連携する使ったちょっとしたCLIツールを作ってみる章に入ります。近時のプログラミング言語にはこのようなツールの扱いは必須で、とても実用的と思いました。テストの書き方にもちゃんと振られており、実際に全部写経しましたが手にElixirをなじませるに良い教材となってくれたと感じます。新規プロジェクト作成、テストも何も言わずに最初からセットアップされており、依存性管理もビルトイン。このスムーズさはやはり新しい言語ならではという感じがありました。

その後、より本格的と言うか、ElixirとErlangのパワーを知れる内容に移っていきます。最近の言語が備えていなければならない安全に並行プログラミングを実行する機能、OTPサーバー、スーパーバイザ、タスク機能といった具合です。どれも入門書にある内容と思えないほどしっかりと解説がされており、コード量もしっかりしているので全部写経することは時間的な都合でできませんでしたが、辿れる考え方はもちろん規模や方法の違いはあれど、実世界の問題にも十分に適用できそうです。スーパーバイザとクロージャでもっていた値を新しくデプロイしたアプリケーションに引き継がせる例はこれがこのコンテナ時代より前にもっと知られていれば…と思わせる大変おもしろい体験でした。

終盤は高度な機能としてマクロやビヘイビア、プロトコルについて説明されます。マクロはともかくとして、プロトコルは実世界上のプログラミングでよくお世話になる予感があります。Javaでいうところのインターフェイスに近いものと理解しました。

要所に要所に演習問題がありますが、本を通してみると結構な量があります。すぐ解けるようなものばかりではなく、結構考え込んだりもします。ちなみに答えは用意されていないので、どうしてもわからない場合はGithubで探すことになります…僕は探しました。 演習問題と合わせて写経しながら本書はそのコード量と合わせて相当なボリュームとなります。

本書の最初に 「赤いカプセルをとれ」"Take the red pill" という映画マトリクスの名言が出てきますが、今だこういう世界観に対するあこがれのある自分としては最初に本書に引き込まれるきっかけとなってくれました。大変ずるくて効果的ですね。あと本書は全編に渡りカラーでした。紙の本を久しぶりに読んだこともあり、新鮮で驚きました。

本書を読了した今、さらにElixirのウェブフレームワークであるPhoenixに入門してウェブ開発への知見を深めていくか最近噂のIoT用フレームワークNervesを学んでいくか、うずうずしているところです。