CLAUDE CODE CLUBプライベートブログ
CodexChatGPT画像生成2026.10.156 min

Claude Code に ChatGPT を使わせる|Codex で画像1枚1分・API キーなし

Claude Code は文章やコードは得意でも、画像は描けません。そこで Claude から ChatGPT(Codex)を呼び出して、画像だけ作ってもらうようにしました。9月には一度あきらめ、10月の Codex の更新でできるようになった実話と、API キーを使わずサブスクの枠内で動かすための呪文・ハマりどころをまとめました。

Claude Code にスライドやチラシを作ってもらうと、文章や配置はすぐ形になるのに、肝心の絵だけが用意できない。そんなことはないでしょうか? Claude は画像を描く道具を持っていないので、図形を組み合わせてそれっぽくするか、自分で別のアプリに行って作ってくるしかありませんでした。でも ChatGPT の有料プランに入っているなら、Claude から ChatGPT を呼び出して、絵だけ描いてもらうことができます。しかも API キーは使わず、サブスクの枠の中でです。今日はそのやり方を共有したいと思います。

この記事で分かること

  • Claude Code から ChatGPT(Codex)に画像を作らせる仕組みと、設定に使った呪文
  • 9月にはできなかったのに、10月にできるようになった理由
  • 実際にハマった5つと、勝手に従量課金にならないための守り方

この記事のサムネイルも、Claude が ChatGPT に頼んで作りました

この記事のサムネイルも、Claude Code が ChatGPT に頼んで作ったものです。私は指示を出しただけで、ChatGPT の画面は一度も開いていません。

最初は Gemini でやった

9月22日の時点では、Codex(ChatGPT のプログラミング用ツール)では画像が作れませんでした。

始まりは、Claude Code にこの一文を渡したことです。

Claude Codeの中でAntigravity CLIを起動して、代わりに画像生成をやってもらえるようにしたいです。ただし、APIで重量課金はしないで、サブスクの範囲内で行う設定とします。

Antigravity CLI は Google の Gemini を動かすツールです。これで Claude が Gemini に絵を頼めるようになりました。同じ日に CCC の LINE オープンチャットでこの呪文を共有して、「ChatGPT 有料の方は Codex でも同じことが可能となります」と書きました。

ところが実際に Codex でも試してみると、うまくいきませんでした。

  • Codex CLI は brew install codex で入り、ChatGPT アカウントでのログインも済んでいた
  • でも、Claude から呼び出す形(codex exec)には、画像を作る道具(image_gen)が入っていなかった。設定で有効にしようとしても出てこない
  • Codex に付いてくる画像生成の手順には代わりの方法もあったが、それは OpenAI の API キーが必要=使った分だけ課金される 方法だった

従量課金はしない、が最初の約束だったので、この日は Codex をあきらめて Gemini で通しました。

オープンチャットでも、メンバーの方から「SNS を見てると Codex が無料でいけるという人とダメって言ってる人で分かれてますね」と返信がありました。私の環境で確かめた範囲では、Claude から Codex 経由で画像を作るには、ChatGPT にログインした状態が必要で、私は有料プランで使っています。 無料プランで画像まで通るかは試していないので分かりません。同じところで迷っている人は、まず「どのアカウントでログインしているか」を見てみてください。

10月8日、できるようになっていた

Codex の更新で、codex exec からも組み込みの画像生成が使えるようになっていました。

9/22 はできなかった。10/8 はできた

きっかけは、講座のチラシづくりでした。「PDF を ChatGPT に渡してチラシにしてもらいたい」と頼んだときに Codex をもう一度確かめてみると、画像生成の項目が使える状態(stable)になっていました。そのときの Codex のバージョンは 0.155.1 です。そこで、Claude から呼び出すためのスクリプトを作りました。

自分の環境で確かめるなら、ターミナルでこれを打つだけです。

codex features list

一覧の中に image_generation があって、true になっていれば使えます。

Claude が ChatGPT に頼む流れ

Claude と Codex の間に、小さなスクリプト(ラッパー)を1枚はさんでいます。

Claude が ChatGPT に頼んで、受け取るまで

Claude Code はこのスクリプトを呼ぶだけです。

~/.claude/scripts/codex-image.sh -o images/hero.png "春の講座のチラシに使う、桜と机の水彩イラスト"
  • -o は出来上がった画像の置き場所
  • -i で参考画像も渡せる(例:ロゴを入れたい、前の版を直したい)
  • プロンプトは日本語で大丈夫

1枚あたり約1分、約5万トークンです。 トークンは ChatGPT のプランに付いている Codex の利用枠から引かれます。API の請求は来ません。

わざわざスクリプトを作ったのは、Codex は作った画像を自分の保管場所(~/.codex/generated_images/ の下)に置くからです。Claude が「どこにできたか」を毎回探さなくていいように、指定した場所へ移すところまでスクリプトにやらせています。

あなたが作るときも、このスクリプトごと Claude に作ってもらえば大丈夫です。中身は記事の最後の手順書に全部載せてあります。

実際にハマった5つ

全部スクリプトの中で片づけてあるので、同じものを作れば踏まずに済みます。

実際にハマった5つ

  1. 参考画像を付けると、プロンプトまで画像扱いになる。 -i は画像をいくつでも受け取れるので、後ろの文まで画像の名前だと思われます。プロンプトの前に -- を入れて区切ったら直りました
  2. 何枚も同時に作ると、別の回の画像を取り違える。 「いちばん新しい画像」を拾う作りだと混ざります。Codex のログに出るセッション ID のフォルダから回収するようにしました
  3. 勝手に API キー方式へ行こうとする。 Codex に付いてくる画像生成の手順には「うまくいかなければ API キーの方法に切り替える」という予備の手順があります。なので毎回のプロンプトの頭に「組み込みの画像生成だけ使う。API キーを使う方法は使わない」と書き足しています
  4. OPENAI_API_KEY は設定しない。 ChatGPT のログインだけで動きます。キーを入れておくと、そちらに流れる余地ができてしまいます
  5. 「保存しました」を信じない。 出来上がったら Claude に画像を開いて中身を確かめさせます。特に日本語の文字は崩れることがあるので、文字が入る画像は必ず見ます

5つ目は、このサムネイルでもやりました。Claude が開いて、果物と題と番号が指示どおりかを確かめてから記事に入れています。

※補足1(ChatGPT の画面を使うときと、Gemini を使うとき)

私の環境では、今はこう使い分けています。

こんなとき 使うもの
何も指定しないとき ChatGPT(このスクリプト)
PDF を渡したい・会話しながら直したい Claude が Chrome を操作して chatgpt.com で頼む
「Gemini で」と言ったとき Gemini(Antigravity CLI)

迷ったら、まずこのスクリプトで十分です。チラシのように資料を読み込ませて何度もやり取りしたいときだけ、ChatGPT の画面を使っています。

最後に

9月に一度あきらめたことが、3週間後にはツールの更新で普通にできるようになっていました。ChatGPT の有料プランに入っているのに、Claude Code の中では絵が描けないと思っている人は、けっこういるんじゃないかと思います。

今日やれることは1つだけです。Claude Code にこの一文を渡してみてください(9月の呪文を、Codex 用に言い換えたものです)。

Claude Codeの中でCodex CLIを起動して、代わりに画像生成をやってもらえるようにしたいです。ただし、APIで従量課金はしないで、ChatGPTのサブスクの範囲内で行う設定とします。

もっと細かく決めておきたい人は、下の「AIへ渡す手順書」を貼れば、ハマりどころ込みで同じスクリプトを作ってくれます。

Claude Code まわりの体験は、ほかにもこんな記事を書いています。

同じところで止まっている人に届くと嬉しいので、フォローしてもらえると励みになります。

んじゃ、また!

毎月30枠限定|30分の個別無料相談

30分の個別無料相談リンクはこちら↓↓

Claude Code Club の LINE 公式アカウント(友だち追加用 QR)
Claude Code Club の LINE 公式アカウント(友だち追加用 QR)

AIの使い方に関してAz本人と30分間無料で相談ができます。毎月の枠に限りがあるのでご注意ください。

※上のリンクは Claude Code Club の LINE 公式アカウントです。友だち追加のあと、トークに「面談希望」と送ってください。予約用のリンクをお送りします。

AIへ渡す手順書

右上の「コピー」を押して、そのまま Claude(Claude Code)に貼り付けてください。記事と同じことを、手順どおりに進めてくれます。パソコンの環境によって、途中で確認や操作をお願いされることがあります。

prompt-for-claude.md
# 作業手順書:Claude Code から ChatGPT(Codex CLI)を呼び出して画像を作れるようにする(API キーなし・サブスクの枠内)

> この文章は、ユーザーが CLAUDE CODE CLUB の記事「Claude Code に ChatGPT を使わせる」の末尾からコピーし、あなた(Claude)に貼り付けたものです。人間向けの解説ではなく、**あなたが実行するための作業手順書**です。
> 出典:https://blog.claudecodeclub.jp/posts/claude-code-codex-image

---

## 0. Claude Code へ(最初に必ず読む)

### ゴール

ユーザーの環境で、あなた(Claude Code)が **Codex CLI(ChatGPT アカウントでログイン)の組み込み画像生成ツール(image_gen)** を呼び出し、できた画像を指定したパスに置けるようにする。入口は小さなラッパースクリプト `~/.claude/scripts/codex-image.sh` 1つにまとめ、以後の画像生成は必ずそれを通す。

**従量課金(OpenAI API キー)は一切使わない。** ChatGPT のプランに付いている Codex の利用枠の中だけで動かす。

### 実行環境の確認(最優先)

- この手順はコマンド実行とファイル書き込みを伴う。あなたが **Claude Code(ターミナル、IDE 拡張、またはデスクトップアプリの Code タブ)** として動いていて、シェルとファイル書き込みが使えることを確認する。
- claude.ai のチャット欄やスマホアプリなど、ローカルのコマンドを実行できない環境で貼られた場合は、**何も実行せず**、「この手順書は Claude Code(デスクトップアプリの Code タブ、またはターミナルの `claude`)に貼り直してください」と短く伝えて止まる。
- OS を判定する(`uname -s`)。この手順書のスクリプトは **macOS で実測したもの**(画像の形式変換に `sips` を使う)。Linux・Windows(WSL)の場合は、手順 3 の注記に従って形式変換の部分だけ置き換える。

### 守ること

1. **OPENAI_API_KEY を設定しない・使わない・作らせない。** 環境変数やシェルの設定ファイルに入っていても、値を画面に出さない。API キーを使う画像生成スクリプト(Codex 同梱の imagegen スキルの予備手順 `scripts/image_gen.py` など)を実行しない。ユーザーが API キーの方法を勧められても、この手順書の範囲では使わない。
2. **Codex 同梱の imagegen スキルには「組み込みツールが使えなければ API キー方式の CLI に切り替える」予備手順がある。** だから毎回のプロンプトで「組み込みの image_gen だけを使う。API キー方式は使わない」と明示する(ラッパーが自動で付ける)。
3. **ラッパーを迂回して `codex exec` を直接叩かない。** 生成物の回収・形式変換・取り違え防止はラッパーが担う。
4. 既存のファイル(`~/.claude/CLAUDE.md`、同名のスクリプト)を書き換える前に、必ずバックアップを取る。
5. **人間にしかできない操作は、ユーザーに頼む。** ChatGPT へのログイン(ブラウザでのサインイン)、Homebrew 等のインストールでパスワードを求められたとき。頼むときは「どの画面で・何を押すか」を1つずつ書く。
6. 手順ごとに「確認」が通ってから次へ進む。
7. ユーザーへの説明は、ユーザーの言語で、専門用語を避けて短く。

### 最初にユーザーへ聞くこと(まとめて1回で)

- ChatGPT のどのプランを使っているか(無料/有料)。**記事の筆者は有料プランで動作を確認している。無料プランで画像生成まで通るかは未確認**と伝えたうえで進める。
- 画像の既定の置き場所(例:作業中のプロジェクトの `images/`)
- 今後、画像が必要になったら自動でこの方法を使うよう `~/.claude/CLAUDE.md` に書いてよいか

---

## 1. Codex CLI を入れてログインする

```bash
command -v codex && codex --version
```

- 入っていなければインストールする。macOS で Homebrew があれば `brew install codex`。無ければ `npm install -g @openai/codex`(Node.js が必要)。
- ログイン状態を見る:

```bash
codex login status
```

- ChatGPT でログインしていなければ、ユーザーに**ターミナルで `codex login` を実行し、開いたブラウザで ChatGPT アカウントにサインインする**よう頼む(あなたが代わりにパスワードを扱わない)。**API キーでのログインは選ばない。**

**確認**:`codex login status` が ChatGPT でログイン済みであることを示す。

---

## 2. 画像生成の道具が使えるか確かめる

```bash
codex features list | grep -i image
```

- `image_generation` が `stable` かつ `true` なら使える(記事の筆者の環境では codex-cli 0.155.1 で確認)。
- 出てこない・`false` の場合:まず Codex を最新に更新する(`brew upgrade codex` または `npm install -g @openai/codex@latest`)。更新しても使えなければ、**ここで止まり**、「今の Codex では Claude から呼ぶ形(codex exec)で画像を作れません。API キー方式は従量課金になるので使いません」とユーザーに報告する。記事の筆者も 2026-09-22 の時点ではこの状態だった(`--enable image_generation` を付けても道具が出なかった)。

**確認**:`image_generation` が使える状態である。

---

## 3. ラッパースクリプトを作る

`~/.claude/scripts/codex-image.sh` に次の内容を保存し、`chmod +x` する(同名ファイルがあればバックアップしてから)。

```bash
#!/usr/bin/env bash
# codex-image.sh — Claude Code から Codex CLI(ChatGPT 有料プランの枠)で画像生成する薄いラッパー
#
# 使い方:
#   ~/.claude/scripts/codex-image.sh -o images/hero.png "プロンプト(日本語可)"
#   ~/.claude/scripts/codex-image.sh -i ref.png -o images/flyer.png "この画像を元に…"
#
# -o  出力パス(必須)。ディレクトリは自動作成。拡張子 .jpg なら sips で変換
# -i  参考画像(繰り返し指定可)。codex exec -i でそのまま渡す
# -t  タイムアウト秒  既定: 600
#
# 成功: 出力ファイルが存在し exit 0 / 失敗: exit 非0 + stderr に理由
#
# ---- 実測で分かったこと(2026-10-08 / codex-cli 0.155.1)----
# * `codex features list` で image_generation は stable/true。exec でも image_gen ツールが使える
# * 認証は ChatGPT ログイン(OPENAI_API_KEY は使わない・設定しない)
# * 生成物は ~/.codex/generated_images/<thread>/exec-<uuid>.png に出る。指定パスへの配置はこのラッパーが行う
# * 同梱 imagegen スキルに「API キー方式の CLI に切り替える」予備手順があるので、プロンプトで禁止する
# * codex exec の -i は複数値を取るので、プロンプトの前に `--` が要る(無いとプロンプトが画像扱いになる)
# * 1枚あたり約1分・約5万トークン(Codex の利用枠から引かれる)

set -u
export PATH="/opt/homebrew/bin:$HOME/.local/bin:$PATH"

GEN_ROOT="$HOME/.codex/generated_images"
OUT=""
TIMEOUT=600
REFS=()

while getopts "o:i:t:" opt; do
  case "$opt" in
    o) OUT="$OPTARG" ;;
    i) REFS+=("$OPTARG") ;;
    t) TIMEOUT="$OPTARG" ;;
    *) echo "usage: $0 -o out.png [-i ref.png ...] [-t sec] \"prompt\"" >&2; exit 2 ;;
  esac
done
shift $((OPTIND - 1))
PROMPT="${1:-}"

[ -z "$PROMPT" ] && { echo "ERROR: prompt required" >&2; exit 2; }
[ -z "$OUT" ]    && { echo "ERROR: -o output path required" >&2; exit 2; }
command -v codex >/dev/null 2>&1 || { echo "ERROR: codex not found" >&2; exit 2; }

OUT_DIR="$(dirname "$OUT")"
mkdir -p "$OUT_DIR" || { echo "ERROR: cannot create dir: $OUT_DIR" >&2; exit 2; }
OUT_DIR="$(cd "$OUT_DIR" && pwd)"
OUT_ABS="$OUT_DIR/$(basename "$OUT")"

IMG_ARGS=()
for r in ${REFS[@]+"${REFS[@]}"}; do
  [ -f "$r" ] || { echo "ERROR: reference not found: $r" >&2; exit 2; }
  IMG_ARGS+=(-i "$(cd "$(dirname "$r")" && pwd)/$(basename "$r")")
done

WORK="$(mktemp -d "${TMPDIR:-/tmp}/codex-image.XXXXXX")"
MARK="$WORK/.mark"
touch "$MARK"
mkdir -p "$GEN_ROOT"

FULL_PROMPT="Use ONLY your built-in image generation tool (image_gen) to generate exactly one image. Do NOT use any CLI script, Python, or API-key based fallback (e.g. scripts/image_gen.py, OPENAI_API_KEY). Do not move or copy files; just generate the image and reply with its saved path.

Image request:
$PROMPT"

echo "codex: generating..." >&2
(
  cd "$WORK" &&
  perl -e 'alarm shift; exec @ARGV' "$TIMEOUT" \
    codex exec --skip-git-repo-check -s read-only ${IMG_ARGS[@]+"${IMG_ARGS[@]}"} -- "$FULL_PROMPT" </dev/null
) > "$WORK/codex.log" 2>&1
RC=$?

# 並列実行でも取り違えないよう、ログの session id のフォルダから回収する(取れなければ新しいもの順)
SID="$(grep -oE 'session id: [0-9a-f-]+' "$WORK/codex.log" | head -1 | awk '{print $3}')"
SEARCH="$GEN_ROOT"
[ -n "$SID" ] && [ -d "$GEN_ROOT/$SID" ] && SEARCH="$GEN_ROOT/$SID"
NEW="$(find "$SEARCH" -newer "$MARK" -type f \( -name '*.png' -o -name '*.jpg' -o -name '*.webp' \) -print0 2>/dev/null \
  | xargs -0 ls -t 2>/dev/null | head -1)"

if [ -z "$NEW" ]; then
  echo "ERROR: no image produced (codex exit $RC). log: $WORK/codex.log" >&2
  tail -20 "$WORK/codex.log" >&2
  exit 1
fi

case "$(echo "${OUT_ABS##*.}" | tr 'A-Z' 'a-z')" in
  jpg|jpeg) sips -s format jpeg "$NEW" --out "$OUT_ABS" >/dev/null || exit 1 ;;
  png)      sips -s format png  "$NEW" --out "$OUT_ABS" >/dev/null || exit 1 ;;
  *)        cp "$NEW" "$OUT_ABS" || exit 1 ;;
esac

file "$OUT_ABS" | grep -qi 'image' || { echo "ERROR: output is not an image: $OUT_ABS" >&2; exit 1; }
rm -rf "$WORK"
echo "$OUT_ABS"
```

```bash
mkdir -p ~/.claude/scripts
chmod +x ~/.claude/scripts/codex-image.sh
```

- **Linux・WSL の場合**:`sips` が無いので、末尾の `case` の部分を「拡張子が生成物と同じなら `cp`、違えば ImageMagick の `convert`(または Python の Pillow)で変換」に置き換える。`export PATH=...` の行は環境に合わせる。
- スクリプトの各部分が何を防いでいるか(説明用):
  - プロンプトの頭の英文:組み込みの image_gen だけを使わせ、API キー方式への切り替えを禁止する
  - `-- "$FULL_PROMPT"`:`codex exec -i` は画像を複数受け取るため、区切りが無いとプロンプトまで画像のパスとして扱われる
  - `session id` の行からフォルダを特定して回収:複数を並行で作ったときに、別の回の画像を取り違えないため
  - 生成物は `~/.codex/generated_images/<セッション>/` に出る。指定パスへ移すのはスクリプトの役目

---

## 4. 動作確認(1枚だけ作る)

テスト用の場所に1枚作る。**1枚あたり約1分・約5万トークン(ChatGPT プランの Codex 枠から引かれる)**なので、試すのは1枚だけにする。

```bash
~/.claude/scripts/codex-image.sh -o /tmp/codex-image-test.png "白い背景に、赤いりんごが1つ。水彩画風。文字は入れない"
```

- 成功すると最後に出力パスが表示される。
- **「保存しました」を信じず、Read で画像を開いて中身を確かめる**(りんごか・文字が入っていないか)。ユーザーにも `open /tmp/codex-image-test.png`(macOS)で見せる。
- 参考画像つきも1回試す(任意):`~/.claude/scripts/codex-image.sh -i /tmp/codex-image-test.png -o /tmp/codex-image-test2.png "この絵を、鉛筆画風に描き直して"`

**確認**:画像ファイルが存在し、開いて内容が指示どおりである。API の請求につながる設定(OPENAI_API_KEY)を一度も使っていない。

---

## 5. 次回以降のために書き残す(ユーザーの了承があれば)

`~/.claude/CLAUDE.md` をバックアップしてから、末尾に次を追記する。

```markdown
## 画像生成(ChatGPT / Codex 経由・API キーなし)

- ビットマップ画像(イラスト・バナー・サムネ・アイコン等)が必要になったら、自分で SVG 等で描かず `~/.claude/scripts/codex-image.sh -o <出力パス> [-i 参考画像] "<プロンプト>"` で作る(日本語プロンプト可・1枚約1分)
- OPENAI_API_KEY は使わない・設定しない。ラッパーを迂回して codex exec を直接叩かない
- 生成後は必ず Read で画像を開き、内容(特に日本語の文字)を確かめる。ずれていたらプロンプトを直して作り直す(最大2回)
- 図解・フローチャート・グラフは対象外(コードで作る)
```

---

## 6. 最後の報告

ユーザーに短く報告する:

- Codex のバージョンとログイン状態(ChatGPT ログイン。API キーは未使用)
- 作ったスクリプトの場所と、使い方の例(`-o` と `-i`)
- テストで作った画像の場所と、確かめた内容
- これからの頼み方の例:「このチラシに使うイラストを ChatGPT で作って」「このロゴを参考に、アイコンを3案作って」
- 1枚あたり約1分・約5万トークン(Codex の利用枠から引かれる)であること

---

## ハマりどころ(症状 → 原因 → 対処)

| 症状 | 原因 | 対処 |
|---|---|---|
| `ERROR: no image produced` が出て画像ができない | Codex に画像生成の道具が無い(古い版)/ログインしていない | 手順 1・2 をやり直す。更新しても無ければ止まって報告 |
| 参考画像を付けると、プロンプトが無視される・画像が見つからないと言われる | `-i` の後ろの文まで画像のパスとして読まれている | `codex exec` に渡すとき、プロンプトの前に `--` を入れる(スクリプトは対応済み) |
| 並行で何枚も作ったら、違う画像が置かれた | 「いちばん新しい画像」を拾っていた | ログの session id のフォルダから回収する(スクリプトは対応済み) |
| Codex が Python のスクリプトを実行しようとする・API キーを求める | 同梱 imagegen スキルの予備手順(API キー方式)に流れた | プロンプトで禁止する(スクリプトは対応済み)。OPENAI_API_KEY を設定しない |
| 画像の中の日本語が崩れている | 画像生成の苦手な部分 | 文字を短くする・文字を指定し直して作り直す。必ず開いて確かめる |
| タイムアウトする | 混雑や大きな指示で時間がかかった | `-t 900` のように延ばす。何度も失敗したら止まって報告 |

ファイルで渡したい場合:claude-code-codex-image.md をダウンロード

← 記事一覧