生涯未熟

生涯未熟

プログラミングをちょこちょこと。

初心者Elmerがクソアプリを作った時に気付いたこと

この記事は Elm Advent Calendar 2018 の17日目の記事です。

今回は初心者Elmerが別のアドベントカレンダーでアプリケーションを作ってみた時に気付いたことをつらつらと書いてみます。

syossan.hateblo.jp

github.com

書き始め

以前、Elmに入門してからだいぶ時間が経っていたので、振り返りも兼ねて以下の神資料を読んで記憶を呼び覚ましました。

gitpitch.com

gitpitch.com

こうやって忘れても、ちょっと学ぶだけですぐに使い始められるのがElmの良いところですね。

さて、使い方を思い出したところで、今回の実装で自分にとって課題になりそうなところをリストアップしました。

まだ簡単なTODOリストを作ってみたレベルだったので、この辺りの実装に手こずるかなと。

APIサーバとの疎通

何はともあれコードをば。

大まかな流れとして

  1. Decoderの作成
  2. Decoderを使い、GETリクエストの作成
  3. GETリクエストを送信

ってな感じですね。

実装自体は参考になる記事があったりして、そこまで難しくはなかったのですが、Decoderで少し引っかかるところがありました。
本来的にはDecoderは以下のように作成します。

type alias Job = { name : String, id : Int, completed : Bool }

point : Decoder Job
point =
  map3 Job
    (field "name" string)
    (field "id" int)
    (field "completed" bool)

ただ、この map3 というのがマッピングするRecordのフィールド数に合わせて可変する感じで、例えば5つのフィールドがある場合 map5 としなくてはいけなかったりして、直感的に「なんか微妙だなー」と感じました。
そんな気持ちをTwitterで吐露したところ、Elm教の教祖様から福音がありました。

この json-decode-pipeline ってのを使えば、良い感じにpipelineで表現出来るのか、と試したところ良い感じだったので今回の形になりました。

Elmで分からないところがあれば雑にTwitterに書いとくと誰か答えてくれるかも?

あとは、URLにクエリパラメータを付けなくてはいけなかったのですが、今回は無理くりリクエスト作成時の処理に紛れ込ませました。
時間無かったので結構雑にやったのですが、ここ上手いこと出来る方法を知っている方がいれば情報くださいまし(ぉ

ページャーの実装

次にページャーの実装ですが、 elm-paginate を使いました。
今回では以下のように使用しています。

gist.github.com

大体の処理が PaginatedList を引数にとった Paginate.XXX で完結してますね。簡単。
ただし、ページャーで良くある「○○以降のページは...で表示する」とかは自力で実装する必要があります。難しくないけども。

その他諸々

その他ちっちゃいことなんですが、今回CSSフレームワークのBulmaを使ったんですが、以前TODOアプリを作成した時には elm-bulma を使用してElementを書いてくスタイルがあまり好きではなくて、 bulma.min.css を直接呼ぶ形を採用しました。

あと、やっぱりまだまだElmの日本語記事が少なくて「皆書いてくれ〜〜〜」って思ったりしました。
それでも公式ドキュメントとかちゃんと読めば済む話ではあるんですが、ライブラリとかたまにドキュメントが不親切な場合があるので・・・😇

まとめ

Elmは改めて良い言語だなーと感じましたね。
昔ちらっとReact+Reduxとかでフロント書いたりしましたが、今やれと言われても無理です。
しかし、Elmは学習コストがドチャクソ低いので、少々忘れたとしてもElm Guideをササッとなぞればすぐ書けるのが良き。
そういうところもあって、「普段フロントをあまり書かないサーバサイドの人間」に優しい言語でもあるのかな、と。

あとはコンパイラが優しいですね。「ここって間違えてるんだけど、もしかしてこうじゃない?」って教えてくれるので、「それや〜〜〜〜〜😇」って感じで解決して書けていけるので最高。 バーっと書き出して、実行した時にエラーがドンッと出るのが一番イライラしますからね。精神衛生上良い。

また、ライブラリの充実度がちょっと心配してたんですが、普通に使いたいものは揃ってる感じでした。
ただ、そこまで豊富にあるわけではないので、「このライブラリ使い心地がアレだから別の使お」ってなった時に類似ライブラリがあまり無い感じではありました。

という感じで、初心者が実際にちゃんとしたアプリケーションをElmで作ってみた感想をつらつらと書いてみました。

皆、Elmやろう!!!