この記事のポイント(30秒で要点)
- Macの
sayコマンドをWindowsのPowerShellで再現 - 追加ソフトなしで音声合成(.NET Speech API)を実現可能
- バッチ化で「say」風操作も可能。通知・自動処理に応用できる
- eSpeak NG / Azure Speechで高音質音声にも対応
🎯 導入(背景と目的)
Macのターミナルで say "Hello" と入力すると音声が流れる。
このシンプルなコマンドを、Windowsでも使いたい――そう思ったことはありませんか?
Windowsには「say」コマンドが標準で存在しませんが、PowerShellや外部ツールを使えば同等の音声読み上げ機能を実現できます。
この記事では、3つの方法を順に紹介します。
- PowerShellの標準機能を使う
- バッチファイルで
say風コマンドを作る - 外部ツールで高品質音声を利用する
FAQ(よくある質問)
Q1. 日本語音声が出ない。
設定 → 時刻と言語 → 音声認識 → 音声パック から「日本語音声」を追加してください。PowerShell側では-v指定は不要です。
Q2. 音声をファイルとして保存したい。$synth.SetOutputToWaveFile("output.wav")を追加すると、音声をWAV形式で出力できます。
Q3. Azure Speech CLIとの違いは?
PowerShell版はローカル合成(無料・即時)。Azure版はクラウド合成で高品質ですが、APIキー登録が必要です。
Q4. バッチファイルのパス指定がうまくいかない。
バックスラッシュ\ではなくダブルクォートで囲むか、相対パスで指定します。
Q5. 商用利用は可能?
Windows標準音声は個人利用前提です。商用利用する場合は、Azure SpeechやOpenAI TTSなど別音声の使用を推奨します。
⚙️ 準備・前提
- Windows 10 / 11
- PowerShell 5.1以上(標準搭載)
- .NET Framework 4.0以上
- インターネット接続(クラウドTTSを使う場合)
Windowsには .NET の System.Speech.Synthesis クラスが含まれており、
追加ソフトなしでテキスト読み上げが可能です。
🧩 手順・本編
① PowerShellで「say」相当を実現する
PowerShellで以下のスクリプトを作成し、speak.ps1 として保存します。
[CmdletBinding()]
param(
[Parameter(Position = 0, Mandatory = $true)]
[String] $text
)
Add-Type -AssemblyName System.Speech
$synth = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$synth.Speak($text)
次に以下を実行します。
powershell -ExecutionPolicy Bypass -File .\speak.ps1 "こんにちは、世界"
Macの say "こんにちは" とほぼ同じ感覚で動作します。
② バッチファイルで「say」風コマンドを作る
コマンドプロンプトでも使えるように、saywin.bat を作成します。
@echo off
set text=%*
powershell -Command "Add-Type -AssemblyName System.Speech; $s=New-Object System.Speech.Synthesis.SpeechSynthesizer; $s.Speak('%text%')"
保存後、以下のように入力します。
saywin こんにちは Windows
これでMacの「say」風操作が可能になります。
③ 外部ツールを使う(高品質音声)
より自然な音声を使いたい場合は、外部TTS(Text To Speech)ツールも便利です。
| ツール名 | 特徴 |
|---|---|
| eSpeak NG | 軽量で多言語対応、オープンソース |
| Azure Speech CLI | 高品質クラウド音声(要APIキー) |
| winsay / ptts | シンプルなWindows版sayツール(GitHub配布) |
例:eSpeak NGで日本語を読む場合
espeak-ng -v ja "おはようございます"
Azure Speech CLIを使う場合:
spx synthesize --text "おはようございます" --voice ja-JP-NanamiNeural --file output.wav
🔊 結果・サンプル
| 方法 | 音質 | 日本語対応 | 特徴 |
|---|---|---|---|
| PowerShell | 標準音声 | △ | 追加ソフト不要・即実行 |
| バッチ版 | 標準音声 | △ | Mac風操作感 |
| eSpeak NG | 合成音 | ○ | 軽量・高速 |
| Azure Speech | 高品質 | ◎ | クラウド音声・自然な発話 |
💡 考察・活用
通知や自動監視にも応用できます。
findstr /i "ERROR" logfile.txt > errors.txt
if exist errors.txt (
call saywin "エラーが発生しました"
)
PythonやC#から呼び出せば、
「しゃべる自動化スクリプト」としても使えます。
🧭 まとめ・次の一歩
Windowsでも、少しのスクリプトでMacの「say」体験を再現可能です。
- PowerShellで音声合成を実装
- バッチでコマンド化
- eSpeakやAzureで高音質化
まずはPowerShell版を試して、音声通知や自動処理に組み込んでみましょう。
❓ FAQ
Q:日本語音声が出ません。
A:設定 → 時刻と言語 → 音声認識 から「日本語音声パック」を追加してください。
Q:音声をファイル保存したい。
A:$synth.SetOutputToWaveFile("output.wav") を追加すると、WAV形式で出力できます。
Q:Azure Speech CLIは無料ですか?
A:月5000文字まで無料利用枠があります(2025年10月時点)。



