今週は仕事の外で Elixir をいじっていて、妙にたのしくなっていた。あれもこれも試してみたいとソワソワしてしまって、寝ようにも頭が冴えてしまって寝不足がちだった。
1年前くらい前からセコセコとチュートリアルをやったり exercism.org でクイズを問いたりしていたけれど、写経をいいかげん卒業して自分でコードを書き始めたら俄然おもしろくなりはじめた。動くものを作るだけなら簡単にできるように設計されているし、素早く実装ができるおかげでもっとエレガントなやりかたを模索させる方向に常に意識を向けてくれる。 Ruby が愛されるのと同じように愛されてしかるべきだとわかる。
いちど書いたものを捨ててまた書きなおす試行錯誤を繰り返しているうちに、シンタックスと API が自然に手になじんでくるのも気持ちがいい。だいたいこういう感じの操作が定義されているんじゃないかな? という感覚が育ってきた。
ちまたでは関数プログラミング言語と紹介されたり、並列プログラミングと紹介されたり、次世代のウェブ開発言語と紹介されたりしているが、これらの切り口で説明しようとするとどうしても全体像がこぼれてしまうだろうなとおもった。どれも間違っているというわけではないけど、どれも本質的ではない。ビッグワードに切り口を求めて語ろうとしても言葉足らずにならざるをえないところに、底知れない魅力がある。 Ruby ってなにがいいんですか? と尋ねられていまいち上手に魅力を説明できない感じに似ているかもしれない。正直なところ、仮想マシンとか OTP に関わる概念はいまだによくわかっていないのに、強力なアピールポイントであるランタイムの設計を抜きにしてさえもたのしさに満ちたプログラミングをさせてくれるのがやっぱりすごい。
新しい言語でデータベースを扱うのもやってみるとやっぱりおもしろい。ライブラリとしては Ecto をはじめて触ってみていて、 ORM とはまったく違う使い心地をことさら新鮮に感じている。まだうまくいえないけど、 ActiveRecord から ActiveRecord::Relation だけを切り出して、操作の集合ではなくデータ構造として再宣言したような感じがする。アプリケーションよりもデータベースのほうに少し接近して、直感的な API と引き換えにデータの強さを味方につけたような印象がある。
無理のあるスキーマ設計の前では、いくらライブラリが柔軟であろうとやっぱりなす術なくなりそうな気配はある。結局はデータベースの知識を要求するというのは、まあどこまでいってもそうなんだろうな。しかしイミュータブルな言語の世界とミュータブルなデータの世界をまたいでなめらかなインターフェースを設計するというのはすごく意欲的な仕事だとおもった。意欲的ということでいえば ActiveRecord もとんでもないインパクトのある仕事だけど、 Ecto は Ecto でまったく違う地平に立っていて比較のしようもないのがなんともかっこいい。
Livebook のおかげでライブラリの実験が容易にできたり、どのライブラリも hexdocs.pm に充実したドキュメンテーションをもっていたり、文化的な成熟がもたらされていることも嬉しい。仕事道具に組み入れるにはまだ使いどころを見つけられていないのがもどかしいけれど、使い始める準備は気づかないうちに整ってきているような気がする。