目次
OpenAI Codex CLIとは
概要
OpenAI Codex CLI(以下、Codex)は、開発者のターミナル内で動作する軽量なコーディングエージェントです。💻 OpenAIが開発したこのツールを使用すると、自然言語の指示からコードを生成、実行、改善することができます。Codexは単なるコード生成ツールではなく、ファイルの読み書き、コマンドの安全な実行、そして既存のコードベースの理解と修正が可能な統合的な開発アシスタントです。
基礎知識: Codexを使用するには、基本的なターミナル操作とGitの知識があると便利です。完全な初心者でも使えますが、コマンドラインに慣れていると効果的に活用できます。
Codexの基本的な考え方は、チャット駆動型の開発エクスペリエンスをターミナル内に直接もたらすことです。つまり、開発者はGPT-4のような強力なAIモデルの推論能力を活用しながら、実際にコードを実行し、ファイルを操作し、反復的な開発を行うことができます。しかも、すべてはバージョン管理下で行われます。
開発ワークフローでの位置づけ
Codexは現代の開発者ワークフローに自然に溶け込むように設計されています。🔄 既存のコードベースを理解し、新機能を実装し、バグを修正するのに役立ちます。ターミナルを頻繁に使用する開発者にとって、Codexは既存の作業環境内で直接AIのサポートを受けられる手段を提供します。
通常の開発フローでは、次のようにCodexを活用できます:
- プロジェクト探索: 新しいコードベースを理解する
- 計画と設計: 機能実装の計画を立てる
- 実装: コードを生成し修正する
- テスト: 自動テストを作成して実行する
- リファクタリング: コードを改善し最適化する
- ドキュメント: コメントやドキュメントを生成する
主な利点とユースケース
Codexの主な利点は以下の通りです:
- セットアップが不要 - OpenAI APIキーを用意するだけで、すぐに使い始められます ⚡
- 安全性と制御 - ネットワーク無効化やディレクトリサンドボックス化により、安全に実行できます 🔒
- マルチモーダル対応 - スクリーンショットや図を渡して機能を実装できます 🖼️
- オープンソース - コードが公開されており、コミュニティによる改善が可能です 🌐
主なユースケースには以下があります:
- コードベースの説明 - 複雑なプロジェクトの構造と機能を理解する
- 機能実装 - 自然言語による説明から新機能を追加する
- コードリファクタリング - 既存コードの改善と最新化
- バグ修正 - 問題を特定し解決する
- テスト作成 - ユニットテストやインテグレーションテストの自動生成
- マイグレーション - コードベースを新しい技術やフレームワークに移行する
- セキュリティレビュー - 潜在的な脆弱性の特定
実践例: あるウェブ開発チームでは、新しいメンバーが参加するたびに codex "explain this codebase to me"
を実行し、プロジェクトの概要を素早く把握させています。これにより、オンボーディング時間が約40%短縮されました。
インストールとセットアップ
システム要件
Codexを使用するには、以下の要件を満たす必要があります:
-
オペレーティングシステム:
- macOS 12以上
- Ubuntu 20.04以上/Debian 10以上
- Windows 11(WSL2経由)
- Node.js: 22以上(LTS推奨)
- Git:2.23以上(PR機能に必要、推奨)
- RAM:最低4GB(8GB推奨)
注意: sudo npm install -g
は使用しないでください。代わりにnpmの権限を修正してください。
インストール手順
Codexは、npmを使用して簡単にインストールできます:
npm install -g @openai/codex
または、Yarnを使用する場合:
yarn global add @openai/codex
ソースからビルドすることもできます:
# リポジトリをクローンしてCLIパッケージに移動
git clone https://github.com/openai/codex.git
cd codex/codex-cli
# 依存関係をインストールしてビルド
npm install
npm run build
# ローカルでビルドしたCLIを直接実行
node ./dist/cli.js --help
# または、コマンドをグローバルにリンクして便利に
npm link
API設定
インストール後、OpenAI APIキーを環境変数として設定する必要があります:
export OPENAI_API_KEY="your-api-key-here"
注意:このコマンドは現在のターミナルセッションにのみキーを設定します。永続的に設定するには、シェルの設定ファイル(例:~/.zshrc)にexport行を追加してください。
# ~/.zshrc または ~/.bashrc に追加
export OPENAI_API_KEY="your-api-key-here"
基本的なコマンド
Codexを使い始めるための基本的なコマンドは以下の通りです:
-
インタラクティブモードで実行:
codex
-
初期プロンプトを指定して実行:
codex "explain this codebase to me"
-
フルオートモードで実行:
codex --approval-mode full-auto "create the fanciest todo-list app"
-
モデルを指定して実行:
codex --model gpt-4o "optimize this function for performance"
主要機能と性能
インタラクティブモード
Codexの基本的な使用法はインタラクティブモードです。このモードでは、開発者はCodexと会話形式でやり取りし、コード関連のタスクを実行できます。インタラクティブセッションは次のように開始します:
codex
または、初期プロンプトを指定して開始することもできます:
codex "explain this codebase to me"
インタラクティブモードでは、Codexは各ステップで提案を行い、実行前に承認を求めます。これにより、開発者は各アクションを完全に制御できます。
初心者向けヒント: 最初はデフォルトの「Suggest」モードから始めて、Codexの動作に慣れてきたら、より自動化された「Auto Edit」や「Full Auto」モードに移行するとよいでしょう。
承認レベルとセキュリティモデル
Codexは、--approval-mode
フラグ(またはインタラクティブな導入プロンプト)を通じて、エージェントに与える自律性と自動承認ポリシーを決定できます:
モード | 許可なしに実行可能な操作 | 承認が必要な操作 |
---|---|---|
Suggest(デフォルト) | • リポジトリ内の任意のファイルの読み取り | • すべてのファイル書き込み/パッチ • すべてのシェル/Bashコマンド |
Auto Edit | • ファイルの読み取りと適用パッチによる書き込み | • すべてのシェル/Bashコマンド |
Full Auto | • ファイルの読み取り/書き込み • シェルコマンドの実行 |
– |
Full Autoモードでは、すべてのコマンドはネットワーク無効化された状態で実行され、現在の作業ディレクトリ(および一時ファイル)に制限されます。これにより、深層防御が提供されます。また、ディレクトリがGitで追跡されていない状態でAuto EditまたはFull Autoモードを開始すると、Codexは警告/確認を表示するため、常に安全ネットがあります。
ファイル操作
Codexは、プロジェクト内のファイルを読み取り、編集することができます。これにより、コードの理解、バグの修正、新機能の実装などが可能になります。ファイル操作の例としては以下があります:
- ファイルの内容の読み取りと表示
- 新しいファイルの作成
- 既存ファイルの修正
- ファイルの移動、名前変更、削除
これらの操作は、承認モードに応じて、実行前に承認が必要な場合とそうでない場合があります。
例: React componentをクラスベースから関数ベースに変換する
// 変換前: クラスベースのコンポーネント
class UserProfile extends React.Component {
constructor(props) {
super(props);
this.state = {
name: '',
loading: true
};
}
componentDidMount() {
fetchUserData().then(data => {
this.setState({ name: data.name, loading: false });
});
}
render() {
if (this.state.loading) return <div>Loading...</div>;
return <div>Hello, {this.state.name}</div>;
}
}
// 変換後: フック使用の関数コンポーネント
function UserProfile(props) {
const [name, setName] = useState('');
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchUserData().then(data => {
setName(data.name);
setLoading(false);
});
}, []);
if (loading) return <div>Loading...</div>;
return <div>Hello, {name}</div>;
}
コマンド実行
Codexは、シェルコマンドを実行する能力を持ち、これにより、依存関係のインストール、テストの実行、ビルドプロセスの開始などが可能になります。コマンド実行は常にサンドボックス化され、承認モードに応じて制御されます。
コマンド実行の例:
-
npm install
による依存関係のインストール -
git
コマンドによるバージョン管理操作 -
npm test
によるテストの実行 - ファイルシステム操作(ls、mv、cpなど)
セキュリティ警告: Full Autoモードでも、すべてのコマンドはネットワーク無効化された状態で実行され、現在の作業ディレクトリに制限されます。しかし、重要なデータを含むディレクトリでは慎重に使用してください。
マルチモーダル機能
Codexの特に強力な機能の一つは、マルチモーダル機能です。これにより、スクリーンショットや図面などの視覚的入力を理解し、それに基づいてコードを生成できます。例えば:
- UIデザインのスクリーンショットからHTMLとCSSを生成 🎨
- 手書きのアプリケーション図から実際のコードを作成 ✏️
- 既存アプリケーションの画面から機能を複製 📱
この機能は、デザイン要件を迅速にコードに変換したい場合に特に有用です。
使用例:
# スクリーンショットからUIを実装
codex "implement this UI design as a React component" < design.png
# 手書き図からデータベーススキーマを作成
codex "create a database schema based on this ER diagram" < diagram.jpg
使用パターンと例
コードの説明と理解
新しいコードベースやプロジェクトに取り組む際、Codexを使用して構造と機能を素早く理解することができます:
codex "explain this codebase to me"
このコマンドにより、Codexはプロジェクトを分析し、主要コンポーネント、アーキテクチャ、依存関係などの包括的な説明を提供します。
さらに、特定のコードセクションに焦点を当てることもできます:
codex "explain what utils/auth.js does"
実際の出力例:
# utils/auth.js の分析
このファイルは認証関連のユーティリティ関数を提供しています。
## 主な機能:
1. ユーザーログイン処理
2. JWTトークン検証
3. 権限チェック
4. パスワードハッシュ化
## 依存関係:
- jsonwebtoken: JWTの生成と検証
- bcrypt: パスワードのハッシュ化
- config: 設定値の読み込み
## 使用例:
```javascript
const { verifyToken, hashPassword } = require('./utils/auth');
// トークン検証
const userData = verifyToken(req.headers.authorization);
// パスワードハッシュ化
const hashedPassword = await hashPassword(userPassword);
機能実装
Codexを使用して、自然言語での説明から新機能を実装できます:
codex "Refactor the Dashboard component to React Hooks"
このコマンドにより、Codexはクラスコンポーネントをフック使用に書き換え、npm test
を実行し、差分を表示します。
別の例:
codex "Add dark mode support to this application"
Codexは必要なスタイル変更、コンポーネント更新、状態管理コードを実装します。
段階的なアプローチの例:
- 現在のテーマ状態を管理するためのコンテキストを作成
- ダークモードの色スキーマを定義
- テーマ切り替えコンポーネントを実装
- ユーザー設定を永続化
アプリケーションの新規作成
Codexは、完全に新しいアプリケーションを作成する能力も持っています:
codex --approval-mode full-auto "create a todo list app with React and Firebase"
このコマンドにより、Codexは新しいプロジェクトをスキャフォールディングし、必要なファイルとコードを生成し、依存関係をインストールし、基本的な機能を実装します。
マルチモーダル機能を使用したアプリケーション作成の例:
# スクリーンショットを使用して実装
codex --approval-mode full-auto "implement this UI design as a React app" < screenshot.png
学習ポイント: 複雑なアプリケーションを作成する場合、一度に全てを生成するのではなく、段階的に機能を追加していくことをお勧めします。例えば、「基本的なTODOリストを作成」→「データ永続化を追加」→「フィルタリング機能を実装」という順序で進めると、より管理しやすくなります。
既存コードベースの操作
既存のプロジェクトでCodexを使用して、様々なタスクを実行できます:
# テスト生成
codex "Write unit tests for utils/date.ts"
# コード分析
codex "Look for vulnerabilities and create a security review report"
# ファイル操作
codex "Bulk-rename *.jpeg → *.jpg with git mv"
ユースケース: コードベース全体のセキュリティレビュー
codex "Carefully review this repo for security vulnerabilities and create a detailed report with severity levels and remediation steps"
Codexは、SQL インジェクション、認証の不備、XSS脆弱性などを検出し、それぞれの重大度と修正ステップを示した包括的なレポートを生成します。
高度な使用法
設定オプション
Codexは~/.codex/
ディレクトリ内の設定ファイルを参照します:
# ~/.codex/config.yaml
model: o4-mini # デフォルトモデル
fullAutoErrorMode: ask-user # または ignore-and-continue
カスタム指示を定義することもできます:
# ~/.codex/instructions.md
- Always respond with emojis
- Only use git commands if I explicitly mention you should
プロジェクトドキュメント
Codexは、次の順序でMarkdown指示をマージします:
-
~/.codex/instructions.md
- 個人のグローバルガイダンス - リポジトリルートの
codex.md
- 共有プロジェクトノート - 現在の作業ディレクトリの
codex.md
- サブパッケージ固有の情報
--no-project-doc
またはCODEX_DISABLE_PROJECT_DOC=1
で無効化できます。
プロジェクトドキュメントの例:
# Project Codex Instructions
## Code Style
- Use functional components with hooks for React
- Follow AirBnB style guide for JavaScript
- Use meaningful variable names
## Project Structure
- Components in src/components
- API calls in src/services
- Utilities in src/utils
## Testing
- Write tests for all utilities
- Use React Testing Library for component tests
非インタラクティブ/CIモード
パイプラインでCodexをヘッドレスに実行することができます。GitHub Actionのステップ例:
- name: Update changelog via Codex
run: |
npm install -g @openai/codex
export OPENAI_API_KEY="${{ secrets.OPENAI_KEY }}"
codex -a auto-edit --quiet "update CHANGELOG for next release"
インタラクティブUI出力を抑制するには、CODEX_QUIET_MODE=1
を設定します。
レシピと一般的なパターン
以下に、コピーペーストできるいくつかの小さな例を示します:
-
コンポーネントのリファクタリング:
codex "Refactor the Dashboard component to React Hooks"
Codexはクラスコンポーネントを書き換え、
npm test
を実行し、差分を表示します。 -
SQLマイグレーションの生成:
codex "Generate SQL migrations for adding a users table"
ORMを推測し、マイグレーションファイルを作成し、サンドボックスDBで実行します。
-
ユニットテストの作成:
codex "Write unit tests for utils/date.ts"
テストを生成し、実行し、合格するまで反復します。
-
ファイル名の一括変更:
codex "Bulk-rename *.jpeg → *.jpg with git mv"
ファイルを安全に名前変更し、インポート/使用を更新します。
-
正規表現の説明:
codex "Explain what this regex does: ^(?=.*[A-Z]).{8,}$"
ステップバイステップの人間向け説明を出力します。
-
PRの提案:
codex "Carefully review this repo, and propose 3 high impact well-scoped PRs"
現在のコードベースで影響力の高いPRを提案します。
-
セキュリティレビュー:
codex "Look for vulnerabilities and create a security review report"
セキュリティバグを見つけて説明します。
セキュリティ考慮事項
サンドボックスモデル
Codexは、コードを安全に実行するためのサンドボックスモデルを使用しています。これにより、悪意のあるコマンドやファイル操作からシステムが保護されます。サンドボックスは、コマンドの実行をプロジェクトディレクトリに制限し、ネットワークアクセスを無効にします。
重要: サンドボックスは安全性を高めますが、完全なセキュリティを保証するものではありません。重要なデータを含むプロジェクトでは、常に慎重に使用してください。
プラットフォーム固有の保護機能
Codexが使用する強化メカニズムは、OSによって異なります:
macOS 12+:
- コマンドはApple Seatbelt(
sandbox-exec
)でラップされます - 少数の書き込み可能なルート($PWD、$TMPDIR、~/.codexなど)を除き、すべてが読み取り専用のジェイルに配置されます
- 子プロセスがcurlを試みても失敗するように、デフォルトでアウトバウンドネットワークは完全にブロックされます
Linux:
- サンドボックス化にDockerを使用することが推奨されます
- Codexは最小限のコンテナイメージ内で自身を起動し、同じパスでリポジトリを読み書き可能にマウントします
- カスタムiptables/ipsetファイアウォールスクリプトにより、OpenAI API以外のすべてのイグレスを拒否します
両方のアプローチは日常的な使用に透過的です - 通常通りリポジトリルートからcodex
を実行し、ステップを承認/拒否します。
ネットワーク分離
Codexのセキュリティモデルの重要な側面は、ネットワーク分離です。Full Autoモードでは、コマンドはネットワークアクセスなしで実行されます。これにより、悪意のあるコードがデータを外部サーバーに送信することを防ぎます。
技術的背景:
- macOSでは、
sandbox-exec
プロファイルがネットワークソケットの作成をブロックします - Linuxでは、iptablesルールがOpenAI API以外のすべての出力トラフィックをブロックします
- これにより、
curl
やwget
などのコマンドが外部と通信することを防ぎます
ディレクトリ制限
Codexは、コマンドの実行を現在の作業ディレクトリと一時ディレクトリに制限します。これにより、重要なシステムファイルやその他のプロジェクトへのアクセスを防ぎます。
制限の詳細:
- 現在の作業ディレクトリ($PWD)とその下のすべてのファイル
- 一時ディレクトリ($TMPDIR)
- Codex設定ディレクトリ(~/.codex)
- その他のシステムディレクトリは読み取り専用かアクセス不可
コミュニティと貢献
オープンソースの側面
CodexはオープンソースプロジェクトとしてGithubで公開されており、GitHubでコードを確認し、貢献することができます。OpenAIは開発者コミュニティからのフィードバックと貢献を歓迎しています。
オープンソースであることの利点:
- コミュニティによる継続的な改善
- 透明性と信頼性の向上
- 多様なユースケースへの対応
- 教育と学習の機会提供
貢献ガイドライン
Codexへの貢献を検討している場合、以下のガイドラインに従ってください:
-
開発ワークフロー:
-
main
からトピックブランチを作成します(例:feat/interactive-prompt
) - 変更に焦点を当てます。複数の無関係な修正は別々のPRとして開きます
- 開発中は
npm run test:watch
を使用して素早いフィードバックを得ます - プッシュ前に、テスト/型/リントスイートをフル実行します:
npm test && npm run lint && npm run typecheck
-
-
高品質なコード変更の作成:
- 課題から始めます。新しい課題を開くか、既存の議論にコメントして、コードが書かれる前に解決策に合意します
- テストを追加または更新します。新機能やバグ修正には、変更前に失敗し変更後に合格するテストカバレッジが必要です
- 動作をドキュメント化します。ユーザー向けの動作に影響がある場合は、README、インラインヘルプ、または関連する例プロジェクトを更新します
- コミットをアトミックに保ちます。各コミットはコンパイルでき、テストに合格する必要があります
-
PRを開く:
- PRテンプレートに記入します(または同様の情報を含めます)- 何を?なぜ?どのように?
- すべてのチェックをローカルで実行します(
npm test && npm run lint && npm run typecheck
) - ブランチが
main
と最新であること、マージ競合が解決されていることを確認します - PRをレビュー準備完了としてマークするのは、マージ可能な状態であると信じる場合のみです
コントリビューター・ライセンス契約(CLA):
すべての貢献者はCLAに同意する必要があります。プロセスは軽量で、PRで次のコメントを貼り付けるだけです:
I have read the CLA Document and I hereby sign the CLA
ヘルプの入手
プロジェクトの設定に問題がある場合、アイデアについてフィードバックが欲しい場合、または単に挨拶したい場合は、ディスカッションを開くか、関連する課題にジャンプしてください。OpenAIのチームは喜んで支援します。
支援を受ける方法:
- GitHubのDiscussionsセクションで質問を投稿
- 既存の関連Issueにコメント
- コミュニティチャンネルに参加
学習チェックと次のステップ
Codex CLIについての理解を確認するための小さなクイズです:
-
Codexの3つの承認モードは何ですか?
- Safe, Normal, Dangerous
- Suggest, Auto Edit, Full Auto
- Read-only, Write, Execute
-
Full Autoモードでは、どのようなセキュリティ対策が適用されますか?(複数選択可)
- ネットワーク無効化
- ディレクトリ制限
- サンドボックス実行
- パスワード認証
-
Codexでスクリーンショットからコードを生成するには、どのようにしますか?
- --image フラグを使用する
- リダイレクト(<)を使用してファイルを渡す
- スクリーンショットのURLを引数として渡す
-
次のステップとして検討すべきこと:
-
プロジェクト特有の指示を含む
codex.md
ファイルを作成する - 小さなプロジェクトでCodexを試す
- チームメンバーとCodexについて共有する
- 既存のプロジェクトでCodexを使用して、コードベースを理解する
-
プロジェクト特有の指示を含む
まとめ
OpenAI Codex CLIは、AIの力を開発者のターミナルに直接もたらす革新的なツールです。コードの説明、機能の実装、アプリケーションの作成、既存コードベースの操作など、幅広いタスクをサポートします。セキュリティを念頭に置いて設計され、様々な承認レベルとサンドボックス保護を提供します。
マルチモーダル機能により、スクリーンショットや図面からコードを生成する能力は特に印象的です。オープンソースプロジェクトとして、Codexは継続的に進化し、コミュニティからのフィードバックと貢献を活用しています。
Codexは現代の開発者ワークフローに自然に統合され、コーディングタスクを加速し、生産性を向上させる強力なツールを提供します。OpenAI APIキーを持っていれば、すぐに使い始めることができ、その機能の恩恵を受けることができます。
今日からCodexを試して、AIがあなたの開発プロセスをどのように改善できるかを発見してください! 🚀