11:05Maximilian Schwarzmüller
Log in to leave a comment
No posts yet
エディタがコードを代わりに書いてくれる時代は終わりました。今は Claude Code のようなエージェントが、直接ターミナルを開き、ファイルシステムを探索してコードを修正します。便利ですが、一方で恐ろしいことでもあります。プロンプトインジェクション一つで .env ファイルや SSH キーが外部に流出する可能性があるからです。エージェントに自律性を与えつつ、一線を越えさせないための具体的な制御方法が必要です。
エージェントは基本的に、命令を遂行するためにプロジェクト全体をスキャンしようとします。これを放置すると、機密性の高い設定値まで読み取られてしまうリスクがあります。最も確実な防御策は、プロジェクトのルートディレクトリにエージェント専用の規定ファイルを作成することです。
CLAUDE.md または .agent-rules ファイルを作成してください。.env 、 ~/.ssh 、 ~/.aws/credentials といったパスは、最初から見ることすらできないよう deny ルールを記述する必要があります。--allowedTools オプションを使用して必要な機能だけを許可してください。Bash や Read、Write など、最小限のツールのみを有効にする方式です。Claude Code の権限モードのうち、すべての書き込み作業にユーザーの承認を求める Default モードを使用すれば、ソースコード流出のリスクを物理的に遮断できます。エージェントが許可なく環境変数を外部に送信する事故は、設定ファイル一つで十分に防げます。
エージェント中心のツールは、自ら計画を立てて実行します。問題は論理的エラーに陥ったときです。解決策を見つけられないエージェントが無限ループに陥り、API コールを繰り返すと、一瞬で数十ドルが請求されます。Anthropic の研究データによると、プロンプトに明示的な終了条件(Exit Criteria)を設定するだけで、実行時間を 62% まで削減できるといいます。
コストの暴走を防ぐには、プロンプトの中に「サーキットブレーカー」を直接設計しなければなりません。
npm test や特定のユニットテストの通過を、終了の絶対的な基準として明記してください。.cursorrules ファイルにグロブ(Glob)パターンを使用し、エージェントが src/api/**/* といった特定のディレクトリのルールのみを読み取るよう制限すれば、不要なトークンの浪費を防げます。このような終了ゲートを設定することで、曖昧な指示によって発生するトークン消費を抑制し、月平均の API コストを 40% 以上節約できます。
エージェントがローカルファイルを直接修正する方式は高速ですが、危険です。検証されていないコードがメインブランチを壊す可能性があるからです。Shopify のエンジニアリングチームは、自社エージェントツールである Sidekick を運用しながら、成果物を別のモデルでクロスバリデーション(相互検証)する方式を導入しました。私たちもエージェント専用の作業領域を分離する必要があります。
最もスマートな方法は git worktree を使用することです。エージェントセッション専用の独立したディレクトリとブランチを作成し、作業を任せてください。作業が終わったら git diff を実行して変更事項を要約報告させ、 Playwright や Vitest といったツールでユニットテストを自動実行させます。このプロセスを経ることで、手動レビューの時間を 70% 削減しながら、検証済みのコードだけをメインブランチにマージできます。
エージェントがコードを書く速度は、人間のタイピングよりもはるかに高速です。このとき、VS Code の editor.formatOnSave 機能がオンになっていると、エージェントがコードを記述している最中にファイル形式が強制的に変更され、テキストマッチングエラーが発生します。ツールが自分の足に引っかかって転ぶようなものです。
また、エージェントが実行する非対話型シェルは、 .zshrc に設定された環境変数を読み取れず、ツールの実行に失敗するケースが多くあります。
.vscode/settings.json で editor.formatOnSave を false にしてオフにしてください。.zshrc ではなく、シェルの実行方式に関わらずロードされる .zshenv ファイルに移すべきです。Husky を使い、エージェントが作業を終えてコミットするときだけリンターとフォーマッタが走るよう、プリコミットフックを構成してください。環境変数を見つけられず、呆然と立ち尽くすエージェントを見たくないのであれば、シェルの設定から見直すべきです。
| 設定区分 | ファイル名 | 推奨設定内容 | エージェントの可視性 |
|---|---|---|---|
| グローバル環境変数 | .zshenv | PATH, API_KEY, SDK パス | すべてのセッションでロードされる |
| 対話型設定 | .zshrc | alias, prompt, theme | エージェント実行時に無視される可能性がある |
| ログイン設定 | .zprofile | システム全域の初期化スクリプト | ログインシェルでのみ有効 |