過去半年で、私が個人で構築し、納品したいくつかのプロジェクトでは、要件の整理、実装、テスト、デプロイから、その後の本番環境での問題修正やリファクタリングまで、具体的なコーディング作業の大部分を AI に任せました。
その中には業務プロジェクトもあれば、内部ツールもあります。経験したことも、ただ「ページを1つ作る」といった単純なものではなく、要件変更、インターフェース連携、テスト、デプロイ、障害、ロールバック、そして継続的なイテレーションまで、一連の流れを通して経験しました。実際にやり切ってみて、ますますはっきりしたことがあります。AI プログラミングがもたらす最大の変化は、「コード生成がより速くなる」ことではなく、エンジニアの仕事の重心が移りつつあることです。
これまでなら必ず自分で現場に入って1行ずつ打ち込む必要があったことの多くは、いまでは Agent に任せられます。しかしその一方で、要件の分解、コンテキストの整理、プロセスの制約、結果の検証は、むしろ以前より重要になっています。あなたはもはや、ただコードを書いているだけではありません。AI が継続して安定的に働ける工学的なシステムを設計しているのです。
この記事は、「人はもうコードを書く必要がない」と証明したいわけではありません。また、AI を何でもできるブラックボックスとして描きたいわけでもありません。むしろ、これは段階的な実践のまとめに近いものです。AI が実際に日常の開発フローに入ってきたとき、エンジニアは自分の働き方をどのように再構成すべきなのか、どこに投資する価値があり、どこでつまずきやすいのかを整理するものです。
エンジニアの役割を再定義する
最初、AI プログラミングの核心は「プロンプトをどれだけうまく書けるか」だと思っていました。けれど、あとになって、それは表面にすぎないと分かりました。
本当に成果物に影響するのは、たいていプロンプトの一文そのものではなく、あなたが物事をきちんと整理できているかどうかです。
- 要件は十分に明確なところまで分解されているか
- 制約と境界ははっきり書かれているか
- プロジェクトの構造とルールは Agent が理解できるようになっているか
- 納品の前に、完全な検証の閉じたループがあるか
だから、エンジニアの中心的な仕事は、「機能を直接実装すること」から「タスクシステムを設計すること」へと移りつつあります。
かつて私たちがもっとも注目していたのは、このコードをどう書くか、このインターフェースをどう呼び出すか、この bug をどう直すか、でした。いま、より一般的になっている問いは、こうしたものです。
- このタスクはどう分解すべきか
- どの制約を先に置かなければならないか
- Agent にどの文脈を渡す必要があるか
- どの情報はチャットで補足するのではなく、Agent に自動で取得させるべきか
- どのようなツールとフローで最後を支える必要があるか
だからこそ、多くの人がある錯覚を持ちます。AI を使い始めたころはとても驚くほどすごいと感じるのに、タスクが複雑になると制御できなくなり始める、という錯覚です。モデルが突然だめになったわけではありません。工学的な問題は消えておらず、ただ「実装の問題」から「組織の問題」へと変わっただけなのです。
別の言い方をすれば、エンジニアはますますシステム設計者に近づいています。コードはいまも重要です。しかし、それはもはや唯一の主戦場ではありません。あなたが設計する必要があるのは、「AI が簡単には道を外れない」ための環境です。文脈をどう整理するか、ドキュメントをどこに置くか、フローをいつ起動するか、結果をどう検証するか。これらが、AI が最終的に安定して納品できるかどうかを決めます。
Agent で Agent をレビューする
AI が大量にコードを生成し始めると、新しいボトルネックがすぐに現れました。人間の review が追いつかなくなったのです。
以前は、チームの 1 日あたりのコード増分は比較的制御しやすく、人間が diff を見るだけでも、なんとか耐えられました。いまは、Agent が 1 回でいくつものファイル、数十の関数、さらにテストやドキュメントまでまとめて変更できるため、人間の review 負荷は急に大きくなります。人が review できないということではありません。ただ、人間の注意力は希少なリソースであり、無限に拡大できるものではないのです。
そこで私はその後、自動 review フローを作りました。Agent が提出の前にまず第一ラウンドのチェックを行い、さらに別の Agent がクロスレビューを行う、というものです。人間は依然として最終決定権を持ちますが、すべての初期スクリーニングを背負うことはなくなります。
このことの価値は、ただ「時間を節約する」だけではありません。より重要なのは、review を「注意力で無理やり耐えるもの」から、「規模に応じて運用できるフロー」へと変えることです。人間が見落としやすい問題、たとえば境界ブランチ、例外パス、命名とロジックの一貫性などは、Agent review の中では、むしろ事前に露出しやすくなります。
もちろん、ここにはとても重要な境界があります。私は Agent review を「人間の review を置き換える」理由として扱ったことはありません。それはむしろ、品質を前段でフィルタする層のようなものです。機械で先に振るい落とせるものは、すべての問題を最後に人間へまとめて背負わせるべきではありません。
もしコードを Agent が書いたのなら、review もできるだけ Agent に第一ラウンドを担わせるべきです。これは人間の代替ではなく、人間の注意力をより重要な判断に残すためです。たとえば、ビジネスロジックが正しいか、アーキテクチャの方向性が妥当か、長期的な技術的負債を持ち込んでいないか、といった判断です。
Agent に読めるアプリケーションにする
コード生成のボトルネックが下がると、もうひとつ、より現実的な問題が浮かび上がってきます。検証です。
多くのチームは、AI プログラミングの難しさは「書くこと」にあると思っていますが、本当に難しいのは「それが正しく書けていると確認すること」です。アプリケーションの実行結果、ログ、監視指標、エラー情報をすべて人力で見るしかないなら、結局、全体の流れは人工 QA で詰まってしまいます。
だから後に、私がとくに重視するようになったことのひとつが、アプリケーションを Agent に読めるようにすることでした。
ここでいう「読める」とは、ページをレンダリングしてモデルにちらっと見せる、という意味ではありません。Agent が、アプリケーション実行後のフィードバックを体系的に読み取り、理解できるようにすることです。たとえば:
- UI の状態に変化があったか
- コンソールにエラーが出ていないか
- API の戻り値が期待どおりか
- ログに例外スタックがないか
- 重要指標に明らかな異常が出ていないか
これらの情報を Agent が安定して取得できるようになると、検証の工程は「人がページを見張ってポチポチ操作する」ものから、「Agent が独立して一通りの自己テストと切り分けを行える」ものへと進化します。これは、Agent がすべてのテストを必ず代替できるという意味ではありません。多くの反復的な検証作業に、ようやく自動化の土台ができるということです。
多くの場合、AI を本当に制限しているのは「コードを書けないこと」ではなく、「書いた後の結果が見えないこと」です。だから、コードを AI に書けるようにするだけでは、問題の半分しか解決していません。アプリケーションを AI に読めるようにしてこそ、開発、検証、障害対応をつなげられる可能性が生まれます。
AGENTS.md は目録であって、説明書ではない
コンテキスト管理は、AI プログラミングが「使える」から「使いやすい」へ進むための鍵です。
私たちが最初に踏んだ、とても典型的な落とし穴がありました。すべてのルールを、ひとつの巨大な AGENTS.md に詰め込もうとしたのです。ところが、プロジェクトが少し複雑になっただけで、このやり方はほぼ必ず破綻することがすぐにわかりました。
理由はとても単純です。
- コンテキストウィンドウは希少なリソースであり、大きなファイルは本当に重要な情報を押しのけてしまう
- なんでも書き込むことは、重点がないことと同じ
- 大は小を兼ねるようなルールファイルは、非常に速く腐化し、保守コストがとても高い
- 単一の巨大ファイルでは、鮮度チェック、所有権管理、自動検証が難しい
その問題は、ただ「長すぎる」ことだけではありません。すべてを書いておけば Agent が自然と賢くなる、という錯覚をチームに生ませてしまうことです。しかし実際は、その正反対です。情報を積み上げれば積み上げるほど、Agent はシステム構造を理解するのではなく、局所的なパターンマッチングをしているだけになりがちです。
その後、私たちはやり方を変えました。AGENTS.md を説明書ではなく、目録として扱うようにしたのです。
それがすることは、3 つだけです。
- Agent に、このリポジトリの大まかな構造を伝える
- 中核となるエントリポイントと、重要な規約の場所を示す
- Agent が、
docs/やコードリポジトリの中で本当に保守されるべき内容を読みに行けるように導く
このやり方の利点は明快です。第一に、AGENTS.md 自体を簡潔に保てるため、長期的に腐化しにくくなります。第二に、本当の知識をあるべき場所に置き、業務にもっとも近い人が保守できます。第三に、Agent が得るのは、ひとかたまりに混ざったルール文ではなく、地図です。
Agent に渡すべきものは、1000 ページの手引書ではなく、一枚の地図です。本当に長期にわたって有効な知識は、規約文書、設計文書、インターフェース文書、そしてコードそのものに蓄積されるべきであり、ひとつの総合エントリファイルがすべてを解決してくれると期待すべきではありません。
なぜ AI にはプロンプトだけでなくツールチェーンが必要なのか
多くの人が AI プログラミングを始めたばかりのころ、もっとも自然なやり方は「プロンプトに頼る」ことです。これは個人、小さなタスク、短い処理経路の場面ではまったく問題ありません。
しかし、タスクが複雑になり始めたり、チーム協業の段階に入ったりすると、プロンプトだけに頼るやり方はすぐに限界にぶつかります。
その理由は、プロンプトは本質的に一回限りのものですが、エンジニアリングが必要とするのは、再利用でき、協業でき、統制できる能力だからです。今日ある会話の中でうまく説明できたとしても、明日、別の人、別のリポジトリ、別の Agent が同じ品質を再現できるとは限りません。
その後、私はひとつのことをますます確信するようになりました。AI にチーム開発へ本当に参加させたいなら、能力を「個人のその場の対応」から「チームのツールチェーン」へ引き上げなければなりません。
成熟したツールチェーンは、少なくとも次のようなことを解決する必要があります。
- Agent が現在の会話だけを見るのではなく、外部システムに接続できるようにする
- チームの制約を、口頭での注意に頼るのではなく、繰り返し実行できるようにする
- 高頻度のフローを、毎回手作業するのではなく、自動で起動できるようにする
- 有効な方法論を、蓄積し、再利用し、配布できるようにする
だからこそ、私はその後、「より長いプロンプトをどう書くか」にはますます注意を向けなくなり、むしろ「能力をどう組織するか」に重点を置くようになりました。プロンプトは依然として重要ですが、それはどちらかといえばその場の指揮です。本当に上限を決めるのは、底層に再利用できるインフラがあるかどうかです。
Plugin から Marketplace へ:チームの能力を再利用できる資産にする
これらの能力を本当にチーム協働へ入り込ませるために、私は Plugin という視点から全体の体系を理解することに、より慣れています。
Plugin は、ひとつのパッケージ単位だと考えられます。それは特定のひとつのツールではなく、接続能力、制約、自動化、そして方法論を組み合わせた、インストールでき、アップグレードでき、レビューできるチーム能力パッケージです。
この角度から見ると、完全な Plugin はたいてい四つの層を含みます。
MCP:接続の問題を解決し、Agent がシステム、ドキュメント、環境を読めるようにするRules:制約の問題を解決し、チーム規範を統一して実行できるようにするHooks:起動の問題を解決し、適切なタイミングでフローが自動で発生するようにするSkill:方法の問題を解決し、「どうすべきか」を再利用できるフローとして蓄積する
この四つの層のうち、私がもっとも重要だと思うのは MCP と Skill です。
MCP は、Agent が現実世界に触れられるかどうかを決めます。接続がなければ、Agent は「チャット式の開発」にとどまるしかありません。書き出したものがどれほどそれらしくても、実際のコンテキストから離れやすくなります。
Skill は、Agent がどう進めるべきかを知っているかどうかを決めます。接続だけがあり、方法がなければ、Agent はまだ「ツールは使えるが、フローは安定しない」状態にとどまります。どこにドキュメントがあり、どこにタスクがあり、どこにログがあるかは知っていても、それらの情報を得たあとに、どの順序で動くべきかは分かっていません。
Rules と Hooks の役割も重要です。前者は制約を固定化する役割を担い、後者はこれらの能力を実際のワークフローに埋め込む役割を担います。制約がなければ、チームのスタイルはぶれます。起動がなければ、多くのよいフローも最後には「知っているが、できない」に戻ってしまいます。
さらに一歩上へ進むと、Marketplace になります。
Plugin が「能力をうまくパッケージする」ことを解決するものだとすれば、Marketplace が解決するのは「能力を外へ出す」ことです。その意味は、さらに新しい概念を導入することではなく、チームがすでに蓄積した能力を、規模をもってインストールし、再利用し、ガバナンスできるようにすることです。ここまで来てはじめて、AI ツールチェーンは、もはや一部の熟練ユーザーの私的なツールボックスではなく、本当に組織能力のレベルへ入れるようになります。
ケース:オープンソースの Skill フレームワークで工程方法を支える
プロジェクト内の能力を自分で蓄積するだけでなく、私は長期にわたって、オープンソースの Skill フレームワークを使い、工程方法を支えています。Superpowers は、とても典型的な例です。GitHub コミュニティで高い注目を集めており、すでにかなり完整な Skill 体系も蓄積されています。
私がそれを好きなのは、Skill の数が多いからではなく、多くの「よい工程実践」を、口頭の助言から明確なフローへ変えているからです。
たとえば、こうした環節です。
- 手を動かす前に、まず要求と設計をしっかり考える
- 設計を実行可能な小さなタスクへ分解する
- 隔離された環境で実装を進め、メインのワークスペースを汚染するリスクを下げる
- 書き終えたあとには、口頭で「完了した」と宣言するのではなく、かならず検証する
- 並行に進めるのに適した場面では、複数の Agent で役割を分担して進める
こうしたことは、以前もできなかったわけではありません。ただ、かなり個人の自覚に依存していました。経験の十分なエンジニアならそうすべきだと知っていますが、忙しくなったり、チーム規模が大きくなったりすると、フローはすぐに劣化しがちです。Skill フレームワークの価値はここにあります。こうした行動を「提案」から「デフォルトの動作」へ変えるのです。
この種のフレームワークが本当に価値をもつ部分は、「どれだけ多くの技を提供しているか」ではなく、チームがもともと経験と自覚に頼っていた工程習慣を、安定して再利用できるシステムへ変えることです。
それはまた、私にひとつのことを思い出させます。AI ツールそのものは、過度に神格化されやすいものです。しかし、本当に差を生むのは、しばしばモデルではなく、仕事の方法を蓄積できているかどうかです。モデルはどんどん強くなれますが、方法論がなおもすべて現場の即興に頼っているなら、品質は最終的にやはり漂流してしまいます。
完全な AI 開発の閉じたループ
上の能力をつなげて考えると、私は今、AI 開発を単発の効率化ツールではなく、完全な閉じたループとして理解することに、より慣れてきています。
比較的安定した流れは、たいてい次のようになります。
- まず問題をはっきり考え、目標、制約、境界を明確にする
- タスクをより小さな実行単位に分解する
- Agent に隔離された環境で実装を完了させる
- 文書、タスク、ログ、インターフェースなどの外部文脈を接続する
- テスト、review、ログ、実行結果で検証する
- 最後に、マージ、リリース、または継続してイテレーションするかを決める
これは「要件を AI に投げて、コードをひと塊吐き出すのを待つ」ことではなく、むしろ循環システムに近いものです。
この閉じたループがもたらす直接の利点は、ただ速いだけでなく、より安定していることにもあります。
- 開発段階で、不足している文脈や制約を見つけやすくなる
- 連携試験の段階で、手作業の持ち運びに頼るのではなく、外部情報を接続しやすくなる
- 自己検証の段階で、Agent により多くの反復的な検証作業を担わせることができる
- 納品段階で、文書、状態、変更説明をまとめて収束させやすくなる
本当に持続可能な効率は、閉じたループから生まれるのであって、ある一回の驚くような生成結果から生まれるのではありません。
さらに重要なのは、この閉じたループが逆にエンジニアの働き方を作り変えていくことです。機械的な実装に時間を使うことはますます少なくなり、境界を設計し、情報を整理し、リスクを確認し、結果を検証することに、ますます多くの時間を使うようになります。これは仕事が減ったということではなく、仕事が「コーディングという肉体労働」から「工学システムの設計」へと変わったということです。
AIプログラミング落とし穴ガイド
最後に、事前に注意しておく価値がいちばん高いと思う落とし穴をいくつか話します。
1. 最初にルールを決めないと、後はすべて負債になる
プロジェクト最初のパターンは、AIによってすばやく複製されます。最初の数千行のコードにおける構造、命名、制約、ディレクトリが安定していなければ、その後の成果物はたいてい、これらの問題を拡大するだけです。AIは増幅器です。よいパターンは増幅され、悪いパターンも同じように増幅されます。
2. 長い対話は資産ではなく、たいてい見えない負債である
だいたい十数〜二十ラウンドを過ぎると、Agentは初期の意思決定と衝突しはじめやすくなります。急に賢さを失ったのではなく、コンテキストがすでに漂流しているのです。大きなタスクでは意識的に新しい会話を開き、以前確認した結論を明確に参照するべきです。多くの手戻りは、モデルが悪いからではなく、人間が「対話が続いていること」を「一貫性が続いていること」と勘違いするからです。
3. 「完了した」は、本当に完了したという意味ではない
AIは一見完全に見える答えを出すのがとても得意ですが、それは本当に実行が通った、検証が完了した、ということを意味しません。境界ケース、例外パス、タイムアウト処理、並行処理の問題は、やはり明確に検証する必要があります。「それが完了したと言った」ことを頻繁に信じはじめた瞬間、あなたはすぐにバグを後続のフローへ持ち込むことになります。
4. 重要なロジックは必ずdiffを見る
機能テストだけではすぐに見えない問題もありますが、diffの中ではとても明白に見えることがあります。重要な変更であるほど、変更レビューを完全に省略してはいけません。とくにデータフィールド、フォールバックロジック、権限判定、時間処理のような箇所では、AIはつい手癖で、一見合理的だが実際には危険な変更を入れてしまいがちです。
5. アーキテクチャを凝りすぎない
複雑なマルチAgent編成、過剰な役割設定、重すぎるメタルールシステムは、見た目には強力そうでも、実際の保守コストはたいてい高くなります。ほとんどの場合、シンプルで、明確で、組み合わせ可能な能力設計のほうが信頼できます。ひとつのSkillで解決できることなら、先に派手な総合制御システムを導入するべきではありません。
6. 一人で回せることは、チームで回せることを意味しない
個人の効率向上と、チームの効率向上は別物です。本当に難しいのは、全員が同じ規範、ツール、プロセスを共有し、さらにプロジェクトの進化に合わせて継続的に更新できるようにすることです。一人が経験で支えられる問題は、チームではたいてい協業の中で拡大されます。
7. すべての問題にLLMが必要なわけではない
決定的に処理できることは、決定的なプログラムで解決すればよいのです。AIは、理解、生成、要約、計画のような、本当にそれを必要とする場所で使うべきであり、すべての操作をLLMに積み上げるべきではありません。多くの「AI化」方案が最終的にコストが高く、効果が低くなるのは、本来なら固定で書くべきフローまで、無理やりモデルの推論に押し込んでいるからです。
まとめ:AIプログラミングは、より速くコードを書かせるものではない
この半年を振り返ると、ひとつのことがますます確信に変わってきました。AIプログラミングにおけるもっとも重要な変化は、「より速くコードを打てる」ようにすることではなく、エンジニアに、工学の中で本当に重要な部分へ、より多くの精力を戻させることです。
つまり、次の3つです。
- コンテキストを設計する
- 制約を設計する
- 検証を設計する
これらは、手書きでコードを書いていた時代にも重要でしたし、AIが開発に参加するようになってからは、なおさら重要になります。
技術は加速していますが、工学の本質は変わっていません。要件は明確であるべきで、境界ははっきりしているべきで、構造はきれいであるべきで、検証は堅実であるべきです。AIが増幅してくれるのは、システム全体の能力です。だから最終的に得られるものは、ただの「より多くのコード」ではなく、あなたが設計したその工学の方法論そのものなのです。
もし今のAIプログラミングに対する理解を一言で要約するなら、こうです。それはエンジニアを「より速いプログラマー」に変えるものではなく、エンジニアを「より強いシステム設計者」へと押し上げるものです。コンテキスト、フロー、制約、検証をよりうまく組織できる人ほど、AIをデモや短期的な驚きにとどめず、本当の生産性へと組み込める可能性が高くなります。

WeChat Pay
Alipay
コメント
コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。