Codex CLIで応答完了時に通知音を鳴らす【Windows版】
はじめに
いつもブログをご覧いただきありがとうございます。
ミジンコに転生したIPUSIRONです😀
OpenAIのCodex CLIでも応答完了時に通知音を鳴らすことに成功しました。
本記事はその実現法を紹介します。
事の顛末
Claude Codeでは応答完了時に通知音を鳴らすことで、作業効率がアップしました。
最近はCodex CLIを併用することもあり、こちらでも通知音が鳴らせれば便利だと思っていました。
macOSやLinuxであれば、設定ファイルのnotifyを使えば簡単に実現できることはすぐに判明します。しかし、Windowsでの実現法が見つかりません。公式サイトでもWindowsでのnotifyは実験的扱いとされていました。
それでも諦めきれなかったのでいろいろと実験し、ついに通知音を鳴らすことに成功しました。
実験環境
項目 | 内容 |
---|---|
OS | Windows 10 Pro |
Codex CLIバージョン | codex-cli 0.30.0 |
PowerShell の実行ポリシー | スクリプト実行を許可しておくこと(Bypass等) |
Codex CLIは日々進化しているので、将来的にはWindowsでも簡単に実現できる方法が用意されるかもしれません。
公式に「Windows サポートは実験的」であるという記載
OpenAIのCodex CLI の公式ドキュメントには以下のような記述があります:
“The Codex CLI officially supports macOS and Linux. Windows support is still experimental — we recommend running in WSL.” OpenAI デベロッパー
つまり、Windows上でnotifyを含む設定が機能するかどうかは環境やバージョン依存であり、「必ず動く」と保証されているわけではありません。
音が鳴らなかったり、構文エラーが出たりする可能性があります。設定を適用する場合は、自己責任でお試しください。
実現法
1:通知音ファイルを用意する
私は棒読みちゃんで、霊夢が「終わったわ」としゃべる風の音声ファイルを作成しました。

VSCodeでCodex CLIとClaude Codeを同時に実行することもあります。Codex CLIでは霊夢の「終わったわ」、Claude Codeでは魔理沙の「終わったぜ」としゃべらせることで、VSCodeから目を離していてもどちらのタスクが終わったのかを識別できます。
私の環境では、"C:\Users\owner\OneDrive\Documents\codex"に音声ファイル("reimu_owattawa.wav")を保存しました。
皆さんは適時ファイルパスは読み替えてください。
2:通知用スクリプト(ラッパー)を作成する
以下のPowerShellファイルを作成します。スクリプトをラップすることで、notifyの引数JSON等の問題を回避しています。
param(
[Parameter(ValueFromRemainingArguments=$true)]
[string[]]$args # Codex CLI から渡される JSON などの引数を受け取って無視する
)
$wavPath = "$PSScriptRoot\reimu_owattawa.wav"
if (Test-Path $wavPath) {
$player = New-Object System.Media.SoundPlayer $wavPath
$player.PlaySync()
} else {
Write-Error "音声ファイルが見つかりません: $wavPath"
}
私の環境では、"C:\Users\owner\OneDrive\Documents\codex"に"notify.ps1″ファイルを配置しました。
3:Codex CLIの設定ファイルを編集する
ユーザー設定ファイルのパスは"~/.codex/config.toml"です。Windowsの場合は、"C:\Users\<ユーザー名>\.codex\config.toml"になります。
Claude Codeとは異なり、Codex CLIの"config.toml"ファイルはプロジェクトルートではなく、ユーザーのホームディレクトリ(例: “C:\Users\<ユーザー名>.codex\config.toml")に置く必要があります(多分すでにある)。
設定ファイルにおいて、以下のようにnotifyの設定を追加します。
model = "gpt-5-codex"
model_reasoning_effort = "high"
hide_agent_reasoning = false
network_access = true
notify = ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", "C:\\Users\\owner\\OneDrive\\Documents\\codex\\notify.ps1"]
[tools]
web_search = true
[projects.'\\?\D:\try100']
trust_level = "trusted"
ここで、notifyのコマンドはWindows環境で外部コマンド実行が可能かどうかに依存するため、成功しない場合は次の注意点(トラブルシューティング)を参照してください。
- PowerShellの実行ポリシー(オート実行制限など)が原因でスクリプトがブロックされることがある。管理者権限でSet-ExecutionPolicy Bypass等を試す。
- ファイルパスにスペースや特殊文字が含まれると正しくクォートされずにエラーになる可能性。
- JSONの引数がnotify側に渡されて、PowerShellの-Fileで受け取る形で無視できるようにしておく。
- Codex CLIのバージョンによって挙動が異なるので、まず小さなテストで試してみること。
4:テストする
VSCodeのターミナルでCodex CLIを対話的に起動します。
適当にタスクをお願いしてください。たとえば、「今日の東京の天気を教えてください」とでも入力すればよいでしょう。

タスク完了時に通知音が鳴れば成功です。
タスク完了タイミングでエラーが出たのであれば、notify自体は発火していることを意味します。ということは、引数の内容、ファイルパスの何かが間違っている可能性があります。