2021-12-6

[Elm] 簡単なアプリを作った感想

雑な技術メモ

11月頭くらいからHaskellを勉強し始め、11月終盤からElmを触り始めた。最近Firebase(Authentication/Functions/Firestore)を使用した小さいアプリをElmで書き直したのでその感想をまとめておく。

良いと思ったのがテストしやすいコードになっていることが言語レベルで担保されている点。(ここで言うテストをしやすいというのはモック等不要で単純に入出力をテストすればいけるコードになっているという意味。)

自分はプライベートでは基本的にテストを書かずガッとかきあげてしまって、後から随時テストを追加していけばいいやという考えで実装しているのだが、この考え方で作っていると「このコード後からテストしようとした時に困らないかな…?」とモヤモヤすることがTypeScriptでは結構あった。Elmではコンパイルさえ通れば各関数はテストしやすい事が担保されているためともかくコンパイルを通すことだけ考えていればいい。

この点に気づいた時、ESLintやPrettierに出会った際の感動に近い物があった。いや、知識としてはElmがそういうものという事は知っていたのだが、実際に手を動かしてそれを実感するとなるほどという感覚があった。

ちなみに、他にもよくElmに関して言われていることでランタイムエラーがほぼ発生しないというのはよく言われているが、個人的にはこの点に関してはあまり恩恵を感じなかった。というより、JavaScriptからTypeScriptに移行した際のランタイムエラーの無さに比べると、TypeScriptとElmのランタイムエラーの量の比較は驚くほどでもないかなという感じ。

Elmが難しかった点としては、やっぱり今まで自分が触ってきた言語と異なりすぎて中々思うコードを書けない点。今もまだこの点は全然解決していない。

自分がなにか新しいものを学習する際は、とりあえず細かい知識は置いておいて手を動かしてわからない事は随時調べて解決というスタイルを取るのだが、Elmはわからない事が出た際に検索で解決するというのが難しい事が多い気がした。良いコミュニティがあるんだからそこで聞けという話もあるだろうが、わからないことが出た際に面識のない人とコミュニケーションを取らないといけないというのはどうにもハードルが高い。

ひとまず小さいアプリだが一つElmで書き上げたので、一旦関数型言語の学習は終わりにしようかと思っている。現時点の関数型言語の経験が他言語で生きるかはわからないし、もっと長い期間触り続けたほうがいいのかもしれないが実際のところ業務で触る技術スタックは「React + TypeScript」だし、そのスタックで必要な知識は関数型言語以外にも大量にある。ひとまず次はEveryLayoutを読んで個人アプリをそれに基づき修正しようかと思っている。