感想
ざっくりとClaude Codeの概要を体系的に知りたくて読みました。 色々な用語、できること、Tips、実際に自律的に動かして開発を進める様子を見ることができてよかったです。 コンテキストエンジニアリングの話、それに付随して永続的・一時的なドキュメントを残していく方法が参考になりました。
MCPの設定
方法は2つ
claude mcpコマンドを利用する- 直接
.mcp.jsonファイルを編集する
CLAUDE.md
メモリとして機能する。
- 機能開発以外のルールも必要に応じてメモリに指示しておくと良い。
- それらの指示から生成されるものはすべて、AIが計画・ドキュメント化して人間が監視するフローを徹底すると良い
Claude Code Action
GitHub Actionsのワークフロー内のステップでClaude Codeを実行するためのアクション
アンビエントエージェント
- イベントに応じて動作するAIエージェント
- アンビエントエージェントの考え方では、イベントに応じてAIエージェントが人間より先回りして動き、必要に応じて人間に通知・質問・レビューといった関与を求める
AIエージェント
環境・知覚・メモリ・推論・行動という5つの要素から成り立つ。
これらが連携することで、指定されたゴールに対して自律的に行動するような振る舞いを実現する
コンテキストウィンドウ
LLMが新しいテキストを生成する際に参照できるテキストの総量と、生成する新しいテキストの全体。
CLAUDE.mdをロードしたりファイルをReadしたりWebから情報をWebFetchしたり、Bashによるコマンドの実行結果を保持したり、これまで行ってきたあらゆる動作を記録するために消費される
コンテキストウィンドウの自動圧縮
一定の閾値(デフォルト95%)を超えると、自動圧縮(auto-compaction)が実行される。これはコンテキストウィンドウがいっぱいになることを防ぐための自動的な情報処理プロセス。
過去の詳細な情報は、大幅に要約される可能性がある。
Context Rot
入力トークン量の増加につれて、LLMが情報を正確に参照・理解する能力が低下する現象
コンテキストエンジニアリング
- AIエージェントの持つ限られたコンテキストウィンドウを管理するための技術
- Claude Codeが長時間のタスクで過去の指示を忘れてしまう課題があり、この根本的な原因は「コンテキストウィンドウの容量制限」と「Context Rotによる性能低下」だった。
アプローチ
1. ツール結果のクリア
- 過去のツール呼び出し結果をコンテキストから削除しながら、ツール呼び出し自体の記録は保持する方法
- e.g. Claude Codeで実行するコマンドを設計する際、詳細はログファイルに書き出し、標準出力には概要のみを表示する
2. マイルストーンごとのでの履歴削除
- 手動で会話履歴を削除(
/clear)することで、これまで消費されたコンテキストウィンドウを開放する3. 圧縮前の外部化
- 圧縮によって失われる可能性のある重要な情報を、外部ファイルに記録する
- CLAUDE.mdに構造化ノートのルールを定義しておけば、自動的に重要な情報を外部ファイルに記録してくれる容易になる
- 構造化ノートは、重要な情報をコンテキストウィンドウの外部にあるファイルとして永続化する戦略
- 実装中に重要な設計判断や技術選択をおこなった場合、その理由をdicisions.md(例)に記録することをCLAUDE.mdでルール化しておくと良い
- 後から「なぜこの方法を選んだのか」を振り返ることが可能になる
サブエージェント
- 親エージェント(メインのClaude Code)から独立したコンテキストウィンドウを持つ、専門化されたAIアシスタントのこと。
- 親エージェントは、サブエージェントに作業を委譲し、結果だけを受け取る
- Claude Codeのサブエージェントは、マークダウンファイルとして定義される
制約と効果的な使い方
- 新しいサブエージェントを作成する際は、Claude Codeに生成させてから、カスタマイズすることが推奨される
- 親エージェントのコンテキストは参照できない
- サブエージェントに具体的な実装などの作業を実施されるのは、あまりうまくいかないパターン
- そのため、コンテキストの圧迫を避けたいタスクを実施させるのが効果的
- サブエージェントは、詳細な作業を行った後、その結果を簡潔なレポートとしてまとめる
Planサブエージェント
- 組み込みのサブエージェント。プランモード(実行せずに計画のみを立てるモード)で利用される
スキル
効果的に使うための3つのポイント
- 単一責任の原則
- 1つのコマンドは1つの目的に集中
- 適切な粒度
- 明確な実行フロー
フック
- Claude Codeのライフサイクルの特定タイミングで、スキルやスクリプトを実行する仕組み
- プロンプトではなくプログラムとして動作するため、100%確実にルールを適用できる
- スキルはプロンプトベースの仕組みであるため、Claude Codeが従うかどうかはLLMの推論内容に依存する。そのため、「〜してはいけない」と指示しても守られるとは限らない
フックの種類
10種類用意されている(ツール実行前、サブエージェント完了時、セッション開始時など)
Sandboxing
- 組み込みのセキュリティ機能
- Bashツールは強力だが、適切な制限がないと機密情報の漏洩や、システムファイルの改変が意図せず行われるリスクがある
- OSレベルの仕組みを使って、ファイルシステムとネットワークへのアクセスを制限することで、これらのリスクを軽減する
- サンドボックス内での安全なコマンドは承認なしで実行でき、サンドボックス外にアクセスしようとすると即座にブロックされる
DevContainer
開発環境全体をコンテナ化し、分離された環境でClaude Codeを実行できる。これにより、ホストシステムへの影響を遮断しながら自律的に動作させることが可能になる。
MCPとコード実行の組み合わせによる効率化
複数のMCPサーバーをClaude Codeに接続すると、ツールが数十、数百と増えて、数十万トークンを消費する可能性がある。 この対応策として、「コード実行環境を開始てMCPサーバーにアクセスする」方法が紹介されている 具体的には、MCPサーバーのツールをTypeScript関数としてラップし、それらをファイルシステム上に配置し、エージェントは必要な関数だけを読み込んで実行することで、内部的にMCPサーバーを呼び出す。
自動実行
- 自動実行を前提とする場合、例外処理ルールを明示的に定義することが大切
- ヘッドレスモード
- Claude Codeを、対話なしでプログラム的に実行する機能
- 使用するには、-p または --print オプションを指定
- e.g.
claude -p "src/ディレクトリのコードを説明してください"
- REPLモード
- Claude Codeが承認が必要なツールの使用時にユーザーに承認を求める
- ただし、Shift + Tabで権限モードを切り替えられる
- normal mode:承認が必要なツールの使用時に確認を求める
- accept edits:編集操作は自動承認、その他の承認が必要なツールの実行は都度確認
- plan mode:実行はせず、計画のみ作成






