---
title: "ECA（Editor Code Assistant）とは？Emacs・VS Code・CLIでの導入とツール承認の設定"
url: "https://www.issoh.co.jp/tech/details/8549/"
published: 2025-09-01
updated: 2026-11-07
categories: ["AIエージェント・MCP"]
publisher: "株式会社一創"
---

# ECA（Editor Code Assistant）とは？Emacs・VS Code・CLIでの導入とツール承認の設定

ECA（Editor Code Assistant）は、Emacs、VS Code、Neovim、IntelliJ、ターミナルから同じ設定で使えるオープンソースのAIコーディング支援ツールです。中心にあるのは Clojure で書かれた `eca server` で、各クライアントはこのサーバーと標準入出力でやり取りするだけです。LSP（Language Server Protocol）の発想をAIアシスタントに持ち込んだ構成です。

この記事では、2026年11月5日公開の 0.170.1 を手元で起動して確かめた内容をもとに、Emacsでの導入とキー操作、ターミナル用の eca-cli、モデルの設定、ツール承認とフック・サンドボックス、OpenCodeとの違い、採用を見送る条件までを扱います。

## まとめ：ECAの要点と導入判断

- ECAは `eca server` とクライアントの2層構成です。クライアントがサーバーを自動で取得して起動するため、通常はサーバーを手で入れる必要がありません。
- Emacsは MELPA から `M-x package-install eca` で入り、`M-x eca` でチャットが開きます。要件は Emacs 28.1 以降です。
- 2026年10月の 0.169.0 でターミナル用の `eca-cli` が公式クライアントになり、`-p` でスクリプトやCIからも呼べます。
- ツール実行の既定は「読み取り専用は許可、それ以外は毎回確認（ask）」です。止めたい操作は `toolCall.approval` の deny か、`preToolCall` フックで拒否します。
- リリースは2026年10月だけで9回です。チームで使うならサーバーの版を固定する手段を先に決めてください。

## ECAの仕組み：エディタとLLMの間に立つeca server

ECAは、エディタごとにAI機能を作り直す代わりに、共通のサーバーへ機能を集める設計です。クライアントは `eca server` を子プロセスとして起動し、LSPと同じ `Content-Length` ヘッダー付きのJSON-RPCで通信します。チャット、ツール呼び出し、モデルの切り替え、設定の読み込みはサーバー側にあるため、どのクライアントから使っても挙動と設定が揃います。

macOS（Intel）向けのネイティブバイナリ 0.170.1 を取得し、自作の小さなクライアントから `initialize` を3回送ると、応答は248〜351msでした。サーバーが公開したネイティブツールは20個で、0.161.2（2026年9月25日）と顔ぶれは同じです。スラッシュコマンドは31個から34個に増え、増えたのは `/approvals`・`/forget-approvals`・`/quota` の3つでした。

| 項目     | 内容（2026年11月7日時点）                          |
| ------ | ----------------------------------------- |
| サーバー実装 | Clojure（GraalVMネイティブバイナリと eca.jar）        |
| ライセンス  | Apache-2.0                                |
| 最新リリース | 0.170.1（2026-11-05）                       |
| リリース数  | 416件（0.0.2＝2025-06-21から）                  |
| 通信方式   | stdio上のJSON-RPC（LSP方式）                    |
| 配布OS   | macOS・Linux（amd64・aarch64）・Windows（amd64） |

最新の版は [ECAのGitHub Releases](https://github.com/editor-code-assistant/eca/releases) で確認できます。Clojure 言語そのものは [Clojureとは？JVMで動くLisp系関数型言語の特徴・文法とインストール、採用判断](/tech/details/7453/) で扱っています。

## 対応エディタとクライアント一覧

公式クライアントは次の6つで、どれもサーバーを自動で取得します。ブラウザから承認や監視をする ECA Remote は、起動中のサーバーに接続する機能です（設定の `remote.enabled` で有効化）。

| クライアント                 | 入手先                   | 要件・状態                      | スター数 |
| ---------------------- | --------------------- | -------------------------- | ---- |
| Emacs（eca-emacs）       | MELPA                 | Emacs 28.1以降               | 524  |
| Neovim（eca-nvim）       | プラグインマネージャー           | Neovim 0.8.0以降・開発中         | 68   |
| IntelliJ（eca-intellij） | JetBrains Marketplace | Tools > ECA で設定            | 19   |
| VS Code（eca-vscode）    | VS Code Marketplace   | サーバー自動取得                   | 17   |
| ECA Desktop            | GitHub Releases       | macOS・Linux向け単体アプリ         | 15   |
| eca-cli                | インストールスクリプト           | macOS・Linux（x86\_64・arm64） | 7    |

スター数は2026年11月7日時点です（サーバー本体は1,048）。関心はEmacsクライアントに集中しています。

## EmacsでECAを使う手順

Emacs自体の導入や init.el の基本は [Emacs（イーマックス）とは？使い方・インストール・init.el設定を解説【31.1対応】](/tech/details/7735/) にまとめています。ここではECA固有の部分だけを扱います。

### MELPA・use-package・Doom Emacsでのインストール

MELPA にはパッケージ名 `eca` で登録されています。MELPA をまだパッケージアーカイブに入れていない場合は、先に `package-archives` へ追加して `M-x package-refresh-contents` で一覧を更新します。use-package と Doom Emacs の書き方は [eca-emacs の公式README](https://github.com/editor-code-assistant/eca-emacs) に載っています。

```
;; MELPA
M-x package-install eca

;; use-package（Emacs 30 以降の :vc）
(use-package eca
  :vc (:url "https://github.com/editor-code-assistant/eca-emacs" :rev :newest))

;; Doom Emacs（packages.el）
(package! eca :recipe (:host github :repo "editor-code-assistant/eca-emacs" :files ("*.el")))
```

### M-x ecaによる起動と初回プロンプトの送信

`M-x eca` を実行すると、eca-emacs は `eca-custom-command` の指定、`$PATH` 上の `eca` の順にサーバーを探し、どちらも無ければ自動でダウンロードします。`<eca-chat>` ウィンドウが開いたら、`> ` の後ろにプロンプトを書いて RET で送ります。`C-u M-x eca` にすると、対象にするワークスペースのフォルダを選べます。

初回はモデルが未設定で、ログイン前のサーバーが返すモデル一覧は空です。チャットで `/login` を打ってプロバイダーを登録します（手順は後述のモデル設定の章）。

### チャットバッファのキー操作

チャットバッファで `C-c .` を押すとトランジェントメニューが開き、主要操作はそこから選べます。頻度の高いものには次のキーが割り当てられています。

| 操作               | キー        | コマンド                                       |
| ---------------- | --------- | ------------------------------------------ |
| 新しいチャット          | C-c C-n   | eca-chat-new                               |
| モデルの選択           | C-c C-m   | eca-chat-select-model                      |
| エージェントの切替        | C-c C-b   | eca-chat-cycle-agent                       |
| 保留中のツール呼び出しを1件承認 | C-c C-S-a | eca-chat-tool-call-accept-next             |
| 保留中のツール呼び出しを1件拒否 | C-c C-r   | eca-chat-tool-call-reject-next             |
| 全件承認してチャット中は記憶   | C-c C-s   | eca-chat-tool-call-accept-all-and-remember |

選択範囲の書き換えは `eca-rewrite`、カーソル位置への回答表示は `eca-chat-inline-prompt` です。複数プロジェクトを並行して走らせるなら、`eca-workspaces` が全チャットの状態（実行中・承認待ち・質問待ち）と費用を一覧にします。

### TRAMP・Magitと組み合わせる設定

TRAMP 経由でリモートのファイルを開いている場合、eca-emacs はサーバーをリモート側で起動します。自動ダウンロードはローカルだけなので、リモート側の PATH に `eca` を置くか、`eca-custom-command` でリモート上のパスを指定します。

```
(setq eca-custom-command '("/workspace/.local/bin/eca" "server"))
```

ECAは編集したファイルのバッファを読み直しますが、Magit のステータスバッファまでは更新しません。`eca-chat-tool-call-functions` フックでツール呼び出しの状態変化を受け取り、`magit-refresh-all` を呼ぶ例がREADMEにあります。

## VS Code・Neovim・IntelliJでの導入

VS Code は Marketplace の拡張機能「ECA」を入れるだけで、サーバーの取得と起動を拡張機能が受け持ちます。サーバーの版を固定したいときは `eca.serverPath` にバイナリのパスを書きます。

Neovim 版は Neovim 0.8.0 以降と curl・unzip が必要で、`:EcaChat`（既定キーは `<leader>ec`）でチャットを開きます。READMEに開発中（Work in Progress）と書かれているため、業務の主環境にするならEmacs版かVS Code版との差を先に確かめてください。Neovim本体の設定は [Neovim 0.12系への移行手順：vim.packと内蔵LSP・自動補完の実装【0.12.6対応】](/tech/details/17440/) が参考になります。

IntelliJ は JetBrains Marketplace のプラグイン「ECA」を入れ、Preferences > Tools > ECA で設定します。

## eca-cliのターミナル操作とスクリプトへの組み込み

[eca-cli](https://github.com/editor-code-assistant/eca-cli) は、エディタを開かずにターミナルでECAを使うクライアントです。0.169.0（2026年10月28日）の変更履歴で公式クライアントになりました。対応は macOS と Linux（x86\_64・arm64）で、Windows では配布されている `eca-cli.jar` を Babashka で動かします。インストールすると単体バイナリが `~/.local/bin` に入り、サーバーは eca-cli が自動で取得します。

```
bash <(curl -fsSL https://raw.githubusercontent.com/editor-code-assistant/eca-cli/main/install)

cd your-project
eca-cli                                   # 対話モード
eca-cli -p "src/main.clj は何をしている？"   # 1回答えて終了
git diff | eca-cli -p "この変更をレビューして"  # パイプの入力を文脈にする
eca-cli -p "変更点を要約" --output-format json --ephemeral
```

スクリプトから使うときに押さえる点は2つです。1つ目は承認で、`-p` で動かすと確認を求めるツール呼び出しは拒否されます（承認する人がいないため）。編集やコマンド実行までさせるなら `--trust` を付けますが、その場合は後述の deny ルールやサンドボックスと組み合わせてください。2つ目は終了コードで、0が成功、1がプロバイダーのエラーやログイン切れなどでターンが失敗したとき、2がオプションの誤りです。`--output-format json` にすると、結果に `chatId`・`isError`・`usage`・`rejectedToolCalls` などが入ります。

## モデルとプロバイダーの設定

チャットで `/login` を打ち、プロバイダー名を送ると認証手順が案内されます。完了するとグローバル設定にプロバイダーが追加され、モデルは `/model` で切り替えます。プロバイダーごとの設定例は [ECA公式ドキュメントのモデル設定](https://eca.dev/config/models/) にまとまっています。

設定例があるのは Anthropic、Codex／OpenAI、GitHub Copilot、Gemini、AWS Bedrock、OpenRouter、llama.cpp、LM Studio など17種です。API方式は openai-chat・openai-responses・anthropic・ollama が基本で（Bedrock だけは専用の bedrock 方式）、方式が合う互換エンドポイントはカスタムプロバイダーとして追加できます。

注意点は3つあります。

- **Claude Pro／Max でのログイン**：対応していますが、公式ドキュメントは「Anthropicが公式にサポートする使い方ではない」と明記しています。業務では API キーで接続します。
- **GitHub Copilot の Free・Student プラン**：自動モデル選択しか提供されず、その機能がGitHub自身のクライアントに限られるため、ECAからは使えません。READMEには「Copilotは無料モデルあり」と書かれていますが、モデル設定のページが正です。
- **サブスクリプションの残量**：0.165.0 から、Claude Pro／Max・ChatGPT・GitHub Copilot の残り枠とリセット時刻を `/quota` で確認できます。API従量なら `/costs` で費用を見ます。

設定はグローバルの `~/.config/eca/config.json` とプロジェクトの `.eca/config.json` が深くマージされ、プロジェクト側が勝ちます。手元では `.eca/config.json` に `"defaultAgent": "plan"` を書くと、起動直後の選択エージェントが plan に変わりました。チーム共通の方針はプロジェクト設定に、APIキーなど個人の情報はグローバル設定に分けます。

## codeエージェントとplanエージェントの使い分け

チャットの振る舞いは「エージェント」で切り替えます。チャットで選ぶ主エージェントは2つで、既定は code です。

- **code**：すべてのツールを使い、実際にコードを変更します。
- **plan**：編集ツールを持たず、計画を作って変更予定をプレビューで見せます。ファイルは書き換えません。

このほか、読み取り専用でコードベースを探す explorer と、複数手順の調査を並行して受け持つ general が、サブエージェントとして組み込まれています。手元のサーバーも起動時の設定通知でこの4つを返しました。

公式の推奨は、plan で計画を詰めてから code に切り替えて実行させる流れです。選択範囲だけを修正したい場合は、範囲を選んで指示する rewrite 機能を使えます。

## ツール承認の既定値と設定例

既定では、ファイル読み取りや grep などの読み取り専用ツールだけを許可し、それ以外（ファイル書き込み、シェルコマンド、MCPツールなど）は毎回確認を求めます。以前の `manualApproval` は非推奨で、`toolCall.approval` に置き換わりました。項目と判定順序の全体は [ECA公式ドキュメントのツール設定](https://eca.dev/config/tools/) にあります。

### denyルールによるrm・mvを含むコマンドの拒否

設定は `byDefault`（ask・allow・deny）と、ツールごとの allow・ask・deny で書きます。次の例は、確認を既定にしたうえで、シェルコマンドのうち rm と mv を含むものだけを拒否します。`.eca/config.json` に置いて 0.170.1 を起動し、エラーなく読み込まれることまで確認しました。モデル未設定のため、実際の拒否動作は確かめていません。

```
{
  "toolCall": {
    "approval": {
      "byDefault": "ask",
      "deny": {
        "eca__shell_command": {
          "argsMatchers": { "command": ["(?s).*\\b(rm|mv)\\b.*"] }
        }
      }
    }
  }
}
```

`argsMatchers` の正規表現はJavaの書式で、引数の値全体と一致したときだけ当たります。コマンドは連結ごと1本の文字列として照合されるので、`cat a | rm b` も上の正規表現で拒否されます。先頭の `(?s)` は改行も `.` に一致させる指定で、Java 25 で確かめると、これを外したパターンは「ls」と「rm a」を改行でつないだ文字列に一致しませんでした。複数行のコマンドが拒否から漏れるので外さないでください。`argsMatchers` の無い deny は、ツール自体をLLMから見えなくします。

### ツール承認ルールの判定優先順位

先に当たったものが採用されます。順に、deny ルール、チャット中に記憶した承認、ツール自身の安全確認（ワークスペース外のパスを扱う操作は allow があっても確認に回る）、ask、allow、旧 `manualApproval`、`byDefault` です。チャット単位で全呼び出しを自動承認する trust mode も deny は上書きしません。新しいチャットを常に trust mode で始める `chat.defaultTrust` もありますが、deny ルールを書く前には有効にしないでください。

plan と explorer は独自のルールで全体設定を置き換え、rm・mv・`git commit`・`npm install` などの変更系コマンドを拒否します。全体設定に足した allow は、この2つを使っている間は効きません。

### 「承認して記憶」の範囲は0.164.0からチャット単位

確認画面で「承認して記憶」を選ぶと、同じツールの以降の呼び出しは自動で通ります。0.164.0（2026年10月13日）でこの記憶の範囲が全チャットからそのチャットとサブエージェントに狭まり、`/approvals` で一覧、`/forget-approvals` で消去できるようになりました。記憶は設定ファイルに書かれません。

シェルと git は、ツール単位ではなくコマンド単位で記憶します。`git checkout` を記憶しても `git push` は確認されます。`$(...)` やバッククォート、サブシェル、ヒアドキュメント、ファイルへのリダイレクト、`sudo`・`bash -c`・`xargs` を含むコマンドは、記憶済みでも毎回確認に戻ります。

## フックによる実行拒否とサーバー全体のサンドボックス化

承認ルールで書けない条件は `preToolCall` フックで判定できます。フックはシェルコマンドで、標準入力にJSONでイベントが届きます。終了コード2で終えるとツール呼び出しを拒否し、標準エラーの文がLLMに理由として渡ります。次の例は jq を使い、入力を読めなかったときも拒否に倒します。正規表現で `git push` という文字列を探す補助策なので、`git -C /tmp push` やGitエイリアス経由のpushまでは防げません。フックは13種類あり、一覧は [ECA公式ドキュメントのフック設定](https://eca.dev/config/hooks/) にあります。

```
#!/usr/bin/env bash
# ~/.config/eca/hooks/block-push.sh：git push を含むコマンドを止める
cmd=$(jq -er '.tool_input.command | select(type == "string")') || {
  echo "フック入力の解析に失敗したため拒否します" >&2
  exit 2
}
if printf '%s' "$cmd" | grep -Eq '(^|[^[:alnum:]_-])git[[:space:]]+push([^[:alnum:]_-]|$)'; then
  echo "git push はこのリポジトリでは人が実行します" >&2
  exit 2
fi
exit 0
```

```
{
  "hooks": {
    "block-git-push": {
      "type": "preToolCall",
      "matcher": { "eca__shell_command": {}, "eca__git": {} },
      "actions": [{ "type": "shell", "file": "~/.config/eca/hooks/block-push.sh" }]
    }
  }
}
```

ECAには `shell_command` とは別に `git` ツールがあるので、matcher には両方を入れます。スクリプト単体に入力を流すと、`git add . && git push origin main`、command の無い入力、JSONでない入力は終了コード2、`git status`・`git push-all` は0でした。この設定入りの 0.170.1 は起動エラーなく動きましたが、モデル未設定のため実際の拒否は確かめていません。

承認ルールもフックもECAのプロセス自身が守る約束なので、信頼できないリポジトリではOSレベルの隔離を重ねます。シェル、ファイル編集、MCPのstdioサーバー、フックはすべて `eca server` の中か子プロセスで動くため、サーバーごと包めば全部が隔離されます。公式は Docker／Podman 用のイメージ `ghcr.io/editor-code-assistant/eca-sandbox-image` を配布し、Emacs では `eca-process-wrapper-function` で firejail などを前置できます。シェルだけを包む `toolCall.shellCommand` はMCPサーバーやファイル操作が対象外なので選びません。

## /initとAGENTS.md・スキル・コンテキスト指定

プロジェクトで最初に1回 `/init` を実行すると、リント方法やテスト手順をまとめた AGENTS.md を生成・更新します。ECAはプロジェクト直下の AGENTS.md と `~/.config/eca/AGENTS.md` を常に文脈へ含め、最終的にLLMへ送るプロンプトは `/prompt-show` で確認できます。AGENTS.md とほかのツールの指示ファイルの違いは [copilot-instructions.mdとは？書き方とサンプル・配置場所、AGENTS.mdとの違い【2026年10月】](/tech/details/10330/) で比較しています。

スキルは `SKILL.md` を置いたフォルダで、`.eca/skills` のほか `.agents/skills` と `~/.agents/skills` も読みます。後の2つはCodexやCursorなども読む共通の置き場所で、ほかのツール用に書いたスキルをそのまま使えます。手元で `.agents/skills/release-note/SKILL.md` を置いて起動すると、コマンド一覧に `/release-note` が種別 skill で加わりました。仕様は [Agent Skillsとは？SKILL.md仕様とAAIF寄贈後も移植性を保つ実装手順](/tech/details/17685/) で解説しています。

チャット中の文脈指定は記号で使い分けます。`#` はファイルパスだけを書き込み、読むかどうかはLLMに任せます。`@` はファイルの中身を添付し、MCPサーバーのリソースも指定できます。MCP自体は [MCP（Model Context Protocol）とは？仕組み・APIとの違い・MCPサーバーの作り方](/tech/details/5736/) を参照してください。

## ECAとOpenCodeの違い：入口と承認の既定値

「eca vs opencode」で比べられることの多い OpenCode は、ターミナルのTUIを主な入口にするオープンソースのコーディングエージェントです。`opencode serve` でOpenAPIを公開するHTTPサーバーとしても動き、エディタからは Agent Client Protocol（ACP）経由で `opencode acp` を起動して使います。ECAは逆に、エディタごとの専用プラグインを主な入口にしています。

| 観点         | ECA                   | OpenCode                 |
| ---------- | --------------------- | ------------------------ |
| 主な入口       | エディタのプラグイン＋eca-cli    | ターミナルのTUI                |
| エディタとの接続   | stdioのJSON-RPC（LSP方式） | ACP（opencode acp）        |
| ライセンス      | Apache-2.0            | MIT                      |
| 最新版（11月7日） | 0.170.1               | v2.2.6（V1系はv1.19.5）      |
| ツール承認の既定   | 読み取り専用以外はask          | buildは原則allow（.env等はask） |

差が大きいのは承認の既定値です。[OpenCodeの権限設定のドキュメント](https://opencode.ai/docs/permissions/) によると、V2の共通基本設定は全操作を許可し、確認対象は .env と .env.\* の読み取りだけです（.env.example は許可）。ただし、planは計画用ディレクトリ以外の編集を拒否し、exploreにも操作制限があります。既定のbuildでは、ワークスペース外のファイル操作も確認されません。ECAは編集もシェルも既定で確認を求めるので、導入した日から人の目を通す運用になります。

選び方ははっきりしています。Emacs や IntelliJ の中で使いたい、または承認を既定で厳しくしておきたいならECAです。ターミナルで完結し、利用者の多さと情報量を重視するなら OpenCode が向きます。両方を使う場合も、ECAのモデル設定には OpenCode Go を接続先にする例が載っているため、契約を分ける必要はありません。OpenCode の導入と設定は [OpenCodeとは？2.0の変更点・インストール・設定・無料モデルを解説【2026年10月】](/tech/details/10369/)、VS Code専用のエージェントは [Clineとは？VS Code拡張・CLI・Desktopの使い方と料金、自動承認の既定値（v4.1対応）](/tech/details/17387/) で扱っています。

## ECAを選ぶ場面と見送る場面

ECAが最も効くのは、チーム内で使うエディタがばらばらな場合です。モデル、承認ルール、フック、MCPサーバーの設定は config.json で、プロジェクトへの指示は AGENTS.md で共有でき、Emacs派とVS Code派とターミナル派で挙動が揃います。

一方、次の条件に当てはまるなら見送るか、検証期間を長めに取ってください。

- **VS Code だけで完結しているチーム**：VS Code 専用のエージェントの方が利用者も情報も多く、ECAを挟む利点が小さくなります。
- **版の固定が必要な環境**：2026年10月だけで9回リリースされ、0.x系のため挙動の変更も起きます（承認の記憶がチャット単位になった0.164.0が実例）。既定ではクライアントが最新サーバーを取得するので、Emacs なら `eca-custom-command`、VS Code なら `eca.serverPath` で検証済みのバイナリを指す運用を決めてから展開します。
- **Neovim や Windows のターミナルが主環境**：Neovim クライアントは開発中と明示され、eca-cli のネイティブ版は Windows に無いためです。

ほかのコーディングエージェントとの位置づけは [Coding Agent（コーディングエージェント）とは：仕組み・3つの型と主要ツールの料金・選び方【2026年11月】](/tech/details/7036/) で整理しています。

## よくある質問

### ECAは何の略ですか？

Editor Code Assistant の略です。特定のエディタに依存しないAIペアプログラミング支援を目的としたオープンソースプロジェクトで、公式サイトは eca.dev です。

### ECAは無料で使えますか？

ECA本体は Apache-2.0 のオープンソースで無料です。費用がかかるのは接続先のLLMで、各プロバイダーの料金体系に従います。API従量の費用は `/costs`、サブスクリプションの残り枠は `/quota` で確認できます。

### EmacsでECAを使うには何が必要ですか？

Emacs 28.1 以降が必要です。MELPA から `M-x package-install eca` で入れ、`M-x eca` を実行するとサーバーが自動でダウンロードされます。その後チャットで `/login` を打ってモデルを設定します。

### ローカルLLMで使えますか？

使えます。Ollama 方式に対応しているほか、llama.cpp と LM Studio の設定例も公式ドキュメントにあります。ローカルモデルの上限トークン数や料金表示は設定で上書きできます。

### Clojureを書けなくてもECAを使えますか？

使えます。サーバーが Clojure で実装されているだけで、利用者が扱うのは JSON の設定ファイルとクライアントです。

## 関連記事

- [Coding Agent（コーディングエージェント）とは：仕組み・3つの型と主要ツールの料金・選び方【2026年11月】](/tech/details/7036/)
- [Emacs（イーマックス）とは？使い方・インストール・init.el設定を解説【31.1対応】](/tech/details/7735/)
- [OpenCodeとは？2.0の変更点・インストール・設定・無料モデルを解説【2026年10月】](/tech/details/10369/)
- [Clineとは？VS Code拡張・CLI・Desktopの使い方と料金、自動承認の既定値（v4.1対応）](/tech/details/17387/)
- [MCP（Model Context Protocol）とは？仕組み・APIとの違い・MCPサーバーの作り方](/tech/details/5736/)

---

出典: [ECA（Editor Code Assistant）とは？Emacs・VS Code・CLIでの導入とツール承認の設定](<https://www.issoh.co.jp/tech/details/8549/>)（株式会社一創）
