はじめに

Codex CLIの基本的な使い方を習得したら、次のステップは既存の開発ワークフローへの統合です。シェルスクリプトやGit hook、CI/CDパイプラインと組み合わせることで、Codex CLIの真価を発揮できます。

本記事では、Codex CLIを開発ワークフローにシームレスに統合するための実践的なパターンを解説します。APIトークンの安全な管理方法、コスト最適化のテクニック、そして自動化のベストプラクティスを網羅し、チーム開発での効率的な運用を実現するためのガイドを提供します。

非対話型モード(codex exec)の活用

スクリプトやCI/CDパイプラインでCodex CLIを使用する場合、codex execコマンドによる非対話型モードが基本となります。

基本的な使い方

codex execは、プロンプトを引数として渡し、結果を標準出力に出力します。

1
2
3
4
5
6
7
8
# 基本的な実行
codex exec "このリポジトリの構成を要約して"

# 結果をファイルに保存
codex exec "直近10コミットのリリースノートを生成して" | tee release-notes.md

# 最終メッセージをファイルに出力
codex exec -o result.txt "READMEを更新して"

実行中の進捗はstderrに出力され、最終結果のみがstdoutに出力されるため、パイプ処理やリダイレクトとの相性が優れています。

権限とサンドボックスの設定

非対話型モードでは、デフォルトで読み取り専用サンドボックスが適用されます。自動化のユースケースに応じて、最小限の権限を設定することが重要です。

1
2
3
4
5
6
7
8
# 読み取り専用(デフォルト)
codex exec "コードベースを分析して"

# ファイル編集を許可
codex exec --full-auto "リンターエラーを修正して"

# より広いアクセスを許可(制御された環境でのみ使用)
codex exec --sandbox danger-full-access "依存関係を更新して"

danger-full-accessオプションは、隔離されたCI runnerやコンテナ内など、制御された環境でのみ使用してください。

JSON形式での出力

スクリプトでCodexの出力を処理する場合、--jsonフラグでJSON Lines形式の出力を取得できます。

1
codex exec --json "リポジトリ構成を要約して" | jq .

JSON Linesストリームには、thread.startedturn.startedturn.completeditem.*などのイベントが含まれます。

1
2
3
4
{"type":"thread.started","thread_id":"0199a213-81c0-7800-8aa1-bbab2a035a53"}
{"type":"turn.started"}
{"type":"item.completed","item":{"id":"item_3","type":"agent_message","text":"..."}}
{"type":"turn.completed","usage":{"input_tokens":24763,"output_tokens":122}}

構造化出力の生成

下流の処理で安定したフィールドが必要な場合、--output-schemaオプションでJSONスキーマを指定できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# スキーマファイルを用意
cat > schema.json << 'EOF'
{
  "type": "object",
  "properties": {
    "project_name": { "type": "string" },
    "programming_languages": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": ["project_name", "programming_languages"],
  "additionalProperties": false
}
EOF

# スキーマに従った出力を生成
codex exec "プロジェクトメタデータを抽出して" \
  --output-schema ./schema.json \
  -o ./project-metadata.json

シェルスクリプトとの連携

日常的な開発タスクをシェルスクリプトで自動化する例を紹介します。

コードレビュー自動化スクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# review.sh - 変更されたファイルのコードレビューを自動実行

set -e

# 変更されたファイルを取得
CHANGED_FILES=$(git diff --name-only HEAD~1)

if [ -z "$CHANGED_FILES" ]; then
    echo "レビュー対象のファイルがありません"
    exit 0
fi

echo "レビュー対象ファイル:"
echo "$CHANGED_FILES"

# Codexでレビューを実行
codex exec --sandbox read-only \
    "以下のファイルの変更をレビューしてください。
    潜在的なバグ、パフォーマンス問題、セキュリティリスクを指摘してください。
    
    変更されたファイル:
    $CHANGED_FILES"

テスト失敗の自動診断スクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash
# diagnose-test-failure.sh - テスト失敗時の自動診断

set -e

TEST_OUTPUT=$(npm test 2>&1) || true

if echo "$TEST_OUTPUT" | grep -q "FAIL"; then
    echo "テスト失敗を検出しました。Codexで診断を実行します..."
    
    codex exec --sandbox read-only \
        "以下のテスト失敗を分析し、原因と修正案を提示してください:
        
        $TEST_OUTPUT"
else
    echo "すべてのテストが成功しました"
fi

リリースノート自動生成スクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# generate-release-notes.sh - コミット履歴からリリースノートを生成

VERSION=$1
PREVIOUS_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")

if [ -z "$PREVIOUS_TAG" ]; then
    COMMIT_RANGE="HEAD"
else
    COMMIT_RANGE="$PREVIOUS_TAG..HEAD"
fi

COMMITS=$(git log $COMMIT_RANGE --pretty=format:"%s" --no-merges)

codex exec --sandbox read-only \
    "以下のコミットメッセージからバージョン $VERSION のリリースノートを生成してください。
    機能追加、バグ修正、破壊的変更をカテゴリ分けしてください。
    
    コミット:
    $COMMITS" \
    -o "RELEASE_NOTES_${VERSION}.md"

echo "リリースノートを生成しました: RELEASE_NOTES_${VERSION}.md"

Git hookとの組み合わせ

Git hookを活用することで、コミットやプッシュのタイミングでCodexを自動実行できます。

pre-commit hook: コミットメッセージの提案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# .git/hooks/prepare-commit-msg

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2

# マージコミットやamendの場合はスキップ
if [ "$COMMIT_SOURCE" = "merge" ] || [ "$COMMIT_SOURCE" = "commit" ]; then
    exit 0
fi

# ステージされた変更を取得
STAGED_DIFF=$(git diff --cached --stat)

if [ -z "$STAGED_DIFF" ]; then
    exit 0
fi

# Codexでコミットメッセージを提案
SUGGESTED_MSG=$(codex exec --sandbox read-only \
    "以下のgit diffから、Conventional Commits形式のコミットメッセージを1行で提案してください:
    
    $STAGED_DIFF" 2>/dev/null)

if [ -n "$SUGGESTED_MSG" ]; then
    echo "# Codex suggested: $SUGGESTED_MSG" >> "$COMMIT_MSG_FILE"
fi

pre-push hook: プッシュ前のコード品質チェック

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# .git/hooks/pre-push

echo "プッシュ前のコード品質チェックを実行中..."

# 直近のコミットの変更を分析
RESULT=$(codex exec --sandbox read-only \
    "プッシュ対象の変更を分析し、以下の問題がないかチェックしてください:
    1. 明らかなバグやエラー
    2. セキュリティ上の問題
    3. パフォーマンスの懸念
    
    問題がなければ'OK'とだけ回答してください。
    問題がある場合は詳細を説明してください。" 2>/dev/null)

if echo "$RESULT" | grep -qi "^OK$"; then
    echo "チェック完了: 問題なし"
    exit 0
else
    echo "潜在的な問題が検出されました:"
    echo "$RESULT"
    
    read -p "プッシュを続行しますか? (y/N): " CONFIRM
    if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
        echo "プッシュを中止しました"
        exit 1
    fi
fi

post-merge hook: マージ後の自動整理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
# .git/hooks/post-merge

echo "マージ後のコードベース整理を確認中..."

codex exec --sandbox read-only \
    "マージ後の変更を確認し、以下について提案してください:
    1. 不要になった可能性のあるコード
    2. 更新が必要なドキュメント
    3. 追加が推奨されるテスト" | head -50

CI/CDパイプラインへの統合

Codex CLIをCI/CDパイプラインに組み込むことで、継続的な品質改善を自動化できます。

GitHub Actionsでのテスト失敗自動修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
name: Codex auto-fix on CI failure

on:
  workflow_run:
    workflows: ["CI"]
    types: [completed]

permissions:
  contents: write
  pull-requests: write

jobs:
  auto-fix:
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    runs-on: ubuntu-latest
    env:
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
      FAILED_HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
      FAILED_HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ env.FAILED_HEAD_SHA }}
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: Install dependencies
        run: |
          if [ -f package-lock.json ]; then npm ci; else npm i; fi

      - name: Install Codex
        run: npm i -g @openai/codex

      - name: Authenticate Codex
        run: codex login --api-key "$OPENAI_API_KEY"

      - name: Run Codex
        run: |
          codex exec --full-auto --sandbox workspace-write \
            "リポジトリを読み込み、テストスイートを実行し、
            すべてのテストを通過させるために必要な最小限の変更を特定し、
            その変更のみを実装して停止してください。
            無関係なファイルをリファクタリングしないでください。"

      - name: Verify tests
        run: npm test --silent

      - name: Create pull request
        if: success()
        uses: peter-evans/create-pull-request@v6
        with:
          branch: codex/auto-fix-${{ github.event.workflow_run.run_id }}
          base: ${{ env.FAILED_HEAD_BRANCH }}
          title: "fix: Codexによるテスト失敗の自動修正"
          body: |
            このPRはCodex CLIによって自動生成されました。
            CI失敗を検出し、テストを通過させるための修正を適用しています。

Codex GitHub Actionの活用

openai/codex-action@v1を使用すると、CLIのインストールや認証を自動化できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
name: Codex pull request review

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  codex:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    outputs:
      final_message: ${{ steps.run_codex.outputs.final-message }}
    steps:
      - uses: actions/checkout@v5
        with:
          ref: refs/pull/${{ github.event.pull_request.number }}/merge

      - name: Pre-fetch base and head refs
        run: |
          git fetch --no-tags origin \
            ${{ github.event.pull_request.base.ref }} \
            +refs/pull/${{ github.event.pull_request.number }}/head

      - name: Run Codex
        id: run_codex
        uses: openai/codex-action@v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt-file: .github/codex/prompts/review.md
          output-file: codex-output.md
          safety-strategy: drop-sudo
          sandbox: workspace-write

  post_feedback:
    runs-on: ubuntu-latest
    needs: codex
    if: needs.codex.outputs.final_message != ''
    steps:
      - name: Post Codex feedback
        uses: actions/github-script@v7
        with:
          github-token: ${{ github.token }}
          script: |
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: process.env.CODEX_FINAL_MESSAGE,
            });
        env:
          CODEX_FINAL_MESSAGE: ${{ needs.codex.outputs.final_message }}

GitLab CI/CDでの統合例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# .gitlab-ci.yml
stages:
  - test
  - codex-review

test:
  stage: test
  script:
    - npm ci
    - npm test

codex-review:
  stage: codex-review
  image: node:20
  only:
    - merge_requests
  script:
    - npm i -g @openai/codex
    - codex login --api-key "$OPENAI_API_KEY"
    - |
      codex exec --sandbox read-only \
        "このマージリクエストの変更をレビューし、
        改善点やリスクがあれば指摘してください。" \
        -o review-result.md
  artifacts:
    paths:
      - review-result.md
    expire_in: 1 week

ワークフロー統合の全体像

flowchart TD
    subgraph "開発者のローカル環境"
        A[コード変更] --> B[Git hook]
        B --> C{pre-commit}
        C -->|コミットメッセージ提案| D[Codex CLI]
        D --> E[コミット]
        E --> F{pre-push}
        F -->|品質チェック| G[Codex CLI]
    end

    subgraph "CI/CD パイプライン"
        H[プッシュ/PR] --> I[テスト実行]
        I -->|失敗| J[Codex自動修正]
        J --> K[修正PR作成]
        I -->|成功| L[コードレビュー]
        L --> M[Codex Action]
        M --> N[レビューコメント投稿]
    end

    G --> H
    K --> H

APIトークン管理とセキュリティ

Codex CLIを自動化環境で使用する際は、APIトークンの適切な管理が重要です。

認証方法の選択

認証方法 用途 メリット デメリット
ChatGPTログイン 開発者のローカル環境 プラン内の使用量に含まれる 対話型フローが必要
APIキー CI/CD、自動化 環境変数で簡単に設定可能 従量課金
デバイスコード認証 ヘッドレス環境 ブラウザ不要 追加の設定が必要

CI環境での認証

CI環境では、CODEX_API_KEY環境変数を使用します。

1
2
3
4
5
6
# GitHub Actionsの場合
env:
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

# 単一実行時に異なるAPIキーを使用
- run: CODEX_API_KEY=${{ secrets.DIFFERENT_KEY }} codex exec "タスク"

CODEX_API_KEYcodex execでのみサポートされています。

資格情報の安全な保存

資格情報の保存方法は設定ファイルで制御できます。

1
2
3
# ~/.codex/config.toml
# file | keyring | auto
cli_auth_credentials_store = "keyring"
オプション 説明
file ~/.codex/auth.jsonに保存
keyring OSの資格情報ストアに保存(推奨)
auto 可能ならOS資格情報ストア、なければファイル

auth.jsonはパスワードと同様に扱い、コミットや共有を絶対に避けてください。

ヘッドレス環境での認証

SSHで接続したリモートサーバーなど、ブラウザが使えない環境では、デバイスコード認証を使用します。

1
2
# デバイスコード認証
codex login --device-auth

表示されたURLをローカルマシンのブラウザで開き、ワンタイムコードを入力して認証を完了します。

認証情報をリモートマシンにコピーする方法もあります。

1
2
3
# ローカルからリモートに認証情報をコピー
ssh user@remote 'mkdir -p ~/.codex'
scp ~/.codex/auth.json user@remote:~/.codex/auth.json

組織での管理設定

エンタープライズ環境では、managed_config.tomlrequirements.tomlで組織全体のポリシーを強制できます。

1
2
3
4
# /etc/codex/requirements.toml
# 危険なモードを禁止
allowed_approval_policies = ["untrusted", "on-request", "on-failure"]
allowed_sandbox_modes = ["read-only", "workspace-write"]
1
2
3
4
5
6
7
# /etc/codex/managed_config.toml
# 組織のデフォルト設定
approval_policy = "on-request"
sandbox_mode    = "workspace-write"

[sandbox_workspace_write]
network_access = false

セキュリティチェックリスト

CI/CDでCodexを使用する際は、以下のセキュリティ対策を実施してください。

項目 対策
APIキーの保護 GitHub Secretsなどのシークレット管理機能を使用
権限の最小化 safety-strategy: drop-sudoを使用
サンドボックス 必要最小限のサンドボックスモードを選択
プロンプトインジェクション対策 PR本文やIssueからの入力をサニタイズ
監査ログ OTELを有効化してログを収集
キーのローテーション 漏洩が疑われる場合は即座にローテーション

利用料金の最適化

Codex CLIの利用料金を最適化するためのテクニックを紹介します。

プラン別の利用制限

プラン ローカルメッセージ クラウドタスク コードレビュー
Plus($20/月) 45-225 10-60 10-25
Pro($200/月) 300-1500 50-400 100-250
Business($30/ユーザー/月) 45-225 10-60 10-25
APIキー 従量課金 利用不可 利用不可

コスト最適化のテクニック

Codexの使用量を効率的に管理するためのベストプラクティスを紹介します。

GPT-5.1-Codex-Miniの活用

シンプルなタスクには軽量モデルを使用することで、使用量を約4倍に延長できます。

1
2
3
4
5
# シンプルなタスクにはminiモデルを使用
codex exec -m gpt-5.1-codex-mini "このファイルのタイポを修正して"

# 複雑なタスクには標準モデルを使用
codex exec -m gpt-5.2-codex "アーキテクチャを分析して改善案を提示して"

プロンプトの最適化

1
2
3
4
5
# 悪い例: 曖昧で広範なプロンプト
codex exec "このプロジェクトを改善して"

# 良い例: 具体的で焦点を絞ったプロンプト
codex exec "src/utils/validation.ts の validateEmail 関数のエラーハンドリングを改善して"

AGENTS.mdの最適化

大規模プロジェクトでは、AGENTS.mdをネストして必要なコンテキストのみを提供します。

project/
├── AGENTS.md           # プロジェクト全体の概要(簡潔に)
├── frontend/
│   └── AGENTS.md       # フロントエンド固有の詳細
└── backend/
    └── AGENTS.md       # バックエンド固有の詳細

MCPサーバーの管理

不要なMCPサーバーは無効化して、コンテキストサイズを削減します。

1
2
3
4
# ~/.codex/config.toml
# 必要なMCPサーバーのみを有効化
[mcp]
servers = ["essential-server"]

使用量の監視

現在の使用量は/statusコマンドまたはダッシュボードで確認できます。

1
2
# セッション中に使用量を確認
/status

使用量制限に達した場合の対処法は以下の通りです。

  1. GPT-5.1-Codex-Miniモデルに切り替える
  2. ChatGPTクレジットを購入して使用量を拡張
  3. APIキーでの従量課金に切り替える

コスト最適化の判断フロー

flowchart TD
    A[タスクの種類を判断] --> B{複雑さ}
    B -->|シンプル| C[GPT-5.1-Codex-Mini]
    B -->|複雑| D[GPT-5.2-Codex]
    
    C --> E{使用量制限}
    D --> E
    
    E -->|余裕あり| F[ChatGPTプランで実行]
    E -->|制限に近い| G{緊急度}
    
    G -->|高| H[クレジット購入]
    G -->|低| I[翌日まで待機]
    
    F --> J[実行]
    H --> J
    I --> J

TypeScript SDKによるプログラマティック制御

より高度な制御が必要な場合は、Codex SDKを使用してプログラムからCodexを操作できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import { Codex } from "@openai/codex-sdk";

const codex = new Codex();
const thread = codex.startThread();

// 最初のタスクを実行
const result = await thread.run(
  "CI失敗の診断と修正計画を作成して"
);
console.log(result);

// 同じスレッドで続行
const fixResult = await thread.run("計画を実行して");
console.log(fixResult);

// 過去のスレッドを再開
const threadId = "<thread-id>";
const resumedThread = codex.resumeThread(threadId);
const resumeResult = await resumedThread.run("続きから作業を再開して");
console.log(resumeResult);

SDKはNode.js 18以降が必要で、サーバーサイドでの使用を想定しています。

まとめ

Codex CLIを既存の開発ワークフローに統合することで、開発効率を大幅に向上させることができます。

本記事で解説した主要なポイントは以下の通りです。

  • 非対話型モード(codex exec) を活用することで、スクリプトやCI/CDパイプラインからCodexを自動実行できる
  • シェルスクリプトとの連携 により、コードレビュー、テスト診断、リリースノート生成などの日常タスクを自動化できる
  • Git hookとの組み合わせ で、コミットやプッシュのタイミングでCodexを自動実行できる
  • CI/CDパイプラインへの統合 により、テスト失敗の自動修正やPRレビューの自動化が可能になる
  • APIトークンの安全な管理 と組織ポリシーの強制により、セキュアな運用を実現できる
  • 利用料金の最適化 として、軽量モデルの活用やプロンプトの最適化が効果的である

Codex CLIは単なるAIアシスタントではなく、開発ワークフロー全体を強化するツールです。本記事のパターンを参考に、自分のプロジェクトに最適な統合方法を見つけてください。

参考リンク