Skills: ツールバインディングと呼び出し
最終更新:2026-08-31
ツールは Skill の両手——何をバインドするかで、Skill に何ができて何ができないかが決まります。
1. ツール体系の概要
(1) 組み込みツールの分類
| カテゴリ | ツール | 能力 | リスクレベル |
|---|---|---|---|
| 読み取り | Read | ファイル内容の読み込み | 🟢 低 |
| 検索 | Grep, Glob | コードパターンの検索 | 🟢 低 |
| 書き込み | Write | ファイルの作成/上書き | 🟡 中 |
| 編集 | Edit | ファイルの精密修正 | 🟡 中 |
| 実行 | Bash | Shell コマンドの実行 | 🔴 高 |
| ネットワーク | WebFetch | Web コンテンツの取得 | 🟡 中 |
(2) MCP ツール
Model Context Protocol (MCP) ツールは AI の能力の境界を拡張します:
JSON
// MCP サーバー設定の例
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://..."
}
},
"browser": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-browser"]
}
}
}
2. ツール選択戦略
(1) 最小権限の原則
TEXT
📖 参照専用
タスク要件分析 → 必要ツールを特定 → 必要ツールのみバインド
例:
┌─────────────────┬──────────────────────┐
│ タスク │ バインドツール │
├─────────────────┼──────────────────────┤
│ 読み取り専用レビュー │ Read, Grep, Glob │
│ コード修正 │ Read, Edit, Bash │
│ プロジェクトリファクタリング │ Read, Write, Edit, Bash, Grep │
│ 完全自動デプロイ │ 全ツール + MCP │
└─────────────────┴──────────────────────┘
(2) Edit vs Write
| 観点 | Edit | Write |
|---|---|---|
| 粒度 | 行レベルで精密 | ファイル全体 |
| 安全性 | 指定部分のみ変更 | 他の内容を上書きする可能性 |
| 適用シナリオ | バグ修正、小規模調整 | 新規ファイル作成、完全書き直し |
| 推奨度 | ✅ 優先的に使用 | ⚠️ 慎重に使用 |
(3) Bash の安全な使用
MARKDOWN
## Bash 使用ルール
許可されるコマンド:
- git status, git diff, git log
- npm test, pytest, go test
- ruff check, eslint, prettier
- docker ps, kubectl get
禁止されるコマンド:
- rm -rf / (危険な削除)
- curl | bash (リモートスクリプト実行)
- シークレットを含む環境変数のエクスポート
- システム設定を変更するコマンド
3. ツール呼び出しの最適化
(1) バッチ読み込み
MARKDOWN
# 非効率:個別に読み込み
1. Read src/main.py
2. Read src/utils.py
3. Read src/config.py
# 効率的:先に Glob で範囲を特定し、的を絞って読み込み
1. Glob "src/**/*.py" → ファイルリストを取得
2. 重要ファイル(メインエントリ、設定、ユーティリティ関数)を Read
(2) 検索先行
MARKDOWN
# 非効率:すべてのファイルを無差別に読み込み
1. すべての .py ファイルを Read(50+ ファイル)
# 効率的:先に検索で位置を特定
1. Grep "class.*View" → すべてのビュークラスを見つける
2. Grep "TODO|FIXME|HACK" → 技術的負債を見つける
3. 検索結果の中で深掘りが必要なファイルだけを Read
(3) ツール呼び出しチェーン
graph TD
A[Glob: ファイル範囲を特定] --> B[Grep: キーパターンを検索]
B --> C[Read: 対象ファイルを深く読む]
C --> D{修正が必要?}
D -->|はい| E[Edit: 精密に修正]
D -->|いいえ| F[分析レポートを出力]
E --> G[Bash: 修正結果を検証]
4. ツールバインディングの実践
▶ 例1:読み取り専用分析 Skill
YAML
---
name: tech-debt-scanner
description: "技術的負債スキャン、TODO/FIXME/HACK とコードスメルを検出"
triggers:
- keyword: "tech-debt|技術的負債"
tools:
- Grep
- Glob
- Read
---
# 技術的負債スキャンスキル
## 実行フロー
1. Grep で TODO、FIXME、HACK コメントを検索
2. Grep でコードスメルパターンを検索(長すぎる関数、深いネスト)
3. Read で高優先度の問題を詳細にチェック
4. 優先度順に技術的負債リストを出力
▶ 例2:自動修正 Skill
YAML
---
name: lint-fix
description: "コードスタイル問題を自動修正"
triggers:
- keyword: "lint-fix|スタイル修正"
tools:
- Read
- Bash
- Edit
---
# コードスタイル修正スキル
## 実行フロー
1. Bash で linter を実行(プロジェクトタイプに応じて自動選択)
2. linter の出力を分析
3. 自動修正可能な問題は linter --fix を実行
4. 手動修正が必要な問題は Edit で個別に修正
5. Bash で再度 linter を実行して検証
5. ツール権限管理
(1) プロジェクトレベルの権限
JSON
// .claude/settings.json
{
"permissions": {
"allow": [
"Read(*)",
"Grep(*)",
"Glob(*)",
"Edit(src/**)",
"Bash(npm test,pytest,git *)"
],
"deny": [
"Write(.env*)",
"Bash(rm *)",
"Bash(curl *)"
]
}
}
(2) Skill レベルの権限
YAML
# Skill の frontmatter でツール使用範囲を制限
tools:
- Read
- Edit:
paths: ["src/**", "tests/**"]
- Bash:
commands: ["pytest", "ruff check"]
Alice がチームのツール権限を設定した後、Skill による誤削除の問題は発生しなくなりました。Bob は言います:「権限管理は能力を制限するものではなく、安全な境界を設定するもの——Skill が安全な領域内で自由に活躍できるようにする。」
❓ よくある質問
Q ツールをバインドしたのに AI が呼び出さない場合は?
A プロンプトでツールの使用を明示的に要求し、呼び出し手順を記載してください。それでも呼び出さない場合、プロンプトが十分に具体的でないか、ツールの説明が不明確な可能性があります。
Q Skill が危険な操作を実行するのを防ぐには?
A 3層の防護——最小権限(必要ツールのみバインド)、パス制限(Edit はディレクトリを限定)、コマンドホワイトリスト(Bash は安全なコマンドのみ許可)。
Q MCP ツールと組み込みツールの違いは何ですか?
A 組み込みツールは AI プラットフォームに内蔵されており、MCP ツールは外部サービスが提供します。MCP ツールは能力が強力ですが設定が複雑で、データベース/ブラウザなどの外部能力が必要なシナリオに適しています。
📖 まとめ
- ツールは6つのカテゴリに分類:読み取り、検索、書き込み、編集、実行、ネットワーク
- 最小権限の原則:タスクに必要なツールのみバインド
- Edit を Write より優先し、無差別読み込みより検索による位置特定を優先
- 権限管理の3層:プロジェクトレベル、Skill レベル、ツールパラメータレベル
📝 練習問題
- 基礎問題(難易度⭐):既存の Skill のツールバインディングを分析し、過剰な権限付与や権限不足がないか確認してください。
- 応用問題(難易度⭐⭐):lint 問題を自動修正する Skill を作成し、適切にツールを選択して権限を設定してください。
- チャレンジ問題(難易度⭐⭐⭐):ツール呼び出しチェーンの最適化方案を設計し、最適化前後の呼び出し回数と所要時間を比較してください。