こんにちは、わかっち (@wakatchi_tech) です。
OpenAI CodexでGitHubのプライベートリポジトリに接続するときに必須の設定があるので、メモしておきます。
TL;DR;
OpenAI Codexの環境でComposer依存を解決するときにGitHubのプライベートリポジトリへアクセスするなら、GitHub PAT(Personal Access Token)を JSON で包んだCOMPOSER_AUTHをシークレットとして渡すのが王道です。
Composerが持つ“環境変数ベース認証”の仕組みをそのまま利用でき、Codex側はシークレットをコンテナに自動注入してくれるので、余計な設定ファイルをコミットせずに済みます。
なお、Codexでシークレットに設定するときは、アクセストークンそのものではなく、github-oauth
のJSONで包むことをお忘れなく。
はじめに
最近Codexに触れたときに、composer install
が404 / authentication requiredで止まりました。
調べてみると、Codexのセットアップスクリプトは Dockerコンテナ + ネットワーク制限下で動くため、ComposerがGitHubと握手できなかった模様。
解決策は COMPOSER_AUTHをCodexのシークレットに登録すること....という、まぁ当たり前の知見にたどり着いたので、メモ代わりに手順とハマりポイントをまとめます。
この記事は次のような方にお勧めです
- OpenAI CodexでPHP/Composerプロジェクトを動かしたい開発者
- プライベートGitHubリポジトリを依存に含むプロジェクトをビルドしたい人
- CI/CDやクラウドIDEでシークレット管理をスマートにしたい エンジニア
composer install
が404 / authentication requiredで止まって困っている人- PAT + COMPOSER_AUTH のベストプラクティスを押さえたい人
COMPOSER_AUTHってそもそも何者?
- Composerは
auth.json
の代わりにCOMPOSER_AUTH環境変数を読む機能を持つ。 - 値は
auth.json
と同じJSON を“1行で”格納するだけ{"github-oauth":{"github.com":"ghp_xxxxx..."}}
(Codex では後述のシークレットに貼り付ければ OK)
この方法ならリポジトリに認証情報を置かずに済むので、GitOps 的にも安心ですね。1
なぜCodexでCOMPOSER_AUTHが必要になるのか
- Codexはローカルまたはクラウドの隔離コンテナでコードを実行する設計
- コンテナにはGitHub PATが入っていないため、アプリが必要とする依存ライブラリを取得できずに
composer install
が失敗 - CodexのEnvironment > Secrets で渡せるのは 環境変数とシークレット
- Composer の環境変数認証と相性が良い → COMPOSER_AUTH 一択 となる
dev.to の実践記事でも同じ手順が紹介されており、PHPの開発者の多くが通る道です。2
Codexの環境にシークレットを登録する
GitHubでアクセストークンを発行し、Codexのダッシュボードでシークレットを登録すれば、composer install
が通るようになります。
GitHubでアクセストークンを発行

アカウントのsettings > Developer settings > Personal access tokensで、アクセストークン(PAT)を発行します。
Fine-grained-tokensとクラシックトークンのどちらでもOKです。
repo
スコープがあれば OK。3
JSON を 1 行で作る
発行したアクセストークンを使って文字列を作成します。
{"github-oauth":{"github.com":"<PAT>"}}
Codex → Environment → SecretsでCOMPOSER_AUTH を追加

COMPSER_AUTHのvalueに、ステップ2で作ったJSONをコピペします。
アクセストークンをそのままコピペするだけだと、認証に失敗します。
私はJSON形式だということをすっかり忘れてて、トラブルシュートに時間を浪費しました。
Setup Script で念のためチェック

Setup Scriptで: "${COMPOSER_AUTH:?}"
と記述し、ターミナルで実行してみると、COMPOSER_AUTHが正しく設定いるかを確認します。
ターミナルの実行結果から、ステップ2で設定したJSONが正しく設定されているかを確認しましょう。
: "${COMPOSER_AUTH:?}"
トラブルシューティング & ベストプラクティス
アクセストークンが無効で 404
PATの有効期限切れ、もしくはスコープ不足を疑う。4
以下のコマンドでチェック。
curl -H "Authorization: token <PAT>" https://api.github.com/user
JSON の改行混入でパースエラー
エディタで改行を消す or VS Code の「1行にする」コマンドで整形。
CI/CDで別レポジトリのPATが必要
GITHUB_TOKEN
は対象リポジトリ限定なので、PAT を発行して秘密変数に が基本。
Stack Overflow 事例集
GitLab CI でも同じく COMPOSER_AUTH
必須、未設定だとビルド失敗する。5
SSH Instead 派もいるが、Codex では環境変数だけで完結する方が楽。6
おわりに
Codex は「コンテナでコードを動かす AI エージェント」なので、外部サービス認証の扱いがキモになります。
COMPOSER_AUTH をシークレットとして用意しておけば、Composer周りのプライベートリポジトリあるあるを一発で解決でき、セットアップスクリプトもスッキリ。

これでもう auth.json
を.gitIgnoreし忘れて焦る日々とはおさらば!
本記事の内容でハマりポイントを潰して、楽しいCodexライフをエンジョイしましょう。
本記事が少しでもお役に立てれば幸いです。
最後までお読みいただき、ありがとうございました!
参考文献
- Documentation on using composer with private repositories ↩︎
- How to Make ChatGPT Codex Work with PHP and Symfony ↩︎
- enerate a GitHub Personal Access Token for Private Composer Packages ↩︎
- Documentation on using composer with private repositories ↩︎
- Gitlab Autodeploy Laravel private repo composer install COMPOSER_AUTH env var not read ↩︎
- How to add private github repository as Composer dependency Ask Question ↩︎