うちの犬は世界で一番かわいい。異論は認めない。

散歩中にiPhoneを片手に持って、GPTに音声で話しかけるのが最近の習慣になっている。「うちの犬って世界で一番かわいいよな。だからたまにエンジェルちゃんって呼ぶけど、お前はどう思う?」みたいな。キーボードを打つより速いし、歩きながらでも思ったことをそのまま流せる。

ただ、困ったことがあった。

ChatGPT以外のAIだと、音声認識の精度がガクッと落ちる。

ClaudeやGeminiのアプリに切り替えると、同じように話しかけても文字起こしが微妙にズレる。同じ犬の話なのに、なんか違う感じになって帰ってくる。


なぜChatGPTだけ精度が高いのか

最初は「ChatGPTはOpenAIの Whisper 系の音声入力が強いから」だと思っていた。

Whisperは単純に音を文字に変換するだけでなく、文脈を読んで書き起こしてくれる。だから「エンジェルちゃん」みたいな固有名詞っぽい表現も、わりとちゃんと拾ってくれる。

ただ調べてみると、話はもう少し複雑だった。ChatGPTには Advanced Voice Mode もあるが、私は音声会話ではなく、テキスト入力として使いたい。

つまり私の用途は「高精度な音声入力を、どのAIアプリでも使いたい」だけだった。なら自分で作ればいい。

同じ発言でもアプリによって精度がこれだけ違う

ClaudeでもGeminiでも、Whisper精度でポエムを届けたかった。


WhisperKeyboard とは

WhisperKeyboard は、iOSのカスタムキーボードとして動くアプリだ。

キーボードにこんな感じで表示される

iOSには「Keyboard Extension」という仕組みがあって、サードパーティ製のキーボードをシステムに追加できる。WhisperKeyboardはそれとして実装している。だからどのアプリでも使える。Claudeのアプリを開いていても、Geminiを開いていても、キーボードをWhisperKeyboardに切り替えるだけでWhisper精度の音声入力ができる。

音声データはすべてデバイス内で処理する。クラウドには何も送らない。誰かに聞かれたくない犬への愛の言葉も、安心して話しかけられる。

使い方はシンプルだ。

  1. アプリをインストールして設定からキーボードを追加(フルアクセスを許可)
  2. 任意のアプリでWhisperKeyboardに切り替える
  3. 初回はモデルが自動ダウンロードされる(数分、約75MB)
  4. マイクボタンを長押しして話す → 離すとテキストに変換されてカーソル位置に挿入

使い方


作ってみてぶつかった壁

Xcodeをまともに触るのはこれが初めてだった。iOSアプリ作るのも初めてで、GPTに愚痴りながら進めた。

壁① Keyboard Extensionはマイクにアクセスできない

iOSのセキュリティ制約で、キーボード拡張からは直接マイクが使えない。なので「録音ボタンを押したらメインアプリをDeep Linkで起動して、メインアプリ側で録音する」という構成にした。キーボードが起動係、メインアプリが録音係、という分業制だ。これは既存アプリを参考にした。

壁② 変換結果をキーボード側に戻せない

メインアプリで変換したテキストをキーボード拡張に渡す方法が必要だった。App Groupsという仕組みを使って、アプリ間で共有できるストレージ経由で受け渡している。念のためクリップボードにもコピーするようにしたので、うまく動かなくても貼り付けで対処できる。

壁①②を乗り越えた構成。キーボードとメインアプリの分業制

壁③ モデル選定のトレードオフ

WhisperのモデルはサイズによってTiny(軽い・速い・精度低め)からLarge(重い・遅い・精度高め)まである。オンデバイスで動かすので、ダウンロードサイズとバッテリーを考えてTinyを採用した。ただ精度はやっぱりクラウドAPIには及ばない。

副産物として、中国語で話しかけたら日本語に自動翻訳されて出てきた。狙っていなかった機能だが、ちょっと面白かった。


開発プロセスの話

個人開発なのに、Claude CodeにSuperpowersというプラグインを入れてTDDで進めた。将来的にApp Storeに出すつもりなので、最初から品質を意識しておこうと思ったからだ。


現状と正直な話

今の状態を正直に言うと、自分ではまだあまり使えていない

変換に数秒かかることがあるし、Tinyモデルの精度は思ったより控えめだった。結局いまも「ChatGPTで音声入力 → テキストをコピー → Claudeのアプリに貼り付け」という面倒なことをやっている。自分が嫌だと思っていたことを、まだやっている。

Tinyモデルの現実。まあ使えるけど、もう一声欲しい

OpenAIのWhisper APIなどクラウドAPIに切り替えれば、大きなモデルをサーバー側で動かせる。速度も精度も今とは別物になるはずだ。ローカル処理のプライバシーメリットは薄れるけど、「どのAIにもWhisper精度で話しかけられる」という最初の動機は、こっちの方が早く達成できそうだと思っている。

プロトタイプとしては悪くない。次はクラウドAPI化して、既存アプリより安く出せたらいいなと思っている。

犬へのポエムを高精度でAIに届ける夢は、まだ道半ば。


画像出典

  • なぜChatGPTだけ精度が高いのか: Pixabay
  • WhisperKeyboard とは: Pixabay
  • 作ってみてぶつかった壁: Pixabay
  • 開発プロセスの話: Pixabay
  • 現状と正直な話: Pixabay

技術スタック: Swift / SwiftUI / UIKit / WhisperKit / AVFoundation / iOS 16.0+