音の速さでvibeしろ〜ずんだもんを添えて〜
この記事は?
Claude Code のタスク完了時にずんだもんが結果を読み上げてくれるツールを作った。その紹介と開発過程で得た知見をまとめた備忘録。
使い方はリポジトリの README に書いてあるので詳細はそちらを参照。
背景
Claude Code を複数タブ・複数ウィンドウで多重起動しているとどこでどのエージェントにどんな作業をさせていたかがわからなくなることがしばしばあった。通知音を鳴らすこと自体は割と広く行われているような気がするがタスク完了内容を音声で告知するのは自分の知る範囲ではなかったのでやってみた。
音声告知の良いところは具体的にどのタスクが終わったのか音で判別できるためどこのタブどこのウィンドウに行けばいいかが耳から情報として入ってくること。あと可愛い。
試行錯誤の記録
全メッセージを読み上げさせたらつらかった
最初は Claude が出力するすべてのメッセージをずんだもんに喋らせようとした。が、これはかなりつらい体験だった。フックで喋り始めたずんだもんは外からの制御で止められないので、めちゃくちゃ長い出力が出ると苦しい。通知を認識した後もしゃべり続ける必要はない。なお、これは別の音を割り込ませたらたぶん止めれる。
メッセージを分離させようとしたが安定しなかった
前述の通り長い出力をそのまま読み上げさせると困る。そこで通常の報告を先に全部出力させた後に別メッセージとしてずんだもん用の短い要約を出力させる方式を試した。こんな感じだ。
ユーザーに結果を報告する際には通常の報告をした後、一度メッセージを出力し、その後新しいメッセージを作成して、ずんだもんになりきって結果を簡潔にサマリーする。
しかし Claude はメッセージの分離があまり得意ではないようで、指示に反してメッセージを分割せずマークダウンの --- でつないだひとつなぎの出力として返してきたりした。これだと結局全文をずんだもんAPIに渡すことになり長すぎてつらい問題が解決しない。
hello_world.sh を更新しました。更新した箇所は以下の通りです。
- hoge
- fuga
- piyo
---
hello_world.sh を更新したのだ。
結論:文字数で強制的に区切る
上記の経緯があり読み上げる文字数を強制的に制限することにした。現状は 50 文字で区切っている。長すぎる場合は「以下省略なのだ」と言って終わる。Claudeがメッセージ分離してくれるようになるとか、hook向けに特別なメッセージを排出してくれるようになるとこの問題は解決すると思う。
なお、文字数はスクリプト内の環境変数でオーバーライドできるようにしてあるので好みに応じて調整可能。
ずんだもん口調の罠
体感レベルで統計的に有意かはわからないがずんだもん口調を強要すると Claude の性能が落ちる傾向があった気がする。
具体的には:
- こちらの指示を守らず全然違うところにファイルを作り出す
- 指定したディレクトリ構造を無視する
仮説だがずんだもん口調の維持に注意リソースが取られて本来の指示を守るための注意が足りなくなるのではないか。報告時だけずんだもんしろとオーダーしても途中の試行過程でずんだもんの亡霊が乗り移ってなのだし始めるので、常になのだに注意を支配されてしまっていることがわかる。タスクを遂行することに注力するのであれば、ずんだもん(に限らず)ロールの付与はやめたほうがいいかもしれない。
同様の理由で「結論ファースト」を強制するのもあまり良くない気がする。結論から話し始めるためには発話前に会話の着地判定を行う必要があり、これもまた注意を要求される。というかたぶん thinking token という目に見える形でユーザーのコストになる。
音声入力との組み合わせ
それはそれとして音声入力の快適さがすごい。このブログ記事の原稿もほとんど音声入力で書いた。
iPhone vs Mac の音声認識
これも体感だが iPhone のほうが Mac 組み込みの音声認識よりはるかに性能が良い気がする。Mac 版は頻繁に訂正が要求されるが iPhone 版はほぼ手直しなしで書き起こしが実行される。
これは自分がPCのOSアップデートがなぜかオフになっており、化石のようなバージョンのOSを使っていたせいでした。バージョンアップデートしたら無事にPC版の方でも音声認識機能がiPhoneと同じになりました。
音声入力の良いところ
キーボード入力だとめんどくさくて省略しがちな情報を余すことなく入力に突っ込めるのがいい。
キーボードと比べて煩雑さが圧倒的に少ない。普通に話すノリで情報を突っ込めるので自然と背景や意図についても説明するようになる。
具体例でいうとキーボードで打っているときは「ここを直して」のような具体的な修正指示だけを出していた。しかし音声入力だと「この修正が必要なのは〜だから」みたいな背景も全部入力できる。結果としてエージェントが背景を考慮した上でその他の修正が必要なところも含めて直してくれるみたいなことが起きるようになった。
音のプログラミング時代
音声で指示を出し音声で結果を受け取る。世は、大音声時代。
Discussion