ChatGPTの有料プランに加入すると、Codex CLIを使ってパソコン内で、AIに処理をさせることができます。
たとえば、会議録、報告書、マニュアル、メール履歴といった大量のテキストファイルを読み込ませて、要約やまとめを作るなど、対話形式ではできないことができるようになります。
一方で、パソコン内のファイルを安全に保つためには、システムを分離する仕組みの構築が必要です。
作業は4つのステップに分かれます。
- Docker Desktop と WSL をインストールする
- WSL の中に「作業専用フォルダ」を作る
- 分析したいファイルをそのフォルダにコピーする
- Codex CLI を「読み取り専用」で起動して要約させる
1. 必要なソフトをインストールする
1.1. Docker Desktop
Codex CLIは、パソコン内のファイルを直接読み書きすることで、人間の代わりに処理することができます。
一方で、AIが間違ってパソコンの大事なデータを書き換えたり、外部に送ったりしするのは心配です。
これは、AIに指示によって禁止するだけでは不十分で、パソコン全体をいじれないようにする「箱」が必要です。
特定のアプリを外の環境と切り離して動かす仕組みをコンテナといい、Docker というプログラムで作ることができます。
公式サイトからインストーラーをダウンロードします。
https://www.docker.com/products/docker-desktop/Code language: JavaScript (javascript)
「Download for Windows」をクリックして Docker Desktop Installer.exe をダウンロードし、実行します。
途中で「Use WSL 2 instead of Hyper-V」というチェックボックスが出たら、チェックを入れた状態で進めます。
完了後は再起動してください。
1.2. WSL(Windows Subsystem for Linux)
「WSL」 とは、Windows の中で Linux という別の OS を動かす仕組みです。
Docker はこの Linux 環境を使ってコンテナを動かします。1。
スタートメニューを右クリックし「Windows PowerShell(管理者)」を開いて、次の1行を入力してください。
wsl --install
Enter キーを押すと自動でセットアップが始まります。
完了後に再起動すると、スタートメニューから「Ubuntu」が起動できます。
これは、Linux OSで、Windows内に別のシステムができたことになります。
ユーザー名とパスワードを設定すると使えるようになります。
Windows内のUbuntu(黒いターミナル)を開いて、Dockerが入っていることを確認できます。
docker --version
Docker version 26.x.x のような表示が出れば準備完了です。
2. 作業専用フォルダを作る
AI に渡す情報は、専用フォルダに入れたファイルだけに限定します。
パソコン全体を渡すわけではありません。
これが安全に使うための要です2。
Ubuntu を開いて、次を順番に入力します。
mkdir -p ~/codex-work/documents
mkdir ~/codex-work/documents/data
mkdir ~/codex-work/documents/outputCode language: JavaScript (javascript)
これで次のフォルダ構成ができます。
codex-work/
└── documents/
├── data/ ← AI に読ませたいファイルをここに入れる
└── output/ ← AI が書いた要約をここに出力させる
このdata に入れたファイルだけを AI に見えるようにすれば、パソコンの他のフォルダは見えません。
2.1. Codex CLI を動かす準備をする(Dockerfile)
Dockerfile とは「Docker のコンテナの中に何を入れるか」を書いたレシピです。
「Dockerfile」というファイル名で、以下のテキストを作ります。
FROM node:20-bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates git \
&& rm -rf /var/lib/apt/lists/*
RUN npm i -g @openai/codex
WORKDIR /work
CMD ["codex", "--help"]Code language: JavaScript (javascript)
これを、WSLの中に保存します。
~/codex-work/documents/DockerfileCode language: JavaScript (javascript)
それでは、Docker のコンテナの設計図を実際に組み立てて、「イメージ」を作ります。
cd ~/codex-work/documents
docker build -t codex-cli:local .Code language: JavaScript (javascript)
最後にピリオド(.)があり、作業フォルダであるdocumentsにイメージを作っています。
このビルドには数分かかります。
3. ファイルを作業フォルダにコピーする
エクスプローラーを見ると、ネットワークにWSLのファイルがあります。
エクスプローラーのアドレスバーに次を入力して Enter を押します。
\\wsl$
「Ubuntu」→「home」→「あなたのユーザー名」→「codex-work」→「documents」→「data」と進むと、フォルダが開きます。
ここに要約させたいファイルをドラッグ&ドロップすればいいわけです3。
テキストファイル(.txt)、Markdown(.md)、CSV(.csv)、コードファイルなどはAIにとって読みやすいですが、Word の .docx や Excel の .xlsx はそのままでは AI が読みにくいかもしれません(最近は、対応するファイルの種類が増えていますが)。
もし、読み取れなかったときは「名前を付けて保存」でテキスト形式(.txt)に変換してからコピーすると確実です。
Ubuntu で lsコマンドを押すと、コピーしたファイル一覧が表示されます。
ls ~/codex-work/documents/dataCode language: JavaScript (javascript)
3.1. Codex CLIを実行する
Codex CLI を動かすには、OpenAI の アカウントのサインインが必要です。
次のコマンドで Codex CLI を起動します。
docker run --rm -it \
--network none \
-v ~/codex-work/documents/data:/work:ro \
-v ~/codex-work/documents/output:/output \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
codex-cli:local \
codex --sandbox read-only --ask-for-approval on-requestCode language: JavaScript (javascript)
各オプションの意味を説明します4。
| オプション | 意味 |
|||
| --network none | インターネット接続を切る。AI が外部にデータを送れなくなる |
| :ro | data フォルダを「読み取り専用」にする。AI がファイルを書き換えられない |
| --sandbox read-only | Codex 側でも読み取りのみに制限する |
| --ask-for-approval on-request | 何か操作しようとするたびに確認を求めてくる |
3.2. 要約の指示の出し方
Codex が起動すると、入力欄が表示されます。
日本語でそのまま指示を書いてください。
data フォルダの中にある report.txt を読んで、要点を3つに絞って要約してください。Code language: CSS (css)
data フォルダの中のすべてのファイルを読んで、共通するテーマをまとめてください。
議事録.txt を読んで、決定事項と宿題事項を別々にリストアップしてください。Code language: CSS (css)
AI が何らかのファイル操作をしようとすると「承認しますか?」と聞いてきます。基本的に承認して問題ありませんが、意図しない書き込みや実行が出てきたときは n を入力して断ることができます。
この構成では、AI は data フォルダの中身しか見られず、インターネットにも接続できません。ファイルの書き換えも読み取り専用で防いでいて、何か操作しようとすると必ず確認を求めてきます。
制限を緩める場合は、この構成で問題なく動くことを確認してから変更するのが安全です。
3.3. 要約結果をパソコンに保存する
output フォルダへの書き込みは許可されているので、AI に次のように指示できます。
要約が終わったら、結果を /output/summary.txt に保存してください。
保存されたファイルは、エクスプローラーから次の場所で見つかります。
\\wsl$\Ubuntu\home\(ユーザー名)\codex-work\documents\output\
このようにファイルの受け渡しをするわけです。
4. 安全のために守ること
機密文書や個人情報を扱う場合は、
dataフォルダには、AI に見せていい情報だけを入れる--network noneを外さない。外すとインターネットに接続できる状態になる- API キーをファイルに書いてフォルダに置かない
やってはいけないこと
- ホーム全体(
~/)や Windows のC:\ドライブ丸ごとをマウントする --dangerously-bypass-approvals-and-sandboxや--yoloをつけて起動する。これらは制限がすべて外れる5- API キーを他人に見せる、またはファイルに書いて共有する
4.1. うまくいかないときの確認ポイント
「docker: command not found」と出る場合、Docker Desktop が起動していない可能性があります。
タスクバーのクジラのアイコンを確認してください。
「permission denied」と出る場合は、プログラムのインストールなどの権限がない状態です。
sudo を頭につけて実行してみてください。
例えば sudo docker build ... のようにします。
「seccomp/landlock is not supported」と出るのは、WSL2 のカーネルが古い場合です。
PowerShell(管理者)で wsl --update を実行して WSL を最新化してから、Ubuntu を再起動してください。6
- OpenAI公式ドキュメントでは、WindowsでのCodex CLI利用について「Windows ネイティブ対応はまだ早期段階」と明示しており、WSL2を使うことを推奨しています。WSL2を使うと、Linuxのサンドボックス実装(Landlock/seccomp)が有効になり、セキュリティ面でより成熟した動作が得られます。 – Codex on Windows – OpenAI Developers
- Docker公式ブログは「プロジェクトファイルはWSL2ディストリビューション内に保存し、Windowsホストのファイルへのアクセスはできるだけ避けることが最初かつ最重要のベストプラクティス」と明示しています。/mnt/c はPlan 9ファイル共有経由でWindowsのファイルを見せているに過ぎず、WSL側のファイルと比べて速度が大きく落ちます。 – Docker Desktop WSL 2 Best practices – Docker Blog
- Microsoftの公式ドキュメントでも、WindowsエクスプローラーからWSL内のファイルへアクセスする方法として
\\wsl$パスの利用が案内されています。WSL内のファイルはこのパス経由でWindowsから操作できます。 – Get started with Docker containers on WSL – Microsoft Learn - Codex CLIのLinux版サンドボックスはLandlock(Linux 5.13以降)とseccompというカーネル機能に依存しています。Dockerコンテナ内では、ホスト側の設定によってこれらが無効化されている場合があり、その際はCodex側のサンドボックスが機能しないことがOpenAI公式ドキュメントに明記されています。この記事で紹介している構成では、Dockerコンテナ自体のマウント制限と
--network noneが主な安全策になります。 – Codex security guide – OpenAI Developers - OpenAI公式のCLIリファレンスでは、このフラグを「外部でハードニングされた環境の内側でのみ使用すること」と明記し、孤立したランナー(isolated runner)専用と位置づけています。通常のローカル環境での使用は推奨されていません。 – CLI Reference – OpenAI Developers
- 「The combination of seccomp/landlock that Codex uses for sandboxing is not supported in this environment.」というエラーは、WSL2のカーネルが古い場合やDockerコンテナの設定によって発生します。
wsl --updateでWSLを最新化することで解消するケースが多く報告されています。 – Issue #1039 – openai/codex – GitHub