にたまごほうれん草ブログ

はてなダイアリーから移行したブログ。以前のはこちら→http://d.hatena.ne.jp/emergent/

Elmで遊んでみた

普段仕事ではバックエンド寄りの開発をメインにしているけれど、少しWebフロントエンドも知っておかないといけない状況になった。Rust好きおじさんなのでYewを勉強しようかと迷ったけど、以前から気になっていたElmに入門してみることにした。

やったこと

  1. 公式ガイド(日本語翻訳版) を読みながら写経した(3h)
  2. 仕事で開発したAPIの結果(JSON)を受信して表示するだけの簡単なWebアプリを2つほど作ってみた(1.5日)
  3. Project Eulerを解いてブラウザ上で結果を表示するWebアプリを作成した(1日)

できたもの

github.com

以前から、新たにプログラミング言語を学習するときはProject Eulerの問題を解くことにしている。手続き型言語であればforループで書けばいいところを関数型言語では再帰を使わなければならないなど、同じ問題でも記述方法が異なったりして楽しい。

それで、Elmの場合は言語自体がWebフレームワークと言ってもよいので、ブラウザ上で動作するものを書かねばなるまいと思い、問題番号のボタンをクリックすることで計算処理を実行し結果を表示するようにした。

f:id:emergent:20201231161943p:plain:w300

しかし一番作るときに大変だったのは、新しい問題を追加するときにコード生成させるシェルスクリプトadd.sh)を実装するところだったりして…。

つまずいた点

Elmのいいところ

  • The Elm Architecture(TEA)で言語ランタイム側が面倒なメッセージングなどを引き受けてくれるのでシンプルにコードを書ける
  • Haskellでコードを書いた経験が少しあったので言語仕様にとっつきやすかった
  • パイプライン演算子は、Elixirのパイプ演算子Clojureのスレッディングマクロと同じように使えるのでこれらも記述がシンプルになりありがたい
  • エディタ(IntelliJ IDEA)で、保存時にelm-formatにフォーマットかけるように設定していたらガツガツコードフォーマットが変わっていくのが気持ちいい

万人にとっての良さというより、自分にとっての良さの列挙になってしまった…

さいごに

良いお年を!