Calvaを使ってClojureとCirclCIに入門してみた〜その2
前回までのあらすじ
前回「CircleCIのClojureチュートリアルをCalva環境で楽しく進めるぞ!」と意気込んだところまさかのIndexページを表示させる段階でつまずいて、可処分時間のほとんどを溶かした。 映画の追加機能を用意する
indexページ追加後は、粛々とコードを写経していきます。
映画の評価を追加する機能の実装を行うわけですが、indexに比べて書くコードの量が多く、なかなか前に進めません。
とりあえずboundaryまで行けば再び動かすことができる状態になるはずなので(それまではintegrantを中心に、あれが不足している、コレがまだ揃ってないと怒られます)そこまでがんばります。
やっぱりconfig.ednがサンプル通りだと進まない
で、ようやく書き上げて動かそうと思ったところ、やっぱりconfig.ednがサンプル通りだと動かない問題にぶち当たりました。
怒られ具合は
code:bash
Execution error (ExceptionInfo) at integrant.core/missing-refs-exception (core.cljc:191).
Missing definitions for refs: :film/create, :film/show-create
なので、createやshow-createとして用意しているハンドラへの参照が見つからないという事のようです。
そんな訳で、index時の書きっぷりを参考に:film-ratings.handlerをつけて参照させるようにしたところ、無事に通過しました。
途中、余計なところまで日本語にしてしまったために、「データベースのカラムが見つからない」と怒られてしまうトラブルに見舞われたものの、ちょちょっと修正して先に進みます。
ただ怒られているだけだと辛さがありますが、Clojure 1.10で改善されたエラーメッセージのおかげもあって、転んだ分だけClojureコンパイラの言っているエラーの意味が理解できるような嬉しさもありました。
typoや設定ファイルの違いでつまずく
Calvaの入力支援機能は他の言語の開発モードに比べても弱く、名前空間等を少し長めにタイプしたりしないといけないケースで結構な頻度でtypoが発生して、コンパイル時に「名前空間が見当たらない」とか「その名前空間にそんなもの無い」というエラーで怒られました。
設定ファイルもチュートリアルの内容から更新されているようで、いくらかの違いがあったため、都度調べたり考えたりしながら進めました。
そんなこんなで出来上がり
一度波に乗ってしまえば、残りは2時間ぐらいで進めることができました。
最初にindexページの表示までで大きくつまずきましたが、ハンズオンでやったとしても、1日あればしっかりこなすことのできるよくできたチュートリアルだと思います。
https://gyazo.com/26f77e7a399829c22d9a98052ee60de8
というわけで、今回のチュートリアルCalvaを使う嬉しさはあまりなかった
先に書いたとおりCalvaはEmacs + CIDERに比べると入力支援機能も弱く、REPLも別途立ち上げておいてやらないと繋がらなかったりして「それなのに何でCalva使ってるの?」と言われることも多いですが、個人的にはテストの自動実行支援が使いやすく感じていたので、今回も手元でテストを流しつつ、同じテストがCircleCI上でも流れつつという感じになれば、インターネット難民(週末だけファミレスにWiFiを拾いに行く生活)であるところの今の暮らしの感じだと嬉しさがありそうだと考えていたのですが、今回のチュートリアルの内容ではCalvaがテストを見つけることができなかったため、あまりCalvaの嬉しさはありませんでした。
(CircleCIが驚くほど簡単に使えたのが最大の収穫かもしれない)
https://gyazo.com/136daa728d4fe23e85b5596728c83acc
ただ、チュートリアル自体はとても楽しく進めることができ、やっぱりClojure好きだなあなどと思いました。
機会があれば、Calvaの機能強化にも参加してみたいと思いました。