/note/tech

Steering Claude Code: skills, hooks, subagents and more

要約:

■ 1. 概要

  • Claude Code には AI の動作を制御するカスタマイズ方法が7種類存在する
  • 各方法はコンテキスト読み込みのタイミング、圧縮時の動作、コスト(トークン消費)の観点で異なる

■ 2. 7つのカスタマイズ方法

  • CLAUDE.md ファイル:
    • 設定場所: プロジェクトルートまたは任意のサブディレクトリに CLAUDE.md を配置
    • 読み込みタイミング: セッション開始時に常時読み込み
    • 圧縮時の動作: メモ化・キャッシュされた後に再読み込み
    • コスト: 高(関連性の有無に関わらず全行がトークンを消費)
    • 用途: ビルドコマンド、ディレクトリ構造、モノレポレイアウト、コーディング規約、チームの慣例
    • ルートの CLAUDE.md は全セッションで読み込まれ、サブディレクトリの CLAUDE.md はその領域がアクセスされたときのみコンテキストに入る
    • チームごとのファイルは200行未満に保つことを推奨
  • ルール:
    • 設定場所: .claude/rules/ ディレクトリ以下にファイルを配置
    • 読み込みタイミング: セッション開始時(スコープなし)またはファイル照合時(パススコープ付き)
    • 圧縮時の動作: 再注入される
    • コスト: 中程度
    • 用途: 特定の制約や規約(例: 「すべての API ハンドラは Zod で入力検証が必須」)
    • paths: フロントマターフィールドによるパススコープ指定で、関連時のみロード可能
  • スキル:
    • 設定場所: .claude/skills/ 以下にフォルダを作成し、各フォルダ内に SKILL.md を配置
    • 読み込みタイミング: 名前と説明はセッション開始時、本文は実行時にロード
    • 圧縮時の動作: 起動されたスキルは共有予算内で再注入(古いものから削除)
    • コスト: 低(実行時のみロード)
    • 用途: デプロイメント手順やリリースチェックリストなどの手続き的ワークフロー
    • スラッシュコマンド(例: /code-review)で起動
  • サブエージェント:
    • 設定場所: .claude/agents/ ディレクトリ以下に YAML フロントマター付きマークダウンファイルを配置(name、description、model、tool access を指定)
    • 読み込みタイミング: メタデータはセッション開始時、本文は実行時にロード
    • 圧縮時の動作: 最終メッセージのみを親セッションに返却
    • コスト: 最小(呼び出すまでコスト0)
    • 用途: 深い検索、ログ解析、依存関係監査など、並列実行または分離実行すべき補助タスク
    • 独立したコンテキストウィンドウで実行され、最終結果のみが戻る
    • 最大5レベルまでネスト可能
  • フック:
    • 設定場所: settings.json、ポリシー設定、またはスキル・エージェントのフロントマター内に登録
    • 読み込みタイミング: ライフサイクルイベント時に起動
    • 圧縮時の動作: 圧縮をバイパス
    • コスト: 低(メインコンテキスト外で動作)
    • 用途: 決定論的な自動化(リンター実行、Slack への送信、コマンドブロック)
    • 「PreToolUse」フックはツール呼び出しを検査し、終了コード2で拒否可能
  • 出力スタイル:
    • 設定場所: .claude/output-styles/ ディレクトリ以下にファイルを配置
    • 読み込みタイミング: セッション開始時、システムプロンプトに注入
    • 圧縮時の動作: 圧縮されない
    • コスト: 高(コンテキスト占有、デフォルトプロンプトを上書き)
    • 用途: 大幅な役割変更(例: 「コード補助から汎用補助へ」)
    • ビルトインの Proactive、Explanatory、Learning スタイルで多くのニーズに対応可能
  • システムプロンプト追加フラグ:
    • 設定場所: CLI 起動時に --append-system-prompt フラグで指定
    • 読み込みタイミング: 呼び出し時のみ(そのセッション限定)
    • 圧縮時の動作: 圧縮されない
    • コスト: 中程度(プロンプトキャッシングで軽減)
    • 用途: コーディング規約、出力形式設定、ドメイン知識

■ 3. 実装上のヒント

  • 「毎回 X をしたら必ず Y する」という処理にはフックを使用(自動実行の方が確実)
  • 絶対禁止事項の強制にはフック+権限管理を使用(プロンプトより確実)
  • 30行程度の手続き内容はスキルに記述(CLAUDE.md より効率的)
  • API 固有ルールには paths: でスコープ指定を行う
  • 個人設定はプロジェクトレベルではなくユーザーレベルで管理

■ 4. よくある誤り

  • 過度な CLAUDE.md の肥大化: チームごとのサブディレクトリ CLAUDE.md で分散させて対応
  • パススコープなしのルール設定: 不要な場面でも常にロードされ、トークンを無駄に消費
  • 手続き的内容を CLAUDE.md に記述: スキルに移行することで効率化
  • 個人設定を共有リポジトリに保存: ローカル設定(ユーザーレベル)を使用