概要
Codex Cloudに開発タスクを頼むと、サンドボックス的な環境で実装からテストまでが一気通貫で実施され、完了後にDiffが表示される。その後PR作成ボタンを押すだけでPRが作成されるということで非常に便利。複数タスクを並列で走らせることも可能。ただし、クラウド環境のセットアップを正しくやらないとビルドやテストをうまく実行できないため、ここだけ頑張る必要がある。
例えば、Ruby on Railsプロジェクトの場合、rails testやrails serverを実行できればテスト/サーバー実行→エラーがあれば修正→再実行→…というループを自動で回してくれるので、そのための設定をする。
前提
まずCodex Cloudがどのように動作するのかについて、 Cloud environments – Codex web | OpenAI Developers を読んで理解しておくこと。
セットアップスクリプトは実行結果がキャッシュされるので、可能な限りこちらに書く。メンテナンススクリプトはブランチのチェックアウト後に都度実行されるものなので、可能な限り軽くする。アプリケーションに依存する処理だけを書く。
DBはPostgreSQLとし、Redis等のキャッシュは一旦なし。docker in dockerはなんかうまくいかないみたいなので、全て openai/codex-universal のコンテナに直接インストールすることとする。
Rubyバージョンは.ruby-versionで4.0.1を指定, PostgreSQLは18。
環境
WebでCodexを開いて、環境 > {環境名} > 編集 画面で以下の設定をする。
環境変数
| 変数名 | 値 |
|---|---|
| DB_HOST | localhost |
| DB_PORT | 5432 |
| DB_USER | postgres |
| DB_PASSWORD | postgres |
| DB_NAME | {your_db_name} |
| DB_TEST_NAME | {your_db_test_name} |
シークレット
| 変数名 | 値 |
|---|---|
| RAILS_MASTER_KEY | {your_rails_master_key} |
セットアップ スクリプト
「手動」を選択し、以下を貼り付ける。PostgreSQLのバージョンが標準リポジトリに含まれている場合(16とか)は、pgdgの追加は不要。
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
echo "== Install base packages =="
apt-get update
apt-get install -y --no-install-recommends \
ca-certificates curl gnupg lsb-release \
build-essential libssl-dev zlib1g-dev libyaml-dev libreadline-dev \
libffi-dev libgmp-dev libpq-dev git
echo "== Add PGDG apt repository (for PostgreSQL 18) =="
install -d /usr/share/postgresql-common/pgdg
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
| gpg --dearmor -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list
apt-get update
echo "== Install PostgreSQL 18 =="
apt-get install -y --no-install-recommends \
postgresql-18 postgresql-client-18 postgresql-contrib
echo "== Setup Ruby 4.0.1 via mise =="
if ! command -v mise >/dev/null 2>&1; then
echo "ERROR: mise not found" >&2
exit 1
fi
mise use -g ruby@4.0.1
mise install
# Use mise exec explicitly to avoid PATH/activation issues in non-interactive shell
RUBY_V="$(mise exec ruby@4.0.1 -- ruby -e 'print RUBY_VERSION')"
[ "$RUBY_V" = "4.0.1" ] || { echo "Unexpected ruby version: $RUBY_V"; exit 1; }
mise exec ruby@4.0.1 -- ruby -v
mise exec ruby@4.0.1 -- bundle -v
echo "== Start PostgreSQL 18 cluster =="
if ! pg_lsclusters | awk '{print $1}' | grep -q '^18$'; then
pg_createcluster 18 main --start
else
pg_ctlcluster 18 main start
fi
pg_lsclusters
echo "== Initialize postgres user/password =="
su - postgres -c "psql -v ON_ERROR_STOP=1 -c \"ALTER USER postgres WITH PASSWORD 'postgres';\""
echo "== Create application databases if missing =="
su - postgres -c "psql -v ON_ERROR_STOP=1 -tc \"SELECT 1 FROM pg_database WHERE datname='account_api_development'\" | grep -q 1 || createdb account_api_development"
su - postgres -c "psql -v ON_ERROR_STOP=1 -tc \"SELECT 1 FROM pg_database WHERE datname='account_api_test'\" | grep -q 1 || createdb account_api_test"
echo "== Verify DB connection =="
PGPASSWORD=postgres psql -h localhost -U postgres -d account_api_development -c "select version();"
PGPASSWORD=postgres psql -h localhost -U postgres -d account_api_test -c "select 1;"
echo "✅ Codex Cloud setup completed."
メンテナンススクリプト
以下の内容をシェルスクリプトとしてbin/とかそこら辺に置き、それを実行するコマンドを一行書いておく。bash /workspace/app_name/bin/maintenance.sh みたいな感じ。
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
cd "${BACKEND_ROOT}"
mise exec ruby -- bundle check || mise exec ruby -- bundle install --jobs 4 --retry 3
mise exec ruby -- bundle exec rails db:prepare
bin/ci-lint
RAILS_ENV=test mise exec ruby -- bundle exec rails test:models
ちゃんとテスト実行できるかどうかのスモークテストとしてrails test:modelsを実行しているが、ケース数が多い場合はもっと絞って特定のテストだけを実行すると良い。
エージェントのインターネットアクセス
「有効」を選択し、ドメイン許可リストを「共通の依存関係」にする(common dependenciesの変な日本語訳…)。許可されているHTTPメソッドは「GET、HEAD、OPTIONS」にしておくのが無難でしょう。できる人はドメインを自分で指定した方がよりセキュア。
AGENTS.md
これでCodex Cloud環境でrails testが実行できるようになったので、GitリポジトリにAGENTS.mdを追加し、「コードやテストを修正したらrails testを実行すること。エラーが出た場合は修正し、これをテストが通るまで繰り返すこと」的な指示を書いておけば、各タスクで勝手にテストを回してくれる。
注意点
Rubyのバージョンをセットアップスクリプトにハードコードしているため、バージョンアップしたらこちらも修正する必要がある。
.ruby-versionはリポジトリをチェックアウトするまで読み取れないので、どうしてもここは動的にできない。メンテナンススクリプトなら.ruby-versionを読めるが、ここでrubyのインストールをすると各タスクで毎回rubyインストールをすることになり非常に時間がかかってしまう。悩ましいがセットアップスクリプトを適宜更新するのが今の所の落とし所。
所感
公式ドキュメントとZennを参考に、https://github.com/openai/codex-universal をローカルで動かしながら検証したが、思った以上に大変だった。こんなのChatGPTとかClaudeに聞きながらやればすぐ終わるでしょ〜くらいに思っていたが、意外とハマりました。。
というわけで、誰かの役に立てば良いなと思って書き残しておいた。主には未来の自分が想定読者かもしれない。
参考URL
※文中に出てきたものも含む



