ループを使いこなす:導入ガイド
Claude Code チームによる「エージェンティック・ループ」の公式分類。ターンベース/ゴールベース(/goal)/タイムベース(/loop・/schedule)/プロアクティブの4類型と、コード品質・トークン使用量を管理する実践則。
Claude Codeチームが定義する「エージェンティック・ループ」の概念を学びましょう。ターンベースからゴールベース、タイムベース、そしてプロアクティブなループへとステップアップするための実践的なガイドと、それぞれの最適な活用シーンを解説します。
現在、コーディング・エージェントに対して単にプロンプトを投げるのではなく、「ループを設計する」という考え方が注目されています。しかし、X(旧Twitter)などで「ループとは何か」を調べても、人によって答えはバラバラです。
Claude Codeチームでは、ループを「停止条件が満たされるまでエージェントが作業サイクルを繰り返すこと」と定義しています。私たちは、ループを以下の要素に基づいていくつかのタイプに分類しています。
- 何がきっかけで実行されるか(トリガー)
- どのように終了するか(停止条件)
- どのClaude Codeプリミティブ(基本機能)を使用するか
- どのようなタスクに適しているか
本記事では、主なループの種類と使い分け、そしてトークン消費を抑えながらコードの品質を維持する方法を解説します。すべてのタスクに複雑なループが必要なわけではありません。まずはシンプルな解決策から始め、これらのパターンを状況に応じて選択してください。
1. ターンベース・ループ(Turn-based loops)
- トリガー: ユーザーによるプロンプト
- 停止条件: Claudeがタスク完了、または追加のコンテキストが必要だと判断した時
- 最適な用途: 定期的なプロセスやスケジュールの一部ではない、単発の短いタスク
- 効率的な運用のコツ: 具体的なプロンプトを書き、Skill(スキル)を活用して検証プロセスを改善することで、やり取り(ターン)の回数を減らす
ユーザーが送るすべてのプロンプトは、ユーザー自身が各ターンを指示する「手動ループ」の始まりです。Claudeはコンテキストを収集し、アクションを実行し、作業内容をチェックし、必要に応じて繰り返し、回答を返します。これを私たちは「エージェンティック・ループ」と呼んでいます。
例えば、Claudeに「いいねボタン」の作成を依頼したとしましょう。Claudeはコードを読み取り、編集を行い、テストを実行して、動作すると判断したものを返します。その後、あなたが手動で内容を確認し、次のプロンプトを書きます。
この検証ステップを改善するには、手動の確認手順を SKILL.md として定義します。これにより、Claudeは自身の作業をエンドツーエンドでより詳細にセルフチェックできるようになります。これには、Claudeが結果を視覚的に確認したり、測定したり、対話したりするためのツールやコネクタを含めるべきです。チェックが定量的であればあるほど、Claudeの自己検証は容易になります。
例えば、SKILL.md ファイルに以下のように記述できます。
---
name: verify-frontend-change
description: UIの変更を完了とする前に、エンドツーエンドで検証する。
---
# フロントエンド変更の検証
編集が成功したという理由だけでUIの変更完了を報告してはならない。
人間のレビュアーと同じ方法で検証すること:
1. 開発サーバーを起動し、編集したページをブラウザで開く。
2. 変更箇所を直接操作する。新しいコントロール(ボタン、入力、トグルなど)の場合:
クリックし、期待通りの状態変化を確認し、ビフォー・アフターのスクリーンショットを撮る。
3. ブラウザコンソールを確認:新しいエラーや警告がゼロであること。
4. Chrome Devtools MCPを使用し、パフォーマンス・トレースを実行して
Core Web Vitalsを監査する。
いずれかのステップで失敗した場合は問題を修正し、ステップ1から再実行すること。
部分的にしか検証されていない作業を納品してはならない。
2. ゴールベース・ループ(Goal-based loop / /goal)
- トリガー: リアルタイムでの手動プロンプト
- 停止条件: ゴールの達成、または最大ターン数への到達
- 最適な用途: 検証可能な終了条件があるタスク
- 効率的な運用のコツ: 具体的な完了条件と、「5回試行したら停止」のような明示的なターン制限を設定する
複雑なタスクの場合、1回のターンでは不十分なことがあります。エージェントは試行錯誤(イテレーション)を繰り返すことでより良い結果を出せます。/goal を使って「完了の状態」を定義することで、Claudeが試行を続ける時間を延ばすことができます。
成功基準が定義されていれば、Claudeは「これで十分か」を自分で判断してループを途中で切り上げる必要がなくなります。Claudeが作業を終えようとするたびに、エバリュエーター(評価用)モデルが条件を満たしているかチェックし、ゴールに達するか設定したターン数に達するまで作業に戻します。
そのため、「パスしたテストの数」や「特定のスコアしきい値を超えること」といった決定論的な基準は非常に効果的です。
例: /goal ホームページのLighthouseスコアを90以上にする。最大5回まで試行すること。
3. タイムベース・ループ(Time-based loop / /loop と /schedule)
- トリガー: 指定された時間間隔
- 停止条件: ユーザーによるキャンセル、または作業の完了(PRの修正完了、キューが空になるなど)
- 最適な用途: 定型業務、または外部環境やシステムとの連携
- 効率的な運用のコツ: 間隔を長めに設定するか、時間ベースではなくイベントベースで反応させる
エージェントの仕事の中には、「タスクは同じで入力だけが変わる」という繰り返し作業があります。例えば、毎朝Slackのメッセージを要約するような仕事です。また、外部システム(コードレビューがついたりCIが失敗したりするPRなど)の状態を定期的にチェックして反応するような作業もこれに当たります。
このような場合、/loop を使えば、指定した間隔でプロンプトを再実行できます。
例: /loop 5m PRをチェックし、レビューコメントに対応して、失敗しているCIを修正して
/loop はローカルコンピューター上で実行されるため、PCを閉じると停止します。/schedule を使ってルーチンを作成すれば、このループをクラウドに移行できます。
4. プロアクティブ・ループ(Proactive loops)
- トリガー: イベントまたはスケジュール(リアルタイムの人間による介在なし)
- 停止条件: 各タスクがゴールを達成した時に終了。ルーチン自体はオフにするまで継続。
- 最適な用途: バグレポート、課題の選別(トリアージ)、移行作業、依存関係のアップデートなど、明確に定義された一連の継続的な作業
- 効率的な運用のコツ: ルーチンをより小型で高速なモデルに割り当て、最も能力の高いモデルは重要な判断を下す際のみ使用する
上記のプリミティブに加え、オートモードやダイナミック・ワークフロー(リサーチプレビュー版)などの機能を組み合わせることで、長時間の運用が必要な作業のためのループを構築できます。
例えば、ユーザーからのフィードバック対応を自動化する場合、以下のように構成できます:
/schedule:新しいレポートがないかチェックするルーチンを実行/goal:完了の定義と、検証方法を記したSkillを指定- ダイナミック・ワークフロー:各レポートのトリアージ、修正、修正内容のレビューを行うエージェントを編成
- オートモード:許可を求めるために停止することなくルーチンを実行
これらをまとめると、プロンプトは以下のようになります:
/schedule 1時間ごと:#project-feedback チャンネルでバグレポートを確認。 /goal:今回見つかったすべてのレポートのトリアージ、対応、返信が完了するまで停止しないで。バグを修正する際は、ワークフローを使用して3つの解決策を並列ワークツリーで検討し、判定役のエージェントに厳しくレビューさせて。
コード品質の維持
ループが出力する品質は、それを取り巻くシステムに依存します。システムを設計する際は以下の点に注意してください:
- コードベースをクリーンに保つ: Claudeは既存のコードベースにあるパターンや規約に従います。
- 自己検証の手段を与える: あなたのチームにとっての「正解」がどのようなものかをSkillとして定義してください。
- ドキュメントを参照しやすくする: フレームワークやライブラリのドキュメントには、最新のベストプラクティスが含まれています。
- コードレビューに別のエージェントを使う: 新鮮なコンテキストを持つ別のレビュアーの方がバイアスが少なく、メインのエージェントの思考プロセスに引きずられません。組み込みの
/code-reviewスキルやGithub用Code Reviewツールを活用しましょう。
個別の結果が基準を満たさなかった場合は、その場しのぎの修正で終わらせず、将来のイテレーションのためにその修正プロセスをシステム(Skillなど)に組み込むようにしてください。
トークン使用量の管理
トークン消費を抑えるために、ループには明確な境界線が必要です。
- 適切な機能とモデルを選ぶ: 小さなタスクに複数のエージェントやループは不要です。安価で高速なモデルで十分な場合もあります。
- 明確な成功基準と停止条件を定義する: 「完了」の状態を具体的に指定することで、Claudeはより早く(かつ拙速すぎずに)解決策に到達できます。
- 大規模実行の前に試験運用を行う: ダイナミック・ワークフローは何百ものエージェントを生成する可能性があります。まずは小さな範囲で試して、使用量を見極めてください。
- 決定論的な作業にはスクリプトを使う: 推論ステップを重ねるよりもスクリプトを実行する方が安上がりです。例えば、PDFの処理が必要なら、その都度コードを考えさせるのではなく、フォーム入力を実行するスクリプトをSkillとして用意しておきます。
- 必要以上に頻繁にルーチンを実行しない: 監視対象の変化頻度に合わせて実行間隔を調整してください。
- 使用状況を確認する:
/usageコマンドで最近のスキルやサブエージェントごとの使用量を確認できます。引数なしの/goalは現在のターン数とトークン使用量を表示し、/workflowsでは各エージェントの使用量を確認し、いつでも停止させることができます。
まとめ
| ループの種類 | 人間が任せるもの | 活用シーン | 推奨機能 |
|---|---|---|---|
| ターンベース | チェック(検証) | 探索中や意思決定時 | カスタム検証Skill |
| ゴールベース | 停止条件 | 完了の状態が明確な時 | /goal |
| タイムベース | トリガー | プロジェクト外で定期的に発生する作業 | /loop, /schedule |
| プロアクティブ | プロンプトそのもの | 定期的かつ明確に定義された作業 | 上記すべて + ダイナミック・ワークフロー |
ループを使い始める第一歩として、現在の自分の作業を振り返ってみてください。自分がボトルネックになっているタスクを一つ選び、「どの部分を任せられるか」を考えます。検証手順を書けますか? ゴールは明確ですか? その作業は定期的に発生しますか?
アイデアが浮かんだら、実際にループを回してみましょう。どこで詰まるか、どこでやりすぎるかを観察し、恐れずに改善を繰り返してください。
詳細については、エージェントの並列実行や、loop、schedule、goal、ダイナミック・ワークフローに関するClaude Codeドキュメントをご覧ください。
執筆:Delba de Oliveira、Michael Segner