# OpenCodeの機能と実践的な使い方
🧰 組み込みツールだけでは足りない、社内APIやDBを叩きたい。そんなときはLLMが呼べる「自分専用のツール」を作れます。
🏷️ タイトル: 独自ツール作成
🔗 URL:
📘 概要
カスタムツールは、LLMが会話中に自律的に呼び出せる独自の関数です。read/write/bashといった組み込みツールを拡張し、社内APIアクセスやDBクエリなど、ドメイン固有の操作をエージェントに与えられます。定義はTypeScript/JavaScriptで書きますが、中身では任意の言語を実行できます。
⚙️ 機能の説明
・配置場所は2つ。プロジェクト単位なら `.opencode/tools/`、グローバルなら `~/.config/opencode/tools/` です。
・ファイル名がそのままツール名になります。`database.ts` なら `database` ツールになります。
・1ファイルから名前付きエクスポートで複数ツールを定義でき、その場合は `<ファイル名>_<エクスポート名>` という名前になります。
・`
@opencode-ai/plugin` の `tool()` ヘルパーで定義します。`description`(LLMへの説明)、`args`(Zodスキーマ)、`execute`(非同期の実装本体)が主要素です。
・引数はZodで型安全に定義します。`tool.schema` 経由でも、`zod` を直接 import しても構いません。
・`execute` の第2引数 context から `agent` `sessionID` `messageID` `directory` `worktree` といったセッション情報を受け取れます。
🛠️ 実践的な使い方
最小例として `.opencode/tools/database.ts` に、`tool()` で `description`・Zodの `args`(例: `query`)・非同期の `execute` を定義してデフォルトエクスポートします。
中身は任意言語を呼べます。たとえばcontextの `worktree`(gitルート)からスクリプトのパスを組み立て、`Bun.$` で `python3` を実行すればPythonにも橋渡しできます。
💡 ユースケース
社内の在庫APIや認証付き内部エンドポイントを叩くツールを定義しておけば、エージェントが組み込みツールと同じ感覚で社内データを取得・更新できます。説明文(description)を丁寧に書くほど、LLMが適切なタイミングで呼んでくれます。
⚠️ 注意点
・組み込みツールと同名にすると上書きされます。意図して置き換える場合を除き、ユニークな名前を付けてください。組み込みツールを無効化したいだけなら、上書きではなく権限(permission)で `deny` するのが正攻法です。
・`execute` 内で外部コマンドや社内APIを叩くため、実行権限や秘密情報の扱いには十分注意してください。
#
OpenCode# #
AIエージェント#