当記事の概要
2025年5月に研究プレビューとして、OpenAIから Codex がリリースされました。Codexはクラウド上で動作するSWエンジニアリングAIエージェントで、ローカルに開発環境が一切無くともCodexに指示を与えることでプログラム開発を進めることができます。
Codexは、タスクを与える都度、独立した環境を起動し、タスクを遂行します。この環境はタスクの起動時のみインターネットにアクセスすることができ、起動時に実行するセットアップスクリプトを設定することができます。タスクの実行中はインターネットにアクセスできないため、依存ライブラリのダウンロードなどは起動時のセットアップスクリプトで実行・完了させる必要があります。
当記事では、MavenでビルドするJavaアプリケーションをCodexの処理対象とする場合、Codexにどのようなセットアップが必要かを示します。
前提条件
- Codexが扱うJavaアプリケーションはMaven Wrapper(mvnw)でビルド可能な状態であること
- Maven Wrapper(mvnw)のスクリプト(ダウンローダー含む)はGitリポジトリに格納されていること
設定のポイントと事前準備
Codexはセットアップスクリプトにおいてインターネットにアクセスできますが、その際はプロキシを経由する必要があります。HTTP、HTTPSともに以下となります。
- ホスト名:proxy
- ポート:8080
これらをMaven Wrapper、および、Maven本体に与えることが設定のポイントとなります。
そのために以下の準備を実施します。
- Gitリポジトリに
.codex
フォルダを作成(名前は何でもよい) - 作成したフォルダに以下の2つのファイル(jvm.config、settings.xml)を作成し、Gitリポジトリにcommit, pushする
-Dhttp.proxyHost=proxy
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=proxy
-Dhttps.proxyPort=8080
<settings>
<proxies>
<proxy>
<id>defaultProxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy</host>
<port>8080</port>
</proxy>
<proxy>
<id>defaultSecureProxy</id>
<active>true</active>
<protocol>https</protocol>
<host>proxy</host>
<port>8080</port>
</proxy>
</proxies>
</settings>
Codexのセットアップスクリプト
Codexの環境セットアップスクリプトとして以下を記述します。
# jvm.config を .mvn にコピー
cp .codex/jvm.config .mvn/
# settings.xml を ~/.m2/ にコピー
mkdir ~/.m2
cp .codex/settings.xml ~/.m2/
# 以下を実行し、一度テスト・パッケージ作成まで実行し、ライブラリをダウンロードする
./mvnw clean package
依存ライブラリのダウンロードであれば、./mvnw dependency:go-offline
で全てダウンロードできるはずです。ただ、私が対象としたアプリケーション(Quarkusで作成したAPI)では、一部のライブラリが独自の依存関係を持っているのかライブラリ不足が発生しました。そのため、一度 ./mvnw clean package
を実行してテスト・パッケージ作成(および事前の依存ライブラリのダウンロード)までを実行するようにしています。
なお、jvm.config を最初から .mvn に配置しておかない理由は、ローカルやCI環境での実行時に適用されるのを防ぐためです。
CodexのAGENTS.mdの設定
上記の状態でCodexにJavaアプリケーションに対する機能追加・修正などを依頼すると、Codexは処理完了前に ./mvnw test
を実行し、テストの正常完了をチェックするようになります。
ただ、./mvnw test
の実行時点ではインターネットにアクセスできないため、-o
(オフライン)オプションを付けて実行するようにCodexに指示する必要があります。
具体的には、Codexのルールファイルである AGENTS.md
(Gitリポジトリのルートに配置)に以下の内容を記載します。
- Codexがmvn, mvnw コマンドを実行する場合のみ、必ずオフライン実行のオプション「-o」を付けてください。README、Markdownファイル、コメントなどにmvn, mvnwコマンドについて記載する際は「-o」オプションは不要です。
これにより、mvnwを実行する際に-o
オプションを付けて実行してくれるようになります。