Claude Media
Claude Codeの/voiceコマンドで音声入力を使う — hold/tap/off

Claude Codeの/voiceコマンドで音声入力を使う — hold/tap/off

/voiceコマンドはhold・tap・offの3モードを切り替える音声入力機能です。Claude.aiアカウントが必須で音声はローカル処理されない点や、リモート環境で使えない制約を解説します。

/voiceはClaude CodeのCLIでプロンプトを声で入力するコマンドです。キーを押しながら話す「hold」モードと、1回のタップで録音を開始・終了する「tap」モードの2種類があり、Claude.aiアカウントでのサインインが前提になります。

実行すると、有効化時にマイクの確認が走ります。公式の例では次のように表示されます。

/voice
Voice mode enabled (hold). Hold space to record. Dictation language: en (/config to change).

最後のDictation language: enが重要です。日本語で話すなら、先に言語設定を変える必要があります。

日本語で話すならlanguageの設定から

音声入力の言語は、Claudeの応答言語を決めるlanguage設定と共通です。設定が空なら英語で文字起こしされます。日本語で話したいなら、/configか設定ファイルでlanguageをjapaneseやjaにします。

{
  "language": "japanese"
}

設定した言語が対応言語に無い場合、/voiceは有効化時に警告を出し、文字起こしだけを英語にフォールバックします。Claudeのテキスト応答は影響を受けません。VS Code拡張ではlanguageが空のとき、VS Codeのaccessibility.voice.speechLanguageが先に使われます。

対応言語は20言語です。チェコ語・デンマーク語・オランダ語・英語・フランス語・ドイツ語・ギリシャ語・ヒンディー語・インドネシア語・イタリア語・日本語・韓国語が前半です。残りはノルウェー語・ポーランド語・ポルトガル語・ロシア語・スペイン語・スウェーデン語・トルコ語・ウクライナ語です。

languageの値は、Claudeへ「その言語で答えるように」という指示としてそのまま渡されます。日本語にすると応答も日本語になり、音声だけ日本語で応答は英語、という組み合わせは選べません。綴りを間違えてもエラーにならない点にも注意が要ります。

文字起こしはコーディング用語向けに調整されています。regex・OAuth・JSON・localhostのような開発用語は正しく認識され、現在のプロジェクト名とgitのブランチ名も認識のヒントとして自動で加わります。

日本語環境でつまずいた点と修正されたバージョン

日本語で使う場合に絡む不具合は、Claude Codeのchangelogに3件あります。古いバージョンを使っているなら、症状とバージョンを照らし合わせられます。

バージョン症状該当する人
v2.1.83症状日本語などのIMEが全角スペースを入力すると、holdモードの長押しが始まらなかった該当する人IMEをオンにしたままSpaceで録音する人
v2.1.160症状ディレクトリ名やブランチ名に非ASCII文字や特殊文字があると、接続に失敗した該当する人日本語のフォルダ名やブランチ名を使う人
v2.1.195症状スペースで区切らない言語(日本語・中国語・タイ語)で、自動送信が一度も働かなかった該当する人tapモードかautoSubmitを使う人

3件とも修正済みです。

/voiceの4つの使い方

/voiceは音声入力のオン/オフを切り替え、モードを引数で指定することもできます。指定しなければ、直前のモードを保ったままトグルします。

コマンド効果
/voice効果オン/オフを切り替え、現在のモードを維持
/voice hold効果holdモードで有効化
/voice tap効果tapモードで有効化
/voice off効果無効化

録音した音声はローカルでは処理されず、Anthropicのサーバーへ送られて文字起こしされます。この文字起こしはメッセージやトークンを消費せず、/usageの利用上限にも数えられません。

文字起こしはライブで入力欄に反映されます。確定するまでは薄く表示され、キーボード入力と声を同じプロンプトの中で混ぜられます。文字起こしはカーソル位置に挿入され、カーソルは挿入した文の末尾に残ります。カーソルを動かせば、書いた文章の途中や末尾に声で追記できます。v2.1.84で、文字起こしが正しい位置に挿入されるよう修正されています。

holdとtapのどちらを選ぶか

迷ったら、ウォームアップを許せるかどうかで決めます。

くらべる

holdモードとtapモード

既定

hold

Spaceを押している間だけ録音し、離すと文字起こしを確定します。キーを押し続けているかどうかは、ターミナルが送るキーリピートで判定します。そのため録音が始まるまで短いウォームアップがあり、フッターにはkeep holding…、録音中はlistening…と出ます。

ウォームアップ中に入力欄へ入った最初の数個のキーリピート文字は、録音が始まると自動で取り除かれます。Spaceを1回タップしただけなら、ふつうに空白が入ります。

ウォームアップなし

tap

1回目のタップで録音を始め、話し終えたらもう1回タップして送信します。キーを押し続ける必要はありません。録音中のフッターは● REC · tap to sendです。

最初のタップが録音を始めるのは入力欄が空のときだけなので、文章を書いている途中の空白は普通に入力できます。2回目のタップは、入力欄の中身にかかわらず録音を止めます。

送信の扱いも違います。tapモードは、文字起こしが3単語以上なら自動で送信します。短い文字起こしは入力欄に入るだけで送信されないので、誤タップで1語だけ送られることはありません。holdモードは既定では入力欄に入れてEnterを待ち、設定で"autoSubmit": trueにすると、キーを離した時点で同じ3単語の条件で送信します。

日本語・中国語・タイ語のようにスペースで区切らない言語でも、単語単位で数えます。つまり日本語の文字起こしも、tapモードとautoSubmitを有効にしたholdモードで自動送信の対象です。

録音は、無音が15秒続くか合計2分に達すると自動で止まります。

録音をやめたいときはEscかCtrl+C

話している途中で言い直したくなったら、EscかCtrl+Cで録音を取り消せます。マイクを止め、文字起こしを捨てて、入力欄を録音前の状態に戻します。

文字起こしの処理中でも同じように取り消せます。処理中に自分で編集したり送信したプロンプトは、そのまま残ります。取り消しの押下では、EscはClaudeの応答を中断せず、Ctrl+Cも入力欄のクリアや終了のための2回押しには数えられません。

使えない環境と使える環境

条件はアカウントとマイクの2点です。

  • Claude.aiアカウント: Claude.aiアカウントで認証しているときだけ文字起こしが使えます。AnthropicのAPIキー、Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundryで構成している場合は使えません
  • WSLg(WSL利用時): Microsoft StoreからインストールしたWSL2にはWSLgが同梱されます。WSLgが無い場合は、ネイティブWindows側でClaude Codeを実行します

使えない環境は、Claude Code on the webを含め、どれもマイクと実行場所が離れています。VS Code Remoteでは、マイクはローカル、拡張機能はリモートホストで動くためです。

くらべる

どこで動くか

マイクのある端末で直接動く

使える

  • ターミナルのCLI(macOS / Linux / Windows)
  • ローカルのVS Code拡張
  • WSLgのあるWSL2
マイクが別の場所にある

使えない

  • Claude Code on the web(クラウドセッション)
  • SSHセッション
  • VS Code Remote(SSH / Dev Containers / Codespaces)
  • WSLgの無いWSL1
Linuxでの録音手段

macOS・Linux・Windowsでは組み込みのネイティブモジュールで録音します。Linuxでネイティブモジュールを読み込めないときは、ALSA utilsのarecordかSoXのrecにフォールバックします。どちらも無ければ、/voiceの実行時にパッケージマネージャー向けのインストールコマンドが表示されます。

設定ファイルに固定する

/voiceで切り替えた状態はセッションをまたいで保持されます。初期状態を明示したいときは、ユーザー設定ファイルにvoiceオブジェクトを書きます。/voiceを実行すると、Claude Codeがこのオブジェクトを書き込みます。

{
  "voice": {
    "enabled": true,
    "mode": "tap"
  }
}

voice.modeにはholdかtapを指定します。旧形式の単一ブール値voiceEnabledはv2.1.92でvoiceオブジェクトに置き換わりました。今も読み込まれますが、両方を書いた場合はvoice.enabledが優先されます。

有効化してから最初の3セッションは、入力欄が空のとき、フッターにhold space to speakのヒントが出ます。ヒントの文言はholdでもtapでも同じで、現在のvoice:pushToTalkの割り当てに合わせて変わります。カスタムステータスラインを設定している場合は表示されません。

録音キーを変える

録音キーはChatコンテキストのvoice:pushToTalkアクションで、既定はSpaceです。holdとtapは同じ割り当てを共有します。~/.claude/keybindings.jsonで変更します。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "meta+k": "voice:pushToTalk",
        "space": null
      }
    }
  ]
}

voice:pushToTalkは1つのキーしか持てません。別のキーを割り当てるとSpaceの割り当ては置き換わるので、"space": nullの行は省いても動作は変わりません。tapモードにはウォームアップがないため、たいていのキーが使えます。

Caps Lockのように、ターミナルアプリへ届かないキーは割り当てられず、割り当てようとするとエラーになります。キーバインド全般の書式はClaude Codeの設定ファイル完全ガイドでも扱っています。

Spaceでの録音が始まるのは、そのキーが入力欄への文字入力になる場面だけです。トランスクリプトビューではSpaceがページ送りになり、vimモードのINSERT以外ではコマンドです。meta+kのような修飾キーの組み合わせは文字を入力しないので、こうした場面からも録音を始められます。

バックグラウンドセッションへ声で指示する

エージェントビューでは、ディスパッチ入力欄かpeekパネルの返信欄にフォーカスがあるとき、録音キーの長押しまたはタップで音声入力できます。フォアグラウンドのセッションだけでなく、バックグラウンドで動く別セッションにも声で返信できます。

/voice自体はスラッシュコマンドの一種です。コマンド全体の一覧はClaude Codeのスラッシュコマンド一覧にあります。

症状別のトラブルシューティング

メッセージの文言ごとに、原因と直し方を切り分けられます。

表示原因直し方
Voice mode requires a Claude.ai account原因APIキーかサードパーティのプロバイダーで認証している直し方/loginでClaude.aiアカウントにサインインする
Voice mode is disabled by your organization's policy原因組織の管理者のポリシーで無効化されている直し方管理者に利用可否を確認する
Microphone access is denied原因ターミナルにマイク権限が無い直し方OSの設定でターミナルを許可し、/voiceを再実行する
No audio detected from microphone原因録音は始まったが無音だった直し方既定の入力デバイスと入力レベルを確認する
Voice connection failed原因録音が文字起こしサービスに届かなかった直し方ネットワークを確認して再試行する
No speech detected原因音声は届いたが単語を認識できなかった直し方マイクに近づけ、languageが話す言語と合っているか確認する

マイクの許可は、macOSなら「システム設定 > プライバシーとセキュリティ > マイク」で出します。Windowsなら「設定 > プライバシーとセキュリティ > マイク」で、デスクトップアプリのマイクアクセスをオンにします。

No audio detected from microphoneが出たら、入力デバイスを選び直します。Windowsは「設定 > システム > サウンド > 入力」、macOSは「システム設定 > サウンド > 入力」です。v2.1.200より前は、無音のマイクでもVoice connection failedと出て、ネットワークの問題に見えることがありました。

Voice stream error: WebSocket upgrade rejected with HTTP <status>は、サーバーが接続を拒否したときの表示です。ステータスが400番台なら、サインインが古くなっているか、プロキシやボット対策サービスが文字起こしサービスの代わりに応答していることが多いです。/loginでサインインし直し、VPNやプロキシの有無を確認します。400番台以外では、録音中に拒否が届いた場合に1回だけ再試行します。

v2.1.229からv2.1.231のネイティブビルドでは、このメッセージが出ませんでした。録音は続き、holdモードのフッターはlistening…のままで、録音を止めてからVoice connection failedと出ていました。

Voice input is failing repeatedly and has been pausedは、10秒以内に3回失敗したときに出ます。最初の失敗から10秒たつまで、音声入力は一時停止します。ヘッドレスサーバーや、音声を通さないリモートシェルで起きやすい症状です。v2.1.202より前は、起動時の失敗だけが数えられていました。

LinuxとWSLで出るメッセージ

Linuxでネイティブモジュールが読み込めず、代わりの録音手段も無いと、Voice mode requires SoX for audio recordingと出ます。メッセージ内のコマンド(例: sudo apt-get install sox)でSoXを入れます。

SoXは入っているのにマイクが開けないと、次のメッセージが出ます。ヘッドレスサーバーやコンテナが典型です。

Voice mode requires a microphone, but SoX could not open an audio capture device

v2.1.195より前は、SoXが入っていてもインストールを促されていました。

WSLではVoice mode could not find a working audio recorder in WSLが出ることがあります。WSLgは音声をALSAデバイスでなくPulseAudio経由で扱います。そのためsudo apt install sox libsox-fmt-pulseで、PulseAudio用のバックエンドを入れます。soxだけだとALSA用のバックエンドが入りますが、WSLには/dev/sndが無いので録音できません。

holdで何も起きないときの見分け方

holdモードでSpaceを押し続けたとき、入力欄を見て切り分けます。

  • 空白がどんどん増える: 音声入力がオフの可能性が高いです。/voice holdで有効化します
  • 1〜2個の空白が入って止まる: 音声入力はオンですが、ホールドの検出が働いていません。OSでキーリピートが無効だと検出できないので、/voice tapに切り替えます

tapモードでSpaceが空白を入力するだけのときは、入力欄が空でないか、tapモードになっていない可能性があります。入力欄を空にするか、/voice tapを実行します。

macOSの設定にターミナルが出てこないとき

マイクの一覧にターミナルが無いと、許可するスイッチがありません。

手順

一覧に無いターミナルを再許可する手順

  1. 1

    ターミナルのマイク権限をリセットする

    tccutil reset Microphone <bundle-id>を実行します。バンドルIDは、標準のターミナルならcom.apple.Terminal、iTerm2ならcom.googlecode.iterm2です。ほかのターミナルはosascript -e 'id of app "AppName"'で調べます。

    バンドルIDを省くと、Zoomなど他のアプリのマイクアクセスもすべて取り消されます。通話中には実行しないでください。

  2. 2

    ターミナルを終了して開き直す

    実行中のプロセスには、macOSは許可プロンプトを出し直しません。ウィンドウを閉じるだけでなく、Cmd+Qで終了してから開きます。

  3. 3

    /voiceを実行する

    Claude Codeを起動して/voiceを実行すると、macOSがマイクへのアクセスを尋ねます。許可すれば完了です。

よくある質問

/voiceと画面共有中の音声モードは同じ機能ですか

別の機能です。/voiceはClaude CodeのCLIでテキストの代わりに音声を入力する機能で、Claude.aiアプリの音声モード + 画面共有とは対応環境も用途も異なります。画面共有を伴う音声モードはClaude音声モードと画面共有の使い方にあります。

この記事を共有:XはてブLinkedIn