JavaScriptをDenoでシンプルに書く

ちょっとしたタスクでTwitter APIを叩かないといけなくなり、前は叩くところからデータフォーマットまで全部Rustのファイル1枚で書いたので、今度は別の言語にするかな~と、軽い気持ちでGoで書いてみたらなぜかうまくいかなかった。

json.Unmarshalがよしなに動いてくれなかったのがうまくいかなかった理由(多分)。jsonの処理はあまりにも普遍的なのでどの言語でも一緒だろ~~とか思ってたら意外とそんなことはなかった…。Unmarshalが動かなかったときのデバッグってどうすればいいんだろう。

Goに慣れていないので、全部をGoのStandard Libraryのせいにする気はないけれど、たとえばRustのserdeと比べてみると、Goのほうが一段高いレベルでざっくり抽象化されているような気がしていて、その分デバッグも微妙にやりにくいように思う。

(最近ずっとRustを書いているという理由で別言語を選んだわけなので、そもそもGoを選んだのはちょっと違ったかな…とは思っている)

ん~どうするかな…と3秒くらい考えて、どうせレスポンスのjsonをあれこれするならもうJs/Tsでいいのでは?となり、Jsを50行くらい書いてdeno runしたら一瞬でタスクが終わったので、Denoいいね…となった。HTTPリクエスト送る系のタスクはこれでいいのかもしれない。データ量が膨大だったり後処理が複雑だと話は変わってくるのだろうけど。シェルスクリプトの代替としてのJs/Tsというのも案外ありなのかな、とも思った。zxというのもあるけど、別に文法を変えなくても生Jsで良くないかな?

あと、この程度の規模だと型なくても全然いいね…というのも実感としてあった。Haskellから入ったくらいなので、型がないともうどうしていいか分からないくらいuntyped langへの苦手意識があったのだが、アロー記法とか高階関数のおかげでかなり息がしやすくなっていて良かった。denoのエラーメッセージもけっこう親切で、シンプルにJsそのものに向き合える感じがあるというか。

DenoはTs、というイメージが強いように思うが、Jsも普通に書けるので、ちょっとしたタスクにJsを使ってみようかなという向きには非常におすすめの組み合わせです。