leiningen使い始める
clojure に関して調べ事していると、必ずleiningenという開発ツールのことでてきます。というか開発者さんの相当大多数が利用しているように見受けてます。*1
この時点でその名前は聞き及んでましたが、このときは、自分まだ単純なclojure-CLI一辺倒でした。
最近のclojure 1.10とかあるいはもう少し前からか、clojureのCLI自体でmavenリポジトリから必要なjarを引っ張ってくる機能が付いたようなのですが、それ以前はそうなっていなくて、leiningenははるか昔からその機能を持っていて*2、それでみな何かしらの開発ツールを選択してきたようです。自分は、deps.ednファイルというのをうまく書くと依存パッケージをmavenから引っ張ってきてくれるという(この辺かな)から使い始めて、それで間に合うのかなとも思っていました。ですけども、leiningen使い始めると便利ですし、leiningenのclojure開発に関しての先人の情報量も膨大です。
project.clj例と実行例
leiningenで構築するプロジェクト内容を表すファイルはproject.cljというファイル名とのこと。
clojureはjavaベースなので、javaコードもプロジェクトに含められるのかどうか、leiningen使い始めてそれも期待していたのですが、できるそうです。素晴らしい。さらにprotocも呼べるplug-inを先達様達は残してくれてました。
てことで今回、最低限のこと(protoc, javac, jar化)ができるproject.clj書きました。でもまだまだ、develop/releaseの使い分け、効率化には多分書き直す余地あると思います。
前回だと、mavenでビルドして、clojureコマンドにクラスパス渡して実行してとなっていたのが、leinコマンドでprotoc/javacを一緒にやってくれます。まだやれてないですが、別端末でファイル編集すると自動で再javacとか動ける設定もあるようにみてます。
nao@hnd$ lein repl Compiling 5 source files to ... nREPL server started on port 44835 on host 127.0.0.1 - nrepl://127.0.0.1:44835 REPL-y 0.4.4, nREPL 0.6.0 Clojure 1.10.0 OpenJDK 64-Bit Server VM 11.0.6+10-LTS Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) Javadoc: (javadoc java-object-or-class-here) Exit: Control+D or (exit) or (quit) Results: Stored in vars *1, *2, *3, an exception in *e gobgp-grpc-java.core=> (gobgpapi.example.Client/process "add") call addPath Done nil gobgp-grpc-java.core=> (gobgpapi.example.Client/process "del") call delPath Done nil gobgp-grpc-java.core=>
replというのは、`Read-Eval-Print Loop`の略だそうで、その場で式が評価してもらえる、まあ自分はインタプリターと錯覚しています。ですけどclojureは遅延評価とかあって、インタプリタとは違うとのこと。
上記の結果として、gobgpdのプロセスには、先日と同じようにgrpcでやりとりされます。処理は特に変わっていませんので。
leinからprotoc単独、javac単独、それからスタンドアロンjarを作るそれぞれのコマンドあります。要するにleiningenが統合開発ツールになっているということと理解しています。
leiningen使う動機は、パッケージマネジメントを包含している部分が大きいです。新規参入者としてはどうしても覚えること多いのですが、このツールは十分恩恵を授けてくれそうです。
clojureの文法、巷ではS式と呼ばれるらしい、カッコの多い書き方、あるいは他の多くの理由から、エディターはemacsを使うのがデファクトっぽいように見受けています。自分は、emacsのコマンドは基本的なものしか覚えてなく、指のなじみはvi*3になっているので、これで頑張るつもりです。*4*5ちなみに、今までemacsを使うシーンは、その環境のviが日本語と相性悪い時にemacsが同時に入っているとそのときは使ってたりしたことありました。