誰もがAIによるコーディングの話題をしています。会話の多くは理論的です。
私は2022年からAI支援を使った本番ソフトウェアの出荷を続けてきました — ChatGPTがまだ新しく、これは実際には珍しかった時代です。その期間、実取引を処理するセキュリティAPI、マーケティング自動化システム、そして360度のエージェントセキュリティツールキットなど、数多くの製品を作ってきました。
この過程で、実践の方がモデルよりも重要だということを学びました。実際に機能するのは以下の点です。
The 66% Problem
Stack Overflowの2025年の調査によると、66%の開発者が「ほぼ正しい」AI生成コードを修正するのに自分で書くよりも時間を費やしている、という結果が出ています。
規律を省くと何が起こるかを見てきました。しかし、私は早い段階でその罠を避ける方法を学びました。
2022年後半から2024年にかけて、私はAIに直接私のコードベースへ書かせることを許しませんでした。特定の問題のためのコードを生成し、それを自分で切り貼りして動作を学び、徹底的にテストしていました — ファイルレベル、単体レベル、システムレベルで。痛みは、私が理解していないコードを出荷することではなく、AIが私の全コードベースをほとんど理解していない極小のコンテキストウィンドウの中で作業することでした。私は特定の機能を1ファイルずつ開発させることしか信頼できませんでした。
この制約が私に規律を課しました。AIをシステムに解き放つことはできませんでした。AIを、検証と手動統合が必要なコード生成ツールとして運転席に据えたのです。
コンテキストウィンドウは大きくなり、ツールは改善しました。しかし、初期の教訓は今日でも私の作業に役立っています。実際に機能するのは以下の通りです。
Practice 1: 質問はあなたのスーパーパワー
開発者が理解していないコードを出荷してしまう最大の理由は何でしょうか。答えは「質問をしないこと」です。
AIは驚くべき教育ツールです。私は常に以下を問いかけます:
- "この決定はなぜ行われたのですか?"
- "内部ではこれはどう動作しているのですか?"
- "技術的な詳細を見せてください。"
- "データフローのモックアップを作成してください。"
- "この入力が不正な場合はどうなりますか?"
深く、詳細な質問。単に「これは機能しますか?」ではなく、「XがYを呼ぶときには正確に何が起こるのか」を説明してもらう質問です。
これには二つの目的があります。ひとつはコードを理解すること、もうひとつは、コミット前にミスを拾うことです。AIが何かを明確に説明できないとき、それは理解していないという赤信号です。
Practice 2: ミッションクリティカルなコードを自動で受理しない
重要な案件ほど、私はAIの動作をリアルタイムで監視します。生成される各行を逐次読み取り、間違いの方向に向かっているときには介入して修正します。
この単一の実践だけで、他のどのデバッグよりも時間を節約できました。
本能としては、AIに完了させて後で見直すという流れに走りがちです。しないでください。完了までには2000行ものコードを見直すことになり、各決定の文脈は失われています。でも、20行を書かせて3行目の誤りを見つける──それは10秒の修正で済む場合もあります。1時間のデバッグを回避できます。
自動受理は定型文のためのものです。その他は、監視します。
Practice 3: 生成より統合から始める
AIのコーディングツールが初めて出現した頃、エージェントにコードを直接コードベースに書かせてはいませんでした。
代わりに、AIにコードを生成させ、それを自分で切り貼りして挿入 — まさにStack OverflowのようにAIを使っていました。コードを読んで理解し、適切な場所を決め、手動で統合します。
これにより、AIが得意とする定型・パターン・構文と、不得意なアーキテクチャ・エッジケース・あなたの特定のコードベースの規約について、重要な教訓を得ました。何より、自分をコントロールした状態を保てます。
この初期の規律が、Practice 2が現在機能する理由です。AIのコードを習慣的に受け入れる前に、それを読んで評価する訓練を自分で積みました。
AIコーディングに慣れていない人は、ここから始めてください。生成→レビュー→手動で統合。AIの出力を自分のコードベースに直接触れさせる前に、その出力を評価する筋肉を養いましょう。
Practice 4: システムエンジニアの視点で考える
AIは個々の機能を実装するのには長けていますが、部品がどのように結びついて全体として機能するかには弱いです。
それが私の仕事です。
AIに何かを実装させる前に、次の点を考えます:
- この機能は既存のシステムとどう接続しますか?
- どんなデータが入ってきて出ていきますか?
- これが影響する他のコンポーネントは何ですか?
- 全体のアーキテクチャのどこにはまりますか?
AIはあなたのシステムの全体像を持っていません。あなたは持っています。この視点を欠くと、誰もが個別には正しく動作していても、それらが一緒には機能しないコードベースに行き着くでしょう。
Practice 5: 範囲を徹底的に絞る
私は決してAIに、トップからボトムまで全体を開発させません。絶対に。
代わりに、エージェントとともに個々の機能を開発します:
- 計画する — 正確には何を作っていますか?
- 議論する — どう機能すべきですか?エッジケースは?
- 質問する — 実装前に多くの質問を投げかけます
- 提案されたコードをレビュー — 議論中にAIに例コードを生成させる
- 実装する — 機能を1つずつ実装
それは単なる仕様以上のものです。最終的に動く出力を得るための対話です。実装が始まる頃には、ディスカッションの段階でドラフトをすでに見ているため、コードがどうなるかを正確に知っています。
実装が始まる頃には、私はすでにディスカッション中にサンプルコードを見て、そこについて質問をし、問題を特定し、アプローチを洗練させてきました。実装はほぼ機械的になります。
Practice 6: 徹底的なシステムテスト
ユニットテストはしばしば不十分です。機能がその機能として機能するかどうかを試すだけで、実際のシステムで機能するかどうかは分かりません。
各機能について、私は複数のタイプのテストを作成します:
- 孤立して機能しますか?
- 既存のコードと正しく統合しますか?
- 本来起こるべきでないエラーは何ですか?
- 誤って戻されたり壊れたりしたものは?
- 現実世界の入力を扱えますか?ハッピーパスのテストデータだけではなく?
1つの機能について、完了とみなす前に少なくとも5種類のシステムと統合テストを実施することが多いです。
機能優先の開発アプローチ(実践5)はここでも重要です。AIに1つの機能ずつ開発させると、各部品を徹底的にテストできます。
Practice 7: 実装前に共通理解を構築する
プログラミングは問題解決です。コードはその出力に過ぎません。
コードに触れる前に、AIと拡張的な対話を通じて問題の共通理解を構築します。単に「何を作るべきか?」だけでなく、深い探求です:
- AIに関連モジュールを読んで要約させる
- データフローとアーキテクチャを図式化させる
- 現在の挙動を理解するために共同で診断テストを実行する
- 何が機能しているのか、何がそうでないのか、そして理由を特定する
- 一緒に選択肢とトレードオフを検討する
実践の現場でこれがどう見えるかの一例です。私のML LLM攻撃分類器の検出率を改善する前に、AIには以下をさせました:
- 全体のパイプラインアーキテクチャをマッピングする(クライアント → サーバ、各層が何を提供するか)
- MLモデルが実際に検出していたものと、見逃していたものをチェックするテストを実行する
- モデルが訓練された特徴と、必要だったものを分析する
- 訓練データのギャップを特定する(存在したが含まれていなかった攻撃パターン)
- バランスを保ちながら訓練データを拡張する計画を提案する
この探究の後だけで—AIと私の両方が現在のシステム、問題、解決策を理解した後に—コードを書き始めました。
これにより共有された基準が生まれます。AIは文脈を理解します。私はアプローチを理解します。実装が始まる時には、ディスカッション中に例コードをすでに見ていて、そこについて質問をし、問題を特定し、アプローチを洗練させてきました。実際の実装はほぼ機械的になります。
Practice 8: AIが見逃す点を自動化する
AIはセキュリティレビューには信頼できません。SQLインジェクション、XSSの脆弱性、ハードコーディングされた認証情報、そして決定論的スキャナが毎回検出するOWASPトップ10の他の問題を見逃すことがあります。
私は標準的なCI/CDの慣行の一部として、自動化されたセキュリティスキャンを実行します:
- 危険なパターンをフラグする静的解析
- 依存関係の脆弱性チェック
- 明らかなセキュリティ問題をブロックするプリコミットフック
これらはAI駆動ではありません。決定論的なパターンマッチャーで、毎回同じ方法で同じ脆弱性を捕捉します。幻覚もなく、見逃しのあるエッジケースもなく、3つ前のファイルで書いたデータベースクエリに対する見逃しもありません。
コードに潜んでいる、あなたもAIも考えていなかったことを捉える価値があります。機能に集中しています。AIはあなたが求めたことに集中しています。どちらも3つ前のファイルで書いたデータベースクエリへのインジェクション攻撃を体系的にチェックしていません。
自動スキャナはセキュリティの専門知識を置き換えるものではありません。しかし、出荷前に明らかな問題を捉える確かなセーフティネットです。
What I've Shipped Using These Practices
These aren't theoretical. Using them, here's some of what I've built:
- AI Security Guard — A security scanning API with 5 specialized ML/NLP detection experts, processing real x402 micropayment transactions
すべて生産性のため。すべてAIの支援を受けて。すべてこれらの実践とともに。
メタの教訓
AIでのコーディングを通じて成功する開発者は、最も多くAIを使う人にはならない。むしろ、それをうまく使う規律を身につける人になる。
AIはエンジニアリング判断を置き換えるものではない。AIはあなたが持つ判断を拡張する。良いプラクティスとAI=生産性の高いソフトウェア。プラクティスなしとAI=技術的負債の温床。
規律を築こう。
AIセキュリティガードを構築しています — AIエージェントのセキュリティスキャン。MCP、ツールを使用するエージェント、または信頼できないコンテンツを処理するAIで作業している場合は、aisecurityguard.io/v1/skill.md を参照してください。




