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 が存在する構成では、明示的なパス制御が必要です。
対処手順:
- プロジェクト管理パッケージとの連携:
projectileやciderなどのパッケージが有効化されている場合、それらが提供するルート検出アルゴリズムが優先的に参照されます。バッファを開いた状態でプロジェクト切り替えコマンドを実行し、内部キャッシュを更新してください。 - ルートディレクトリのローカル変数指定: 自動認識が意図しないディレクトリを指す場合、バッファローカル変数として絶対パスを直接設定します。
;; 現在のバッファにおけるプロジェクトルートを明示的に固定
(setq-local anakondo-project-root "/workspace/monorepo/packages/frontend")
設定の検証:
Emacs コマンドインターフェースから以下を実行し、変数が期待するディレクトリパスを返しているか確認します。
M-x describe-variable RET anakondo-project-root
これにより、clj-kondo が正しい依存グラフを構築し、外部ライブラリのシンボルやネームスペース参照が補完候補として正しくマッピングされます。