Codex CLI 実用サンプル
このセクションでは、実際の例を通して Codex CLI のさまざまな使用シーンを紹介し、実際の開発での応用を素早く習得するのに役立ちます。
コード作成
例1: 新機能の作成
Codex に完全な機能モジュールを作成させましょう:
タスク
文字列のリストを受け取り、最も長い文字列とそのインデックス位置を返す Python 関数を作成してください
Codex は以下のようなコードを生成します:
生成されたコード
def find_longest_string(strings):
"""
文字列リスト内の最も長い文字列とそのインデックス位置を見つけます。
Args:
strings: 文字列リスト
Returns:
tuple: (最長の文字列, インデックス位置)
リストが空の場合は (None, -1) を返します
"""
if not strings:
return None, -1
longest = max(strings, key=len)
index = strings.index(longest)
return longest, index
# テスト例
if __name__ == "__main__":
test_list = ["apple", "banana", "cherry", "dragonfruit"]
result, idx = find_longest_string(test_list)
print(f最長の文字列: {result}, インデックス: {idx})
# 出力: 最長の文字列: dragonfruit, インデックス: 3
"""
文字列リスト内の最も長い文字列とそのインデックス位置を見つけます。
Args:
strings: 文字列リスト
Returns:
tuple: (最長の文字列, インデックス位置)
リストが空の場合は (None, -1) を返します
"""
if not strings:
return None, -1
longest = max(strings, key=len)
index = strings.index(longest)
return longest, index
# テスト例
if __name__ == "__main__":
test_list = ["apple", "banana", "cherry", "dragonfruit"]
result, idx = find_longest_string(test_list)
print(f最長の文字列: {result}, インデックス: {idx})
# 出力: 最長の文字列: dragonfruit, インデックス: 3
Codex が生成したコードには詳細なドキュメントコメントとテスト例が含まれており、そのまま使用できます。
例2: コードのリファクタリング
Codex に既存のコードのリファクタリングを依頼します:
タスク
この関数をジェネレータを使うようにリファクタリングしてください:
def get_squares(n):
result = []
for i in range(n):
result.append(i * i)
return result
def get_squares(n):
result = []
for i in range(n):
result.append(i * i)
return result
Codex はリファクタリング後のコードを提供します:
リファクタリング後のコード
def get_squares(n):
"""
0 から n-1 までの平方数を生成します。
Args:
n: 生成する平方数の個数
Yields:
int: 0 から n-1 までの平方数
"""
for i in range(n):
yield i * i
# 使用例
for square in get_squares(5):
print(square)
# 出力: 0, 1, 4, 9, 16
"""
0 から n-1 までの平方数を生成します。
Args:
n: 生成する平方数の個数
Yields:
int: 0 から n-1 までの平方数
"""
for i in range(n):
yield i * i
# 使用例
for square in get_squares(5):
print(square)
# 出力: 0, 1, 4, 9, 16
コードレビュー
例1: コードの問題をレビューする
Codex にコードをレビューして改善提案を依頼します:
タスク
以下のコードの問題をレビューしてください:
def process_data(data):
result = []
for item in data:
if item['type'] == 'a':
result.append(item['value'] * 2)
elif item['type'] == 'b':
result.append(item['value'] + 10)
elif item['type'] == 'c':
result.append(item['value'])
return result
def process_data(data):
result = []
for item in data:
if item['type'] == 'a':
result.append(item['value'] * 2)
elif item['type'] == 'b':
result.append(item['value'] + 10)
elif item['type'] == 'c':
result.append(item['value'])
return result
Codex は分析し、レビュー報告を提供します:
## 代码审查报告 ### 问题 1. **缺少错误处理**:没有检查 item 是否包含必要的键 2. **类型不一致**:'c' 类型直接返回原值,而其他类型做了处理 3. **硬编码值**:乘数和加数应该作为参数或配置 ### 改进建议 1. 添加默认字典或 try-except 处理 2. 统一处理逻辑 3. 将 magic numbers 提取为常量
例2: /review コマンドを使用する
Codex で組み込みのレビューコマンドを使用します:
タスク
/review src/
Codex はディレクトリ全体をスキャンし、src/包括的なコードレビュー報告を生成します。
デバッグとトラブルシューティング
例1: エラーメッセージの分析
エラーメッセージを Codex に渡して分析させます:
タスク
このエラーを分析してください:
Traceback (most recent call last):
File "app.py", line 42, in <module>
main()
File "app.py", line 38, in fetch_data()
File "app.py", line 25, in fetch_data
response = requests.get(url)
File "/usr/lib/python3.10/site-packages/requests/api.py", line 88, in in get
return session.request(method='GET', url=url, **kwargs)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.example.com', port=443): Max retries exceeded
Traceback (most recent call last):
File "app.py", line 42, in <module>
main()
File "app.py", line 38, in fetch_data()
File "app.py", line 25, in fetch_data
response = requests.get(url)
File "/usr/lib/python3.10/site-packages/requests/api.py", line 88, in in get
return session.request(method='GET', url=url, **kwargs)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.example.com', port=443): Max retries exceeded
Codex は分析と解決策を提供します:
## 错误分析 ### 原因 网络连接问题 - 无法连接到 api.example.com ### 可能的原因 1. 网络不通 2. 域名解析失败 3. 服务器不可用 4. 防火墙阻止 ### 建议的排查步骤 1. 检查网络连接:ping api.example.com 2. 验证域名解析:nslookup api.example.com 3. 检查端口是否开放:telnet api.example.com 443 4. 如果是本地开发,检查代理设置
例2: デバッグログの追加
Codex にデバッグコードの追加を依頼します:
タスク
この関数にデバッグログを追加してください:
def calculate(a, b):
return a + b * (a - b)
def calculate(a, b):
return a + b * (a - b)
Codex はデバッグログ付きのバージョンを生成します:
デバッグログの追加
import logging
# ログの設定
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def calculate(a, b):
"""デバッグログ付きの計算関数"""
logger.debug(f"calculate called with a={a}, b={b}")
result = a + b * (a - b)
logger.debug(f"a + b = {a} + {b} = {a + b}")
logger.debug(f"a - b = {a} - {b} = {a - b}")
logger.debug(f"b * (a - b) = {b} * {a - b} = {b * (a - b)}")
logger.debug(f"final result: {result}")
return result
# ログの設定
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def calculate(a, b):
"""デバッグログ付きの計算関数"""
logger.debug(f"calculate called with a={a}, b={b}")
result = a + b * (a - b)
logger.debug(f"a + b = {a} + {b} = {a + b}")
logger.debug(f"a - b = {a} - {b} = {a - b}")
logger.debug(f"b * (a - b) = {b} * {a - b} = {b * (a - b)}")
logger.debug(f"final result: {result}")
return result
ファイル操作
例1: ファイルの一括リネーム
タスク
現在のディレクトリ内の image_001.jpg のようなファイルをすべて image-001.jpg にリネームします(アンダースコアをハイフンに変更)
例2: プロジェクト構造の作成
タスク
Flask プロジェクトの標準的なディレクトリ構造を作成してください。以下を含みます:
- app.py メインファイル
- config.py 設定ファイル
- requirements.txt
- tests/ディレクトリ
- static/と templates/ディレクトリ
- app.py メインファイル
- config.py 設定ファイル
- requirements.txt
- tests/ディレクトリ
- static/と templates/ディレクトリ
Codex は完全なプロジェクト構造を作成し、必要なファイルをすべて生成します。
Codex は最初に作成するファイルのリストを表示し、確認後に実行します。
コマンド実行
例1: テストの実行
タスク
プロジェクトのユニットテストを実行してください
Codex はプロジェクトの種類を自動的に検出し、対応するテストコマンドを実行します:
- Python プロジェクト: pytest または unittest
- Node.js プロジェクト: npm test または yarn test
- Rust プロジェクト: cargo test
例2:Git操作
タスク
すべての変更を含む Git commit を作成し、適切なコミットメッセージを使用してください
Codex はすべての未コミットの変更を分析し、次を実行します:
git status- 変更を確認git diff- 具体的な修正をレビューgit add -A- すべてのファイルを追加git commit -m "..."- コミットを作成
Git 操作の場合、Codex は最初に変更内容を表示し、確認後に実行します。
プロジェクト分析
例1: プロジェクト構造の理解
タスク
このプロジェクトのアーキテクチャと技術スタックを分析してください
Codex はプロジェクトの以下を確認します:
- 設定ファイル(package.json, Cargo.toml, requirements.txt など)
- ディレクトリ構造
- 主要なソースファイル
次に詳細な分析レポートを提供します。
例2: 依存関係の検索
タスク
auth.py ファイルがどのファイルから参照されているか調べてください
プランモード
/plan コマンドを使用して複雑なタスクを計画します:
タスク
/plan この React プロジェクトにログイン、登録、JWT 認証を含むユーザー認証機能を追加してください
Codex は最初に詳細な実装計画を表示します:
## 实施计划:用户认证功能 ### 步骤 1:准备 - 创建用户模型 - 安装认证依赖(jsonwebtoken, bcryptjs) ### 步骤 2:后端实现 - 创建 /api/auth/register 端点 - 创建 /api/auth/login 端点 - 实现 JWT 生成和验证中间件 ### 步骤 3:前端实现 - 创建登录表单组件 - 创建注册表单组件 - 添加认证状态管理 ### 步骤 4:测试 - 编写后端单元测试 - 测试前端表单交互 是否确认执行此计划? [Y] 确认 [N] 取消 [M] 修改
プランモードを使用すると、実行前に Codex の完全な考え方を把握できるため、不要な手戻りを避けられます。
総合サンプル
完全なワークフローの例:
完全なワークフロー
# 1. 新しいセッションを開始
/new
# 2. プロジェクトを把握
このプロジェクトはどのフレームワークを使っていますか?主な機能は何ですか?
# 3. 新機能を追加
にusersモジュールに認証コードを送信する機能を追加します。考慮すべき点:
- 認証コード生成(6桁の数字)
- 60秒以内は再送信できません
- 認証コード10分間有効
# 4. テスト
関連するテストを実行して機能が正常であることを確認します
# 5. コードレビュー
/review
/new
# 2. プロジェクトを把握
このプロジェクトはどのフレームワークを使っていますか?主な機能は何ですか?
# 3. 新機能を追加
にusersモジュールに認証コードを送信する機能を追加します。考慮すべき点:
- 認証コード生成(6桁の数字)
- 60秒以内は再送信できません
- 認証コード10分間有効
# 4. テスト
関連するテストを実行して機能が正常であることを確認します
# 5. コードレビュー
/review
この例は、プロジェクトの把握 → 機能の実装 → テスト → レビューという典型的な開発フローを示しています。
ショートカット操作のまとめ
| シナリオ | 使用するコマンド |
|---|---|
| 関数を書く | 要件を説明するだけでよい |
| コードをレビュー | /review または「レビューして...」 |
| 問題のデバッグ | エラーメッセージを貼り付けて分析を依頼 |
| コマンドを実行 | ! で始める |
| 複雑なタスクの計画 | /plan + タスクの説明 |
| コードを理解 | この関数は何をするものですか? |
習うより慣れろ、Codexを多用することでどんどん熟練し、コードを書く効率も大幅に向上します。その他の拡張機能