
みなさん、こんにちは!
これまで、Windowsへの導入やアプリとの比較、APIとの違いなど、「Codex CLI」の役割を整理してきました。シリーズ第4回となる今回は、いよいよ実践編です!
今回のテーマは「APIを直接使わず、Codex CLIを使って画像生成をどこまで自動化できるか?」の検証。Codexが持つ画像生成スキルを活かして、日々の面倒な手動作業を自動化できるか一緒に見ていきましょう。
1. 今回やりたいこととCLIを選ぶ理由
普段、私たちが手動で行っている画像生成は次のような流れですよね。
- Codexを開く
- プロンプトを入力する
- 必要なら参照画像を指定する
- 画像生成を待って、ローカルに保存する
これを今回は「画像生成データ(インプット)」を起点に、「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 Cyanoutput\001.png

