10月に、つまらないタスクをClaudeに渡した。「WordPressREST APIラッパーをPHPでスキャフォルド、PHPUnitテストを書く、それらを実行、失敗した何かを修正」。ローカルClaudeツール使用セットアップ経由でターミナルへのアクセスを与え、歩き去ってお茶を作った。12分後に戻った。テストは緑。94%のカバレッジを持つ実際のラッパーがあり、Claudeが私の簡潔な指示で言及しなかったエッジケースを捕捉した小さなインラインコメントがあった。バーモンディーのキッチンに立って本気で不安を感じた。
それがエージェンティック開発です。オートコンプリートではなく、より賢いStack Overflowではもちろんなく。目標について推論し、次のアクションを選択し、実行し、結果を観察して、完了するまでループします。そしてそれは、Seahawk Media での9年間でほぼ他に何よりも速くプロジェクト運営方法を変えました。
「エージェンティック」が実際に意味すること(そして意味しないこと)
正確にしておこう。この言葉は緩く使われているから。エージェンティックなAIループには3つのものがある:目標、ツールのセット、そして今何が起きたかに基づいて次に何をするかを決める能力。モデルは単にテキストを生成しているのではない。作用し、観察し、再計画している。
それが魔法ではないということだ。モデルは依然として関数シグネチャを幻覚できる。同じ誤った修正を7回繰り返して自分自身をコーナーにループできる。ステップ1で目標を誤解して、10ステップ間違った方向で自信をもって構築できる。私はこれらすべてを見てきた。一度、Reactダッシュボードプロジェクトで、Claudeは実は欠落したawaitだった問題を解決するために、ますます凝ったnullチェックを追加することに20分ほど費やした。その一件は私の失敗だ、初期の仕様が曖昧だった。
実務家にとって重要な区別は以下の通りだ:狭く定義されたエージェントタスクは、オープンエンドなタスクに勝る。「アラビア語、日本語、絵文字に対応したスラグサニタイゼーション関数を書いてテストする」は優れたエージェントタスクだ。「SaaS を構築してくれ」はそうではない。スコープを厳密に保つか、さもなければ間違った方向性の見直しに費やす時間は、単にコードを書くだけで済む時間よりも多くなるだろう。
私が実際に使用しているスタック
ツールの選択がここでは極めて重要だ。適切なスキャフォルディングがなければ、「エージェント的な Claude」は単なるチャットウィンドウに過ぎない。
Seahawk での私のセットアップ:
- [Claude API](https://www.anthropic.com/api)(ツール使用機能付き、特に
computer_useベータと カスタム bash/ファイルシステムツール) - IDE レイヤーとしての Cursor。バックエンドモデルとして Claude 3.5 Sonnet を設定
- プロジェクトに応じて pytest / PHPUnit / Jest を使用。Claude が確定的なシグナルをループさせるために必要だからだ。テスト出力がなければ、盲目的に飛んでいるようなものだ。
- プロジェクト構造が何であるか、コーディング標準が何であるかを Claude に伝える短いシステムプロンプト。そして重要なことに、指定されたディレクトリ外に新しいファイルを作成しようとしているなら、一旦止めて確認するよう指示すること。
この最後の制約は軽微に聞こえるかもしれない。だが違う。エージェント的なモデルはゴールに役立つと思えば、新しいモジュール全体をせっせとスキャフォルディングしてしまう。ファイルシステムへのガードレールは、何度も「これはどこから出てきたんだ?」という瞬間から私を救ってくれた。
私が使用しないもの:ほとんどの作業にマルチエージェントオーケストレーションフレームワークを使用しない。LangChain、AutoGen、CrewAI は本当に興味深いが、ソロ開発者または小規模エージェンシー向けの用途では、エージェント同士が会話するための設定のオーバーヘッドは通常、その価値がない。スコープの定まった Claude ループ 1 つが、スコープの定まらない 3 つのエージェントが互いに主張を張り合うより優れている。
ループ値のあるタスクの構造化方法
今年200回以上のエージェンティックセッションを重ねて、僕が落ち着いた方法がこれだ。モデルに4つの要素を含むタスク概要を与える:
- 目標。具体的で、テスト可能で、30ステップ未満で完了できるほど小さいもの
- 開始状態。存在するファイルは何か、既に合格しているテストは何か
- 成功条件。通常は「全テスト合格」か、生成すべき特定の関数シグネチャ
- 停止条件。「同じ修正を3回以上試みたら、停止して理由を説明する」
その4番目は過小評価されている。それなしでは、Claudeは時々無限ループになる。永遠に永遠ではなく、しかし私はそれが厄介なregex問題で18の試みをするのを見ている。それぞれ少し異なり、なし正しい、決して停止しない「確かでない」と言う。不確実性のアプローチについて明示的に混乱を浮上させるよう言うことは、実際、Anthropicモデル仕様がモデルの不確実性への接近について議論することだが、実際に、あなたはそれに対してプロンプトをする必要がある。
2022年に戻ると、クライアントは14,000の製品リストをレガシーMagentoインストールからWooCommerceにマイグレーションするジョブを渡した。その時点でClaudeはエージェンティックループをしていなかったので、2週間以上手でマイグレーションスクリプトを書いた。マイグレーションスクリプト。今日同じジョブ?厳密な仕様を書き、Magentoデータベースへの読み取りアクセススキーマとステージングWooCommerceインスタンスへの書き込みアクセスを持つClaudeにそれを与え、実行させる。2日で完了すると本気で思っている。これがデルタだ。
Claudeが意外に優れている領域
既存コードのリファクタリング
ここが最も印象的だった点です。メチャクチャな400行のクラスを与えて、単一責任の原則に向けたリファクタリングをするよう指示し、チェックポイントとして独自のユニットテストを実行させます。ファイル全体を通じてコンテキストを保持する能力は予想以上で、パスしているテストを壊さないことに本当に気をつけています。出力が常に私が選択する設計とは限りませんが、通常は正当性があります。
自分で書いていないコードのテスト作成
Seahawk はサイト監査と救済を大量に実施していました。コードベースをいつも引き継いでいました。テストはゼロで、元の開発者も不在という場合がほとんどでした。何かに手を付ける前に、引き継いだコードのテストスイートを書く目的で、エージェンティック Claude を使い始めました。ソースを読んで関数名とコメントから意図を推測し、テストを書いて実行し、予期しない失敗の時は調整します。一度それは、おそらく2年間そこにあった、カスタムWooCommerceオーダーハンドラーの無声データ破損バグをキャッチしました。誰も知りませんでした。
ボイラープレートコードの処理
RESTエンドポイントのスキャフォルディング、CRUD マイグレーション、管理画面フォーム。有能な開発者なら午後で完了する退屈な作業で、誰も楽しくありません。Claudeはここで高速で一貫性があり、実はボイラープレートに求められるのは一貫性で、創意工夫ではなく、疲れることもなく、既存コードとパターンマッチングして拡張するだけです。
うまくいかない場面
正直に言って、失敗は教訓になります。最もよく遭遇したものをいくつか挙げます。
- 大規模コードベースでのコンテキストウィンドウオーバーフロー。Claude 3.5 Sonnetは200k トークンのコンテキストウィンドウを持ちますが、40ファイルのフルWP プラグインをフィードするまで、それが非常に大きく思えます。セッションの早期に見たものを忘れ始めます。解決策:明示的なチェックポイント付きで、ジョブを小さなループに分割します。
- 自信を持つべきではないことに対する信頼。Claudeはデータベースクエリを修正し、テストを実行すると合格しますが、クエリはインデックスフレンドリーな
WHERE句をサブクエリに変更したため、現在わずかに効率が低下しています。述べられた問題は解決しましたが、述べられていない問題を作成しました。コードレビューはまだ重要です。 - ツールパーミッションの拡大。bashアクセスを与えて制限しなければ、要求していないパッケージに対して
npm installを実行したり、さらに悪いことに、認可していないネットワークリクエストを行ったりします。これは悪意ではなく、モデルが有益だと思っていることをしているだけです。何か奇妙なことが起こった後ではなく、始める前にツールパーミッションを設定してください。
セキュリティに関する注意:本番データに接続された何かに対してエージェンティックループを実行している場合、Anthropic自体のツール使用セーフティガイダンスを読んでください。長くはなく、悪い日を救う。
エージェント的動作とチャット的動作のプロンプティング
プロンプティングモデルは異なり、これは多くの人を戸惑わせます。チャットコンテキストではあなたは会話的で、反復的で、往復的です。エージェントコンテキストでは、初期プロンプトは仕様書です。あなたはタスク途中で説明のために側にいることはありません。
エージェントプロンプトを機能させるもの:
- 制約は最後ではなく最初に述べてください。ほとんどの人はそれらを隠します。
- それに何をすべきでないかを告げてください。「
/src/utilsの外のファイルを変更しないでください」は、十行の肯定的な指示よりも有用です。 - それに逃げ道を与えてください。「進めることがデータベーススキーマの変更を必要とする判断ポイントに到達した場合は、停止して理由の要約を書いてください」
- テストランナーコマンドを明示的に参照してください。「すべての変更後に
./vendor/bin/phpunit tests/を実行し、その出力を次のステップの指針として使用してください」
フレーミング変更は:あなたは非常に有能だが質問できないコントラクターへの指示書を書いています。ですからそのように書いてください。
自律性ダイアル:どの程度実行させるか
これは他のエージェンシーオーナーから最も多くもらう質問だ。AIに任せっぱなしにするか、それとも監視し続けるか、という話だ。
1年間やってみた後の答えはこうだ:完全に可逆性にかかっている。読み取り専用のリサーチ、テスト作成、新しいディレクトリへのスカフォールディングなら、実行させる。ただし、本番データベースに触れるもの、パッケージマニフェストを変更するもの、外部APIと連携するものは、数ステップごとに確認するか、少なくとも実行前に計画を確認すべきだ。
ReAct プロンプティングパターン(Reason + Act、2022年のYao et al.論文)はここで理解する価値がある。本質的にはツールを与えるとき、Claudeが内部で行うこと、大声で考えること、それを行い、結果を読む、また考える。その推論を見える化すること、各アクション前に計画を出力するようClaudeに要求することは、ループを破ることなく自然なレビューポイントを提供する。
Claudeのステップバイステップの推論出力を、ジュニア開発者のプルリクエストと同じように扱い始めた。ざっと目を通す。何か変なら介入する。妥当そうなら先に進めさせる。このメンタルモデルが自分にはうまく機能している。
よくある質問
エージェント化したClaudeは実際に本番環境の顧客案件に対応できるのか?
特定の限定的なタスクで本番環境以外であれば、そうだ、絶対にできる。プロジェクトのスカフォールディング、リファクタリング、テスト作成フェーズで定期的に使っている。本番の顧客データベースや外部決済APIに触れるものについては、実行ステップごとに必ず人間をループに入れている。モデルは有能だ。リスクはモデル自体ではなく、間違いの影響範囲にある。
エージェント化したClaudeとCursorやGitHub Copilotを使うのとどう違うのか?
CursorとCopilotはインラインコード提案とチャットインターフェース。お前が入力したものに反応する。エージェント化したClaudeは目標を与えられると、ターミナル、ファイルシステム、ウェブブラウザのようなツールを使い、複数ステップの計画を自動で実行する。オートコンプリートエンジンと、10分間は監視なしで実行でき、完了したタスクを持って戻ってこられるプロセスの違いだ。
これを使うのにコードを書けないといけないのか?
コンテキストが十分にあれば、一貫性のあるスペックを書き、出力を批判的にレビューできます。diffを読んで、その変更が理にかなっているかどうかを判断できなければ、うまくいきません。エージェンティックAIは能力を増幅します。基礎は置き換えません。
エージェンティックループにはどのClaudeモデルを使うべきですか?
Claude 3.5 Sonnetが私の現在のデフォルトです。推論品質と速度のバランスが取れており、30ステップのループで1トークンあたりの料金を払うときに重要です。Claude 3 Opusはより複雑な推論タスクに優れていますが、遅く、より高価です。大規模ジョブの初期計画ステップに使用し、その後Sonnetに実行をハンドオフします。
---
何度も戻ってくるのは、エージェンティック開発は本当にはAIが開発者を置き換えることについてではないということです。それは開発者の時間の価値を変えることについてです。昨年10月にあのPHPラッパーを書くのに費やさなかった12分間、私は設計思想について考えていました。その取引なら何度でも引き受けます。
