#自作の音声文字起こしツール「OpenSW」を作った話
##Table of Contents
##はじめに
私はもともとプログラミングが好きで、趣味でも仕事でもコードを書いてきました。
しかし最近、ソフトウェア開発のスタイルが大きく変わりつつあると感じています。
GitHub CopilotやClaude Code、Cursor、AntigravityといったAIコーディングツールの台頭により、いわゆる「Agentic Coding」が主流になってきました。
私自身も、AIエージェントと対話しながらソフトウェアを開発する「Vibe Coding」スタイルで開発することが増えています。
この開発スタイルでは、最終的な成果物の品質はプロンプトでいかに要件を伝えられるか、そして出来上がったものにいかに的確なフィードバックを返せるかにかかっています。
特に重要なのが、完成したUIを操作しながら「ここはこう直してほしい」「ここは当初のイメージと違う」といったフィードバックを言葉で伝えることです。
しかし、ブラウザやアプリを操作しているときはそちらにフォーカスが当たっているため、キーボードで入力するのは難しい場面があります。
そこで最近注目されているのが音声入力です。
完成したプロダクトを触りながら、独り言を言うように「ここを直してほしい」「ここが問題だ」と伝えることで、フィードバックがスムーズになるはずです。
##既存ツールの調査
音声入力ツールを探してみると、いくつかの優れたソフトウェアが見つかりました。
###superwhisper
superwhisperは、macOS向けのAI音声入力ツールです。
Whisperを使ったローカル処理、100以上の言語対応、カスタム語彙の登録など、機能が充実しています。
オフラインで動作し、プライバシーにも配慮されています。
###Aqua Voice
Aqua Voiceは、WindowsとmacOSに対応した音声入力ツールです。
「Avalon」という独自の高精度モデルを搭載しており、画面のコンテキストを理解してコード記法や日常テキストを適切に認識できます。
タイピングの5倍速で入力でき、開発者の生産性向上を謳っています。
###Whispering
Whisperingは、オープンソースの音声入力ツールです。
ショートカットキーで録音を開始し、テキストを取得するシンプルな設計になっています。
###既存ツールの課題
これらのツールを調査した結果、以下の課題が見えてきました。
- 有料版のみ: superwhisperやAqua Voiceは有料のサブスクリプションが必要
- ローカルLLM非対応: 文字起こし後のテキスト修正にローカルLLMを使えるツールがない
- プラットフォーム制限: macOS専用のものが多い
私は普段からGPU搭載のWindowsマシンや、Apple Siliconのユニファイドメモリを活かせるmacOSを使っています。
せっかくならこのローカルのマシンパワーを最大限に活かして、音声認識からLLMによるテキスト修正まですべてローカルで完結させたいと考えました。
そこで、これらの既存ツールを参考にしつつ、自分のニーズに合ったオープンソースの音声文字起こしツール「OpenSW」を開発することにしました。
##OpenSWとは
OpenSWは、OpenAI Whisperを利用してローカルで音声認識を行うデスクトップアプリケーションです。
クラウドにデータを送信する必要がなく、プライバシーを気にせず使用できます。
Open-source Speech-to-Text Desktop Application
###主な特徴
- 🎤 ローカル音声認識: Whisperを使ったローカル処理(クラウド不要)
- ⚡ GPUアクセラレーション: WindowsではCUDA、macOSではMetalによる高速推論
- 🤖 LLMによるテキスト修正: Ollamaと連携し、フィラー除去や句読点補正が可能
- ⌨️ グローバルショートカット: どの画面からでも
Ctrl+Alt+Spaceで録音開始/停止 - 📋 自動クリップボードコピー: 文字起こし結果を自動的にクリップボードにコピー
- 🔔 システム通知: 文字起こし完了時に通知
- 📍 システムトレイ常駐: バックグラウンドで動作し、トレイアイコンからアクセス可能
- 🖥️ コンパクト録音モード: 録音中はミニマルなフローティングウィンドウを表示
##デモ動画
実際の使用感は上の動画をご覧ください。
グローバルショートカットで素早く録音を開始し、自動で文字起こしとクリップボードコピーが行われる様子がわかると思います。
##技術スタック
OpenSWの開発には以下の技術を使用しています。
| カテゴリ | 技術 |
|---|---|
| フロントエンド | React 18, TypeScript, Vite |
| バックエンド | Rust, Tauri 2.0 |
| 音声認識 | whisper-rs (whisper.cpp バインディング) |
| オーディオ処理 | cpal, hound, rodio |
| LLM連携 | Ollama API (reqwest経由) |
###なぜTauriを選んだのか
デスクトップアプリを作るにあたり、ElectronとTauriを検討しました。
最終的にTauriを選んだ理由は以下の通りです。
- バイナリサイズが小さい: ElectronはChromiumを同梱するため数百MBになりますが、Tauriはシステムの WebView を利用するため10MB程度に収まります
- Rustでバックエンドを書ける: 音声処理やWhisperとの連携など、パフォーマンスが求められる処理をRustで実装できます
- Tauri 2.0の安定性: 2024年に安定版がリリースされ、プラグインエコシステムも充実してきました
###Whisperについて
whisper.cppは、OpenAIのWhisperモデルをCPU/GPU上で効率的に動作させるためのC/C++実装です。
whisper-rsというRustバインディングを利用することで、Tauriバックエンドから直接Whisperを呼び出せます。
モデルサイズに応じて精度と速度のトレードオフがあります。
| モデル | サイズ | 精度 | 速度 |
|---|---|---|---|
ggml-tiny.bin | 約75 MB | 低 | 最速 |
ggml-base.bin | 約142 MB | 中 | 速い |
ggml-small.bin | 約466 MB | 良 | 普通 |
ggml-medium.bin | 約1.5 GB | 高 | 遅い |
ggml-large-v3-turbo.bin | 約1.6 GB | 高 | 普通 |
ggml-large-v3.bin | 約3 GB | 最高 | 最遅 |
日本語の文字起こしには、精度の観点からggml-medium.bin以上を推奨します。
##Ollama連携によるテキスト修正
音声認識の結果は、どうしてもフィラー(「えー」「あの」など)が含まれたり、句読点が適切でなかったりします。
OpenSWでは、Ollamaと連携することで、LLMを使ってこれらを自動的に修正できます。
設定画面でOllamaのエンドポイントとモデルを指定し、カスタムプロンプトを設定することで、文字起こし結果を整形します。
たとえば「フィラーを除去し、適切な句読点を追加してください」といった指示をプロンプトに設定できます。
##インストール方法
###ビルド済みバイナリ
WindowsとmacOS(Apple Silicon)向けのビルド済みバイナリを提供しています。
| プラットフォーム | ファイル |
|---|---|
| Windows (exe) | OpenSW.exe |
| Windows (msi) | OpenSW_0.1.0_x64_en-US.msi |
| macOS (Apple Silicon) | OpenSW_0.1.0_aarch64.dmg |
###ソースからビルド
# リポジトリをクローン
git clone https://github.com/liebe-magi/OpenSW.git
cd OpenSW
# 依存関係をインストール
bun install
# 開発モードで実行
bun run tauri dev
# 本番用ビルド
bun run tauri build
Whisperモデルは Hugging Face から別途ダウンロードが必要です。
##使い方
- Whisperモデルを選択: 初回起動時に、ダウンロードしたWhisperモデルファイル(
.bin)を選択します - オーディオ入力を設定: ドロップダウンから使用するマイクを選択します
- 録音を開始:
Ctrl+Alt+Spaceを押すか、トレイアイコンをクリックします - 録音を停止: 再度
Ctrl+Alt+Spaceを押します。音声が文字起こしされ、クリップボードにコピーされます
##開発で苦労した点
###CUDAビルドとイテレーション
WindowsでのCUDAビルドには特に苦労しました。
whisper-rsをCUDA対応でビルドする場合、CUDA Toolkitのバージョン管理やリンク設定が複雑で、試行錯誤が必要でした。
さらに厄介なのがビルド時間の長さです。
CUDAを有効にしたビルドは時間がかかるため、ちょっとした修正を確認するだけでも待ち時間が発生します。
デバッグのイテレーションを回すのがかなり大変でした。
###システムトレイの実装
Tauriにはシステムトレイのサポートがありますが、期待通りに動作させるまでに時間がかかりました。
トレイアイコンのクリックイベントや、メニューの表示など、細かい挙動の調整が必要でした。
###グローバルショートカット
どのアプリにフォーカスがあってもCtrl+Alt+Spaceで録音を開始できるようにするグローバルショートカットの実装も、想像以上に手間がかかりました。
OS間での挙動の違いや、ショートカットの競合を避ける工夫が必要でした。
##今後の展望
現在v0.1.0をリリースしていますが、今後以下の機能を追加予定です。
- Linuxサポートの改善
- より多くのLLMプロバイダーへの対応
- 文字起こし履歴の保存・検索機能
- 多言語対応の強化
##まとめ
OpenSWは、ローカルで完結する音声文字起こしツールです。
グローバルショートカットで素早く録音でき、LLMによるテキスト修正も可能なため、日々の作業効率化に役立つと思います。
オープンソースとして公開していますので、ぜひ使ってみてください。
フィードバックやコントリビューションも歓迎しています!
Open-source Speech-to-Text Desktop Application