日本語
ドキュメント
ツール

Tools

LLM が使用できるツールを管理します。

ツールを使うことで、LLM はあなたのコードベースでアクションを実行できます。OpenCode には一連の組み込みツールが付属していますが、カスタムツールMCP サーバーで拡張できます。

デフォルトでは、すべてのツールが有効になっており、実行に権限は必要ありません。ツールの動作は権限で制御できます。


Configure

ツールの動作を制御するには permission フィールドを使用します。各ツールについて、許可(allow)、拒否(deny)、または承認要求(ask)を設定できます。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "deny",
    "bash": "ask",
    "webfetch": "allow"
  }
}

ワイルドカードを使って、複数のツールを一度に制御することもできます。例えば、ある MCP サーバーのすべてのツールに承認を要求するには次のようにします。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "mymcp_*": "ask"
  }
}

権限の設定について詳しくはこちら


Built-in

OpenCode で利用可能なすべての組み込みツールは次のとおりです。


bash

プロジェクト環境でシェルコマンドを実行します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": "allow"
  }
}

このツールは、LLM が npm installgit status、その他の任意のシェルコマンドのようなターミナルコマンドを実行できるようにします。


edit

正確な文字列置換を使って既存のファイルを変更します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow"
  }
}

このツールは、正確なテキストマッチを置換することでファイルに精密な編集を行います。LLM がコードを変更する主要な手段です。


write

新しいファイルを作成するか、既存のファイルを上書きします。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow"
  }
}

LLM が新しいファイルを作成できるようにするにはこれを使用します。既存のファイルがある場合は上書きします。

Note: write ツールは edit 権限によって制御されます。edit 権限はすべてのファイル変更(editwriteapply_patch)を対象とします。


read

コードベースからファイルの内容を読み取ります。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "read": "allow"
  }
}

このツールはファイルを読み取り、その内容を返します。大きなファイルについては、特定の行範囲の読み取りをサポートします。


grep

正規表現を使ってファイルの内容を検索します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "grep": "allow"
  }
}

コードベース全体にわたる高速なコンテンツ検索です。完全な正規表現構文とファイルパターンによるフィルタリングをサポートします。


glob

パターンマッチングでファイルを探します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "glob": "allow"
  }
}

**/*.jssrc/**/*.ts のような glob パターンを使ってファイルを検索します。一致したファイルパスを変更時刻順にソートして返します。


lsp (experimental)

設定済みの LSP サーバーと連携し、定義、参照、ホバー情報、呼び出し階層などのコードインテリジェンス機能を取得します。

Note: このツールは OPENCODE_EXPERIMENTAL_LSP_TOOL=true(または OPENCODE_EXPERIMENTAL=true)の場合にのみ利用できます。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "lsp": "allow"
  }
}

サポートされる操作には、goToDefinitionfindReferenceshoverdocumentSymbolworkspaceSymbolgoToImplementationprepareCallHierarchyincomingCallsoutgoingCalls が含まれます。

プロジェクトで利用可能な LSP サーバーを設定するには、LSP Servers を参照してください。


apply_patch

ファイルにパッチを適用します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow"
  }
}

このツールは、コードベースにパッチファイルを適用します。さまざまなソースからの diff やパッチを適用するのに便利です。

tool.execute.beforetool.execute.after フックを処理する際は、input.tool === "apply_patch""patch" ではありません)を確認してください。

apply_patchoutput.args.filePath の代わりに output.args.patchText を使用します。パスは patchText 内のマーカー行に埋め込まれ、プロジェクトルートからの相対パスになります(例: *** Add File: src/new-file.ts*** Update File: src/existing.ts*** Move to: src/renamed.ts*** Delete File: src/obsolete.ts)。

Note: apply_patch ツールは edit 権限によって制御されます。edit 権限はすべてのファイル変更(editwriteapply_patch)を対象とします。


skill

スキルSKILL.md ファイル)を読み込み、その内容を会話に返します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "skill": "allow"
  }
}

todowrite

コーディングセッション中に todo リストを管理します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "todowrite": "allow"
  }
}

複雑な操作中の進捗を追跡するためのタスクリストを作成・更新します。LLM はこれを使って複数ステップのタスクを整理します。

Note: このツールはデフォルトでサブエージェントに対して無効になっていますが、手動で有効にできます。詳しくはこちら


webfetch

ウェブコンテンツを取得します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "webfetch": "allow"
  }
}

LLM がウェブページを取得して読み取れるようにします。ドキュメントの参照やオンラインリソースの調査に便利です。


websearch

情報を求めてウェブを検索します。

Note: このツールは、OpenCode プロバイダーを使用している場合、または OPENCODE_ENABLE_EXA 環境変数が真の値(例: true1)に設定されている場合にのみ利用できます。

OpenCode の起動時に有効にするには:

OPENCODE_ENABLE_EXA=1 opencode
opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "websearch": "allow"
  }
}

Exa AI を使ってウェブ検索を行い、オンラインで関連情報を見つけます。トピックの調査、最新の出来事の検索、トレーニングデータのカットオフ以降の情報の収集に便利です。

API キーは不要です — このツールは認証なしで Exa AI のホスト型 MCP サービスに直接接続します。

Tip: 情報を見つける必要がある(探索)場合は websearch を、特定の URL からコンテンツを取得する必要がある(取得)場合は webfetch を使用してください。


question

実行中にユーザーに質問します。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "question": "allow"
  }
}

このツールは、タスク中に LLM がユーザーに質問できるようにします。次のような場面で便利です。

  • ユーザーの好みや要件を収集する
  • あいまいな指示を明確にする
  • 実装の選択について決定を得る
  • どの方向に進むかについて選択肢を提示する

各質問には、ヘッダー、質問文、選択肢のリストが含まれます。ユーザーは提示された選択肢から選ぶか、カスタムの回答を入力できます。複数の質問がある場合、ユーザーはすべての回答を送信する前に質問間を移動できます。


Custom tools

カスタムツールを使うと、LLM が呼び出せる独自の関数を定義できます。これらは設定ファイル内で定義され、任意のコードを実行できます。

カスタムツールの作成について詳しくはこちら


MCP servers

MCP(Model Context Protocol)サーバーを使うと、外部のツールやサービスを統合できます。これには、データベースアクセス、API 連携、サードパーティサービスが含まれます。

MCP サーバーの設定について詳しくはこちら


Internals

内部的には、grepglob のようなツールは ripgrep (opens in a new tab) を裏で使用しています。デフォルトでは、ripgrep は .gitignore パターンを尊重するため、.gitignore に記載されたファイルやディレクトリは検索や一覧表示から除外されます。


Ignore patterns

通常は無視されるファイルを含めるには、プロジェクトルートに .ignore ファイルを作成します。このファイルで特定のパスを明示的に許可できます。

!node_modules/
!dist/
!build/

例えば、この .ignore ファイルは、node_modules/dist/build/ ディレクトリが .gitignore に記載されていても、ripgrep がそれらの中を検索できるようにします。