OpenCode ツール
OpenCode のコア機能は大モデル自体だけでなく、呼び出すことができるツール(Tools)に由来します。
ツールの本質:LLM を「話すだけ」から「実際に行動する」へ変えること。
Tools = OpenCode の実行能力、そして権限 = セキュリティ境界。
一、ツール(Tools)とは
ツールは、LLM がプロジェクト内で操作を実行するための能力インターフェースです。例:
- コードの読み取り
- ファイルの変更
- コマンドの実行
- コードの検索
- ネットワークへのアクセス
ツールなし:コードを生成するのみ
ツールあり:以下のことが可能プロジェクトを直接操作する
二、ツール権限制御(最も重要)
デフォルトでは:
- すべてのツールが有効
- かつ確認なしで実行可能
本番環境では権限設定が必須!
1、基本権限設定
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
| 権限値 | 説明 |
|---|---|
| allow | 直接実行を許可 |
| deny | 完全に禁止 |
| ask | 実行前に手動確認が必要 |
2、ワイルドカード制御
ツールを一括制御できます:
{
"permission": {
"mymcp_*": "ask"
}
}
MCP からのすべてのツールは承認が必要
三、内蔵ツール詳細
OpenCode にはエンジニアリングレベルのツール一式が組み込まれています:
1、bash(コマンド実行)
{
"permission": {
"bash": "allow"
}
}
機能:
- shell コマンドを実行
- 例:npm install、git status
リスク:高(ask に設定することを推奨)
2、edit(中核ツール)
{
"permission": {
"edit": "allow"
}
}
機能:
- 既存ファイルの変更
- 正確なテキスト置換に基づく
説明:これは AI がコードを変更する中核能力です
3、write(ファイル作成)
機能:
- 新規ファイルの作成
- 既存ファイルの上書き
注意:
write は edit 権限に制御されます
4、read(ファイル読み取り)
{
"permission": {
"read": "allow"
}
}
機能:
- コードファイルの読み取り
- 行単位での読み取りをサポート
リスク:低(always allow を推奨)
5、grep(コンテンツ検索)
{
"permission": {
"grep": "allow"
}
}
機能:
- 正規表現でコードを検索
6、glob(ファイルマッチング)
機能:
- ファイルパスを検索(例:src/**/*.ts)
7、list(ディレクトリ閲覧)
機能:
- ディレクトリ構造を一覧表示
8、patch(パッチ適用)
機能:
- diff パッチを適用
説明:edit 権限に制御されます
9、lsp(実験的)
機能:
- コードスマート分析(定義へのジャンプ、参照の検索)
有効化方法:
OPENCODE_EXPERIMENTAL_LSP_TOOL=true
10、skill(スキル読み込み)
機能:
- SKILL.md を読み込み
- AI の動作を強化
11、todowrite(タスク管理)
機能:
- タスクリストの管理
- 複雑なフローの追跡
12、webfetch(Webページ読み取り)
機能:
- 指定された URL のコンテンツを取得
13、websearch(オンライン検索)
有効化方法:
OPENCODE_ENABLE_EXA=1 opencode
機能:
- インターネット上の情報を検索
違い:
- websearch:情報を探す(発見)
- webfetch:コンテンツを読み取る(取得)
14、question(インタラクティブ質問)
機能:
- ユーザーに質問する
- 要件を収集する
適用場面:
- 要件が不明確な場合
- ユーザーの判断が必要な場合
四、カスタムツール
独自のツールを定義して、AI にカスタムロジックを実行させることができます。
例:
- 内部 API の呼び出し
- データベースの操作
- ビジネスロジックの実行
本質:LLM に関数を呼び出させること
五、MCP サーバー(高度な機能)
MCP(Model Context Protocol)を使用すると、外部システムに接続できます:
- データベース
- サードパーティ API
- 内部サービス
これは AI に「外部能力」を接続することに相当します
六、基盤メカニズム(重要)
OpenCode は検索エンジンとして ripgrep を使用します:
- .gitignore に従う
- デフォルトで node_modules などのディレクトリを無視
無視ルールを上書きする方法
ファイルを作成:
.ignore
例:
!node_modules/ !dist/ !build/
これらのディレクトリを強制的に含める
七、ベストプラクティス(強く推奨)
- read / grep / glob → allow
- edit → ask(開発段階)
- bash → ask(本番環境)
- webfetch → allow
中核となる原則:
- 読み取りは緩めてもよい
- 変更は必ず制御する
- コマンド実行は慎重に