個人プロジェクトから108言語対応翻訳アプリへ:Traverbaを作った理由

スマートフォン上で完全に動作する翻訳アプリを作った。クラウドなし、APIコールなし、デバイスの外にデータを送信しない。108言語に対応し、音声・カメラ・画面翻訳、そしてBluetoothを使ったオフライングループ会話もできる。

必要なものが見つからなかったことがきっかけで、気づいたら想像以上に大きなプロジェクトになっていた。

問題の本質

私は香港に住んでいる。日常生活では広東語、標準中国語(普通話)、英語を使い、日本語が必要になることもある。パートナーの家族は広東語を話す。仕事は英語で進む。政府の書類は繁体字中国語、近所のレストランのメニューは簡体字中国語か日本語のことが多い。

市場にある翻訳アプリを片っ端から試してみた。

Google Translateはオンラインなら十分使えるが、オフラインになると精度が大きく落ちる。また、広東語を「中国語」の一種として扱っているが、広東語を話す人なら誰でも知っているように、それはポルトガル語をスペイン語と同一視するようなものだ。文字を共有していても、発音も文法も語彙も別物だ。

Pocketalkは約3万5000円もするうえ、翻訳のたびにインターネット接続が必要だ。駅の半分で電波が届かない香港の地下鉄(MTR)では使いものにならない。

Apple Translateはデザインが美しく、デバイス内処理の品質も高いが、対応言語は約20言語のみ。広東語には対応していない。人口の95%が広東語を話す都市で、だ。大手テクノロジー企業が言語をどう優先順位付けしているかが、如実に表れている。

iTranslateはコア機能を年間約7000円の有料プランの後ろに隠している。DeepLに至っては音声入力もカメラ機能もない。

パートナーの家族との食事で、広東語・普通話・英語が会話の中で入り混じるシーンに対応できるアプリはなかった。WhatsAppで届く広東語の音声メッセージを翻訳できるものもなかった。電波の悪い場所でも安定して動くものも、なかった。

だから作り始めた。

最初のバージョンはひどかった

最初のプロトタイプは、単一のASRモデル(sherpa-onnxでデバイス上動作するWhisper)と基本的なNMT翻訳を組み合わせたFlutterアプリだった。対応言語は15言語ほど。音声認識は遅く、翻訳の質は平凡で、UIも醜かった。

ただ、オフラインで動いた。その一点——WiFiのない飛行機の中で広東語の文章を英語に翻訳できた——が、続ける原動力になった。

アーキテクチャという深い穴

オンデバイスAIにコミットすると、深い穴に落ちていく。

ASR(音声認識): 一つのモデルですべての言語をカバーできない。最終的に三つのモデルを搭載した。Parakeet(英語最適化、バンドル済み)、Whisper.cpp(多言語対応、ダウンロード式)、Qwen3-ASR(CJK最適化、ダウンロード式)。アプリはソース言語に応じて最適なモデルに自動でルーティングする。

翻訳: 従来の機械学習モデルは61の主要言語ペアをカバーする。残り47言語(ヨルバ語、アムハラ語、ラオス語、ミャンマー語など)は、ローカルで動作する量子化済みGemma LLMが翻訳を担う。これが言語数を61から108に引き上げた突破口だった。

カメラOCR: 二つのエンジンを使い分ける。高速認識にはML Kit、複雑な文字の精密認識にはPaddleOCR。iOSはAppleがデフォルトでラテン文字モデルしかバンドルしていないため、文字体系ごとのpodを手動で追加する必要があった。失敗が完全に無音で起きるため、デバッグに丸一日かかった。

グループチャット: 最大7台のデバイスをつなぐBluetoothメッシュネットワーク。各スマートフォンが自分のASRと翻訳を処理し、メッセージを全デバイスにブロードキャストする。サーバーは一切介在しない。

メモリ管理: 本当のエンジニアリング課題はここだった。三つのASRモデル、翻訳モデル、LLM、OCRエンジンを同時にRAMに載せることはできない。アプリはメモリバジェットプランナーを持ち、ユーザーの現在の操作に応じてモデルのロードと解放を行う。

数字で見る

  • 開発期間: 最初のコミットからApp Store / Google Play ストアのリリースまで約18ヶ月
  • 言語数: 108(従来ML 61言語 + Gemmaによる AI対応 47言語)
  • ASR対応言語: 30言語(オンデバイス音声認識)
  • OCR対応言語: 92言語(カメラテキスト認識)
  • アプリサイズ: ベース約150MB+ダウンロードモデル
  • 価格: コア機能はすべて無料。プレミアムは月額$1.99または年額$19.99でグループチャット、ファイル文字起こし、会議サマリーが使用可能
  • チーム規模: 1人

うまくいったこと

プライバシーをポリシーではなくアーキテクチャとして設計した。「データを共有しません」はポリシーだ。変更できる。「サーバーが存在しないのでデータがデバイスの外に出ない」はアーキテクチャだ。アプリを作り直さない限り変えられない。ユーザーはこの違いを直感的に理解する。

広東語をファーストクラスの言語として扱った。 多くの翻訳アプリが広東語を「アクセントの違う中国語」として扱う。Traverbaには広東語専用のASRモデルがある。これが香港・広東省のユーザーに強く響いた。彼らは長い間、後回しにされてきた言語話者として扱われることに辟易していたのだ。

無料ティアの充実。 音声翻訳、カメラ翻訳、画面翻訳、テキスト翻訳はすべて無料で無制限。有料プランが適用されるのはグループチャット機能、ファイル文字起こし、会議サマリーのみだ。これは重要な判断だった。翻訳を最も必要としている人たち——移民、不慣れな土地を旅する旅行者、学生——は有料サブスクリプションを払えないことが多いからだ。

オフラインファーストの設計。 すべての機能がインターネットなしで動作する。オフラインは「劣化モード」ではない。オフラインこそが標準モードだ。「オフラインでも使える」という訴求より、強力な価値提案になる。

失敗したこと

ローエンド端末の過小評価。 開発はフラグシップスマートフォンで行っていた。初めてRAM 3GBの端末でテストしたとき、機能の半分がクラッシュした。メモリ管理は最初に設計すべきものだったが、後付けになってしまった。

iOSの審査プロセス。 Traverbaはユーザーをトラッキングしないにもかかわらず、AdMob SDKがApp Tracking Transparency(ATT)の要件を引き起こすとして、Appleに最初の申請を却下された。FlutterでATTを正しいタイミング(アプリ起動後、広告初期化前)でワイヤリングするために、何度も試行錯誤が必要だった。

もっと早くリリースすべきだった。 誰も求めていない機能を磨くことに数ヶ月を費やしてからリリースした。リリース後に届いたフィードバックは、予想していたものとまったく違うことについてだった。早くリリースして、聞いて、改善する。誰もがそう言う。それでも自分はその罠に落ちた。

市場の機会

翻訳市場は400億ドル以上の規模を持ち、成長を続けている。しかし市場は二つの極端に支配されている。

  1. 無料のクラウドアプリ(Google Translate、Apple Translate)——大多数のユーザーには十分だが、プライバシーとオフライン信頼性を犠牲にする
  2. 高価なハードウェア端末(Pocketalk $323、Timekettle $299、Vasco $350以上)——インターネットが必要で、スマートフォンがすでに解決できる問題を解くためだけに存在する

その中間の空白——完全なオンデバイス処理で実際に動く無料・手頃なアプリ——は驚くほど空いている。DeepLはテキストのみ。iTranslateはコア機能を有料化している。ほとんどのAI翻訳ツールはクラウド専用だ。

オンデバイスAIは品質の閾値を超えた。モデルは十分な性能を持ち、スマートフォンは十分に高速で、フレームワーク(CoreML、ONNX、sherpa-onnx、LiteRT)も十分に成熟した。足りなかったのは、その上にプロダクト層を構築する人間だった。

これから

直近のロードマップ:

  • ASR対応言語の拡充。 30言語は良いスタートだが、ロングテールの言語にも音声認識が必要だ。
  • LLM翻訳の改善。 Gemma 2Bは優秀だが、新しい小型モデルの方が優れているかもしれない。アーキテクチャはアプリを変更せずにモデルを交換できる設計になっている。
  • iPadとタブレットの最適化。 タブレットでも動作するが、大画面向けにUIを最適化できていない。
  • AndroidのVulkan加速。 iOSにはGPU推論用のMetalとCoreMLがある。AndroidのGPU加速(whisper.cpp経由のVulkan)はまだ改善の余地がある。

目指す大きなビジョン:言語が人と人のつながりの壁にならない世界、そしてその壁を壊すためにプライベートな会話をテクノロジー企業のサーバーに渡す必要のない世界だ。

ここまで読んでくれたなら、ぜひアプリを試してみてほしい。無料だ。すべてのフィードバックを読んでいる。


TraverbaはGoogle PlayApp Storeで利用できます。詳細はtraverba.comをご覧ください。ご質問・フィードバック・機能リクエストは[email protected]まで。