Google Sheetsに記載されたテキストを Gemini TTS API で自然な音声ファイル(WAV)に自動変換するPythonツールです。
Google Sheets → Python Script → Gemini TTS API → WAV Files
(テキスト) (自動処理) (音声合成) (音声出力)
| 項目 | 内容 |
|---|---|
| TTSモデル | gemini-2.5-flash-preview-tts |
| ボイス | Algieba(Smooth) |
| 出力形式 | WAV(24kHz / 16bit / モノラル) |
| 言語 | 日本語 |
- Python 3.10 以上
- uv
- Google Cloud CLI (
gcloud) - Google アカウント
- Gemini API キー
git clone https://github.com/local-min/Spreadsheet-TTS.git
cd Spreadsheet-TTSuv sync- Google AI Studio にアクセス
- 「APIキーを作成」をクリック
- 表示されたAPIキーをコピーして控えておく
- Google Cloud Console にアクセス
- 上部の「プロジェクトを選択」で、手順3で Gemini API キーを作成した際に自動生成されたプロジェクト(
gen-lang-client-*という名前)を選択- 見つからない場合は「新しいプロジェクト」を作成しても可
- 左メニュー「APIとサービス」→「ライブラリ」
- 「Google Sheets API」を検索 → 有効にする
- ターミナルで ADC(Application Default Credentials)認証を実行
# Sheets APIスコープ付きでログイン(ブラウザが開きます)
gcloud auth application-default login \
--scopes="openid,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/spreadsheets.readonly"
# クォータプロジェクトの設定(API利用枠の紐付け)
gcloud auth application-default set-quota-project YOUR_PROJECT_ID
YOUR_PROJECT_IDは手順4-2で選択(または作成)したプロジェクトのIDに置き換えてください。Google Sheets API が有効になっているプロジェクトを指定する必要があります。プロジェクトIDは Google Cloud Console のダッシュボード上部で確認できます。
クォータプロジェクトとは: ADC(ユーザー認証)で API を呼び出す際、どの GCP プロジェクトの API 利用枠を使うかを指定するものです。手順3で Gemini API キーを作成すると、Google AI Studio が
gen-lang-client-*という名前の GCP プロジェクトを自動作成します。このプロジェクトIDをクォータプロジェクトとして指定できます。
注意: 別のプロジェクトで
gcloud auth application-default loginを再実行すると、ここで設定したスコープとクォータプロジェクトが上書きされます。PermissionErrorが発生した場合は、上記2つのコマンドを再実行してください。
補足: サービスアカウントキーを使う場合は、キーファイルのパスを
config.yamlのauth.service_account_keyに設定してください。ADC より優先されます。
cp .env.example .env.env を編集して、Gemini API キーとスプレッドシートIDを設定します。
GEMINI_API_KEY=取得したAPIキー
SPREADSHEET_ID=あなたのスプレッドシートID
スプレッドシートIDの確認方法: スプレッドシートのURL
https://docs.google.com/spreadsheets/d/【ここがID】/edit
A列にテキストを入力します(1行目はヘッダーとして除外されます)。
| A | |
|---|---|
| 1 | テキスト(ヘッダー) |
| 2 | こんにちは。今日の講義を始めます。 |
| 3 | 次のスライドをご覧ください。 |
# テスト実行(API呼び出しなし)
uv run python main.py --dry-run
# 本番実行
uv run python main.py
# ボイスを変更して実行
uv run python main.py --voice Puck
# 出力先を変更
uv run python main.py --output ./my_audio
# 行範囲を指定(2行目〜5行目のみ)
uv run python main.py --rows 2-5
# 設定ファイルを指定
uv run python main.py --config my_config.yaml./output/ フォルダにWAVファイルが生成されます。
# Google Sheets設定
google_sheets:
spreadsheet_id: "" # .env の SPREADSHEET_ID が優先される
sheet_name: "" # シート名(空=最初のシート)
text_column: "A" # テキストが入っている列
start_row: 2 # 開始行(2=ヘッダー除外)
end_row: null # 終了行(null=最終行まで)
# TTS設定
tts:
voice_name: "Algieba" # ボイス名
style_prompt: "Speak as a calm, professional corporate trainer. Use a measured pace with clear articulation. Maintain a warm but authoritative tone. Pause slightly before key concepts."
# 出力設定
output:
directory: "./output"
filename_prefix: ""
filename_max_chars: 20
# 認証
auth:
service_account_key: "" # 空=ADCを使用 / パス指定=サービスアカウントキー
gemini_api_key_env: "GEMINI_API_KEY"| ボイス名 | 特徴 | ボイス名 | 特徴 |
|---|---|---|---|
| Zephyr | Bright | Puck | Upbeat |
| Charon | Informative | Kore | Firm |
| Fenrir | Excitable | Leda | Youthful |
| Orus | Firm | Aoede | Breezy |
| Callirrhoe | Easy-going | Autonoe | Bright |
| Enceladus | Breathy | Iapetus | Clear |
| Umbriel | Easy-going | Algieba | Smooth |
| Despina | Smooth | Erinome | Clear |
| Algenib | Gravelly | Rasalgethi | Informative |
| Laomedeia | Upbeat | Achernar | Soft |
| Alnilam | Firm | Schedar | Even |
| Gacrux | Mature | Pulcherrima | Forward |
| Achird | Friendly | Zubenelgenubi | Casual |
| Vindemiatrix | Gentle | Sadachbia | Lively |
| Sadaltager | Knowledgeable | Sulafat | Warm |
# 落ち着いた企業研修講師
style_prompt: "Speak as a calm, professional corporate trainer. Use a measured pace with clear articulation. Maintain a warm but authoritative tone. Pause slightly before key concepts."
# ニュースキャスター風
style_prompt: "はきはきとしたニュースキャスターのように、明瞭に読んでください。"
# 優しいナレーション
style_prompt: "穏やかで優しいトーンで、ゆっくりと語りかけるように読んでください。"| エラー | 原因と対処 |
|---|---|
環境変数 GEMINI_API_KEY が設定されていません |
.env ファイルにAPIキーが正しく記載されていない |
スプレッドシートIDが設定されていません |
.env ファイルに SPREADSHEET_ID を設定する |
Could not automatically determine credentials |
gcloud auth application-default login を実行する |
PermissionError / スプレッドシートへのアクセスが拒否されました |
ADC認証のスコープまたはクォータプロジェクトが不正。手順4の2つのコマンドを再実行する |
Requested entity was not found |
スプレッドシートIDが間違っている or 自分のアカウントにアクセス権がない |
APIレート制限エラー |
自動リトライ(最大3回)される。頻発する場合は間隔を空ける |