👩‍💻

Clojure 謹製の ECA (Editor Code Assistant) を使ってみた

に公開

1. ECA - Editor Code Assistant をさわってみる

ECA (Editor Code Assistant) は、エディタ非依存のAIコードアシスタントです。Clojureで開発されています。ECA - Editor Code Assistant (by Eric Dallo) - YouTube で見かけて、気になったのでちょっとさわってみることにしました。

2. 主な機能

  • チャットインターフェース: AIとコードについて対話、レビュー、ペアプログラミング
  • 複数エディタ対応: Emacs、VSCode、Vim/Neovim、IntelliJ、
  • マルチモデル: OpenAI、Anthropic、Copilot、Ollama対応
  • 統一設定: 全エディタで同じ設定、UX
  • Agentic機能: LLMが単純な質問応答ではなく、自律的にツールを使って実際の作業を行う。

3. ECAが使用できるツール

  1. ファイルシステムツール
    • ファイル/ディレクトリの一覧表示
    • ファイルの読み取り・書き込み・編集
  2. シェルコマンド実行
    • テスト実行
    • ビルド処理
    • Git操作
  3. エディタ連携
    • ワークスペース情報取得
    • プロジェクト構造把握
  4. MCP(Model Context Protocol)
    • 外部サービス連携
    • カスタムツール追加

4. 設定

4.1. 拡張機能 を VSCode にインストール

拡張機能 > ECA (もしくは Editor Code Assistant) で検索 > インストール

4.2. モデル設定

モデルの設定は、各Providerで異なります。Providers examples ( https://eca.dev/models/#providers-examples )を参照して設定してください。

config.json の設置は以下の二箇所に設定可能です。

  • グローバルの場合 : ~/.config/eca/config.json 新規作成
  • プロジェクト専用の場合:.eca/config.json 新規作成
    詳しくは、configuration ( https://eca.dev/configuration/#global-config-file ) を参照してください。

例 GitHub Copilotの無料モデルを使う

/login の例として Copilot へのログイン方法を書きます。

  1. https://github.com/settings/copilot/features へアクセス
  2. Getting started を完了させる
  3. VSCode > Command Parrlet > "eca.chat" で検索して、チャットを開く
  4. /login github-copilot とチャットを送信
  5. 図のようにブラウザ開いてURLに飛んでCode入れろ、と言われるのでその通りにする
  6. ブラウザで Congratulations, you're all set! と出たら完了

5. 簡単なプロジェクトでECAを体感してみる

かんたんなプロジェクトでECAを使ってみましょう。

5.1. プロジェクト作成

mkdir -p ~/eca-demo && cd ~/eca-demo
touch deps.edn
deps.edn
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}}
 :paths ["src"]}
mkdir -p src/todo && src/todo
touch core.clj
src/todo/core.clj
(ns todo.core)

(def todos (atom []))

(defn add-todo
  [text]
  (let [id (inc (count @todos))
        todo {:id id :text text :done false}]
    (swap! todos conj todo)
    todo))

(defn list-todos
  []
  @todos)

(defn complete-todo
  [id]
  (swap! todos
         (fn [todos]
           (mapv #(if (= (:id %) id)
                    (assoc % :done true)
                    %)
                 todos))))

(defn -main
  [& args]
  (println "Simple TODO App")
  (add-todo "Learn Clojure")
  (add-todo "Try ECA")
  (println "TODOs:" (list-todos)))

5.2. ECA プロジェクトとして初期化

  1. ECA Chat起動
  2. ECA Chat に /init 送信 > AGENTS.md が生成される

AGENTS.md はプロジェクトの標準、規約、構造、ガイドラインなどを記述するために使用されます。ECAが背景情報を理解し、一貫性のあるコード提案やレビューを行うことができます。またプロジェクト固有の情報を記載することで、LLM がその情報を参照し、プロジェクトのニーズに合わせた高品質な応答を生成することができます。
/init コマンドを実行は、プロジェクトの初期設定や継続的な運用において、ECA がプロジェクトのコンテキストを把握するための基盤を作成します。

5.3. core.clj を見直してもらう

チャットに "現在の todo/core.clj を見直し、修正すべき点を教えてください。" と入力します。

いいですね。

次に "1. コマンドライン引数の未活用 の提案通りにコードを修正してください" とお願いします。

現在 agentモードなので確認なく修正されました。

では、plan モードに切り替えて、"3. ID生成方法の改善 の提案通りにコードを修正してください" とお願いします。

この状態が続いたあと、いきなり VSCode ごと落ちました。再起動後、もう一度 plan モードに挑戦したらできました。うーん。ちょっと不安定。

"テスト書いて"と雑にお願いしたら、すぐプランをだしてきました。ただし、plan モードままで承認してもファイルの作成や修正は行わないようです。
agent モードに切り替えて初めてCreate File等を行いました。

6. 使ってみた感想

  • まだバギー
    • 設定が反映されなかったり、突然落ちたりする。
    • そういうときは、VSCode の再起動でだいたい解決
    • それでも解決されないことは、とりあえず今は放置
  • 設定多い
  • 使っていく?
    • Definitely Yes!! (clojure 謹製だしね。応援するのだ!)

7. ECAの設計と Clojure 界隈における "Human in the loop"

(ここからは、ECAを使いながら改めて感じた、Clojure 界隈の "Human in the loop" に関連する私のメモです。ポエムなので読み飛ばしてください。)

Clojurian の間では、このような価値観が非常に強いです。

  • REPL駆動開発: 小さな関数を対話的に開発・検証
  • 段階的思考: 小さな変更を加え、理解しながら進む
  • 関数型思考: 純粋性と不変性を重視し、副作用を慎重に扱う
  • Simple Made Easy: 複雑さを避け、理解可能な状態を保つ

この価値観は、AIを使ってエージェント開発を行うときに以下の不安を抱える理由になっているように感じます。(Clojurian Slackを読んでいるとひしひしと感じる)

  1. ブラックボックス化: AIが何をしているか見えにくい
  2. 学習機会の喪失: 人間の思考プロセスをスキップ
  3. 複雑な変更の危険性: 一度に大きな変更を行う可能性に対する不安
  4. デバッグの困難さ: 問題が起きた時の原因追跡が難しい

よって、Clojure 界隈では、AIコーディングを行うときに、以下のステップをとても大切にしている人が多いように感じます。

  1. 計画作成
  2. 小さなタスクへ分割
  3. 小さな実装
  4. REPL検証

このステップで、人が積極的に介入してコードの品質を保つことを「善」とし、その行為を Human in the Loop と読んでいます。(そう解釈してますが、間違っていたら教えてください!) 一般的にいうと、Vibe Coding に対する Augmented Coding の概念に近いと思います。

ECAの設計は、こういったClojurianが抱える不安も配慮してあるようでした。

  • Manual approval: Default設定は、Tool Callに対して Auto Approval だが、設定でFalseにすることもできるし、Toolごとに設定することもできる (https://eca.dev/configuration/#mcp)
  • Plan behavior: Chat の "defaultBehavior": "agent" だがここを "plan" にしておくと常にプランモードでチャットできる。(注意:私の手元でテストしましたができません😭)

私がAIとClojure開発するときにやりたいことは、AIとペアプログラミングしてClojureのワクワクコーディングを深く学びたいということ。今までのように、Clojure書きながら「アハ体験😳😮🤩🤯」をし続けたいのです。まさに Human in the Loop なのです。

なので、今後ECAを使いながらClojureを書いていくにあたって、

  1. Plan modeを活用: まず計画を立てさせ、承認してから実行
  2. 小さなタスク: 大きな変更ではなく、小さな改善から
  3. Manual approvalを有効: 各ツール実行前に確認
  4. REPL連携: ECAで計画を立て、REPLで検証

という流れを守ってコーディングしていきたいと思います。

Discussion