お好みのエディタ/IDEにClojure開発環境を用意したら、ぜひリアルタイムでチェックが走るClojureのリンターを設定しましょう。
バグの疑いのあるコードやコミュニティの標準的なイディオムから外れたコードなどに素早く気づくことができて非常に便利です。
エディタ/IDEとプラグインによってサポート状況に差がありますが、以下の2種類のリンターを準備し、動作するように設定します。
- clj-kondo: GraalVMでネイティブコンパイルされたClojureリンター
- Joker: Go言語製のClojureリンター(Clojureのサブセットに対するインタプリタとしても使える)
両者は機能的に重なる部分もありますが、カバー範囲が異なるため可能であれば両方とも設定しておくと便利です。
本記事ではClojure開発環境での基本操作まとめ: Spacemacs, IntelliJ IDEA (Cursive), VS Code (Calva), Vim (vim-iced), rebel-readlineと同様に2020年時点でClojurianに特に人気のエディタ/IDEでの設定方法に絞って紹介します。
- Spacemacs + Clojure layer
- IntelliJ IDEA + Cursive
- VS Code (Visual Studio Code) + Calva
- Vim + vim-iced
他のエディタ/IDEをご利用の方は各ツールのサポート状況と設定方法をご確認ください。
共通: clj-kondoとJokerのインストール
macOSの場合、Homebrewでインストールするのが簡単です。
$ brew install borkdude/brew/clj-kondo candid82/brew/joker
特にclj-kondoは非常に活発に機能追加が行われているので、こまめに最新化すると良いでしょう。
Spacemacs + Clojure layerの場合
Clojure layer (developブランチ)のEnabling Automatic Lintingを参考に、~/.spacemacs
のClojure layerに対する設定でclj-kondoとJokerをリンターとして有効化します。
(defun dotspacemacs/layers ()
(setq-default
...
dotspacemacs-configuration-layers
'(...
(clojure :variables
clojure-enable-linters '(clj-kondo joker))
)
...))
動作例:
IntelliJ IDEA + Cursiveの場合
clj-kondoのEditor integration > IntelliJ IDEA > File Watchers + installed binaryを参考に、clj-kondoとJokerが動作するように設定します。
-
- (Ultimate Editionでない場合) File Watchersプラグインをインストールする
-
-
Tools > File Watchers
でファイルタイプClojure
,ClojureScript
,CLJC
に対するプロジェクト横断(Level:Global
)の設定を追加する
-
動作例:
VS Code + Calvaの場合
Linting - Calva User Guideにあるように、Calvaにバンドルされたclj-kondoが有効化されるようです。
また、Clojure Linter (Joker)をインストールするとJokerもリンターとして組み込むことができます。
動作例:
Vim + vim-icedの場合
clj-kondoのEditor integration > Vim / Neovim > ALEを参考に、プラグインALEを導入して以下のように設定することでclj-kondoとJokerをリンターとして有効化します。
let g:ale_linters = {'clojure': ['clj-kondo', 'joker']}
動作例:
Further Reading
- Clojure/ClojureScript関連リンク集 - Qiita > エディタプラグイン
- Clojure開発環境での基本操作まとめ: Spacemacs, IntelliJ IDEA (Cursive), VS Code (Calva), Vim (vim-iced), rebel-readline - Qiita
- Clojure開発環境でのフォーマッターcljstyle設定まとめ: Spacemacs, IntelliJ IDEA (Cursive), VS Code (Calva), Vim (vim-iced) - Qiita
- Clojureで快適なREPL駆動開発のために"reloaded workflow"を実践しよう - Qiita