【Codex CLI実践編】PowerShell連携で画像生成をどこまで自動化できるか検証してみた!

投稿者: | 2026-09-12

みなさん、こんにちは!

これまで、Windowsへの導入やアプリとの比較、APIとの違いなど、「Codex CLI」の役割を整理してきました。シリーズ第4回となる今回は、いよいよ実践編です!

今回のテーマは「APIを直接使わず、Codex CLIを使って画像生成をどこまで自動化できるか?」の検証。Codexが持つ画像生成スキルを活かして、日々の面倒な手動作業を自動化できるか一緒に見ていきましょう。

1. 今回やりたいこととCLIを選ぶ理由

普段、私たちが手動で行っている画像生成は次のような流れですよね。

  1. Codexを開く
  2. プロンプトを入力する
  3. 必要なら参照画像を指定する
  4. 画像生成を待って、ローカルに保存する

これを今回は「画像生成データ(インプット)」を起点に、「PowerShellからCodex CLIを呼び出し、自動で生成から保存まで完了させる」という流れに変えていきます。

「OpenAIのAPIを叩いたほうが早いのでは?」と思うかもしれません。しかし今回は、あらかじめ用意した環境で「CodexというAIエージェントに仕事そのものを任せる形で、どこまで自動化できるか」を試すことに意味があります。

2. まずは手動確認とプロジェクトの準備

いきなりスクリプトを組むとエラーの原因が分かりにくいため、まずは手動でCodex CLIの対話モードから指示が通るか確認します。

WindowsのPowerShellを開いて、検証用フォルダに移動しましょう。

cd C:\CodexImageAuto
codex

対話画面になったら、このように指示してみます。

白い背景に青いコーヒーカップを1つ配置した、シンプルなフラットイラストを作成してください。生成した画像はoutputフォルダへ保存してください。

ここで、承認操作が必要かどうか、実際に狙ったフォルダに保存されるかをチェックします。

自動化用のフォルダ構成

無事に手動で保存できたら、自動化を見据えて以下のようなフォルダ構成を作ります。

CodexImageAuto/
├─ AGENTS.md (指示のルール化)
├─ input/ (001.txt などの生成データ)
├─ prompts/ (共通テンプレート)
├─ references/ (キャラクター画像など)
├─ output/ (生成画像の保存先)
├─ logs/ (エラーなどの実行記録)
└─ scripts/ (PowerShellスクリプト)

3. AGENTS.mdによるルール化とプロンプト分離

毎回Codexに長い指示を送るのは大変ですし、トークンの節約にもなりません。そこで、プロジェクトの固有ルールを AGENTS.md に記載します。

# ルール
- inputフォルダから未処理の画像生成データを確認する。
- promptsフォルダの共通プロンプトと組み合わせて指示を作成する。
- 完成した画像はoutputフォルダへ保存する。
- すでに同名の出力画像が存在する案件は処理しない。

そして、デザインの共通ルールを定めた prompts/generic_prompt.txt と、個別のテーマを書いた input/001.txt などを分離させます。

こうすることで、デザインスタイルを一貫させたまま、中身だけを差し替えて大量生成できるようになります。

4. PowerShell連携による「非対話」自動化

手動での1件処理が成功したら、次は人間が介在しない「非対話実行(codex exec)」へとステップアップします。

PowerShellから自動起動するための簡単なスクリプト run.ps1 を作成します。

Set-Location "C:\CodexImageAuto"
# ここからCodex CLIへ画像生成処理を非対話で依頼

複数画像の処理と制御

自動化を進める中で、複数ファイルを処理する方法には2つのアプローチがあります。

  • 方法A:「inputフォルダの未処理をすべて順に生成して」とCodexに丸投げする。
  • 方法B: PowerShell側で1件ずつループを回してCodex CLIを呼び出す。

管理のしやすさや再実行時のスキップ(すでに output/001.png があれば処理を飛ばすなど)を考慮すると、方法B(PowerShell側での管理)がエラーに強く運用しやすいのでおすすめです。

5. 品質確認とログの記録

自動化で最も重要になるのが「生成後の品質確認」です。
「画像ファイルができた」だけで満足せず、文字崩れがないか、指定の比率(16:9など)かを確認する必要があります。

将来的には、Codex自身に「生成された画像が条件を満たしているか」をマルチモーダル機能でチェックさせ、ダメなら自動で再生成(最大2回まで)させるループ構造を組むとさらに実用的ですね。

また、実行日時や成否を logs/run.log に書き残す仕組みも忘れずに用意しておきましょう。

まとめ:CLIが切り開く新しいワークフロー

今回の検証を通じて、Codex CLIの本当の価値は「ターミナルで会話できること」ではなく、「Codexを自分のPCのワークフローに組み込めること」だと実感できました。

検証時のCodex CLIのバージョンや環境によって、「一部で人間の承認が必要だった」「完全自動化できた」などの結果は分かれますが、APIのような従量課金を気にせず、ChatGPTの強力な協調動作をローカル環境で活かせるのは大きなメリットです。

みなさんも、ぜひ自分だけの自動画像生成スタジオを作ってみてくださいね!

おまけ:実際に使用したデータ

prompts\generic_prompt.txt

# Role & Style Guidelines
以下の共通スタイルとルールを必ず適用して画像を生成してください。

## 1. 全体スタイル(画風)
- スタイル: シンプルなフラットイラスト / ベクターアート風(余計な立体感や過剰なリアル質感はつけない)
- タッチ: クリーンでモダン、ビジネス・Webメディア向けのデザイン
- 主題: 指定された被写体(個別プロンプトの内容)を中心に1つ〜数個、明確に描く

## 2. 構図・アスペクト比
- 比率: 16:9(横長)
- レイアウト: 中央配置、またはテキストを入れられるように片側に適度な余白(ネガティブスペース)を確保
- 背景: シンプルな単色(白〜明るいグレー)、または控えめなグラデーション

## 3. カラーパレット
- メインカラー: コーポレートブルー(#2563eb周辺)
- アクセントカラー: 明るいオレンジやシアン
- トーン: 明るく清潔感のある配色(濁った色や暗すぎる影は避ける)

## 4. 禁止・注意事項
- 文字(テキスト、ラベル、架空のフォントなど)は一切入れない
- 複雑すぎる背景やノイズ感のあるテクスチャは避ける
- 人物が含まれる場合は、顔の造形が崩れないシンプルな表現にする

input\001.txt

ノートパソコンを開いて作業している女性。
黒髪で落ち着いた雰囲気で、冷静かつ論理的な優等生。
清楚で知的な女子高生プログラマー。

run.ps1

# ==============================================================================
# run.ps1: Codex CLI 画像生成自動化バッチ
# ==============================================================================

# 1. 作業ディレクトリの設定
$projectRoot = "C:\CodexImageAuto"
Set-Location $projectRoot

# ログ設定
$logFile = "$projectRoot\logs\run.log"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"[$timestamp] === 画像生成バッチ処理開始 ===" | Out-File -FilePath $logFile -Append -Encoding utf8

# 2. 共通プロンプトの読み込み
$genericPromptPath = "$projectRoot\prompts\generic_prompt.txt"
if (-not (Test-Path $genericPromptPath)) {
    Write-Error "共通プロンプト ($genericPromptPath) が見つかりません。"
    exit 1
}
$genericPrompt = Get-Content -Path $genericPromptPath -Raw -Encoding utf8

# 3. inputフォルダ内のテキストファイルを巡回
$inputFiles = Get-ChildItem -Path "$projectRoot\input\*.txt" | Sort-Object Name

foreach ($file in $inputFiles) {
    $baseName   = $file.BaseName
    $outputPng  = "$projectRoot\output\$baseName.png"

    # 4. 既存チェック(すでに画像が存在する場合はスキップ)
    if (Test-Path $outputPng) {
        Write-Host "スキップ: $baseName.png は既に存在します。" -ForegroundColor Yellow
        continue
    }

    Write-Host "処理開始: $($file.Name) の画像生成..." -ForegroundColor Cyan

    # 5. 個別テーマの読み込みとプロンプトの合成
    $themePrompt = Get-Content -Path $file.FullName -Raw -Encoding utf8

    $instruction = @"
以下の共通デザインルールとテーマに従い、画像を1枚生成して保存してください。

【デザイン共通ルール】
$genericPrompt

【個別テーマ】
$themePrompt

【出力要件】
・出力先パス: output/$baseName.png
・必ず上記パスに画像ファイルを保存して処理を完了してください。
"@

    # 6. codex exec を非対話モードで実行
    try {
        $result = codex exec --skip-git-repo-check --approve-for-me "$instruction" 2>&1

        $logTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

        # 外部コマンドの終了コードを判定
        if ($LASTEXITCODE -ne 0) {
            "[$logTime] [ERROR] $baseName.png 実行失敗 (ExitCode: $LASTEXITCODE)" | Out-File -FilePath $logFile -Append -Encoding utf8
            $result | Out-File -FilePath $logFile -Append -Encoding utf8
            Write-Warning "失敗: output/$baseName.png (詳細はログを確認してください)"
        } else {
            "[$logTime] [SUCCESS] $baseName.png" | Out-File -FilePath $logFile -Append -Encoding utf8
            $result | Out-File -FilePath $logFile -Append -Encoding utf8
            Write-Host "完了: output/$baseName.png" -ForegroundColor Green
        }
    }
    catch {
        $logTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "[$logTime] [ERROR] $baseName 処理中に例外が発生しました: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
        Write-Error "エラー発生 ($baseName): $_"
    }

    # サーバー負荷・APIレート制限対策(必要に応じて秒数を調整)
    Start-Sleep -Seconds 3
}

$endTimestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"[$endTimestamp] === 画像生成バッチ処理終了 ===" | Out-File -FilePath $logFile -Append -Encoding utf8
Write-Host "すべての処理が終了しました。" -ForegroundColor Cyan

output\001.png

カテゴリー: AI タグ: