macOSで「どこでも音声入力」できるSpeach-to-Textユーティリティを作った
作ったもの
STTInputというmacOS用のツールを作りました!
⌘⌘⌘(Cmdキー3回)を押すだけで、どのアプリでも音声でテキスト入力ができるようになります。OpenAIのWhisper APIを使っているので、認識精度もかなり良いです。もちろんAPIキーはご自身ので。
主要機能
- ⌘⌘⌘(Cmdキー3回): どこからでも録音開始
- ⌘⌘(Cmdキー2回): 録音停止
- コンテキストに応じた視覚フィードバック
- あらゆるテキストインプットに対してカーソル位置への自動テキスト挿入(Slack、ブラウザ、Terminal)
(GIFでは伝わらないですが喋って入力しています)
なぜ作ったのか
Agentic AIとやりとりするためにプロンプトを書く,つまり普通の文章を書く時間がこれまで以上に増えていますよね
もちろんChatGPTやGemini自体を使う時は音声入力してるんですけど,その性能の良さに気づいてからは何についても毎回キーボードでポチポチ打つのがだんだん面倒になってきて、「これ喋って入力できたら楽なのに...」って思うようになったんです。
理想は、
- 今作業してるアプリから離れずに使える
- どのアプリでも使える
- 普段は全く見えない
- 使いたい時に確実に起動する
という感じです。要するに「音声入力も普通のタイピングと同じくらい自然に使いたい」って思いでした。
開発プロセスと重要な判断
私はSwift書いたことないので,全てClaude Codeが書きました
開発の流れ
最初、ChatGPTと「こんなツール欲しいんだけど...」って壁打ちから始めました。
アイデアがまとまったところで、ChatGPTに要件をちゃんとしたマークダウンでまとめてもらって、それをClaude Codeに渡してコードを書いてもらう、という流れで進めました。
「ChatGPTでアイデア練り → 要件整理 → Claude Codeで実装」という役割分担、結構良かったです。
開発で工夫したポイント
キーボードショートカットにした理由
最初は「マイクボタンをクリック」する方式を考えてたんですが、これだと
- ボタンが表示されない時がある(デバウンス処理のせい)
- クリックするとカーソル位置がずれる
という問題がありました。
そこで**⌘⌘⌘(Cmdキー3回)**で録音開始する方式に変更。これで100%確実に起動するし、カーソル位置も変わりません。
邪魔にならないUI
普段は完全に見えないけど、必要な時だけちゃんと表示される3段階のインジケーターを作りました:
- 待機中: 「⌘x3 to Record」って薄く表示
- 録音中: 赤いアニメーションで「聞いてるよ」感を演出
- 処理中: 青いアニメーションで「変換してるよ」感を演出
技術的な話
アーキテクチャ
Swiftでモジュラー構成にしました:
- InputMonitorKit: キーボード監視
- OverlayUI: 画面表示
- AudioCaptureKit: 音声録音
- WhisperClient: OpenAI API連携
- TextInjector: テキスト挿入
(とAIが書いてますが私は正直構成については詳しくありません)
使ってみての感想
便利〜
正直個人利用なので、このままでもいいかなと思うけれども、 もし追加で開発をするのであれば、 Geminiとか他のエージェントAIに対してのアダプターを作成するとかというリファクターが考えられるかなと思います。あとリファクタリングですね
実装期間
Swiftを使ったことはなかったけど、それでも全部で4時間くらいで、基本的にはClaude Codeと一緒にVibe codingをする形で、使えるところまでこぎつけたっていう感じです.このブログもほぼAIに書いてもらっています
よかったらいいねと⭐️お待ちしています!
Discussion