1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker +Dev Container上でClaude CodeとCodexを連携させる手順(cc-skill-codex)

1
Last updated at Posted at 2026-10-09

この記事でできること

VS Code の 開発コンテナ(Dev Container) の中で、2つのAIを動かします。

  • Claude Code(Anthropic)
  • Codex CLI(OpenAI)

さらに、Claude から Codex を呼び出せるようにします。

たとえば「Codexにもレビューしてもらって」と頼むだけで、Claude が裏で Codex に質問します。そして、2人の意見をまとめて報告してくれます。

連携には、Claude Code 用のスキル cc-skill-codex を使います。

この記事の順番どおりに進めれば、一度で動く状態になるように書いています。

前提記事

Docker Desktop の準備と仕組み

参考記事

Python と VS Code の準備

Codex 単体の使い方(Codex アプリ・VS Code 拡張・CLI)は、こちらで詳しく紹介しています。この記事では、その Codex を Claude Code から呼び出す ところまで進めます。


今回の環境構成

例として、筆者が開発している とある業務システム(Web アプリ) のプロジェクトを使います。記事の中では、名前を my-project にしています。

  • frontend:Next.js(React / TypeScript)の画面
  • backend:Python / Flask の API
  • db:PostgreSQL
  • app:開発用のコンテナ。VS Code はここに接続し、Claude Code と Codex もここで動かします

my-project開発環境の構成
image.png

図の見方は、次のとおりです。

ポイント 説明
VS Code は app コンテナ に接続する ターミナルも Claude も Codex も、すべてコンテナの中で動く
プロジェクトフォルダは 共有 される Windows の C:\work\my-project と、コンテナ内の /workspaces/my-project は同じ中身
スキルはプロジェクトの中に置く 共有フォルダの中にあるので、コンテナ内の Claude からそのまま見える
ログイン情報は ボリューム に保存 コンテナを作り直しても、ログインし直さなくてよい
Claude・Codex はインターネット経由 AI の処理は、Anthropic と OpenAI のサーバーで行われる

プロジェクトのフォルダ構成

この記事で 追加・編集するファイル に ★ を付けています。

☆ を付けたものは、例に使っている 業務システム固有のフォルダ です。

my-project/
├── .claude/
│   └── skills/
│       └── codex/              ★ スキル(cc-skill-codex)
│           ├── SKILL.md
│           └── scripts/
│               └── codex-ask.sh
├── .codex/                     Codex のプロジェクト設定
├── .devcontainer/
│   ├── devcontainer.json       ★ 開発コンテナの設定
│   └── Dockerfile              app コンテナの作り方
├── .secrets/                   秘密情報(git 管理外)
├── backend/                    ☆ システムの API(Flask)
├── docs/                       ☆ システムの要件・設計書
├── frontend/                   ☆ システムの画面(Next.js)
├── reference/                  ☆ システムの参考資料
├── scripts/                    ☆ システムの検証・運用スクリプト
├── .env                        環境変数(git 管理外)
├── .env.example                環境変数のひな形
├── .gitattributes              ★ 改行コードの設定
├── .gitignore                  ★ git に入れないファイルの設定
├── AGENTS.md                   Codex が読むルール
├── CLAUDE.md                   ★ Claude が読むルール
├── compose.yml                 ★ 4つのサービスの定義
└── README.md

☆ のフォルダについて
backend/・frontend/・docs/ などは、筆者が開発している とある業務システム(Web アプリ) で使っているものです。この記事の手順とは関係ないので、同じものを用意する必要はありません。

自分のプロジェクトでは、ここが自分のアプリのフォルダに置き換わります。たとえば、src/ だけのシンプルな構成でも大丈夫です。

この記事で大事なのは ★ の付いたファイルだけです。

.claude や .env のように、名前が .(ドット)で始まるファイルやフォルダは、Windows のエクスプローラーでは表示されないことがあります。VS Code のファイル一覧では表示されます。

全体の流れ

手順 内容 作業する場所
1 必要なものを準備する Windows
2 VS Code に拡張機能を入れる VS Code
3 スキルをプロジェクトに置く Windows(PowerShell)
4 設定ファイルを作る VS Code
5 コンテナで開く VS Code
6 Claude と Codex にログインする コンテナ内ターミナル
7 動作を確認する Claude の画面

3種類の「入力する場所」を区別しよう

この手順では、文字を入力する場所が3つ出てきます。どこに入力するか を間違えないことが、いちばん大事です。

表示 場所 ここで入力するもの
PS C:\...> Windows の PowerShell docker、ファイルのコピーなど
vscode ➜ /workspaces/... $ コンテナ内のターミナル(bash) claude、codex、git などのコマンド
枠で囲まれた入力欄と ❯ Claude の画面 日本語の依頼、/skills など

1. 必要なものを準備する

1-1. インストールするもの

ソフト 入手先
Docker Desktop https://www.docker.com/products/docker-desktop/
VS Code https://code.visualstudio.com/

Docker Desktop は、インストール後に 起動した状態 にしておきます。

インストールの詳しい手順は、次の記事を参照してください。

1-2. 必要なアカウント

  • Claude の有料プラン(Pro / Max)
  • ChatGPT のアカウント(Codex で使います)

1-3. ChatGPT の設定を1つ変えておく

Codex は、コンテナの中から「URLとコードを入力する方式(デバイスコード認証)」でログインします。この方式は、最初はオフになっています。先にオンにしておきます。

  1. ブラウザで ChatGPT を開く
  2. 左下の自分の名前 →「設定」→「セキュリティとログイン」
  3. いちばん下の「Codex、Excel、PowerPoint、Wordでのデバイスコードによるサインインを有効にする」を オン にする

デバイスコードは、自分で実行したログインで表示されたもの だけを入力してください。他人から「このコードを入力して」と言われても、絶対に入力しないでください。

1-4. ほかのコンテナを止めておく

ほかのプロジェクトのコンテナが動いていると、使うポート(3000番など)がぶつかって起動できないことがあります。

Docker Desktop の「Containers」画面を開き、今回使わないコンテナは ■(Stop)で止めておきます。

2. VS Code に拡張機能を入れる

2-1. Dev Containers 拡張機能(必須)

VS Code からコンテナに接続するための拡張機能です。

  1. VS Code の左端にある「拡張機能」アイコン(四角が4つのマーク)をクリック
  2. 上の検索欄に Dev Containers と入力
  3. 発行元が Microsoft の「Dev Containers」を選び、「インストール」を押す

検索結果の下に出る「おすすめ」は、入れなくて大丈夫です。

2-2. Claude Code と Codex の拡張機能

この2つは、手順4の設定ファイルに書いておきます。そうすると、コンテナに接続したときに自動で入ります。ここで手動で入れる必要はありません。

参考までに、手動で入れる場合は、拡張機能の検索欄で次を探します。

拡張機能 検索ワード 発行元
Claude Code Claude Code Anthropic
Codex Codex OpenAI

似た名前の非公式の拡張機能もあります。発行元の名前 と、その横の 青いチェックマーク(公式の印) を必ず確認してください。

Codex の拡張機能の画面や操作方法は、VS Code中心で学ぶCodex入門 で画像付きで紹介しています。

3. スキルをプロジェクトに置く

3-1. スキルをダウンロードする

  1. https://github.com/wywwzjj/cc-skill-codex を開く
  2. 緑の「Code」ボタン →「Download ZIP」
  3. 「ダウンロード」フォルダに cc-skill-codex-main.zip が保存される

3-2. プロジェクトの中にコピーする

ZIPの中にはプラグインが2つ入っていますが、使うのは cc-skill-codex(Claude → Codex の方向)だけ です。

スキルは プロジェクトの中の .claude\skills\ に置きます。プロジェクトのフォルダはコンテナと共有されるので、コンテナの中の Claude からもそのまま見えます。

Windows の PowerShell を開き、次を実行します。C:\work\my-project の部分は、自分のプロジェクトのフォルダに置き換えてください。

PowerShell
$PROJECT = "C:\work\my-project"
Expand-Archive "$HOME\Downloads\cc-skill-codex-main.zip" -DestinationPath "$HOME\Downloads" -Force
New-Item -ItemType Directory -Force "$PROJECT\.claude\skills" | Out-Null
Copy-Item -Recurse -Force "$HOME\Downloads\cc-skill-codex-main\plugins\cc-skill-codex\skills\codex" "$PROJECT\.claude\skills\codex"
dir "$PROJECT\.claude\skills\codex"

最後の dir で、SKILL.md と scripts が表示されればOKです。

my-project/
└ .claude/
   └ skills/
      └ codex/
         ├ SKILL.md
         └ scripts/
            └ codex-ask.sh

4. 設定ファイルを作る

VS Code で、プロジェクトのフォルダを開きます(「ファイル」→「フォルダーを開く」)。

ここでは、「今回の環境構成」の my-project を例にします。前提は次のとおりです。

  • 開発用のサービス名:app(ほかに db・backend・frontend がある)
  • コンテナ内のユーザー:vscode
  • app コンテナは、Python の Dev Container イメージから作る(python3 が入っている)

自分の構成に合わせて読み替えてください。

参考までに、app コンテナの Dockerfile は次のようになっています。Claude Code と Codex のための変更は、ここには 必要ありません。

.devcontainer/Dockerfile
FROM mcr.microsoft.com/devcontainers/python:1-3.12-bookworm

USER root

# 不要なYarn APT Repositoryを削除する
RUN rm -f /etc/apt/sources.list.d/yarn.list

# Playwrightで使用するChromiumをインストールする
RUN apt-get update && apt-get install -y --no-install-recommends chromium && rm -rf /var/lib/apt/lists/*
ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium

USER vscode

4-1. .devcontainer/devcontainer.json

.devcontainer/devcontainer.json
{
  "name": "My Project Development",
  "dockerComposeFile": "../compose.yml",
  "service": "app",
  "runServices": ["app", "db", "backend", "frontend"],
  "workspaceFolder": "/workspaces/my-project",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "lts"
    }
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "anthropic.claude-code",
        "openai.chatgpt"
      ]
    }
  },
  "postCreateCommand": "sudo mkdir -p /home/vscode/.claude /home/vscode/.codex && sudo chown -R vscode:vscode /home/vscode/.claude /home/vscode/.codex && npm install -g --allow-scripts=@anthropic-ai/claude-code @openai/codex @anthropic-ai/claude-code && git config --global --add safe.directory /workspaces/my-project",
  "remoteUser": "vscode"
}

それぞれの設定の意味は、次のとおりです。

設定 意味
service / runServices VS Code が接続するのは app。起動するのは4つのサービスすべて
features の node Claude Code と Codex を動かすのに必要な Node.js を入れる
extensions Claude Code と Codex の拡張機能を、コンテナ側に自動で入れる
postCreateCommand コンテナを作るときに、次の処理を自動で行う ・ログイン情報を保存するフォルダの準備 ・Claude Code と Codex 本体のインストール ・git がこのフォルダを使えるようにする設定

すでに extensions や postCreateCommand がある場合は、上書きせずに中身を追加してください。

4-2. compose.yml(ログイン状態を残す設定)

コンテナを作り直しても、ログインし直さなくて済むようにします。app サービスに volumes を追加し、ファイルの一番下にも volumes を追加します。

compose.yml
services:
  app:
    # …既存の設定はそのまま…
    volumes:
      # …既存の行はそのまま残す…
      - claude-config:/home/vscode/.claude
      - codex-config:/home/vscode/.codex

# ファイルの一番下(services と同じ深さ)
volumes:
  # …既存の行があれば残す…
  claude-config:
  codex-config:

volumes: がすでにある場合は、新しく書かずに 既存の volumes: の中に行を追加 してください。同じ名前のものが2つあると、片方が無視されます。

4-3. CLAUDE.md(Claude へのルール)

プロジェクトの 一番上(直下) に CLAUDE.md を作ります。

CLAUDE.md
@AGENTS.md

## Codexの呼び出し
- この開発コンテナではCodexのサンドボックスが使えないため、codex exec は `-s danger-full-access` を付けて実行する。
- レビュー・質問が目的のときは、Codexへの指示に「ファイルを変更しないこと」を必ず入れる。

それぞれの意味は、次のとおりです。

  • @AGENTS.md:Codex が自動で読むルールファイル(AGENTS.md)を、Claude にも読ませます。2人が同じルールで動くようになります。AGENTS.md がないプロジェクトなら、この行は消してかまいません。
  • Codexの呼び出し:Codex には、安全のための「サンドボックス」という仕組みがあります。ただ、Docker コンテナの中ではこれが動きません。コンテナ自体がすでに隔離された環境なので、Codex のサンドボックスは外して実行するようにします。

4-4. .gitattributes

スクリプトの改行コードが Windows 形式になって動かなくなるのを防ぎます。プロジェクト直下の .gitattributes(なければ新しく作る)に、次の1行を追加します。

.gitattributes
*.sh text eol=lf

4-5. .gitignore の確認

.env などの秘密情報が git に記録されないように、.gitignore に入っているか確認します。

.gitignore
.env
.secrets/

5. コンテナで開く

  1. VS Code で Ctrl + Shift + P を押す
  2. 入力欄に 再ビルド と入力
  3. 「開発コンテナー: コンテナーで再ビルドして再度開く」(Dev Containers: Rebuild and Reopen in Container)を選ぶ

初回は数分かかります。右下の「ログの表示」を押すと、進み具合が見られます。

Docker Desktop の「Images」画面にある ▶(Run)ボタンは押さないでください。compose の設定が入っていない、別のコンテナが作られてしまいます。コンテナには、必ず VS Code から接続します。

接続できたか確認

  • VS Code の左下に「開発コンテナー: My Project Development」と表示される
  • メニューの「ターミナル」→「新しいターミナル」で開いたターミナルが、vscode ➜ /workspaces/my-project $ になっている

最初に開いたターミナルで、両方入っているか確認します。

コンテナ内ターミナル
claude --version && codex --version

2つともバージョンが表示されればOKです。

6. Claude と Codex にログインする

6-1. Codex にログイン

コンテナ内ターミナル
codex login --device-auth

表示に従って、ログインします。

  1. 表示された URL(https://auth.openai.com/codex/device)をブラウザで開く
  2. ChatGPT のアカウントを選ぶ
  3. ターミナルに表示された コード(XXXX-XXXXX の形)を入力して「続行」

ログインできたか確認します。

コンテナ内ターミナル
codex login status

Logged in using ChatGPT と出ればOKです。

6-2. Claude Code にログイン

コンテナ内ターミナル
claude

初回は、いくつか設定の画面が出ます。上から順に進めます。

画面 操作
画面の色(テーマ) そのまま Enter
ログイン方法 「Claude account with subscription」を選んで Enter
ブラウザでログイン 開いたページでログインして「承認」。コードが出たら、ターミナルに貼り付けて Enter
Security notes(注意書き) Enter
ターミナルの設定 おすすめ(recommended)を選んで Enter
Do you trust the files in this folder? ↓キーで「Yes, I trust this folder」を選んでから Enter

最後の画面は、最初は「No, exit」が選ばれています。そのまま Enter を押すと終了してしまうので、必ず ↓キー で Yes を選んでください。

❯ の入力欄が表示されたら、ログイン完了です。

VS Code 右上のオレンジ色の ✳ アイコンからも、Claude の画面を開けます。ターミナルと同じように使えます。

7. 動作を確認する

7-1. 作業前の状態を git に記録する

Claude や Codex がファイルを書き換えても、いつでも元に戻せるようにします。別のターミナル(ターミナル右上の「+」で追加)で、次を実行します。

コンテナ内ターミナル
git config --global user.name "your-name"
git config --global user.email "you@example.com"
git init
git add . && git commit -m "初期状態"

名前とメールは、「誰が記録したか」の印として残るだけです。GitHub などに公開しないなら、なんでもかまいません。公開する予定があるなら、本名や個人のメールは避けておくと安心です。
すでに git で管理しているプロジェクトなら、git init は不要です。

7-2. スキルが読み込まれているか確認

Claude の画面 で、次を入力します。

Claudeの画面
/skills

一覧に codex project があればOKです。Esc で閉じます。

7-3. Codex を呼んでみる

Claudeの画面
Codexに「このリポジトリの構成を3行で説明して」と聞いて、その答えを教えて

途中で「このコマンドを実行してよいですか?」と聞かれたら、内容を確認して許可します。

Codex が実際のファイルを読んだ答え(フォルダ名や使っている技術など)が返ってくれば、完成 です 🎉

使い方の例

例1:Codex にレビューしてもらう

Claudeの画面
backend の認証まわりのコードを、Codexに批判的にレビューしてもらって。
指摘をまとめて、直すべきものの優先度を付けて。

例2:2人で議論させる

Claudeの画面
docs の設計書で、矛盾や未決定のところを洗い出して。
自分で調べたあと、気になる点をCodexに質問して意見をもらい、
意見が違うところは議論して、結論と根拠をまとめて。

例3:修正まで任せて、決められないものは人間に回す

Claudeの画面
見つかった問題を、優先度の高い順に直してください。
- 修正するたびにCodexにレビューしてもらい、指摘があれば直す
- 1つの問題が片付くたびに git にコミットする
- APIキーなどの実際の値、業務ルール、資料から判断できないものは、
  自分で決めずに docs/review/human-decisions.md に、選択肢とおすすめ付きでまとめる

Shift + Tab を押して「accept edits on」にすると、ファイル編集のたびに出る許可の確認を省略できます。コマンドの実行は、引き続き確認されます。

付録:作業が終わったらメールで知らせてもらう

Claude Code には、単体でメールを送る機能はありません。Gmail から自分宛てに送る小さなスクリプトを用意しておき、作業の最後に Claude に実行してもらいます。

① Gmail のアプリパスワードを作る

https://myaccount.google.com/apppasswords で作成します(2段階認証をオンにしておく必要があります)。表示された16文字のパスワードを控えます。

② パスワードを保存する(.secrets/ は git の管理外)

コンテナ内ターミナル
mkdir -p .secrets
cat > .secrets/mail.env <<'END'
GMAIL_USER=you@gmail.com
GMAIL_APP_PASSWORD=xxxxxxxxxxxxxxxx
END

③ 送信スクリプトを作る

scripts/notify_mail.py
import os, smtplib, sys
from email.message import EmailMessage

user = os.environ["GMAIL_USER"]
msg = EmailMessage()
msg["Subject"] = sys.argv[1] if len(sys.argv) > 1 else "Claude通知"
msg["From"] = user
msg["To"] = user
msg.set_content(sys.stdin.read())
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as s:
    s.login(user, os.environ["GMAIL_APP_PASSWORD"])
    s.send_message(msg)
print("sent")

④ テスト送信

コンテナ内ターミナル
set -a; . .secrets/mail.env; set +a
echo "テスト送信です" | python3 scripts/notify_mail.py "テスト"

sent と表示され、メールが届けば成功です。

⑤ Claude への依頼の最後に付け加える

Claudeの画面
終わったら、次のコマンドで結果をメールで知らせてください。秘密情報は本文に入れないこと。
set -a; . .secrets/mail.env; set +a
python3 scripts/notify_mail.py "【my-project】作業完了" <<'END'
(本文)
END

まとめ

  • スキルは プロジェクトの中の .claude/skills/ に置くと、コンテナからそのまま使える
  • Claude Code・Codex の本体と拡張機能は、devcontainer.json に書いておけば自動で入る
  • Codex のログインは、ChatGPT の設定でデバイスコード認証をオンにしてから codex login --device-auth
  • CLAUDE.md に Codex の呼び出し方を書いておくと、毎回指示しなくてよい
  • 作業前に git でコミット しておけば、AI が書き換えても安心

Claude が作業し、Codex が別の目でチェックします。1人で開発していても、レビュー役がいる状態を作れます。

参考

関連記事

公式・ツール

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?