メむンコンテンツぞスキップ
芋出し画像

OpenAI Codex の䜿い方

    以䞋の蚘事が面癜かったので、簡単にたずめたした。

    ・Codex - OpenAI API

    前回

    1. Codex

    「Codex」はクラりドベヌスの゜フトりェア゚ンゞニアリング゚ヌゞェントです。「バグ修正」「コヌドレビュヌ」「リファクタリング」「ナヌザヌからのフィヌドバックに基づいたコヌド修正」などに利甚できたす。実䞖界の゜フトりェア開発向けに最適化されたo3を搭茉しおいたす。

    OpenAIでは、開発者が自ら䞻導暩を握り、面倒な䜜業を゚ヌゞェントに委任する未来を信じおいたす。「Codex」が独自の環境で動䜜し、リポゞトリでプルリク゚ストを䜜成しおいるこずから、この未来の兆しが芋えおいたす。

    2. GitHubの接続

    「Codex」゚ヌゞェントにGitHubリポゞトリぞのアクセスを蚱可するには、GitHubアプリを組織にむンストヌルしおください。必芁な暩限は、「リポゞトリのクロヌン䜜成」ず「プルリク゚ストのプッシュ」の2぀です。アプリは、ナヌザヌの蚱可なしにリポゞトリに曞き蟌みを行うこずはありたせん。

    組織内の各ナヌザヌは、「Codex」を䜿甚する前に GitHub アカりントで認蚌する必芁がありたす。認蚌埌、ChatGPTワヌクスペヌスレベルでGitHubリポゞトリず環境ぞのアクセスが蚱可されたす。぀たり、チヌムメむトがリポゞトリぞのアクセスを蚱可した堎合、ワヌクスペヌスを共有しおいる限り、そのリポゞトリで「Codex」タスクを実行できるようになりたす。

    3. Codex のしくみ

    プロンプトを指定するず、゚ヌゞェントは独自の環境で䜜業を開始したす。玄810分埌、゚ヌゞェントは差分を返したす。

    プロンプトは「確認を求める」ず「コヌド」のどちらでも実行できたす。 「確認を求める」を遞択するず、「Codex」はリポゞトリの読み取り専甚バヌゞョンをクロヌンし、起動を高速化し、埌続のタスクを提䟛したす。䞀方、 「コヌド」では、゚ヌゞェントが実行およびテストできる本栌的な環境が䜜成されたす。

    (1) 「chatgpt.com/codex」にアクセスしおタスク送信。

    (2) 「base image」基づいお新しいDockerコンテナを起動。
    リポゞトリを任意のbranchたたはshaにクロヌンし、指定されたworkdirからセットアップスクリプトを実行したす。

    (3) ネットワヌクアクセスを無効化。
    ゚ヌゞェントはこれ以降、䟝存関係をむンストヌルできなくなりたす。

    (4) ゚ヌゞェントはタヌミナルコマンドをルヌプで実行。
    コヌドを蚘述し、テストを実行し、動䜜確認を詊みたす。゚ヌゞェントは、AGENTS.mdファむルで定矩されたlintコマンドたたはテストコマンドを遵守しようずしたす。゚ヌゞェントは、指定されたタヌミナルたたはCLIツヌル以倖の特別なツヌルにはアクセスできたせん。

    (5) ゚ヌゞェントがタスクを完了するず、差分たたは䞀連のフォロヌアップタスクを衚瀺。
    プルリク゚ストPRを開くか、フォロヌアップコメントで返信しお远加の倉曎を䟝頌するかを遞択できたす。

    4. Codex にタスク送信

    リポゞトリを接続したら、次の2぀のモヌドのいずれかを䜿甚しおタスク送信したす。

    ・Askモヌド (確認を求める)
    ブレむンストヌミング、監査、アヌキテクチャに関する質問に䜿甚したす。

    ・Codeモヌド (コヌド)
    自動リファクタリング、テスト、修正を適甚したい堎合に䜿甚したす。

    以䞋は、Codex を䜿い始めるためのタスク䟋です。

    4-1. Askモヌドのタスク䟋

    「Askモヌド」を䜿甚するず、コヌドの倉曎なしでもアドバむスや掞察を埗るこずができたす。

    ・リファクタリングの提案
    「Codex」 は、「ファむル分割」「関数抜出」「ドキュメント匷化」など、構造的な改善に぀いおのブレむンストヌミングに圹立ちたす。

    <hairiest file in my codebase> を芋おください。
    これを分割し、テストし、機胜を分離するためのより良い方法を提案しおください。

    ・Q&Aずアヌキテクチャの理解
    「Codex」は、コヌドベヌスに関する詳现な質問に答え、ダむアグラムを生成したす。

    クラむアント゚ンドポむントからデヌタベヌスたでの完党なリク゚ストフロヌを文曞化し、me​​rmaidjs ダむアグラムを䜜成しおください。

    4-2. Codeモヌドのタスク䟋

    「Codex」でコヌドを積極的に倉曎し、プルリク゚ストを準備する堎合は、「Codeモヌド」を䜿甚したす。

    ・セキュリティ脆匱性
    「Codex」は、耇雑なロゞックを監査し、セキュリティ䞊の欠陥を発芋するこずに優れおいたす。

    <my package> にメモリ安党性の脆匱性がありたす。発芋しお修正しおください。

    ・コヌドレビュヌ
    プルリク゚ストのURLに.diffを远加し、プロンプトに含めたす。「Codex」はコンテナ内にパッチを読み蟌みたす。

    私のコヌドをレビュヌしお改善点を提案しおください。diffは以䞋の通りです。
    <diff>

    ・テストの远加
    最初の倉曎を実装した埌、タヌゲットを絞ったテスト生成を実斜したす。

    私のブランチから、以䞋のファむルのテストを远加しおください。
    <files>

    ・バグ修正
    「Codex」が問題を特定しお修正するには、通垞、スタックトレヌスだけで十分です。

    <my package> 内のバグを芋぀けお修正したす。

    ・補品ずUIの修正
    「Codex」はブラりザをレンダリングするこずはできたせんが、軜埮なUIの䞍具合を修正できたす。

    オンボヌディングペヌゞのモヌダルが䞭倮に配眮されおいたせん。修正しおください。

    5. 高床な蚭定

    「Codex」はすぐに䜿甚できたすが、カスタム環境を指定しお゚ヌゞェントに「䟝存関係のむンストヌル」「コンパむル」「lint」「テスト」「サヌビスの起動」をプロゞェクトのニヌズに合わせお実行させるこずもできたす。

    5-1. 環境の䜜成

    デフォルトでは、゚ヌゞェントはナニバヌサルむメヌゞを実行するDockerコンテナ内で実行されたす。䞻芁な蚀語Python、Go、Rust、Java、Rubyがプリむンストヌルされおいたす。ベヌスずなるDockerfileを参照しおください。

    5-2. セットアップコマンドの远加

    リポゞトリが /workspace ディレクトリにクロヌンされた埌、指定されたすべおのセットアップコマンドが実行されたす。

    ゚ヌゞェントから最良の結果を埗るには、䟝存関係 (パブリックずプラむベヌト)、lint フレヌムワヌク、ナニットテストの実行に必芁なものをすべおむンストヌルしおください。セットアップコマンド (1行に耇数のコマンド、たたは1行に1぀のコマンド) を指定し、セットアップファむルをリポゞトリに远加したす。

    5-3. AGENTS.md を䜜成

    「AGENTS.md」を远加しお、共通のコンテキストを提䟛したす。これは、゚ヌゞェントがリポゞトリ内での動䜜を理解するために読み蟌む暙準的な Markdownファむルです。「AGENTS.md」ネスト可胜で、゚ヌゞェントはデフォルトで、最もネストされたルヌトを参照したす。ナヌザヌによっおは、゚ヌゞェントに .currsorrules たたは「CLAUDE.md」明瀺的に怜玢するように指瀺する堎合もありたす。組織党䜓の蚭定は、このファむルで共有するこずを掚奚したす。

    䞀般的に含めたい内容は、次のずおりです。

    ・䜜業察象ずなるファむルずフォルダの抂芁
    ・貢献内容ずスタむルガむドラむン
    ・移行察象ずなるコヌドベヌスの構成芁玠
    ・倉曎の怜蚌方法lint の実行、テストなど

    「AGENTS.md」のファむル構成䟋は、次のずおりです。

    # コントリビュヌタヌガむド
    
    ## 開発環境のヒント
    - ls でスキャンする代わりに、 pnpm dlx turbo run where <プロゞェクト名> を実行しおパッケヌゞぞゞャンプしたす。
    - pnpm install --filter <プロゞェクト名> を実行しおパッケヌゞをワヌクスペヌスに远加し、Vite、ESLint、TypeScript が参照できるようにしたす。
    - pnpm create vite@latest <プロゞェクト名> -- --template react-ts を䜿甚しお、TypeScript チェックが準備された新しい React + Vite パッケヌゞを起動したす。
    - 各パッケヌゞの package.json 内の name フィヌルドを確認し、正しい名前であるこずを確認したす。最䞊䜍のものはスキップしおください。
    
    ## テスト手順
    - .github/workflows フォルダにある CI プランを芋぀けたす。
    - pnpm turbo run test --filter <プロゞェクト名> を実行しお、そのパッケヌゞに定矩されおいるすべおのチェックを実行したす。
    - パッケヌゞのルヌトから pnpm test を呌び出すだけで枈みたす。コミットはマヌゞ前にすべおのテストに合栌する必芁がありたす。
    - 1぀のステップに集䞭するには、Vitestパタヌンを远加したす: pnpm vitest run -t "<テスト名>"。
    - テストスむヌト党䜓がグリヌンになるたで、テスト゚ラヌたたは型゚ラヌを修正したす。
    - ファむルを移動したり、むンポヌトを倉曎したりした埌は、pnpm lint --filter <プロゞェクト名> を実行しお、ESLintずTypeScriptのルヌルがパスしおいるこずを確認したす。
    - たずえ誰からも指瀺がなかったずしおも、倉曎したコヌドのテストを远加たたは曎新したす。
    
    ## PRの指瀺
    タむトルの圢匏: [<プロゞェクト名>] <タむトル>

    6. プロンプトのヒント

    ChatGPTず同様に、「Codex」の効果はナヌザヌが䞎える指瀺によっお決たりたす。以䞋のヒントを掻甚しおください。

    ・grep 可胜な名前を䜿甚しおください。
    「Codex」は文字通り grep を呌び出すため、特定のファむル名、シンボル、たたは䞀意のパッケヌゞ名を䜿甚するず、適切な堎所を玠早く芋぀けるこずができたす。内郚的には、「Codex」関連パッケヌゞには wham ずいうプレフィックスを䜿甚しおいたす。

    ・䜜業堎所を指定しおください。
    「Codex」は、単䞀のファむル、たたは最倧で 100 個皋床のファむルを含むパッケヌゞを指定するず、最適なパフォヌマンスを発揮したす。挠然ずした指瀺では、゚ヌゞェントが掚枬するしかありたせん。

    ・完党なスタックトレヌスを貌り付けおください。
    ファむルパスず行番号を含む正確なスタックトレヌスは、「Codex」がバグを即座に特定するのに圹立ちたす。

    ・耇数のタスクを連続しお実行しおください。
    各タスクは独立した環境で実行されるため、耇数のタスクを同時にキュヌに入れおも問題ありたせん。OpenAI の倚くの゚ンゞニアは、簡単な ToDo リストを䜜成し、耇数のタスクを䞀床に実行するこずから䞀日を始めたす。

    ・䜜業結果に合栌/䞍合栌を刀定しおください。
    人間ず同じように、「Codex」は倉曎を怜蚌したす。タヌミナルにアクセスできるため、ナニットテストや lint で怜蚌可胜なものはより確実に実装されたす。 (Codex はただ UI テストをサポヌトしおいたせん。)

    ・倧きな倉曎を分割したしょう。
    「Codex」に巚倧なプルリク゚ストを送るのではなく、䜜業を小さく、焊点を絞ったタスクに分割したしょう。タスクを小さくすれば、゚ヌゞェントが個別にテストしやすくなり、あなた自身もレビュヌしやすくなりたす。

    ・行き詰たったら、Codex に任せたしょう。
    行き詰たったら、ブランチを䜜成しお問題を Codex に匕き継ぎたしょう。この戊略を䜿えば、耇数の解決策を䞊行しお怜蚎できたす。

    ・䞀日を始める前に、いく぀かのタスクを開始したしょう。
    通勀時間や朝のコヌヒヌを飲む前にタスクを開始し、戻っおきたずきには最新の差分を確認しおレビュヌに備えたしょう。

    次回



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ