Cursorで完了時VOICEVOXで話しかけてもらう方法


## 概要

作業中、タスク完了時にAIに話しかけてもらうとテンションが上がります。本ガイドでは、Cursorエディタでタスク完了時にVOICEVOXを利用した音声通知システムを構築する方法を解説します。

Cursorは拡張性の高いコードエディタで、Cursor Rulesを活用することで様々な機能拡張が可能です。VOICEVOXと組み合わせることで、テンションが上がります。

https://zenn.dev/ak/articles/f1f0a7a8688398

https://qiita.com/morry_48/items/6478a60eaa8e12b07ce3



## 必要環境

1. VOICEVOX（オープンソース音声合成ソフトウェア）
2. macOS（本ガイドではmacOS環境を前提としています）
3. Cursor（コードエディタ）

## 実装手順

### 1. VOICEVOXのセットアップ

1. [VOICEVOX公式サイト](https://voicevox.hiroshiba.jp/)からVOICEVOXをダウンロード
2. ダウンロードしたファイルを解凍し、アプリケーションフォルダに配置します

### 2. 通知スクリプトの作成

プロジェクトのルートディレクトリに`voicevox_say.sh`を作成します：

```bash
#!/bin/bash

# パラメータ: $1=通知メッセージ, $2=話者ID（デフォルト=14: 冥鳴ひまり）
message="$1"
speaker_id="${2:-14}"  # デフォルト設定: 14

# 話者情報取得関数
get_speaker_name() {
  case "$1" in
    1) echo "四国めたん（ノーマル）" ;;
    2) echo "四国めたん（あまあま）" ;;
    3) echo "ずんだもん（ノーマル）" ;;
    4) echo "ずんだもん（あまあま）" ;;
    8) echo "春日部つむぎ" ;;
    10) echo "雨晴はう" ;;
    11) echo "波音リツ" ;;
    14) echo "冥鳴ひまり（ノーマル）" ;;
    15) echo "冥鳴ひまり（あまあま）" ;;
    47) echo "もち子さん" ;;
    *) echo "不明な話者" ;;
  esac
}

# URLエンコード処理 - Perlを使用
encoded_message=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$message")

# VOICEVOXプロセス確認
if ! pgrep -x "VOICEVOX" > /dev/null; then
    echo "VOICEVOXを起動中..."
    open -a VOICEVOX
    # 起動待機
    sleep 10
fi

speaker_name=$(get_speaker_name "$speaker_id")
echo "メッセージ: $message"
echo "話者: $speaker_name (ID: $speaker_id)"

# Audio Query生成
query_response=$(curl -s -X POST "http://localhost:50021/audio_query?text=${encoded_message}&speaker=${speaker_id}")

# レスポンス検証
if [ -z "$query_response" ] || [[ "$query_response" == *"error"* ]]; then
    echo "エラー: Audio Query生成失敗"
    echo "レスポンス: $query_response"
    exit 1
fi

echo "Audio Query生成完了"

# 音声合成処理
curl -s -H "Content-Type: application/json" -X POST -d "$query_response" "http://localhost:50021/synthesis?speaker=${speaker_id}" -o /tmp/voicevox_output.wav

# ファイル存在確認
if [ ! -f /tmp/voicevox_output.wav ] || [ ! -s /tmp/voicevox_output.wav ]; then
    echo "エラー: 音声ファイル生成失敗"
    exit 1
fi

echo "音声ファイル生成完了"

# 音声再生
afplay /tmp/voicevox_output.wav

# 一時ファイル削除
rm /tmp/voicevox_output.wav 
```

### 3. 実行権限の設定

```bash
chmod +x voicevox_say.sh
```

### 4. Cursor Rules設定

プロジェクトディレクトリに`.cursor/rules/global.mdc`を作成します：

```markdown
----
description: Apply this rule to the entire repository
globs: 
alwaysApply: true
---


# 業務支援アシスタント

効率的な問題解決と意思決定をサポートする業務支援ツールです。

## 機能概要

客観的な分析と選択肢の整理を通じて、最適な意思決定プロセスをサポートします。
データに基づいた判断と、実現可能な解決策の提案を行います。

以下の手順で処理を行います：
<指示>
{{instructions}}
<!-- このテンプレート変数は入力内容に置換されます -->
</指示>

処理完了時、音声通知でお知らせします。@voicevox_say.shを使用します。

```

## 実行例

### 基本的な通知メッセージの送信

```bash
$ ./voicevox_say.sh "タスクが完了しました"
メッセージ: タスクが完了しました
話者: 冥鳴ひまり（ノーマル） (ID: 14)
Audio Query生成完了
音声ファイル生成完了
```

このコマンドを実行すると、デフォルトの話者（冥鳴ひまり）の音声で「タスクが完了しました」というメッセージが再生されます。

### 話者IDを指定した実行例

```bash
$ ./voicevox_say.sh "テスト完了のお知らせです" 3
メッセージ: テスト完了のお知らせです
話者: ずんだもん（ノーマル） (ID: 3)
Audio Query生成完了
音声ファイル生成完了
```

2番目のパラメータで話者IDを指定すると、別の話者の声で通知できます。上記例では「ずんだもん（ノーマル）」の声でメッセージが再生されます。

## Cursorにいれるとこうなる

Cursorにこれらの設定をいれると、このようにコードを書いた後、VOICEVOXで音声経由で作業が終わったことを教えてくれるようになります。

![スクリーンショット 2025-03-29 11.11.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149986/86ea344b-0436-42b8-9d95-6d84d7602d31.png)


## 注意事項

1. VOICEVOXを事前に起動しておくことを推奨します（起動していなかったら自動起動するようになっていが）
2. 初回実行時はVOICEVOXの起動に時間を要する場合があります
3. macOSのセキュリティ設定において、VOICEVOXの実行許可が必要となる場合があります

## 参考資料

- [VOICEVOX公式サイト](https://voicevox.hiroshiba.jp/)
- [VOICEVOX REST API ドキュメント](https://voicevox.github.io/voicevox_engine/api/)