OpenAI Codex CLI のクイックスタートを試してみた

## はじめに

新モデルとともに発表された、以下の Codex CLI を試してみた話です。


https://x.com/OpenAIDevs/status/1912556874211422572


GitHub のリポジトリは以下です。

●openai/codex: Lightweight coding agent that runs in your terminal
　https://github.com/openai/codex

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3fc8e72e-b0e1-4268-93b2-a9f32ae3dc6b.png)


## 実際に試してみる

### クイックスタートを試す： 軽いお試し

公式のクイックスタートを試します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1910f0e3-44eb-41ab-9347-49353230cedb.png)


#### ローカルインストールで試す

公式手順ではグローバルインストールをするところですが、ローカルインストールで試します。

```zsh
npm install @openai/codex
```

次に、環境変数で OpenAI の APIキーを設定します。「OPENAI_API_KEY」という名前で設定します。

あとは実行コマンドです。ローカルインストールしたので `codex` だけでは実行ができないので、以下の内容にして実行します。

```zsh
npx codex
```

（他に似たコマンドで、 `npm exec codex` や `npm x codex` というコマンドもありますが、これらだと一部のオプション付きのコマンド実行で、想定通りでない動作をすることがありそうでした）


とりあえず、適当なプロンプトを送ってみます。

https://x.com/youtoy/status/1912875787931598911

以下のような返答が返ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/935695a8-f09c-4ec9-9cb2-09e2e9145733.png)


### クイックスタートの「Full Auto mode」を試す

さらに、以下の部分に書いてある「Full Auto mode」を試してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/aaa9905f-929e-4de7-87f0-3e8160085f6d.png)

以下で実行してみます。

```zsh
npm x codex --approval-mode full-auto "create the fanciest todo-list app"
```


以下は、コマンド実行直後の画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1b95caf4-d657-465d-b16a-0b3ee2859775.png)


#### 実行中の様子（続き）

当初のプロンプトの内容と違う方向になってますが、お試しとして適当なプロンプトを入れて続けてみました。
（以下は、主な内容を抜粋したものです）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ac38223a-e019-4119-a992-fde9f02fa2e9.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/754c4df0-4426-453c-bec6-8cd96e303f8a.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a9968a07-e287-48a0-9010-55a797f4d367.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7e409f48-6cdb-415b-8648-5e9ccb02ca7d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fc4921de-972d-4da7-b940-d8d4f9c7da79.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/85aa5767-6131-4720-954e-1ba9c9441c67.png)


#### 生成されたコード

コードを書いてもらった部分で、最終的に作成された内容は以下の通りです。


```javascript
#!/usr/bin/env node

const yargs = require('yargs');
const { hideBin } = require('yargs/helpers');

yargs(hideBin(process.argv))
  .scriptName('calc')
  .usage('$0 <cmd> [args]')
  .command(
    'add <numbers..>',
    'Add numbers',
    (yargs) => {
      yargs.positional('numbers', {
        type: 'number',
        description: 'Numbers to add',
      });
    },
    (argv) => {
      const result = argv.numbers.reduce((sum, n) => sum + n, 0);
      console.log(result);
    }
  )
  .command(
    'subtract <a> <b>',
    'Subtract b from a',
    (yargs) => {
      yargs
        .positional('a', { type: 'number', description: 'Minuend' })
        .positional('b', { type: 'number', description: 'Subtrahend' });
    },
    (argv) => {
      const result = argv.a - argv.b;
      console.log(result);
    }
  )
  .command(
    'multiply <numbers..>',
    'Multiply numbers',
    (yargs) => {
      yargs.positional('numbers', {
        type: 'number',
        description: 'Numbers to multiply',
      });
    },
    (argv) => {
      const result = argv.numbers.reduce((prod, n) => prod * n, 1);
      console.log(result);
    }
  )
  .command(
    'divide <a> <b>',
    'Divide a by b',
    (yargs) => {
      yargs
        .positional('a', { type: 'number', description: 'Dividend' })
        .positional('b', { type: 'number', description: 'Divisor' });
    },
    (argv) => {
      if (argv.b === 0) {
        console.error('Error: Division by zero');
        process.exit(1);
      }
      const result = argv.a / argv.b;
      console.log(result);
    }
  )
  .demandCommand(1, 'You need to specify a command')
  .help()
  .alias('h', 'help')
  .alias('v', 'version')
  .argv;
```


どうやら、以下を使ったコードが作成されたようです。

●yargs - npm
　https://www.npmjs.com/package/yargs


#### 生成されたツールを試してみる

最後に、生成されたツールを試してみます。

以下のように、計算やヘルプ・バージョンの表示のコマンドを試してみて、それぞれの実行結果を得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/97607fcd-f848-4bf1-a96c-50133b725d28.png)


## API利用履歴を確認してみる

OpenAI のダッシュボードで、API利用履歴を確認してみます。

以下のように、今回のお試しで使ったトークン数が表示されているのを確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fc8ce8e4-de44-428d-b138-e765052b6348.png)


## おわりに

とりあえず、OpenAI Codex CLI のクイックスタートを試してみました。

今回は簡単なやりとりと、ちょっとしたコードの作成を依頼しました。別途、Codex CLI の仕様（※ 例えば以下の内容など）を確認して他に試すことを考えてみたり、もしくは別のタスクを依頼してみたりなどできたらと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4f591fad-fd34-468f-8f89-29875ba58751.png)