Elm と Erlang

ElmErlang を使ったプログラミングを1ヶ月くらいしていました。気づけばミュータブルな変数を断って一ヶ月生活できたわけで、これは わたし史上 偉大な成果であります。ミュータブルな変数なんてイラなかったんだね!びっくりだー。

そんなお仕事体験という、ちょっと思ったことを軽くメモをとるつもりで書いてみましょう

Elm

Elm は実はよくわかっていないのですが、「構文はだいたいHaskellだよね?*1」といういい加減なアプローチと、あとはなんとなく型が合うようにコードを書けば期待通りに動いてくれるわけで、自分の頭を使っていない分、自分が堕落していくのがわかります。素晴らしい言語です。

一度ビルドが通ってしまえば実行時エラーと無縁というのは、素晴らしいことで、そのメリットだけに Elm を愛してしまいそうです*2Erlang で作った APIサーバーとやり取りする際の JSON のデコード周りに「ビルドが通ったのにエラー」が残っていて、逆にそこがまっさきに疑わしいというのが「らしい」という感じ。

Elm はフレームワークも非常によく出来ています。

  • まず、型として Event (そのページで受けうるイベントの直和)と、Model (レコード)を定義します
  • つぎに、EventによりModelがどのように更新されるかの update 関数を書きます
  • あとは Model をどういう Htmlにレンダリングするかの view 関数をかけば出来上がりです。

そんな枠組にはまってコードを書いてている時、その抽象度の高さと簡潔さに仕様記述をしているような気分になります。

正直、仕事で Elm を使うのは無謀としかいいようがないのですが、生き馬の目を抜く JavaScript のライブラリーやAltJSの世界をみると、来年のことを予想するのは鬼に笑われてもしかたがないなぁと思います*3。まぁ、うちの商品の SPA はおまけみたいなもんなので、Elmでできることしかしなくても問題ないでしょう。

ちょっと困ったのはわたしの Chromebook に Elm をインストールできなかったこと。今の elm は npm で簡単インストールできるのですが、わたしの Chromebook Flip は ARM なので npm ではインストールできず、自分でビルドする必要があります。が、ストレージの容量がたりず、ビルド環境を構築するだけの空き容量がない....orz


このままのあなたでいて。あとはどこまで泥仕合に巻き込まれないか、という点に注目したいなと思います。

Erlang

一方の Erlang。わたしは Smalltalk のメッセージ始まり、アクターモデル経由で Erlang に興味を持ちました。Prolog 由来のシンタックスも気に入っています。

とても動的なところは、「好きだー」と思う時と「型ほしいー」と思う時があります。折衷的に Dialyzer を使って、しこしこと -spec を書いています。これだけで随分な手違いを見つけてくれますが、チェックしてくれる内容にその手間に対して非力と思うこともあります。タプルをつかっているときは気持ちいいけれど、レコードを使っているときはどうにかならないかなと思ったり。

一見代入に見える = がパターンマッチで、異常系を簡単に退けられるのは嬉しいですし、それで落ちてしまってよし、という割り切りはコードを見やすくしてくれるので好きです。でも意外に try-of-catch を書いてしまう自分がいますね。ここらへんは わたしのErlang 力がたりないのかなぁ。

WebServer として Cowboy を使いました。99s のページには非常に親近感を感じます。基本的にはよいものだーと思うのですが、cowboy-rest ハンドラーは便利な反面 HTTPステータスコード を任意に返させてくれないのに困ったりしました。

rebar3 非常に便利で、もう手放せません。これがあれば Erlang アプリケーションをなんにも考えないで作れます。「rebar3 new から始める Erlang」なんて本があればいいのに。


* * *


わたしは、プライベートでもあまり積極的に関数プログラミングをしないですし、お仕事でもなんのかんので C++ のコードを書くことが多い日々を送っているので、関数プログラミングの当たり前がイマイチ手に馴染んでいません。

それは、うちの職場は関数プログラミングを愛している人ばかりなので、とても肩身が狭いですね。

*1::と::が逆になっているのがわたしには心地いい

*2:ちょっと前まで JavaScript で require is not required なぞという、えらく哲学的なエラーに苦しめられていただけに、感動すらしてしまいます。

*3:2015年のトレンドが AngularJS で 2016年は React.js とかいわれちゃうと...【翻訳】 2016年にJavaScriptを学んでどう感じたか - Endo Tech Blog