前回構築したGemini.cliと話そうと四苦八苦していた。どうしてもマイクの音声がサーバーに届かない状況。
最初の担当者Geminiさんが迷走を始めたので、Chat GPT君に相談。
コードを貼って状況を説明していると、『コード修正ならCodexとブラウザの誘い』が出たので、試してみることに。
Codexをダウンロードして起動したところ、コマンドツールのダウンロードが始まり、少し不安を感じて。
念のためChat GPT君に相談したところ、問題ないとのこと。
しかし、Codexはレスポンスが悪いのが玉に瑕。それでも、コード解析とエラー回避・補正機能は非常に優秀。
そんな話をCodexに作業させながらChat GPT君と会話していたところ、『Codex.cliはローカルでは遅い』という話題が持ち上がりました。『えっ、CLIならサーバー化ができるの?』と尋ねると、『本来はそちらが本筋です』とのこと。
そこで、Gemini.cliのコードエラー補正のため、今稼働している古いノートPCのUbuntuにCodex.cliを導入してみることにしました。今回はChat GPT君に言われた通りに構築したので、その経過もChat GPT君にまとめてもらいました。
結果は、何度かのエラー補正を経て、Gemini.cliにようやく言葉がサーバーに届くようになりました!
Codexの素晴らしい点は、本当にスクリプトを作成・保存できるところです。作成したスクリプトをダウンロードして実物を入れ替えることで、コピペによる失敗エラーが起こらないのも大きなメリットだと実感しました。
いいよ。じゃあ「実際に動かした構築ログとして使えるブログ」にしておくね。あとからそのまま貼れる形にする。
Codex CLI + ttyd + NASで作るローカルAI開発環境構築ログ
■ はじめに
今回、OpenAIのCodex CLIをローカルUbuntu環境に導入し、ブラウザ経由で使えるAI開発環境を構築した。
目的はシンプルで、
-
CLIを直接触るのではなくブラウザで操作したい
-
SSH不要でLAN内から使えるようにしたい
-
スクリプト生成・実行・保存を一箇所で完結させたい
というもの。
結果として「ローカルAI作業サーバ」としてかなり実用的な構成になった。
■ 構成概要
最終的な構成は以下の通り。
-
Codex CLI(コード生成エンジン)
-
ttyd(ブラウザでターミナル化)
-
systemd(常駐サービス化)
-
NAS(スクリプト保存先)
-
Ubuntu 24.04(実行環境)
これにより以下が実現できる。
-
ブラウザからCodexを操作
-
生成コードをそのままNASに保存
-
ローカルで即実行
-
再起動後も自動復帰
■ 導入の流れ
1. Codex CLIのインストール
Node環境(nvm)経由でCodex CLIを導入。
npm install -g @openai/codex
※ systemdから使う場合はnvmのPATHを明示する必要があった。
2. ttydでブラウザ化
Codex CLIをそのままブラウザで使うためにttydを利用。
ttyd -W -p 7681 -i 0.0.0.0 codex
これでLAN内からブラウザアクセス可能になる。
http://<server-ip>:7681
3. systemdで常駐化
再起動後も使えるようにsystemdサービス化。
[Unit]
Description=Codex via ttyd
After=network.target
[Service]
User=fi
WorkingDirectory=/home/fi/codex-web
Environment="PATH=/home/fi/.nvm/versions/node/v24.15.0/bin:/usr/bin:/bin"
ExecStart=/usr/bin/ttyd -W -p 7681 -i 0.0.0.0 codex
Restart=always
[Install]
WantedBy=multi-user.target
4. 自動起動設定
sudo systemctl enable codex-ttyd
sudo systemctl start codex-ttyd
5. NAS連携
スクリプト保存先としてNASをマウント。
/mnt/nas/codex-scripts
これにより生成物を直接NASへ保存できるようにした。
■ 実際の運用イメージ
現在の使い方はシンプルで、
-
ブラウザでCodexにアクセス
-
スクリプトを生成
-
NASに保存
-
必要ならそのまま実行
という流れになっている。
■ ハマりポイント
構築中にいくつか詰まった点:
● systemdからnvmが見えない
→ PATHを明示することで解決
● ttydポート競合
→ 既存プロセスが7681を使用していたため停止
● Codex sandbox警告
→ bubblewrap関連だが、LAN用途では実害なし
■ 得られたメリット
この構成により以下が改善された:
-
コピペ作業がほぼ消滅
-
スクリプト転送ミスがゼロ化
-
ブラウザで完結する操作環境
-
作成と実行の一体化
特に「人間の転記ミスが消える」のは大きい。
■ 今後の拡張(必要になったら)
現状でも十分使えるが、拡張するとしたら以下:
-
NASを唯一の正本にする構成
-
Git連携で履歴管理
-
UFWによるIP制限
-
HTTPS化(nginx経由)
ただし現時点ではまだ不要。
■ まとめ
今回の構築で得られたのは単なるCLI環境ではなく、
「ローカルで動くブラウザ型AI開発サーバ」
という形だった。
必要なときだけ使い、生成から保存まで一気通貫で扱えるため、個人用途としてはかなり実用的な構成になった。
必要なら、
「もう少し技術ブログっぽい版(Qiita向け)」とか
「もっとライトな備忘録版」も作れるよ 👍
