🎤

macOSで「どこでも音声入力」できるSpeach-to-Textユーティリティを作った

に公開

作ったもの

STTInputというmacOS用のツールを作りました!

https://github.com/YutaFujii0/STTInput

⌘⌘⌘(Cmdキー3回)を押すだけで、どのアプリでも音声でテキスト入力ができるようになります。OpenAIのWhisper APIを使っているので、認識精度もかなり良いです。もちろんAPIキーはご自身ので。

主要機能

  • ⌘⌘⌘(Cmdキー3回): どこからでも録音開始
  • ⌘⌘(Cmdキー2回): 録音停止
  • コンテキストに応じた視覚フィードバック
  • あらゆるテキストインプットに対してカーソル位置への自動テキスト挿入(Slack、ブラウザ、Terminal)

(GIFでは伝わらないですが喋って入力しています)

なぜ作ったのか

世はSoftware 3.0時代

Agentic AIとやりとりするためにプロンプトを書く,つまり普通の文章を書く時間がこれまで以上に増えていますよね

もちろんChatGPTやGemini自体を使う時は音声入力してるんですけど,その性能の良さに気づいてからは何についても毎回キーボードでポチポチ打つのがだんだん面倒になってきて、「これ喋って入力できたら楽なのに...」って思うようになったんです。

理想は、

  • 今作業してるアプリから離れずに使える
  • どのアプリでも使える
  • 普段は全く見えない
  • 使いたい時に確実に起動する

という感じです。要するに「音声入力も普通のタイピングと同じくらい自然に使いたい」って思いでした。

開発プロセスと重要な判断

私はSwift書いたことないので,全てClaude Codeが書きました

開発の流れ

最初、ChatGPTと「こんなツール欲しいんだけど...」って壁打ちから始めました。

アイデアがまとまったところで、ChatGPTに要件をちゃんとしたマークダウンでまとめてもらって、それをClaude Codeに渡してコードを書いてもらう、という流れで進めました。

ChatGPTとの会話履歴

「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に書いてもらっています


よかったらいいねと⭐️お待ちしています!

https://github.com/YutaFujii0/STTInput

Discussion