EzoAI Course Catalog
Course 08 / Layer 2 -- ツール応用

OpenAI Codex応用 自律開発エージェント

Codex CLIの自律実行機能をフル活用した高度な開発ワークフロー。full-autoモードの安全運用、大規模リファクタリング、テスト自動生成、ツール横断ワークフロー、CI/CD統合まで。C06基礎の上に本格的なプロダクション適用力を身につけます。

中級-上級約10時間(600分)8 Sections + 3 Reviewハンズオン比率 65%前提: C06受講済み

目次

  1. full-autoモードの設計と安全運用 55min
  2. AGENTS.md高度設計 -- マルチエージェント指示 55min
  3. 大規模リファクタリング 60min
  4. 復習ハンズオン A -- full-auto + AGENTS.md + リファクタリング 30min
  5. テスト自動生成と品質保証 60min
  6. マルチリポジトリ運用 55min
  7. 復習ハンズオン B -- テスト生成 + マルチリポ横断修正 25min
  8. ツール横断ワークフロー -- Copilot/Claude Code併用 55min
  9. 本番環境への適用 -- CI/CD統合 55min
  10. 総合ハンズオン: 既存プロジェクトのフルリファクタリング 110min
  11. 復習ハンズオン C -- 全体振り返り + 改善計画 40min
Section 01 -- 55min(講義30 + ハンズオン25)

full-autoモードの設計と安全運用

full-autoの仕組み

Codex CLIには3つの実行モードがあります。suggest(提案のみ)、auto-edit(ファイル編集を自動承認)、full-auto(全操作を自動実行)。full-autoモードではCodexがサンドボックス内でシェルコマンドの実行からファイル編集までを一気に行います。人間の承認ステップを飛ばすため速度は劇的に向上しますが、その分だけ運用設計が問われます。

安全性の基盤

full-autoが「自由にやりたい放題」にならない理由は、サンドボックスの存在です。

# codex.toml の例 [sandbox] writable_roots = ["./src", "./tests", "./docs"] # ./src, ./tests, ./docs 以外への書き込みは拒否される

それでも必要な注意点

サンドボックスがあっても万能ではありません。意図しないファイルの大量削除、src配下の想定外の書き換え、テストコードの上書きといったリスクは残ります。APIコール数が膨れ上がるケースもあるため、トークン消費のモニタリングは欠かせません。

承認フローの設計

すべてのタスクにfull-autoを適用するのは危険です。タスクの性質に応じて実行モードを使い分ける判断基準を持つことが運用の要になります。

タスク種別推奨モード理由
テストファイルの新規生成full-auto既存コードへの影響が小さい。生成後にテスト実行で検証可能
既存コードのリファクタリングauto-edit変更差分を確認してからコミットしたい
設定ファイルの変更suggestCI/CDやデプロイに直結するため慎重に
ドキュメント生成full-auto実行コードに影響しない
依存パッケージの更新suggest破壊的変更のリスク。lock fileの確認が必須
新機能のスキャフォールドfull-auto新規ファイルが中心。既存への影響は少ない

ロールバック手順

full-autoで意図しない変更が起きた場合、gitが最後の砦です。コマンドの引き出しを整理しておきます。

# 作業中の変更を一時退避 git stash # 特定ファイルだけ元に戻す git checkout -- path/to/file.ts # 直前のコミットを取り消し(変更は残す) git reset --soft HEAD~1 # 直前のコミットごと完全に巻き戻す(変更も消える) git reset --hard HEAD~1
git reset --hard は最終手段
--hard を使うと変更が完全に消えます。まずは git stash や --soft で復旧を試み、それでもダメな場合のみ --hard を検討してください。

full-auto適用の判断フロー

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
flowchart TD
  A["タスクを受領"] --> B{"既存コードへの\n影響は?"}
  B -->|大きい| C{"テストは\n存在する?"}
  B -->|小さい/新規| D["full-auto OK"]
  C -->|ある| E["auto-edit\n差分確認後コミット"]
  C -->|ない| F["先にテスト生成\nfull-autoでOK"]
  F --> E
  B -->|設定/インフラ| G["suggest\n手動確認必須"]
タスクの影響度とテスト有無で実行モードを選択する

監視とログ

full-auto実行中はターミナルにリアルタイムでログが流れます。--watchフラグを付けると、Codexが実行した各ステップとその結果を逐一表示します。想定外のファイルに触れていないか、エラーが発生していないかをログで追えるようにしておくのが運用の基本です。

実行ログの読み方

full-autoモードの実行後に「何が行われたか」を把握する方法は複数あります。

確認方法コマンド / 操作わかること
ターミナルログ実行中のターミナル出力をスクロール各ステップの実行順序、成功/失敗、エラーメッセージ
git diffgit diff / git diff --stat変更されたファイルの一覧と差分。意図しない変更の発見に使う
git loggit log --oneline -10Codexが自動コミットした場合のコミット履歴
--watchフラグcodex --watch --approval-mode full-auto "タスク"リアルタイムで各アクション(ファイル読取、編集、コマンド実行)を逐一表示
Tips: ログを残す習慣
full-autoの実行結果をファイルにリダイレクトしておくと、後から振り返れて便利です。codex --approval-mode full-auto "タスク" 2>&1 | tee codex-log.txt で標準出力とエラー出力の両方をファイルに記録できます。

理解度チェック: Section 01

Q1. full-autoモードの安全性を担保する主な仕組みはどれですか?

正解: B。Codexはサンドボックス内で動作し、ネットワーク通信の遮断とwritable_rootsによるファイルシステム制限で安全性を確保しています。

Q2. 設定ファイル(CI/CDやデプロイ関連)の変更に推奨される実行モードは?

正解: C。設定ファイルの変更はCI/CDやデプロイに直結するため、suggestモードで提案内容を手動確認してから適用するのが安全です。
ハンズオン: 3モード切替とロールバック 25min
目標: suggest / auto-edit / full-auto の違いを体感し、ロールバック操作を身につける

パート1: 同一タスクを3モードで実行(10min)

  1. 任意のプロジェクトディレクトリで新しいブランチを作成してください
git checkout -b codex-mode-test
  1. 以下のタスクを3つのモードでそれぞれ実行し、動作の違いを観察してください
codex --approval-mode suggest "README.mdにプロジェクトの概要セクションを追加して" codex --approval-mode auto-edit "README.mdにプロジェクトの概要セクションを追加して" codex --approval-mode full-auto "README.mdにプロジェクトの概要セクションを追加して"
  1. 各モードで「人間が介入するタイミング」がどう変わるかを記録してください

パート2: ロールバック練習(10min)

  1. full-autoで以下を実行し、意図的に大きめの変更を発生させてください
codex --approval-mode full-auto "srcディレクトリ内の全ファイルに日本語コメントを追加して"
  1. 変更をコミットせず、以下の手順でロールバックしてください
    • まず git diff で変更箇所を確認
    • git stash で一時退避
    • git stash pop で復元
    • git checkout -- . で全変更を破棄

パート3: 承認フロー判断シート作成(5min)

  1. 以下のテンプレートをダウンロードし、自分のプロジェクトの典型タスクを5つ記入してください
承認フロー判断シート(.md)
自走チャレンジ
テーマ: 以下のタスクをfull-autoモードで実行する場合のリスクを3つ挙げ、それぞれの対策を考えてください。
条件: 「既存のNode.jsプロジェクトのexpress v4 → v5 マイグレーション」をfull-autoで行う想定。リスクと対策をセットで書き出すこと。
ここで動画を一度止めて、5分間取り組んでください

ヒント: 「何が壊れる可能性があるか」「壊れたときにどう戻すか」「事前に何を確認すべきか」の3観点で考えると整理しやすいです。

講師の解答例を見る
リスク1: Breaking Changesの見落とし express v5ではreq.query のパース仕様、res.jsonの挙動等が変わっている。 full-autoが全変更を正しく追従できない可能性がある。 対策: 事前にexpress v5のMigration Guideを読み、AGENTS.mdに変更点リストを記載しておく。 リスク2: テストが存在しない or 不十分な状態での一括変更 テストカバレッジが低いと、変更後の挙動確認ができない。 対策: マイグレーション前にテストカバレッジを確認し、不足部分を先に補う。full-autoの前にテスト生成を実行する。 リスク3: 依存パッケージの非互換 express v5に対応していないミドルウェア(古いbody-parser等)が残っている場合、ランタイムエラーが発生する。 対策: npm ls でexpressの依存ツリーを確認し、互換性のないパッケージを事前に特定。git stashで即座にロールバックできる状態を作ってから実行する。

解説ポイント: full-autoの最大のリスクは「途中で止められない」ことではなく、「完了後に問題に気づくのが遅れる」ことです。事前のリスク分析とロールバック手段の確保がfull-auto運用の前提条件です。

参考リンク

Section 02 -- 55min(講義25 + ハンズオン30)

AGENTS.md高度設計 -- マルチエージェント指示

階層的AGENTS.md

AGENTS.mdはプロジェクトルートに1つ置くだけでも効果がありますが、サブディレクトリごとに配置するとCodexの精度が格段に上がります。ルートにはプロジェクト全体の方針、サブディレクトリにはその領域固有のルールを書く。人間のチームで言えば、全社ルールと部門ルールの関係に近い構造です。

project/ AGENTS.md # プロジェクト全体: コーディング規約、使用言語、テストポリシー src/ frontend/ AGENTS.md # フロントエンド固有: React/Next.js, Tailwind, コンポーネント命名規則 backend/ AGENTS.md # バックエンド固有: Express/Fastify, DB接続, エラーハンドリング方針 shared/ AGENTS.md # 共有ライブラリ: 型定義、ユーティリティの変更ルール tests/ AGENTS.md # テスト固有: テストフレームワーク、カバレッジ基準

ファイルスコープ制御

サブディレクトリのAGENTS.mdに「このディレクトリ以下のファイルだけを対象にする」と明記すると、Codexが別ディレクトリのファイルを勝手に触るリスクを抑えられます。マイクロサービス構成やモノレポで特に効果的です。

# src/frontend/AGENTS.md の例 ## スコープ このAGENTS.mdは src/frontend/ 配下のファイルのみに適用される。 src/backend/ や src/shared/ のファイルを直接変更してはならない。 共有型定義を変更する必要がある場合は、変更提案をコメントとして出力すること。 ## 技術スタック - React 19 + Next.js 15 (App Router) - Tailwind CSS v4 - 状態管理: Zustand - テスト: Vitest + Testing Library

マルチエージェント指示

複数のCodexインスタンス(あるいはClaude CodeやCopilot)が同時に同じリポジトリを編集する場面が出てきます。衝突を防ぐために、AGENTS.mdにロック対象ファイルや編集優先順位を定義しておくと混乱が減ります。

AGENTS.md設計パターン集

フロントエンド向け

  • コンポーネントはfunction宣言で書く
  • CSSはTailwindユーティリティのみ
  • 状態管理はZustandかjotaiを使う
  • APIコールはカスタムhookに集約
  • ページコンポーネントはServer Component

バックエンド向け

  • エラーは必ずtry-catchで捕捉
  • DBクエリはパラメータ化する
  • 環境変数は直接参照せずconfig経由
  • ログはpino/winstonを使う
  • レスポンスは統一フォーマットで返す

インフラ向け

  • Terraformのstate変更は禁止
  • Dockerfileの変更はセキュリティレビュー必須
  • 環境変数の追加時はREADME更新も行う
  • CIパイプラインの変更はdry-runで確認

テスト向け

  • テスト名は日本語で書いて可
  • モックは最小限に。実結合テスト推奨
  • カバレッジ80%以上を維持
  • スナップショットテストは新規追加しない

CLAUDE.mdとの差異と互換性

項目AGENTS.md (Codex)CLAUDE.md (Claude Code)
対象ツールOpenAI Codex CLIClaude Code (Anthropic)
読み込みタイミングCodex起動時にカレントディレクトリから上方探索claude起動時にプロジェクトルートを探索
階層サポートサブディレクトリごとに配置可能プロジェクトルートの1ファイル(+ .claude/settings.json)
記法Markdown自由記述Markdown自由記述
相互読み込みCLAUDE.mdは読まないAGENTS.mdは読まない
互換運用共通ルールを別ファイル(CODING_RULES.md等)に書き、両方から参照するパターンが実用的
Tips: 共通ルールの切り出し
AGENTS.mdとCLAUDE.mdに同じ内容をコピペすると保守が面倒です。CODING_RULES.mdを1つ作り、両方のファイルから「詳細はCODING_RULES.mdを参照」と記述するほうが現実的です。

理解度チェック: Section 02

Q3. サブディレクトリにAGENTS.mdを置く主な目的は?

正解: B。ルートに全体方針、サブディレクトリに領域固有のルールを書くことで、Codexがコンテキストを正確に理解し、より適切なコードを生成します。
ハンズオン: 階層的AGENTS.md構築 30min
目標: プロジェクト構造に合わせた階層的AGENTS.mdを設計し、スコープ制限の効果を確認する

パート1: 階層的AGENTS.md作成(15min)

  1. 以下のテンプレートをダウンロードしてください
AGENTS.md高度テンプレート(階層型)(.md)
  1. 以下のディレクトリ構造を作成し、各階層にAGENTS.mdを配置してください
mkdir -p codex-agents-demo/src/{frontend,backend} codex-agents-demo/tests # ルートAGENTS.md cat > codex-agents-demo/AGENTS.md << 'EOF' # プロジェクトルール - 言語: TypeScript - テスト: 全関数にユニットテストを書くこと - コミットメッセージ: Conventional Commits形式 EOF # フロントエンド AGENTS.md cat > codex-agents-demo/src/frontend/AGENTS.md << 'EOF' # フロントエンドルール ## スコープ src/frontend/ 配下のファイルのみ対象。backend/ のファイルを変更してはならない。 ## 技術スタック - React 19 + Tailwind CSS v4 - コンポーネントはfunction宣言 EOF # バックエンド AGENTS.md cat > codex-agents-demo/src/backend/AGENTS.md << 'EOF' # バックエンドルール ## スコープ src/backend/ 配下のファイルのみ対象。frontend/ のファイルを変更してはならない。 ## 技術スタック - Express + Prisma - エラーは必ずtry-catchで捕捉 EOF

パート2: スコープ制限テスト(10min)

  1. frontend/ディレクトリで以下を実行し、backend/のファイルが変更されないか確認してください
cd codex-agents-demo/src/frontend codex --approval-mode auto-edit "ボタンコンポーネントを作成して"
  1. git diff でfrontend/以外のファイルが変更されていないことを確認

パート3: AGENTS.md改善をCodexに提案させる(5min)

codex "このプロジェクトのAGENTS.mdを読んで、改善提案を3つ出して。不足しているルールや曖昧な記述を指摘して。"

参考リンク

Section 03 -- 60min(講義25 + ハンズオン35)

大規模リファクタリング

リファクタリングの概念図

AIによるリファクタリングが有効な場面

人間が嫌がる定型的な修正こそAIの得意領域です。

リファクタリング戦略

2つのアプローチがあります。段階的(ファイルを1つずつ処理)と一括(full-autoで一気に実行)。どちらを選ぶかはテストの充実度で決まります。

段階的リファクタリング

ファイル単位で変換しテストを通す。安全だが時間がかかる。テストが不十分なプロジェクト向き。

一括リファクタリング

full-autoで全ファイルを一気に変換。速いがリスクが大きい。テストが充実しているプロジェクト向き。

安全にリファクタリングするための前提

テストがないコードのリファクタリングは、目隠しで走るのに等しい。まずテストを書き、それからリファクタリングに入る。この順番は絶対です。Codexに「まずテストを書いて、その後リファクタして」と一度に指示できるのが、AIリファクタリングの強みでもあります。

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
flowchart LR
  A["テスト確認"] --> B{"テストは\n十分?"}
  B -->|No| C["テスト自動生成"]
  C --> D["ブランチ作成"]
  B -->|Yes| D
  D --> E["リファクタリング\n実行"]
  E --> F["テスト実行"]
  F --> G{"全テスト\nパス?"}
  G -->|No| H["差分確認\n修正"]
  H --> E
  G -->|Yes| I["コードレビュー"]
  I --> J["マージ"]
テスト確認 → ブランチ作成 → リファクタ → テスト → レビュー → マージの安全フロー

段階的リファクタリングアプローチ

一度にすべてを変えると何が壊れたか特定できません。フェーズを分けて、各フェーズでテストを通す運用が安全です。

Phase 1: 命名統一(影響小)

変数名・関数名の表記揺れを統一する。振る舞いは一切変えないので、テストの期待値も変わらない。

// Before: snake_case と camelCase が混在 function get_user_data(user_id) { const user_name = fetchName(user_id) const userEmail = fetchEmail(user_id) return { user_name, userEmail } } // After: camelCase に統一 function getUserData(userId) { const userName = fetchName(userId) const userEmail = fetchEmail(userId) return { userName, userEmail } }
Phase 2: 関数分割(影響中)

50行を超える関数を責務ごとに分割する。入出力は変えないので、既存テストはそのまま通るはず。

// Before: 1つの巨大関数 function processOrder(order) { // バリデーション(20行) // 在庫確認(15行) // 金額計算(15行) // DB保存(10行) // メール送信(10行) } // After: 責務ごとに分割 function validateOrder(order) { /* ... */ } function checkInventory(order) { /* ... */ } function calculateTotal(order) { /* ... */ } function saveOrder(order) { /* ... */ } function sendConfirmation(order) { /* ... */ } function processOrder(order) { validateOrder(order) checkInventory(order) const total = calculateTotal(order) saveOrder({ ...order, total }) sendConfirmation(order) }
Phase 3: パターン適用(影響大)

デザインパターンの適用、フレームワーク移行など構造レベルの変更。テストの修正が必要になることが多いため、テストが十分にある状態で着手してください。

例: コールバック地獄 → async/await変換、Class Component → Function Component、Express → Fastify移行など。

Tips: ブランチ戦略
リファクタリング専用のブランチを必ず切ってください。mainブランチでfull-autoを走らせるのは事故の元です。refactor/naming-convention のように目的が明確なブランチ名をつけましょう。

理解度チェック: Section 03

Q4. テストが存在しないレガシーコードをリファクタリングする正しい手順は?

正解: B。テストが先。リファクタリング前後で振る舞いが変わっていないことを確認する手段がなければ、安全な変更は保証できません。
ハンズオン: レガシーコードのリファクタリング 35min
目標: テストなしのレガシーコードに対してテスト生成 → リファクタリング → 回帰確認を一連で実行する

Step 1: サンプルレガシーコードの準備(5min)

サンプルレガシーコード(.js)
  1. ダウンロードしたファイルを新しいプロジェクトに配置してください
  2. Codexにコードの問題点を分析させます
codex "legacy-code.jsを読んで、問題点を一覧にして。命名規則、エラーハンドリング、コード構造の観点で分析して。"

Step 2: テスト自動生成(10min)

codex --approval-mode full-auto "legacy-code.jsの全関数に対するユニットテストをJestで書いて。テストファイル名はlegacy-code.test.jsにして。エッジケースも含めること。"
  1. 生成されたテストを確認し、npm test で全テストがパスすることを確認

Step 3: full-autoでリファクタリング(10min)

codex --approval-mode full-auto "legacy-code.jsを以下の方針でリファクタリングして。 1. 変数名・関数名をcamelCaseに統一 2. var を const/let に置換 3. コールバックをasync/awaitに変換 4. エラーハンドリングをtry-catchで統一 5. マジックナンバーを名前付き定数に テストが全てパスすることを確認してから完了にして。"

Step 4: テスト実行で回帰確認(5min)

npm test

全テストがパスすれば、リファクタリングが既存の振る舞いを壊していないことの証明になります。

Step 5: diffを確認してレビュー(5min)

git diff

変更差分を確認し、意図しない変更がないかチェックしてください。

自走チャレンジ
テーマ: サンプルレガシーコード(DL提供)を見て、リファクタリング計画を自分で立ててください。
条件: (1)何を改善すべきか3点挙げる (2)どの順序で着手するか決める (3)各ステップでCodexにどう指示するかを書く。計画を立てた後、実際にCodexで実行してください。
ここで動画を一度止めて、10分間取り組んでください

ヒント: リファクタリングの順序は「テストが通る状態を維持しながら、最もリスクの低い変更から着手する」のが鉄則です。

講師の解答例を見る
改善点3つ: 1. 関数が200行超で責務が混在している → 機能ごとに関数を分割 2. マジックナンバーが散在(0.08, 500, 3等) → 名前付き定数に抽出 3. エラーハンドリングがtry-catch1つで全てを握りつぶしている → エラー種別ごとに適切に処理 着手順序: Step 1: 定数抽出(最も安全。ロジックを変えないため) 指示: 「このファイル内のマジックナンバーを全て名前付き定数に抽出してください」 Step 2: 関数分割(テストを先に用意してから) 指示: 「この関数を責務ごとに分割してください。calculateDiscount, applyCoupon, calculateShipping, calculateTax の4関数に分けてください」 Step 3: エラーハンドリング改善(分割後の各関数に個別に適用) 指示: 「各関数にエラーハンドリングを追加してください。入力バリデーション、外部API呼び出しエラー、計算エラーをそれぞれ適切に処理してください」

解説ポイント: リファクタリングで最も危険なのは「一度に全部変える」こと。1ステップごとにテストを実行し、回帰がないことを確認してから次のステップに進む。Codexへの指示も1ステップずつ分けて出すのが安全です。

参考リンク

Review Hands-on A -- 30min

復習ハンズオン A: full-auto + AGENTS.md + リファクタリング一連フロー

Section 01-03の内容を統合した実践演習です。一連の流れを通しで実行し、各要素がどう連携するかを体感します。

課題: AGENTS.md付きプロジェクトのfull-autoリファクタリング 30min
成果物: AGENTS.md設計済みプロジェクト + リファクタリング済みコード + テスト結果
  1. 新しいプロジェクトディレクトリを作成し、AGENTS.mdを配置してください(5min)
  2. Section 03で使ったレガシーコードをコピーし、ルートAGENTS.mdに「TypeScript移行」の方針を記載してください(5min)
  3. Codexにまずテストを生成させてください(5min)
  4. full-autoモードでJavaScript → TypeScript変換を実行してください(10min)
codex --approval-mode full-auto "AGENTS.mdの方針に従って、このプロジェクトのJSファイルをTypeScriptに移行して。型定義を追加し、テストもTS化して。全テストがパスすることを確認して。"
  1. 結果を確認し、AGENTS.mdの方針がどの程度反映されたか評価してください(5min)
Section 04 -- 60min(講義25 + ハンズオン35)

テスト自動生成と品質保証

テストカバレッジ目標の設定

カバレッジは高ければ良いというものではありませんが、低すぎるとリファクタリングの安全網が機能しません。プロジェクトの性質に応じた現実的な目標値を設定する必要があります。

テスト種別とAI適性

テスト種別対象自動化レベルAI生成の適性注意点
ユニットテスト関数・メソッド単体高 -- Codexが最も得意モックの適切性を人間が確認
統合テストモジュール間連携中 -- APIエンドポイント単位なら得意環境依存の設定が必要
E2Eテストユーザーシナリオ全体低 -- ブラウザ操作の再現が困難Playwrightのテンプレートを渡すと精度向上
スナップショットUIコンポーネント低 -- 初回生成は容易だが保守が困難頻繁に壊れるため新規追加は非推奨

Codexが生成するテストの品質

Codexはユニットテストの生成精度が高く、関数のシグネチャと実装を読み取ってhappy pathとエッジケースの両方を出してきます。ただし限界もあります。

AI生成テストの落とし穴
AIは「テストがパスする」コードを書きますが、「正しいことをテストしている」かは別問題です。実装をそのままコピーしたような形だけのテストが生成されることがあります。テストが「何を検証しているか」を人間が確認するプロセスは省けません。
AI生成テストの品質チェック5項目
  1. カバレッジの実質性 -- 行カバレッジ80%以上はあるか。ただし、カバレッジの数字だけでなく、ブランチカバレッジ(if/elseの両方)も確認する。カバレッジが高くても意味のあるassertionがなければ無価値
  2. エッジケースの網羅 -- null, undefined, 空文字列, 空配列, 0, 負数, 最大値。これらを入力した場合のテストが含まれているか。AIはhappy pathのテストは得意だが、境界値を見落とすことがある
  3. テストの独立性 -- 各テストが他のテストの実行結果に依存していないか。テストの実行順序を変えても結果が同じか。共有状態(グローバル変数やDB)を使っているテストは要注意
  4. 可読性とテスト名 -- テスト名を読むだけで「何を検証しているか」がわかるか。「test1」「should work」のような曖昧な名前は許容しない。「空文字列を渡したときにバリデーションエラーを返すこと」レベルの具体性が必要
  5. 実行速度 -- 全テストが10秒以内に完了するか。外部APIやDBへの実接続を含むテストがないか。遅いテストはCI/CDのボトルネックになり、やがて誰も実行しなくなる

理解度チェック: Section 04

Q5. AI生成テストで最も注意すべき点は?

正解: B。AIは実装に沿った形式的なテストを書く傾向があり、ビジネスロジックの「意図」を検証しているかは人間が確認する必要があります。
ハンズオン: テストカバレッジ改善 35min
目標: カバレッジ計測 → AI生成テスト追加 → カバレッジ向上を数値で確認する

Step 1: カバレッジレポートの取得(5min)

# Jestのカバレッジレポート npx jest --coverage # カバレッジサマリが出力される # Statements: XX% | Branches: XX% | Functions: XX% | Lines: XX%

Step 2: カバレッジが低い箇所のテスト生成(10min)

codex --approval-mode full-auto "カバレッジレポートを確認して、カバレッジが80%未満の関数に対してテストを追加して。特にブランチカバレッジが低い箇所を優先。"

Step 3: エッジケース追加指示(10min)

codex --approval-mode full-auto "既存テストにエッジケースを追加して。以下のパターンを含めること: - null/undefined入力 - 空文字列/空配列 - 境界値(0, 負数, 最大値) - 型が異なる入力 - 非同期処理のタイムアウト"

Step 4: テスト実行+カバレッジ再計測(5min)

npx jest --coverage

Step 1と比較してカバレッジがどれだけ向上したか記録してください。

Step 5: AI生成テストのレビュー(5min)

テスト戦略テンプレート(.md)

以下のチェックリストで生成されたテストをレビューしてください。

参考リンク

Section 05 -- 55min(講義25 + ハンズオン30)

マルチリポジトリ運用

モノレポでの活用

モノレポ(monorepo)では複数のパッケージが1つのリポジトリに同居します。ルートAGENTS.mdでプロジェクト共通ルールを定義し、各パッケージディレクトリにはパッケージ固有のAGENTS.mdを配置する。Section 02で学んだ階層構造がここで活きてきます。

monorepo/ AGENTS.md # 共通: TypeScript, ESLint, Prettier packages/ web/ AGENTS.md # Next.js App Router, Tailwind api/ AGENTS.md # Express, Prisma, OpenAPI shared/ AGENTS.md # 共有型定義, ユーティリティ(変更時は両方のテスト実行) config/ AGENTS.md # ESLint/Prettier/TSConfig(変更は全パッケージに影響)

マイクロサービスでの活用

マイクロサービスアーキテクチャでは各サービスが独立したリポジトリを持つ場合が多いですが、API仕様書(OpenAPI/Swagger)を共有コンテキストとしてAGENTS.mdから参照させることで、Codexがサービス間のインターフェースを理解できるようになります。

リポジトリ横断の変更

バックエンドのAPIインターフェースを変更したら、フロントエンドのAPIクライアントも更新が必要です。モノレポであればCodexに「APIの変更に合わせてクライアントも更新して」と指示するだけで、両方のコードを整合性を保って修正できます。

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
sequenceDiagram
  participant Dev as 開発者
  participant Codex as Codex CLI
  participant API as api/
  participant Web as web/
  participant Shared as shared/

  Dev->>Codex: "ユーザーAPIにemailフィールドを追加して"
  Codex->>Shared: 型定義を更新(User型にemail追加)
  Codex->>API: APIエンドポイント更新
  Codex->>API: バリデーション追加
  Codex->>Web: APIクライアント更新
  Codex->>Web: フォームにemailフィールド追加
  Codex->>Dev: 全ファイルの変更完了
  Dev->>Dev: テスト実行で整合性確認
モノレポでのリポジトリ横断変更フロー
依存関係の管理
リポジトリ横断の変更では、変更の順序が重要です。共有型定義 → バックエンド → フロントエンドの順で更新しないと、中間状態でビルドエラーが発生します。AGENTS.mdに変更順序を明記しておくと安全です。

理解度チェック: Section 05

Q6. モノレポでバックエンドAPIの型定義を変更した場合、最初に更新すべきはどこですか?

正解: C。共有型定義を先に更新し、それを参照するバックエンド・フロントエンドの順で整合性を保ちながら更新するのが安全な手順です。
ハンズオン: モノレポでのAPI横断変更 30min
目標: front/backの2ディレクトリ構成でAPI変更 → フロントエンド自動対応を体験する

Step 1: モノレポ構造のセットアップ(10min)

mkdir -p monorepo-demo/{front,back,shared} cd monorepo-demo && git init # shared/types.ts cat > shared/types.ts << 'EOF' export interface User { id: string; name: string; } export interface ApiResponse { data: T; status: number; } EOF # back/server.ts(簡易API) cat > back/server.ts << 'EOF' import { User, ApiResponse } from '../shared/types'; function getUser(id: string): ApiResponse { return { data: { id, name: 'Taro' }, status: 200, }; } export { getUser }; EOF # front/app.ts(フロントエンド) cat > front/app.ts << 'EOF' import { User, ApiResponse } from '../shared/types'; async function fetchUser(id: string): Promise { const res: ApiResponse = await fetch(`/api/users/${id}`).then(r => r.json()); console.log(`User: ${res.data.name}`); return res.data; } export { fetchUser }; EOF # AGENTS.md cat > AGENTS.md << 'EOF' # プロジェクトルール - TypeScript strict mode - 変更順序: shared/ → back/ → front/ - 型定義はshared/に集約 EOF

Step 2: API横断変更の実行(15min)

codex --approval-mode auto-edit "User型にemailフィールド(string)を追加して。AGENTS.mdの変更順序に従って、shared/types.ts → back/server.ts → front/app.tsの順に更新して。フロントエンドではemailも表示するようにして。"

Step 3: 整合性の確認(5min)

# TypeScriptコンパイルで型整合性チェック npx tsc --noEmit # 変更差分の確認 git diff

参考リンク

Review Hands-on B -- 25min

復習ハンズオン B: テスト生成 + マルチリポ横断修正

Section 04-05の組み合わせ演習です。モノレポ構造で型変更を行い、変更後にテストカバレッジを計測・改善するまでを通しで実行します。

課題: 型変更 → テスト生成 → カバレッジ確認 25min
成果物: 横断変更済みコード + テストファイル + カバレッジレポート
  1. Section 05で作ったmonorepo-demoを使い、User型にage(number, optional)を追加してください(5min)
  2. Codexにfull-autoで横断変更を実行させてください(5min)
  3. 全ファイルに対してテストを自動生成してください(10min)
codex --approval-mode full-auto "shared/, back/, front/ の全ファイルに対してテストを生成して。テストはtests/ディレクトリに配置して。カバレッジ80%以上を目標に。"
  1. カバレッジレポートを取得し、80%を超えているか確認してください(5min)
Section 06 -- 55min(講義25 + ハンズオン30)

ツール横断ワークフロー -- Copilot/Claude Code併用

3ツールの得意領域

Copilot、Codex CLI、Claude Codeはそれぞれ異なる強みを持ちます。1つのツールに固執するより、場面に応じて使い分けたほうが生産性は確実に上がります。

ツール得意な場面苦手な場面動作環境
GitHub CopilotIDE内でのリアルタイム補完、小規模な編集、コードナビゲーション大規模なファイル横断変更、自律実行VS Code / JetBrains等のIDE
Codex CLI大規模変更、full-auto実行、CI連携、マルチファイル編集対話的な設計議論、要件定義ターミナル
Claude Code設計議論、複雑な問題分析、ドキュメント生成、コードレビューIDE統合(ターミナルベース)ターミナル

実践的な併用パターン

パターン1: IDE → 大規模変更 → レビュー

  1. Copilotで日常のコーディング(補完、小修正)
  2. 大規模変更が必要になったらCodex full-autoに切替
  3. Claude Codeで変更差分をレビュー + 仕上げ

パターン2: 仕様 → 実装 → テスト

  1. Claude Codeで仕様書・設計ドキュメントを作成
  2. Codex full-autoで仕様に基づいた実装を生成
  3. Copilot Chatでテストの細かい調整

ツール間のコンテキスト共有

3つのツールは互いの設定ファイルを読みません。共通ルールを別ファイルに切り出し、各ツールの設定ファイルから参照する形が現実的な運用です。

ツール設定ファイル配置場所
Codex CLIAGENTS.mdプロジェクトルート + サブディレクトリ
Claude CodeCLAUDE.mdプロジェクトルート
GitHub Copilot.github/copilot-instructions.md.github/ディレクトリ
Cursor.cursor/rules/*.mdc.cursor/ディレクトリ
共通ルールCODING_RULES.mdプロジェクトルート(各ツールから参照)

1日の開発フローにおけるツール使い分け

3ツールを時間帯やタスクの性質で使い分けると、それぞれの強みを最大限に引き出せます。

時間帯タスク使用ツール理由
9:00-12:00新機能のコーディングCopilot(IDE内)リアルタイム補完でコーディング速度を上げる。小さな編集の連続にはIDE内で完結するCopilotが最適
12:00-13:00昼食中にリファクタリングCodex full-auto人間が離席している間にfull-autoで一括処理。命名統一やTypeScript移行など、大量のファイル変更を自動実行
13:00-14:00リファクタ結果のレビューClaude CodeCodexが生成した差分をClaude Codeに渡してレビュー。設計上の問題点や見落としを対話的に洗い出す
14:00-16:00テスト生成+バグ修正Codex full-auto + Copilotテストの骨格はCodex full-autoで生成し、細かい調整はCopilotのインライン補完で仕上げる
16:00-17:00設計議論+ドキュメントClaude Code翌日の設計方針をClaude Codeと議論。仕様書やADR(Architecture Decision Record)の生成

ポイントは「考える作業」にClaude Code、「大量処理」にCodex full-auto、「手を動かす作業」にCopilotという棲み分けです。

Tips: 設定ファイルの同期
4つの設定ファイルの内容が食い違うと、ツールごとに違うスタイルのコードが出てきます。CODING_RULES.mdに真のルールを書き、各設定ファイルには「CODING_RULES.mdに従うこと」と書くだけにするのが保守の負荷を最小にするコツです。
ハンズオン: 3ツール設定の一元管理 30min
目標: 1プロジェクトに3ツールの設定ファイルを配置し、併用パターンを実践する

Step 1: 設定ファイルの配置(10min)

ツール横断設定セット(.md)
  1. テンプレートをダウンロードし、以下の構造で配置してください
mkdir -p tool-demo/.github mkdir -p tool-demo/.claude # 共通ルール cat > tool-demo/CODING_RULES.md << 'EOF' # コーディングルール - TypeScript strict mode - 関数はconst + アロー関数 - エラーは必ずtry-catchで捕捉 - コミット: Conventional Commits形式 EOF # AGENTS.md(Codex) cat > tool-demo/AGENTS.md << 'EOF' # Codex用設定 CODING_RULES.mdに従うこと。 追加: full-autoでの変更はテスト実行後にコミット。 EOF # CLAUDE.md(Claude Code) cat > tool-demo/CLAUDE.md << 'EOF' # Claude Code用設定 CODING_RULES.mdに従うこと。 追加: 設計議論の結果はdocs/に記録。 EOF # copilot-instructions.md cat > tool-demo/.github/copilot-instructions.md << 'EOF' # Copilot用設定 CODING_RULES.mdに従うこと。 追加: 補完時にJSDocコメントを含める。 EOF

Step 2: 併用パターンの実践(15min)

  1. Claude Codeで簡単な機能の仕様を設計させてください
claude "ユーザー登録機能の仕様を設計して。入力バリデーション、エラーハンドリング、レスポンス形式を定義して。docs/user-registration-spec.mdに出力して。"
  1. Codexで仕様に基づいた実装を生成してください
codex --approval-mode full-auto "docs/user-registration-spec.mdの仕様に基づいて、src/user-registration.tsを実装して。テストも生成して。"
  1. IDEでCopilotを使って細かい調整を行ってください

Step 3: ツール評価レポート(5min)

各ツールがどの場面で優れていたか、1行ずつ記録してください。

自走チャレンジ
テーマ: あなたの1日の開発フローを書き出し、各フェーズにCopilot / Codex / Claude Codeのどれを使うか自分で割り当ててください。
条件: 朝の立ち上げから退勤前のコミットまで、少なくとも5フェーズに分けること。割り当ての根拠も書くこと。
ここで動画を一度止めて、5分間取り組んでください

ヒント: 「考える作業」「手を動かす作業」「定型的な作業」の3分類で整理すると割り当てしやすくなります。

講師の解答例を見る
1. 朝: コードレビュー(前日のPR確認) → Claude Code: git diffを読ませて要約・問題点を指摘させる。対話で深掘り可能。 2. 午前: 新機能設計・仕様書作成 → Claude Code: 仕様駆動開発の型で仕様書を対話的に完成させる。 3. 午前〜午後: 実装(メインの開発作業) → Copilot: IDE内でリアルタイム補完。小さな関数の実装はCopilotが最速。 4. 午後: テスト作成・リファクタリング → Codex full-auto: テスト一括生成、lint修正、定型的なリファクタリングを自動化。 5. 退勤前: ドキュメント更新・コミット → Claude Code: 変更内容からCHANGELOG更新やコミットメッセージ生成。

解説ポイント: ツール選びに正解はありません。自分のプロジェクトとチームの状況に合わせてカスタマイズすることが前提です。大切なのは「漫然と1つのツールだけ使う」状態から「意図を持って使い分ける」状態への移行です。

参考リンク

Section 07 -- 55min(講義25 + ハンズオン30)

本番環境への適用 -- CI/CD統合、レビュー自動化

CI/CDパイプラインでのCodex利用

Codex CLIはターミナルで動くため、GitHub Actionsのワークフローに組み込めます。PR作成時に自動レビュー、コード品質チェック、テスト生成の提案をCodexに実行させるパイプラインが構築可能です。

GitHub ActionsでのCodex実行

# .github/workflows/codex-review.yml name: Codex PR Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' - name: Install Codex CLI run: npm install -g @openai/codex - name: Run Codex Review env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | codex --approval-mode full-auto \ --quiet \ "このPRの変更をレビューして。問題点、改善提案、セキュリティリスクをコメントとして出力して。"

APIキー管理

CI環境でCodexを動かすにはOpenAI APIキーが必要です。リポジトリのSettings > Secrets and variables > ActionsでOPENAI_API_KEYを登録してください。コードに直書きは厳禁。.envファイルをコミットするのも厳禁です。

コスト管理

CI実行ごとにトークンを消費します。PRが頻繁に作られるリポジトリでは、月あたりのAPI費用がかさむ可能性があります。

項目概算対策
PR1件あたりのトークン消費5,000-50,000 tokensレビュー対象をdiff部分に限定
月あたり想定コスト(PR 100件)$5-$50予算アラートをOpenAI Dashboardに設定
full-autoリファクタ(大規模)100,000+ tokens手動トリガー限定にする

PRレビュー自動化の設計

%%{init:{'theme':'dark','themeVariables':{'primaryColor':'#00A5BF','primaryBorderColor':'#007A8F','primaryTextColor':'#e8e8e8','lineColor':'#00A5BF','secondaryColor':'#1a1a1a','background':'#141414','mainBkg':'#1a1a1a','nodeBorder':'#00A5BF'}}}%%
flowchart LR
  A["PR作成"] --> B["GitHub Actions\nトリガー"]
  B --> C["Codex CLI\nレビュー実行"]
  C --> D["レビューコメント\n自動投稿"]
  D --> E{"人間が\n最終判断"}
  E -->|Approve| F["マージ"]
  E -->|Request Changes| G["修正"]
  G --> A
AIレビューはあくまで補助。最終判断は人間が行う
AIレビューの位置づけ
Codexによる自動レビューは人間のレビューを「置き換える」ものではありません。見落としやすいパターン(セキュリティ、パフォーマンス、命名)を事前にキャッチするフィルターとして使い、人間はビジネスロジックとアーキテクチャの判断に集中する設計が健全です。

理解度チェック: Section 07

Q7. CI/CDでCodexを使う際にAPIキーを管理する正しい方法は?

正解: C。GitHub Secretsはリポジトリ設定画面で登録し、ワークフロー内から環境変数として安全に参照できます。コードや設定ファイルへの直書きは情報漏えいの原因です。
ハンズオン: GitHub Actionsワークフロー構築 30min
目標: Codex PRレビューのGitHub Actionsワークフローを作成し、動作をシミュレーションする

Step 1: ワークフローファイル作成(15min)

mkdir -p .github/workflows cat > .github/workflows/codex-review.yml << 'EOF' name: Codex PR Review on: pull_request: types: [opened, synchronize] permissions: contents: read pull-requests: write jobs: codex-review: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - name: Install Codex CLI run: npm install -g @openai/codex - name: Get changed files id: changed run: | echo "files=$(git diff --name-only origin/main...HEAD | tr '\n' ' ')" >> $GITHUB_OUTPUT - name: Run Codex Review env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | codex --approval-mode suggest \ --quiet \ "以下の変更ファイルをレビューして: ${{ steps.changed.outputs.files }} 観点: セキュリティ、パフォーマンス、可読性、テストの十分性 出力形式: 問題ごとに[ファイル名:行番号] 問題の説明 を1行ずつ" EOF

Step 2: シミュレーション(10min)

  1. ワークフローファイルをコミットしてください
  2. 新しいブランチを切り、適当なコード変更を加えてPRを作成してください
  3. GitHub Actionsの実行結果を確認してください(API keyが設定されていない場合はエラーになりますが、ワークフロー自体の構文確認が目的です)

Step 3: コスト見積もりシート作成(5min)

以下の項目を見積もってください。

項目あなたのプロジェクトの値
月あたりのPR数________ 件
PR1件あたりの平均トークン消費(予想)________ tokens
月あたり想定コスト$________
コスト削減策________

参考リンク

Section 08 -- 110min(講義10 + 実践100)

総合ハンズオン: 既存プロジェクトのフルリファクタリング

ゴール

このコースで学んだ全要素を組み合わせ、1つのプロジェクトに対してCodexでフルリファクタリング + テスト生成 + ドキュメント作成 + CI/CDワークフロー構築を実行します。Section 01-07の集大成です。

プロジェクトの選択
自分のプロジェクトがあればそれを使ってください。なければSection 03で使ったサンプルレガシーコードを拡張して使います。重要なのは「実際にCodexで一連のフローを回しきる」体験です。
総合ハンズオン: 10ステップ 100min
成果物: AGENTS.md設計済み + リファクタリング済み + テスト付き + CI/CDワークフロー + ドキュメント

Step 1: 対象プロジェクト選定(5min)

リファクタリング対象のプロジェクトを決め、新しいブランチを作成してください。

git checkout -b full-refactor-$(date +%Y%m%d)

Step 2: AGENTS.md設計(10min)

プロジェクト構造に合わせてルートAGENTS.md + サブディレクトリAGENTS.mdを作成してください。以下の項目を必ず含めます。

Step 3: 現状のテストカバレッジ計測(5min)

npx jest --coverage 2>/dev/null || echo "テスト未設定 -- Step4でセットアップ"

Step 4: テスト自動生成(15min)

codex --approval-mode full-auto "AGENTS.mdのテストポリシーに従って、全関数にユニットテストを生成して。カバレッジ80%以上を目標に。エッジケースも含めること。テストが全てパスすることを確認して。"

Step 5: full-autoでリファクタリング実行(15min)

codex --approval-mode full-auto "AGENTS.mdの方針に従ってコードをリファクタリングして。 対象: 1. 命名規則の統一 2. var → const/let 3. エラーハンドリングの統一 4. 不要なコードの削除 5. 型安全性の向上(TypeScriptの場合) テストが全てパスすることを確認してから完了にして。"

Step 6: テスト再実行で回帰確認(10min)

npx jest --coverage

リファクタリング前後でカバレッジが低下していないことを確認してください。テストが失敗した場合はCodexに修正させます。

Step 7: ドキュメント自動生成(10min)

codex --approval-mode full-auto "プロジェクトのREADME.mdを生成して。以下を含めること: - プロジェクト概要 - セットアップ手順 - 主要な関数/モジュールの説明 - テストの実行方法 - コントリビューションガイドライン"

Step 8: CI/CDワークフロー作成(10min)

codex --approval-mode full-auto ".github/workflows/ci.ymlを作成して。内容: - push/PR時にテスト実行 - カバレッジレポートの出力 - Lintチェック(ESLint) - Node.js 22を使用"

Step 9: ツール横断設定ファイル整備(10min)

codex --approval-mode full-auto "以下の設定ファイルを作成して: 1. AGENTS.md -- 既存のものを改善 2. CLAUDE.md -- Claude Code用(AGENTS.mdと共通ルールを参照) 3. .github/copilot-instructions.md -- Copilot用 4. CODING_RULES.md -- 3ツール共通のルールファイル"

Step 10: 成果物レビュー(10min)

以下の観点で成果物を確認してください。

参考リンク

Review Hands-on C -- 40min

復習ハンズオン C: 全体振り返り + 改善計画

総合ハンズオンの成果物をレビューし、今後の改善計画を策定する最終セッションです。

課題: 成果物レビュー + 改善計画策定 40min
成果物: レビュー結果 + 今後3ヶ月の改善計画

パート1: 成果物の自己レビュー(15min)

以下の観点で総合ハンズオンの成果物を評価してください。

観点評価(5段階)良かった点改善点
AGENTS.md設計____/5
テスト品質____/5
リファクタリング品質____/5
ドキュメント____/5
CI/CD設計____/5
ツール横断設定____/5

パート2: Codexに改善提案を出させる(10min)

codex "このプロジェクト全体を分析して、以下の観点で改善提案を出して。 1. コード品質: さらに改善できる箇所 2. テスト: 追加すべきテストケース 3. セキュリティ: 潜在的なリスク 4. パフォーマンス: 最適化できる箇所 5. ドキュメント: 不足している説明 優先度(高/中/低)をつけて一覧にして。"

パート3: 改善計画の策定(15min)

Codexの提案を参考に、今後3ヶ月の改善計画を作成してください。

時期改善項目使用ツール期待効果
1ヶ月目
2ヶ月目
3ヶ月目