📝Clojure 開発環境

📝Clojure 開発環境

tags: 🏷Clojure

Clojure開発をするときの開発環境(DX)向上のあれこれ.

主にClojure開発に関わるツールやライブラリまとめ.

up: 📂Clojure Development

Leiningen - Clojure Build tool #

https://github.com/technomancy/leiningen

Clojureプロジェクト管理ツール. make的な.

howto: Java外部ライブラリをいれるには? #

[/ ] という記法でproject.cljのdependenciesに追加.


これが,

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-firestore</artifactId>
  <version>3.0.2</version>
</dependency>

こうなる.

[com.google.cloud/google-cloud-firestore "3.0.2"]

howto: lein uberjarでThe Main-Class specified does not exist within the jar #

main の core.cljのnsに(:gen-class)を追加.

Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method, or the namespace has not been AOT-compiled.

tips: project.cljにビルド用設定のみ書いて設定情報はenvironやconfigをつかう #

よい.

ref: https://twitter.com/t_yano/status/1163413764827303937

Clojure CLI tools.deps - Clojure Build tool #

https://clojure.org/reference/deps_and_cli

  • leiningenよりシンプルであることが特徴.
    • 基本的には paths/dependencies/aliasesだけ覚えれば基本はできる.
    • leiningenより学習コストは低
    • cljコマンドでREPL起動.
    • clojureコマンドで .cljファイルを実行.
  • deps.ednファイルで記述.
    • pathsにclojureのコードのrootからの相対パスを記述.
    • dependenciesに依存ライブラリを記述.
    • aliasesにcustom command を記述.
      • たとえば clj (-X/-M/-A):hogehoge というようなオプションを気軽に定義できる.
      • npxのようなcommand runnerとしてつかえるかな??
  • Rich Hickeyがこれから熱意を入れたいとか.
    • 2022でメジャーなのはleiningenであるもののこれから逆転の可能性はある.
      • 体感でdeps.ednのGitHub repoは増えている.

📝tools.build - Clojureプロジェクトのビルドツール #

jar/uberjarの作成には tools.buildをつかうのが今風(2022~)

refs:

tools.tools #

他人のつくったlibをClojure CLI ifに簡単に組み込むことができる.

tip. GitHubの最新バージョンを参照するには? #

mvn/versionでタグを参照するのではなく(バグ修正とかで)最新バージョンを使いたいときのtip.

{:deps }の中で, io.github.(user)/(project) がkey, {:git/sha “xx”}が valueで宣言する.

io.github.dm3/clojure.java-time
  {:git/sha "693dffad2343cd9722482a5f200efe75dfbfbd31"}

🔗References #

cljstyle - Clojureフォーマッタ #

Clojureフォーマッタ.

先発のcljfmtはleiningen縛り. cljstyleはスタンドアロンバイナリとして動作する.

以下, Doom Emacsの設定例. format-allというpackageの clojure custom formatterとしてcljstyleを設定して, 保存時にフックでフォーマットが走るようにする.

(add-hook! clojure-mode
  (set-formatter! 'cljstyle "cljstyle pipe" :modes '(clojure-mode))
  (add-hook 'before-save-hook 'format-all-buffer t t))

ref: 🏷Formatter 📝Clojureコーディング規約

clj-kondo - Clojure Lintツール #

Clojure リンター. Clojure用の静的解析ツール.

スタンドアロンバイナリとして動作するのでleiningenやREPLに依存しない.

ref: 🏷Linter