clojure-mcp-light: Claude CodeでClojure開発をシンプルに

に公開

clojure-mcp の開発者である Bruce Hauman さんが新しく clojure-mcp-light というプロジェクトを開始しました。本記事では、このプロジェクトが生まれた背景、既存の clojure-mcp との違い、そして誰がどのような場面で使うべきかを解説します。

内容は、Clojurian Slack / ai-assisted-coding で、2025/11/05 07:33:29 に開始されたスレッドに基づいています。

なぜこのプロジェクトが生まれたのか?

開発の動機は以下2つのようです。

1. clojure-mcp は複雑すぎる

clojure-mcp-light が生まれた背景には、

「Claude CodeでClojureを使うのに、本当に必要な最小限のツールは何か?」

というシンプルな問いがあります。

既存の clojure-mcp は、LLMのループ以外のすべてを備えたフルスペックのコーディングアシスタントです。それゆえに、

  • セットアップが複雑
  • メンテナンスコストが高い
  • Claude Codeのデフォルトツールとの統合に課題がある

という問題を抱えています。

Bruceさんは、

「Claudeは自身のツールに対してファインチューニングされているはず。だとすれば、Claude純正ツールに寄せたアプローチの方が、より良い結果を得られるのではないか?」

という仮説たて、検証するために、clojure-mcp-light の開発を始めました。

2. Claude Code Webへの対応

もう一つの重要な動機は、Claude Code Webでの動作です。Claude Code Webはサンドボックス環境で動作するため、複雑なMCPサーバーのセットアップは困難です。一方、フックベースのシンプルなアプローチなら、この環境でも動作する可能性があります。

clojure-mcpとの違い

機能比較表

特徴 clojure-mcp clojure-mcp-light
アプローチ フルスペックMCPサーバー フック + スクリプト
ツール カスタムツール多数 Claude純正ツール + 拡張
セットアップ 複雑(MCPサーバー必要) シンプル(フックのみ)
構造編集 専用ツール(clojure_edit等) Parinferによる自動修正
REPL評価 統合されたツール スクリプトベース
DIFF表示 カスタム実装 Claude純正(IntelliJ統合可)
ファイル保護 編集前検証 プレフックで検証
Claude Code Web ❌ 困難 ✅ 対応可能
メンテナンス 複雑 シンプル

技術的な違い

1. Parinferの統合方法

clojure-mcp:

  • 独自の構造編集ツールを提供
  • clojure_editclojure_edit_replace_sexp など専用コマンド
  • ファイルを不正な区切り文字状態にすることは決してない

clojure-mcp-light:

  • Claude純正のEdit/Writeツールを使用
  • フックでParinferを後処理として適用
  • 区切り文字エラーがある場合のみParinferを実行
  • ファイルが破損して修正できない場合はロールバック
# フックの動作イメージ
1. Claude が Edit/Write ツールでファイルを編集
2. プレフック: 区切り文字チェック
3. エラーがあれば Parinfer で修正試行
4. 修正できなければロールバック

2. REPLの実装

clojure-mcp:

  • MCPツールとして統合 (一番のウリ)
  • structuredContent で美しい結果表示
  • セッション管理が統合されている

clojure-mcp-light:

  • シンプルなスクリプトベース
  • タイムアウトと中断を処理
  • Parinferを通してから評価
  • セッションの永続性を保証(*ns* で検証可能)

このプロジェクトでHappyになりそうなこと

つまりどういうことを解決してくれるのか?というと、

セットアップの複雑さ

MCPサーバーのセットアップは、特に初心者には敷居が高いものです。clojure-mcp-light は、

  • 設定ファイルにフックを追加するだけで動作
  • bb install で簡単にインストール可能(計画中)
  • Claude Code Webではリポジトリのクローンだけで動作

括弧バランシングの自動修正

Clojureを書くLLMの最大の弱点は、括弧のバランシングです。LLMは本質的に自己回帰的な自動補完器であり、閉じ括弧を管理するための「スタック」を持っていません。

clojure-mcp-light は、Parinferをフックとして統合することで、この問題を透過的に解決します。

;; LLMが生成したコード(括弧が不足)
(defn calculate-tax [amount rate]
  (* amount rate)  ;; 閉じ括弧が足りない!

;; Parinferが自動修正
(defn calculate-tax [amount rate]
  (* amount rate))  ;; ✅ 修正完了

このプロジェクトで制限されること

一方で、clojure-mcp のほうがよいところは、というと、

1. 構造編集の制限

  • clojure-mcpのような専用構造編集ツールはない
  • 複雑なS式の編集では、まれにParinferが失敗することも
  • 回避策: コードを小さな関数に分割し、深いネストを避ける

2. デバッグ体験

  • structuredContent のような豊富な結果表示はない
  • シンプルなテキストベースの出力
  • 回避策: 必要に応じてclojure-mcpの :clojure_eval のみを有効化

3. Markdown編集との混在

  • Clojure特化のため、Markdownとの混在編集で問題が起きる可能性
  • 回避策: デフォルトツールに戻すか、選択的にツールを有効化

4. 高度な機能

  • clj-kondoやnrepl-refactorとの深い統合はまだ実験段階
  • 将来的な方向性: これらのツールをフックとして統合予定

誰が使うべきか?

推奨するケース

ケース1: プロジェクトの立ち上げ段階

新しいClojureプロジェクトを始める際、まずは clojure-mcp-light でシンプルに始めることをお勧めします。

# セットアップ例
1. プロジェクトを作成
2. .claude/config に フックを追加
3. 開発開始!

ケース2: チーム開発での標準化

チーム全体で統一したツーリングを使いたい場合、シンプルな clojure-mcp-light は:

  • オンボーディングが簡単
  • トラブルシューティングが容易
  • ドキュメント作成の負担が少ない

ケース3: Claude Code Webユーザー

サンドボックス環境で作業する必要がある場合、これが現時点でほぼ唯一の選択肢です。

ケース4: 実験的な開発

新しいアイデアを素早く試したい場合、セットアップが軽量な clojure-mcp-light が最適です。

clojure-mcpを使うべきケース

以下の場合は、フルスペックの clojure-mcp の方が適しています:

  1. 複雑なリファクタリング

    • 大規模なコード変更
    • 構造編集の高度な機能が必要
  2. デバッグ集中作業

    • REPLで反復的にテストを実行
    • 豊富な結果表示が必要
  3. 既に導入済み

    • すでに clojure-mcp を使っていて満足している
    • チームで標準化されている

ハイブリッドアプローチ

実は、両方を併用することもできます:

;; clojure-mcp の設定例
{:disable-tools [:clojure_edit :clojure_edit_replace_sexp]  ; 編集ツールは無効化
 :enable-tools [:clojure_eval]}                              ; 評価のみ有効化

この設定により:

  • 通常の編集は clojure-mcp-light のフック経由
  • REPLの評価のみ clojure-mcp の高度な機能を使用
  • 両方の良いとこ取りが可能

Bruce さん本人もお気に入りぽい

本人が言っているので、これは期待❤️。使ってみようと思います。

今後の展開

関連プロジェクト

  • nextdoc/ai-tools: 同様のアプローチを3ヶ月使用して効果的
  • kennyjwilli/claude-clojure-tools: プラグインとして実装

短期的な計画

  1. bb installによるインストール対応

    • スクリプトのインストールを簡単に
    • バージョン管理の改善
  2. Claude Code プラグイン化

    • さらに簡単なインストール
    • 一般ユーザーへの普及
  3. 統計収集機能

    • Parinferがエラーを修正した回数をカウント
    • どの操作が括弧エラーを生成するかを追跡

長期的な展望

  1. 複数Lisp対応

    • Elisp、Scheme、Racketなど
    • parinfer-rust は複数言語に対応
  2. 修復CLIの独立化

    • ClojureScript(CLJS)での実装
    • Edamame + parinfer.js
    • npm経由でインストール可能な単一実行ファイル
    • cljs-shrinkwrapで単一ファイル化
  3. フックの組み合わせ可能性

    • clj-kondo、cljfmtなどをフックとして統合
    • トークン節約のための最適化
    • 正しい順序での実行

リンク

Discussion