ClaudeExpo2026/01/29 17:00

How Sanas built a real-time video translation app in 3 months using Expo

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

claudejamodel: claude-sonnet-4-20250514

SanasがExpoを使用して3ヶ月でリアルタイム動画翻訳アプリを構築

Key Points

  • 3ヶ月で25言語対応のリアルタイム翻訳アプリを開発
  • 2秒以下の低遅延翻訳を実現
  • ExpoのOTA機能で週次モデル改善をデプロイ

Summary

Sanasは、Expoを活用してわずか3ヶ月で世界初のリアルタイム言語翻訳動画通話アプリを開発・リリースしました。25以上の言語に対応し、2秒以下の低遅延を実現しています。

Key Points

  • 技術スタック: React Native + Expo SDK 54を基盤とし、WebRTCによるP2P通信を実装
  • アーキテクチャ: エッジサーバーでの音声認識・翻訳処理とデバイス側での音声・動画処理を組み合わせ
  • 主要モジュール:
    • expo-audio: ライブ音声キャプチャと再生
    • expo-camera: リアルタイム動画ストリーミング
    • expo-webrtc: 暗号化されたP2P通話レイヤー
    • カスタムネイティブモジュール: LLMストリーミング推論と音声クローニング
  • 開発効率: EAS BuildとEAS Updateにより、CI/CDとOTAアップデートを自動化
  • リアルタイム処理: 単一WebSocketで音声転写、翻訳、音声合成を多重化し、遅延を最小化

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

claudejamodel: claude-sonnet-4-20250514

SanasがExpoを使用してリアルタイム動画翻訳アプリを3ヶ月で構築した方法

SanasがExpoを使用してリアルタイム動画翻訳アプリを3ヶ月で構築した方法

Users • React Native • January 29, 2026 • 7 minutes read

Jason Lin Guest Author
Scott Hickmann Guest Author
John Hong Guest Author

SanasがExpoを使用して世界初のインスタント翻訳動画アプリを3ヶ月で構築した方法。25以上の言語で2秒未満の遅延でリアルタイム音声翻訳を実現。

何十年もの間、エンジニアたちは真の万能翻訳機の構築を夢見てきました。異なる言語を話す二人が、まるで同じ言語を共有しているかのようにお互いを理解できる技術です。Sanasでは、その夢を現実にすることを目指しました。

Speech AI企業であるSanasの小さなチームが、わずか数ヶ月でExpoを使用して世界初のインスタント言語翻訳ビデオ通話アプリを構築し、リリースしました。このアプリは、高度な大規模言語モデル(LLM)翻訳研究とExpoの最新モバイルツールを組み合わせて、リアルタイムの多言語会話を可能にします。

これほど野心的なものを構築するには、柔軟性、ネイティブパフォーマンス、反復の速度のバランスを取る開発スタックが必要でした。Expoはまさにその基盤を提供してくれました。統一された開発者体験、高速な反復サイクル、ネイティブAPIへのアクセスにより、AIの最も人間的な問題の一つである「人々がお互いを理解し合えるようにする」ことに集中できました。

リアルタイム低遅延音声翻訳の課題

リアルタイム低遅延音声翻訳は、コミュニケーション技術における最も困難な問題の一つです。自然に感じられるためには、音声を瞬時にキャプチャしてストリーミングし、ライブ通話に十分な速度で新しい音声を翻訳・合成し、それでも各話者の独特な口調と感情を保持する必要があります。

これらすべてが予測不可能なネットワーク条件下で動作し、25以上の言語に対応し、モバイルビデオ通話で確実に配信される必要があります。

モバイルビデオ通話内でこれらすべてを実現するということは、遅延、パフォーマンス、音声の忠実度を同時に解決することを意味しました。数百ミリ秒の遅延でも会話がぎこちなく感じられます。私たちには、iOSとAndroidの両方でユーザーにとって楽に感じられるシステムと、毎日テストして改善をリリースできる開発フレームワークが必要でした。

SanasがExpoを選んだ理由

私たちのチームメンバーは、Stanfordでの在学中にExpoを使用していました。Stanfordでは複数のコースでモバイル開発の推奨フレームワークとなっています。ネイティブAPIへのアクセスを失うことなく迅速に開発できることを知っていました。

Expoを使用することで、パフォーマンスクリティカルなコンポーネントを完全にコントロールしながら、毎日構築、テスト、デプロイができました。Expoの統一されたツールチェーンと統合サービスにより、翻訳精度、遅延、自然さという困難な問題に集中し続けることができました。

  • Expo SDK 54:一貫した開発者体験を維持しながらネイティブAPIとの深い統合を提供
  • EAS Build:手動設定のオーバーヘッドなしにiOSとAndroidの両方でCI/CDを処理
  • EAS Update:内部テスターと初期ユーザーへの即座のOTAロールアウトを実現

ビルド、アップデート、ネイティブ設定の複雑さをExpoに委ねることで、最も重要なこと、つまり音声翻訳の限界を押し広げることに集中できました。

主要なExpoモジュールと統合

インスタント翻訳とスムーズなコミュニケーションを実現するため、Expoモジュールとカスタムネイティブ統合の組み合わせでアプリを構築しました:

  • expo-audio:ライブキャプチャと合成のための音声録音・再生
  • expo-camera:リアルタイムビデオストリーミングと参加者フィード制御
  • expo-webrtc(カスタム統合):暗号化されたピアツーピア通話レイヤー
  • expo-haptics:翻訳イベントを知らせる微細な触覚フィードバック
  • expo-notifications:通話招待、不在着信アラート、翻訳アップデート
  • expo-secure-store:認証とAPI認証情報のローカル暗号化
  • expo-updates:シームレスなOTA機能ロールアウト
  • カスタムネイティブモジュール:LLMストリーミング推論とオンデバイス音声クローニング用

これらのモジュールにより、小さなチームがセキュリティ、音声の忠実度、翻訳速度を犠牲にすることなく、瞬時で直感的に感じられるプロダクショングレードの体験を作成できました。

Sanasアプリケーションアーキテクチャの概要

舞台裏では、アプリはエッジインテリジェンスとオンデバイス効率のバランスを取る合理化されたアーキテクチャで動作しています。各レイヤーは遅延を最小化し、忠実度を最大化するよう設計されています:

  • クライアント:UI、状態管理、ローカル音声/動画処理を担当するReact Native + Expoアプリ
  • エッジサーバー:ファインチューニングされた多言語LLMを使用した低遅延音声認識、翻訳、音声合成を処理
  • WebRTCトランスポート:ネットワークの負荷下でも安定性を確保するための動的品質適応を備えたリアルタイム双方向通信を管理
  • EAS BuildとUpdate:A/B遅延テスト用のビルド自動化、ステージングチャネル、機能フラグを調整

デバイスとエッジ間でコンピューティングを賢く分散することで、プラットフォーム間で一貫したパフォーマンスを維持しながら、ユーザーには瞬時に感じられる翻訳体験を実現しました。

例:リアルタイムストリーミング翻訳

インスタント翻訳構築の最も困難な部分の一つは、ライブ音声キャプチャ、転写、翻訳、合成音声再生を最小限の遅延で単一接続上で調整することです。以下が私たちの実装方法です:

// 単一のWebSocketが翻訳パイプライン全体を処理
ws.onmessage = event => {
  const message = JSON.parse(event.data);
  switch (message.type) {
    case 'ready':
      // サーバー準備完了 — 音声チャンクのストリーミング開始
      LiveAudioStream.on('data', (data: string) => {
        ws.send(JSON.stringify({ type: 'audio', data }));
      });
      LiveAudioStream.start();
      break;
    case 'transcription':
      // 完全 + 部分的な単語による段階的転写
      const completeText = message.complete.map(w => w.word).join('');
      const partialText = message.partial.map(w => w.word).join('');
      updateTranscription(completeText, partialText);
      break;
    case 'translation':
      // ユーザーが話し終えた後に完全な翻訳が到着
      displayTranslation(message.complete.map(w => w.word).join(''));
      break;
    case 'speech':
      // 文字レベルのタイムスタンプ付きストリーミングTTS音声チャンク
      audioChunks.push(base64ToUint8Array(message.audio));
      break;
  }
};

このアプローチ、つまり転写、翻訳、音声合成を多重化する単一の永続的WebSocketにより、個別のAPI呼び出しのラウンドトリップオーバーヘッドを回避できます。この方法により、ユーザーは話しながら自分の言葉が転写されるのを見て、話し終えた直後に翻訳された応答を聞くことができます。

Expoで構築することのROI

わずか3ヶ月で、小さなチームがプロトタイプから本番環境まで、App StoreとGoogle Playの両方でローンチしました。アプリは現在25以上の言語をサポートし、それぞれが話者の自然な口調とアイデンティティを保持しています。平均翻訳遅延は2秒未満で、デバイス間で流暢でネイティブな体験を提供します。

Expoがこのペースを可能にした理由でした。統一されたツールチェーン、オープンソースの柔軟性、クラウドベースのビルドシステムにより、スケールでの配信に必要なすべてを提供してくれました。複雑なネイティブ設定を管理する代わりに、コア翻訳モデルの改善とライブ体験の向上に時間を集中できました。

私たちのエンジニアの一人が言ったように、「Expoにより、ビルドシステムの設定ではなく、翻訳の限界を押し広げることに完全に集中できました。」

Sanasの次のステップは?

作業はここで終わりません。私たちのチームは現在、次のフロンティアに焦点を当てています:リアルタイム翻訳をさらに表現豊かで人間的にすることです。詳細については、こちらの技術的な記事をお読みください。

Expoは引き続きその旅の重要な部分です。その高速で信頼性の高いアップデートシステムにより、毎週モデルの改善と新機能をリリースでき、研究のブレークスルーをほぼ瞬時に実際のユーザー体験に変換できます。

Sanasでの私たちの目標は常にシンプルでした:言語に関係なく、人々が理解し、理解されるのを助けることです。Expoはそのビジョンを現実にするのを助けてくれます。

SanasがExpoを使って3か月でリアルタイム動画翻訳アプリを構築した方法 | Expo | DocsDigest