クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

関数型言語初心者が「プログラミングElixir」を読んだ感想

唐揚げ好きエンジニアの那須@nasum)です。

このたび、オーム社様より献本いただいた「プログラミングElixir」を読ませていただきました。

Elixirという言語があり、それが関数型言語であること自体は知っていたのですが、どういうものかよく知らなかったため今回読ませていただきました。

私の感想としましては、言語を問わずプログラミングをしたことがある人がElixir(あるいは関数型言語)に入門するための本として一番はじめに読むとうれしいし、別の本を読んだり使ったりした後、再度振り返りのために読む本としても適していると感じました。それに普通の技術書と違い筆者のElixirでのプログラミングを愉しんでもらいたいという気持ちが感じられて読んでいておもしろいのも特徴的だと思いました。こちらに語りかけてくるような文体は、頑張ってやってみようという気持ちにさせてくれます。

f:id:Tomato-360:20160829165542j:plain

ちなみに私は先ほども少し書きましたがElixirは名前ぐらいしか今まで知りませんでした。そんな人物が「プログラミングElixir」を読んだらどうなるかという気持ちでここから先読んでいただけると幸いです。

Elixirの基本を学べる第一部

前半の1章から13章まではElixirの基本を解説しています。事細かに基本を解説しているのではなく、ある程度プログラミングをしたことがある人に向けて書かれているので、細かい話をあまりしないのが特徴的でした。

「プログラミングはデータを変換するものだ」導入の言葉でガッチリ掴まれた

よくある技術書ではまずはじめに、条件分岐や型について書き始めると思うのですが、この本に至ってははじめに今までのプログラミングの常識を捨てろと諭されます。今まではオブジェクトを使ってデータを隠蔽し操作するやり方を取っていましたが、そうではなくデータは変換するのだとはじめに教えられます。データの変換!そういう考えを今まで持ったことがなかったためかなり新鮮でした。

導入の時点で自分の知っている世界とは違う世界が広がっているのだと教えてくれるので、ここから先読むのが楽しみになりました。とても掴みのうまい導入だと思います。どうでもいい話ですが、まず第一章のタイトルが「赤いカプセルをとれ」なのがおもしろいです。真実を知るだと少し大げさですが、すこし違う世界が見れそうな雰囲気が伝わります(マトリックスを見たことがある人限定)。

聞き慣れない概念「パターンマッチ」

前半で最も大事なのはパターンマッチの解説で、今までの考えを忘れるように諭された第一章の次の二章ですぐに解説されています。

というのも読んでいくうちにわかったのですが、Elixirを触る上でパターンマッチを疎かにするとそこから先すぐわからなくなります。パターンマッチという基本があったうえでの関数であったり再帰だったりするので、まずはじめにパターンマッチの解説を入れているのだと思います。自分は読んでいくうちに何度かこの第二章に立ち返りました。何度も読み返す必要があるからこそはじめの方の章に入れているのだと思いました。

Elixirでの開発の型を知ることができる第13章

第一部の最後の章では今まで覚えたことの応用で、Elixirでのアプリケーション開発を例を挙げて解説しています。

mixコマンドを利用してのプロジェクト作成からExUnitを用いたテストのやり方、hexを利用したライブラリの取得からその利用法まで書かれています。ここではデータを取得し変換するというElixirの考え方をなぞりながらアプリケーションを作成していくので、Elixirでの開発の型のようなものを知ることができるので勉強になります。ここに書いてあるコードはそのまま写経してElixirでの開発の流れを掴みたいところです。

Elixirの特徴が学べる第二部・第三部。

第二部・第三部ではElixirならではの機能が解説されています。複数のプロセスを作成しそれを協調させる手法や分散システムを作るためのNode機能の解説、OTPというErlang由来のツール群の利用法など、本格的なアプリケーションを開発するための機能が解説されています。

Elixirはプロセスで考える

Elixirのプロセスは気軽に作れてNodeを使って分散処理することができるそうです。もう初心者からしたらこの時点でわけがわからなくなるのですが、少なくとも今までのプログラミングの常識ではなかったことができるということはわかりました。

最後のほうで「プロセスで考える」という節があります。今までオブジェクトで考えていたものをプロセスで考えるようにするとのことでした。なかなかどういうことを言っているのか理解するのが難しいのですが、何度か書いてみないと理解するのは難しそうです。とにかくElixirはプロセスをポコポコ作って並列に動作させるのが容易にできるというのがわかりました(小並感

OTP便利

OTPはElixirを使う上で無くてはならない便利ツールで自力でやらなければならないと面倒なことはだいたいOTPで用意されているとのことです。

この本ではサーバ・スーパーバイザ・アプリケーションについて書かれていました。OTPの中ではスーパーバイザが肝のようで、プロセスの監視と再起動をすべて執り行ってくれる機能だそうです。プロセスの章でもプロセスはElixirの特徴と言っていたのでそれを取りまとめるスーパーバイザをこの本では信頼の要とまで言っていました。

OTPについてはこの本では3種類しか触れられていませんが、これを使うことでアプリケーション開発を用意にしてくれるとのことなのでいろいろ調べてみたいところです。

まとめ

以上「プログラミングElixir」を読んだ時の自分なりの感想を書いてみました。

これ一冊がかなり濃密なので、正直な話一回読んだぐらいではなかなかつかめませんでした(プロセスやOTP周りはまだあまり理解できてないのが現状です)。しかし今までにない考え方をし今までと違う視点でアプリケーションを作る手法を学べるというのは楽しくもありました。Elixirを学ぶことは可能性を広げられるということになりそうなので、個人的に注力していきたい技術であると思いました。

shop.ohmsha.co.jp

© 2016 CrowdWorks, Inc., All rights reserved.