Emacs用Clojure補完プラグインAnakondoの導入とトラブルシューティングガイド

Anakondo プラグインの動作原理と概要

Anakondo は、Clojure および ClojureScript 環境における Emacs 用のコード補完拡張機能です。REPL(Read-Eval-Print Loop)セッションとの常時接続に依存せず、clj-kondo による静的解析をバックエンドで実行することで、軽量かつ正確なコンテキスト認識補完を実現します。本プラグインは Emacs Lisp で構築されており、Clojure のネームスペース構造や依存関係を静的にトラバースする設計となっています。

必須 CLI ツールの環境構築

補完エンジンが正常に動作するためには、外部の解析ツールとランタイムCLIがシステム全体から参照可能な状態にある必要があります。以下の手順で依存関係を解決してください。

  • clj-kondo の配置: 公式リリースページからアーキテクチャに対応したバイナリを取得し、/usr/local/bin や ~/.local/bin などの PATH が通ったディレクトリに配置します。
  • Clojure CLI の導入: 公式インストーラまたは OS パッケージマネージャーを通じて Clojure CLI ツールをインストールし、グローバル実行権限を確保します。
  • 環境変数の検証: ターミナルセッションから各ツールのバージョン情報をクエリし、シェルスコープが正しく解決されているかを確認します。
# clj-kondo バージョン確認
$ clj-kondo --version

# Clojure CLI 設定情報の確認
$ clojure -Sdescribe
   

Emacs イニシャライズファイルの設定

プラグインの読み込みとモードフックの登録は、ユーザーの init.el や .emacs 内で定義します。パッケージマネージャーの形式に応じて、ロードパスの解決と有効化処理を記述します。

;; 手動ロードパス設定 (パッケージマネージャー未使用時)
(add-to-list 'load-path "~/.emacs.d/vendor/anakondo")
(when (require 'anakondo nil t)
  (message "Anakondo loaded successfully"))

;; use-package による宣言的設定例
(use-package anakondo
  :ensure t
  :defer t
  :custom
  (anakondo-completion-backend 'company-capf)
  :init
  (with-eval-after-load 'clojure-mode
    (add-hook 'clojure-mode-hook #'anakondo-mode)))
   

設定を反映させるには、バッファ内で M-x eval-buffer を実行するか、Emacs プロセスを再起動します。モードラインに indicators が表示されれば、フックは正常にバインドされています。

プロジェクトルートの検出とパス解決

Anakondo は静的解析の実行コンテキストを決定する際、プロジェクトのルートディレクトリを参照します。自動検出が失敗する場合や、単一リポジトリ内に複数の deps.edn が存在する構成では、明示的なパス制御が必要です。

対処手順:

  1. プロジェクト管理パッケージとの連携: projectile や cider などのパッケージが有効化されている場合、それらが提供するルート検出アルゴリズムが優先的に参照されます。バッファを開いた状態でプロジェクト切り替えコマンドを実行し、内部キャッシュを更新してください。
  2. ルートディレクトリのローカル変数指定: 自動認識が意図しないディレクトリを指す場合、バッファローカル変数として絶対パスを直接設定します。
;; 現在のバッファにおけるプロジェクトルートを明示的に固定
(setq-local anakondo-project-root "/workspace/monorepo/packages/frontend")
   

設定の検証:

Emacs コマンドインターフェースから以下を実行し、変数が期待するディレクトリパスを返しているか確認します。

M-x describe-variable RET anakondo-project-root
   

これにより、clj-kondo が正しい依存グラフを構築し、外部ライブラリのシンボルやネームスペース参照が補完候補として正しくマッピングされます。

タグ: Emacs clojure clj-kondo Elisp code-completion

10月6日 04:02 投稿