2016年8月18日

祝「プログラミングElixir」刊行

このたび,Programming Elixir 1.2の日本語版がオーム社より「プログラミングElixir」として刊行される。この本は2nd editionであり、すでに3rd editionであるProgramming Elixir 1.3のプロジェクトが進行中だが、それでも日本語で初の本格的なElixir並行プログラミングシステムの書籍が出版されるのは大変喜ばしいことである。著者のDave Thomas、翻訳者の笹田さんと鳥井さん、編集者の方々、レビュアーの方々、そしてその他関係者の方々の努力に深く敬意を表したい。私もErlang/OTPに関わってきた者として、微力ながらレビュアーとして参加することができた。

以下は、「プログラミングElixir」発刊にあたっての、個人的なポエムである。

この本の「推薦のことば」にも書いたのだが、Dave ThomasがErlang Factory SF Bay 2014に現れたとき、「なんでRubyの人がErlangに関係あるのか」が、正直いってよくわからなかったのは当時の率直な実感だった。この時の彼とJosé Valimが共同して行ったプレゼンテーションは、"Catalyze Change"、つまり「変化を触媒となって加速しよう」というものだった。内容は、Erlangを読み慣れていない入門者にとって、Erlangのエコシステム全体がいかにわかりにくいかというのを徹底して糺弾するという、Erlang/OTPのファンにとってはかなり耳の痛い内容で、現場の空気は少なからず殺伐とした感じになったことを覚えている。そこでは、Erlangの文法のわかりにくさ、レコードの使いにくさ、マニュアルの読みにくさが強調された。これらの傾向は2016年の今でも直ったとはいえないだろう。Erlangのいわばドス黒い部分である。もちろんこの悪条件を越えている人達はいっぱいいるし、私もそれほどは気にならないが、多くのErlangを勉強しようとした人達を敬遠させる原因になったことは否定できないだろう。そういう意味でDave Thomasがやったのは、かなりキツいプレゼンだった。「Erlang/OTPにはこんなに未来があるのに、なんでこんな状況を放っておくんだ」というDave Thomasの不満は相当なものだったと思う。

しかし、Dave Thomasはそこで終わるような人ではなかった。なにしろThe Pragmatic Programmerという本を書き、Pragmatic Bookshelfを作った人である。彼はErlang/OTPに持っていた不満について、おそらくElixirに救いを見出したのだと私は思っている。そして彼はElixirを普及させる本を自分で書いてしまった。それがProgramming Elixirという本だった。かつてRubyに対して熱心だったDave Thomasは、今度はその情熱をElixirに向けたのだと私は思っている。残念ながらRubyに関する本は私はほとんど読めていないのだが、Pragmatic Bookshelfのラインアップを見ても、そのことは証明されているだろうと思う。なにしろMetaprogramming Elixirなんていう、Elixirのマクロを知らないと読めないような本、そしてPhoenixフレームワークのProgramming Phoenixという解説書まで出版させているのだから。こんなElixirに対してマニアックな人が他にいるだろうか?

Elixirが有名になってきた過程で、Erlang/OTPの側にいた人達は、かなり当惑していたように思う。ElixirにはErlang/OTPにない要素がたくさん詰まっている。そういう意味で私はまだElixirはほとんど使えていない。たぶん死ぬまで使えるようにはならないだろう。それくらいElixirは奥が深い。Erlang/OTPも2008年からつき合っているが、おそらく死ぬまでまともに使えるようにはならないだろう。どちらも奥が深すぎる。並行プログラミングシステムは、人類にはまだ早いのかもしれない。そんなことを思いながら、少ない時間の中で何度も実験を繰り返し、失敗し続けているのが現状だ。でもErlang/OTP単独ではできないことがElixirでできる。そのことは確かだ。だからElixirを支持しようと思った。その判断は間違っていなかったと思う。なにしろElixir、Erlang、どちらのコミュニティも小さすぎる。仲違いしている余裕なんかない。誰がErlang/OTPを維持し続けるのかということを考えたら、ElixirをきっかけにErlang VMを使うようになった人達を、仲間として歓迎こそすれ、絶対に敵にしてはいけない。今のところ、そういう判断でコミュニティは上手く回っているように私は思っている。共存共栄である。幸い、Erlang/OTPのプログラマの多くは、自分達のツールをElixirにも対応させている。

残念ながら未だにDave Thomas本人と個人的に話をしたことはない。しかし、Elixirを引っ張ってきた設計者でありErlang/OTPの辣腕プログラマでもあるJosé Valim、Phoenixフレームワークの作者Chris McCord、hex.pmパッケージマネージャの作者Eric Meadows-Jönsson、今はErlang/Elixirから離れているように見えるがビルドツールkerlを作りElixirの初期の普及に尽力したYurii Rashkovskii(この4人は皆若い!)、そして私同様のオッサンではあるがElixirの普及に力を注いできたBruce Tateなど、多くの強者達と話をし、彼等の作品に触れた経験で考える限り、ElixirはErlangが作ってきたエコシステムの可能性を大きく広げたことは間違いないと私は確信している。そのことをずっと前から見抜いていたDave Thomasについては、さすがとしかいいようがない。

「プログラミングElixir」は、どちらかといえばProgramming Erlang(第2版)(日本語版は「プログラミングErlang」(第1版の翻訳))同様、リファレンスではなく、最初から最後まで読んで手を動かしていくことで、プログラミングシステムの基本が身についていくようになっている本である。中にErlangのコードはほとんど出てこない。やっぱりErlangはDave Thomasには嫌われているのかもしれない(笑)。でも、OTPという単語は出てくる。だからOTPは知らないとこの本はわからないかもしれない。ということは、Elixirのマニュアル同様、Erlang/OTPのマニュアルを読まないと結局はいけなくなるのだろうと思う。Elixirは多くのElixirで書かれたモジュールを持っているが、実際はErlang/OTPのモジュールにも多くの機能を依存しているからだ。そういう意味で、この本を読んで先に進むには、Erlang/OTPの本が必要かもしれない。幸い、オーム社からは「すごいErlangゆかいに学ぼう!」(このblogで紹介した記事へのリンク)という本が2014年に出ている。両方読んでみることを、ぜひお勧めしたい。

これを機に日本でもElixirErlangに触れる人達がますます増えることを願っている。