「AIでコードを書かせてみたけど、あとから修正が地獄だった…」
そんな経験、ありませんか?
最初は「一括生成してくれるなんて便利!」と思っても、
実際に修正・検証・更新を繰り返すうちに、
どこを直せばいいのか分からなくなる――これが典型的な“AI自動化のあるある”です。
その原因の多くは、クラス設計(Class Design)にあります。
AIが得意なのは“動くコードを書くこと”ですが、
人間が安心して使い続けるには、構造(設計)を整理する力が欠かせません。
つまり、AIに丸ごと任せるのではなく、
「クラスごとに責任を分ける」という仕組みを作ることで、
壊れにくく・変更しやすく・検証しやすい自動化へと進化させられるんです。
この第2部では、Codexを“設計アシスタント”として使うときの考え方――
単一責務(SRP)・依存関係の整理・小粒PR運用――を軸に、
“壊れない自動化”を作る思考法を学んでいきましょう。
本記事でわかること
-
単一責務(SRP)の基本と、なぜ“クラス単位”で分けると安定するのか
-
I/F先行設計(インターフェース設計)で“壊れない構造”を作る流れ
-
依存方向の整理による「事故らないワークフロー」構築のコツ
-
小粒PR運用で、AIによるコード生成を安全に回すチェックリスト
-
非エンジニアでも理解できる“設計思考の地図”を持てるようになる
このあとからは、
まず「クラス単位が安定する理由(SRP・保守性)」を掘り下げていきます。
AIを使う上で、“1つのクラスに1つの目的”を守るだけで、
どれだけ自動化が安定するのか――その理由を見ていきましょう。
このあとからは、
まず「クラス単位が安定する理由(SRP・保守性)」を掘り下げていきます。
AIを使う上で、“1つのクラスに1つの目的”を守るだけで、
どれだけ自動化が安定するのか――その理由を見ていきましょう。
クラス単位が安定する理由(SRP・保守性)
AIでコードを生成するとき、
「全部まとめて一気に作ってくれたら早いのに!」と思うこと、ありますよね?
でも実は、それが“壊れやすい自動化”の始まりなんです。
ここでは、クラスを分ける=壊れにくくするという考え方を、イメージしながら理解していきましょう。

クラス設計は「部屋の仕切り」に似ている
たとえば、あなたが自宅をリフォームすると想像してください。
もし「全部ワンルームでいいや!」と、リビングもキッチンも寝室も1つの部屋にまとめたらどうなるでしょう?
最初は広くて気持ちいいかもしれません。
でも、あとから「料理中の煙が充満」「音が響く」「片付けが大変」…と、問題がどんどん出てきます。
プログラムも同じです。
最初は1つのファイル・1つの関数で動かしても、
後で変更や追加をするときに他の部分まで影響して壊れるのです。
だからこそ、クラス設計では
「部屋を分ける=責任を分ける」ことが大切になります。
この考え方を「SRP(単一責務の原則)」と呼びます。
つまり、1つのクラスは1つの目的だけを担当する――これが基本ルールです。

SRP(単一責務の原則)を“キッチン”で考える
もう少し具体的に見てみましょう。
たとえば、あなたが「レシピ自動作成AI」を作るとします。
もし1つのクラスが「食材の管理」「調理の提案」「買い物リスト作成」まで全部やっていたらどうなるでしょう?
それぞれの機能が複雑に絡み合い、
ちょっとした修正(たとえば“食材名のフォーマット変更”)が、
他の機能まで壊してしまう恐れがあります。
そこでこう分けます👇
-
食材管理クラス:データ整理・在庫管理を担当
-
レシピ提案クラス:食材リストからメニューを考える
-
買い物リストクラス:不足食材をリスト化する
こうすることで、「レシピの提案ロジック」を変えても、
「買い物リスト」や「在庫データ」には影響しません。
要するに、1つのクラスが“1種類の変更理由”しか持たないようにすることで、
変更時のリスクを最小化できるわけです。
“I/Fを先にロックする”ことで壊れにくくなる
次に、「I/F(インターフェース)を先に決める」という考え方です。
たとえば、チームで料理を作る場面を想像してみてください。
「料理人Aは具材を切る」「料理人Bは炒める」「料理人Cは盛り付ける」――
このとき、**皿のサイズや具材の受け渡しルール(I/F)**が決まっていないと大混乱になりますよね。
プログラムでも同じで、
クラス同士の“受け渡し口”=I/Fを最初に決めておくと、
それぞれの中身を後で自由に変えても、他の部分には影響が出ません。
つまり:
中身(実装)はあとで変えてもいい
でも外側(I/F)は先にロックする
これが、AIによるコード生成を安全に保つ“設計の守り”になります。
クラス分割の視覚イメージ(図解風)
文章で図をイメージすると、こんな感じです👇
全体タスク
│
├── 分析クラス(データを読む)
├── 整形クラス(整える・加工する)
└── 出力クラス(CSV/Markdownなど)
もし「整形クラス」を別AIに改善させたいときも、
I/Fが固定されていれば他のクラスはそのまま動きます。
このように、クラス単位で設計しておくと部分的な修正が容易になり、
AIの“再生成”や“改善サイクル”を安心して回せるというわけです。
要するに:“小さく分ける”ほどAIは味方になる
AIは“大まかに全部作る”のは得意ですが、
“部分的に直す”のは苦手です。
だからこそ、人間があらかじめクラス単位に分けておくことで、
AIが「どの範囲を触るか」を明確にでき、ミスを防げます。
言い換えると、
クラス分割とは、「AIが安全に動ける境界線を引く」作業。
この意識を持つだけで、
AI活用の精度もスピードも一気に上がっていきます。
ここまでで、「クラス単位で設計する=壊れにくくする」理由がわかりました。
次の章では、その考えを実務に落とし込んでいく具体ステップ――
「最小サイクルの型(I/F先行・検証・差分)」を紹介します。
最小サイクルの型(I/F先行・検証・差分)
AIを使ってコードやスクリプトを生成するとき、
最初にやってしまいがちなミスは「一気に全部作らせる」こと。
でも、AIにとっても人にとっても、
一度に全部書く=確認できないほど複雑になるというリスクをはらんでいます。
ここで登場するのが、“最小サイクル”という考え方。
これは、設計 → 実装 → 検証を小さく回すことで、
壊れにくく・再現しやすい自動化を作るフレームです。

I/Fカタログ化(インターフェースを先にまとめる)
まず最初のステップは、I/F(インターフェース)を先に“カタログ化”すること。
たとえば、あなたが「記事分析AI」を作りたいとします。
このとき、いきなり「全文生成」ではなく、
次のように“関数の入り口と出口”を先に整理します。
分析クラス:
入力 → 記事データ(タイトル・本文)
出力 → 要約・タグ・語数情報
整形クラス:
入力 → 分析結果
出力 → Markdown形式のレポート
このように、「何を受け取って何を返すか」だけを先に決めておくと、
中身の実装をあとから変更しても、全体が崩れません。
言い換えると、I/Fはチームの“共通言語”です。
AIに指示するときも、I/Fを明示してあげると理解が一気に安定します。
実装は“差分最小”で(範囲指定がカギ)
I/Fを決めたら、次に実装へ。
ここで意識するのは、「全部直さず、必要なところだけ」をAIにお願いすることです。
たとえば、プロンプトでこう伝えると安全です👇
「
整形クラスの第2メソッドだけを、Markdown対応に変更してください。
他の部分は触らずにそのままにしてください。」
このように“差分指定”をしておくことで、
AIが他のロジックを誤って書き換えるリスクを防げます。
これはちょうど、「家の壁紙だけ張り替える」ようなもの。
全改装ではなく部分修正にすることで、
スピードも安全性も両立できるんです。
検証は“正常・境界・異常”の3点セットで
最後に、AIに書かせたコードやワークフローは、
必ず3つの視点で確認します。
-
正常系:想定通りに動くか
-
境界系:極端な入力(空データ・長文など)でも壊れないか
-
異常系:入力エラー・欠損時にどう反応するか
この3セットを、Codexに「自己検証」として依頼できます。
たとえばこんなプロンプトです👇
「この関数について、正常・境界・異常ケースをそれぞれ1つずつ想定し、
入出力例を示してください。」
こうすることで、AIが自ら“テスト観点”を補完してくれます。
さらに出力された検証ケースをログに残しておくことで、
次の修正時に“差分チェック”が自動化しやすくなります。
図解イメージ(文章で表現)
設計(I/Fを決める)
↓
実装(差分のみ変更)
↓
検証(正常・境界・異常の3点セット)
↓
ログ化(次回の改善に使う)
↑
――――――――――――――
↑ ← 最小サイクルでぐるぐる回す
大事なのは、「完璧に作る」ではなく、
“安全に何度も回せる形”にしておくこと。
この最小サイクルの思考こそ、
AI時代の開発・自動化を長く続けるための“筋肉”になります。
人間×AIの分担ラインを明確に
そして忘れてはいけないのが、
「AIがやる部分」と「人が判断する部分」を分けるという意識。
-
AIが得意:構造設計・パターン検出・サンプル生成
-
人が得意:目的判断・仕様確定・リスク確認
この分担を明確にしたうえで、
最小サイクルを回していくことで、
“人が制御できる自動化”が実現します。
ここまでで、「I/F先行→差分実装→3点検証」という最小サイクルの型が理解できました。
次の章では、もう一歩踏み込んで、
「依存の整理と層分け(依存方向・分離)」を学んでいきましょう。
ここでは、分析層・出力層・UI層をどう分けると安定するか――
まさに“自動化の設計図”を描くパートになります。
依存の整理と層分け(依存方向・分離)
AIで自動化を進めていくと、
だんだんと「どこを直したらいいかわからない」という状況に陥ることがあります。
原因の多くは、依存関係がごちゃごちゃしていること。
つまり、「Aを変えるとBが壊れ、Bを直すとCが動かない…」という状態ですね。
これを防ぐカギが、層分け(レイヤー化)と依存方向の整理です。
ざっくり言えば、“下の層に上の層が依存する”構造を守ることで、
変更が上手く伝わり、全体が安定して動くようになります。

分析層→出力層→UI層(ブログなど)という流れ
たとえば、あなたが「ブログ運営の自動レポート」を作るとしましょう。
ここでの流れを“3階建ての家”にたとえると、こんな感じです👇

