Lingvanoが手話教育をExpoで400万人の学習者に拡張する方法
Users • React Native • Development • December 2, 2025 • 8分で読める
著者:
- Christof Thalmann(ゲスト著者)
- Lisa Weilguni(ゲスト著者)
- Niklas Machacek(ゲスト著者)
Lingvanoは没入型レッスンとリアルタイム練習を通じて、数百万人に手話を教えています。小さなチームがExpo上でクロスプラットフォーム学習アプリを構築する方法をご覧ください。
これは、2025年Expo App Awardsで「Community's Choice」賞を受賞したLingvanoアプリ開発チームからのゲスト投稿です。
Lingvanoについて
Lingvanoは、聴覚障害者のインストラクターが教える没入型ビデオレッスンを通じて、数百万人が手話を学ぶのを支援しています。私たちのミッションは、言語の壁を取り除き、聴覚障害者と聴者の間に橋を架けることです。
私たちのアプリは、インタラクティブなレッスン、聴覚障害者文化への洞察、コミュニティイベントを組み合わせて、手話教育を誰にとってもアクセスしやすく楽しいものにしています。現在、3つの異なる手話を提供しています:
- アメリカ手話(ASL)
- イギリス手話(BSL)
- オーストリア手話(ÖGS)
この記事では、小さなチームがExpo上でクロスプラットフォーム学習体験を完全に構築し、拡張する方法を紹介します。ビデオレッスンの処理方法、カスタムネイティブモジュールによるリアルタイム指文字認識、iOS、Android、Webでの開発をスムーズに保つワークフローについて説明します。また、これらの技術的選択が400万人以上の学習者にとって学習をシームレスで魅力的なものにする方法もご覧いただけます。
課題
世界で15億人が聴覚障害と共に生活しています。Lingvanoは、聴覚障害者と聴者の間のコミュニケーションを障壁のないものにすることを目指しています。
このミッションを達成するには、聴覚障害者教育者による高品質な指導とエンゲージングなゲーミフィケーションシステムだけでなく、iOS、Android、Webで動作するシームレスなクロスプラットフォーム学習体験が必要です。
私たちの課題は、ビデオレッスン、ゲーミフィケーション、AI搭載練習ツールを処理できるフレームワークを見つけることでした。これにより、個人学習者、学校、大学、B2B企業クライアント向けに効果的に拡張できる一方で、開発や保守にオーバーヘッドを追加しないようにする必要がありました。
解決策:大規模学習の基盤としてのExpo
2022年初頭、私たちはベアReact NativeからExpoに移行し、より高速で安定した開発ワークフローと、すべてのプラットフォームでの合理化されたデプロイメントを実現しました。
主要な技術コンポーネント:
- expo-router – レッスンアクセスと進捗追跡のための安定したナビゲーションと堅牢なディープリンクロジックを提供
- TurboModule with custom native code – Lingvanoのリアルタイム指文字AI認識トレーナーを強化(現在ベータ版)
- expo-notifications – 記憶定着とエンゲージメントを向上させるスマート学習リマインダーを配信
- expo-updates – 重要なバグ修正と機能ロールアウトのための高優先度OTAアップデートを有効化
- EAS Build lifecycle hooks – Maestroを使用してネイティブE2Eテストスイートを実行し、エラーを自動的にタスク管理ツールに直接報告。Expoアプリで完全に自動化されたネイティブE2Eスイートを設定する方法については、この記事をご覧ください
- expo-sharing – 学習者が成果、連続記録、興味深い発見をコミュニティと共有できるようにする
- その他多数
合計で、28のExpoライブラリが私たちのコア機能を支えています。しかし、真の力はライブラリ自体だけではありません。Expoの優れたアーキテクチャインフラストラクチャが、ツールチェーン全体に対してクリーンな統合ポイントを提供することです:ビジュアル回帰テスト、Playwright E2Eカバレッジ、コンポーネント開発用のStorybook、重要な閾値に達したときにメッセージングアラートをトリガーするエラー追跡システムなど。
Expoのスケーラビリティは単に時間を節約するだけではありません。継続的なイノベーションを根本的に可能にします。
Expoに制限はない
必要なツールが存在しない場合、Expoでは自分で構築できます。
リアルタイム指文字AI認識トレーナーの構築は、独特な技術的課題を提示しました。GoogleのMediaPipe Gesture Recognitionフレームワークを使用する必要がありました。問題は?それをサポートするExpoモジュールが存在しませんでした。React-Nativeパッケージも存在しませんでした。
ハイブリッド開発の批判者は「ブロックされた」や「ejectする時だ」と叫ぶかもしれません。しかし、幸いなことに、Expoは管理されたワークフロー内でカスタムネイティブソリューションを構築する柔軟性を提供してくれます。
TurboModuleを作成することで、フレームを入力として受け取り、GoogleのMediaPipeを使用して潜在的なジェスチャーマッチをスキャンし、そのフレームで見られる最も可能性の高いジェスチャーの応答を送り返すカスタムSwiftとKotlinネイティブ実装を簡単に設定できました。
セットアップは非常に簡単でした:
TurboModuleのセットアップ
npx create-react-native-library@latest <your-custom-module>
これにより、プロジェクトのルートにmodule/your-custom-moduleフォルダが作成され、その中にiosとandroidフォルダが作成されます。両方ともボイラープレートコードが含まれており、TurboModuleの動作とJavaScriptレイヤーへのブリッジの構築方法を示しています。
私たちがする必要があったのは、iosとandroidフォルダをカスタムネイティブソリューションで埋めることだけでした。この機能のベータテストを終了した後、実装の詳細をさらに共有するかもしれません。私たちの開発ブログにご注目ください。
package.jsonでは、ネイティブモジュールが自動的に接続されます。必要に応じて、選択したパッケージマネージャーにネイティブモジュールを簡単に公開することもできます:
"your-custom-module": "link:./modules/your-custom-module",
それだけです。維持すべきXcodeプロジェクトはありません。分岐するAndroidとiOSビルドもありません。モジュールはeas buildのたびに自動的に再構築され、JavaScriptレイヤーがアップデートを必要とする場合、OTAが処理します。
結果:
JavaScriptレイヤーでフレームを取得し、カスタムネイティブモジュールに送信すると、ユーザーが実際に今何を手話しているかの応答を得ることができます。
ここでExpoの真の力が示されます。要件が既存のパッケージエコシステムを超えて成長した場合、ejectするか機能を妥協するかの選択を強制されることはありません。管理されたワークフローはあなたと共に拡張します。Expoはビルドの複雑さを処理し、あなたはアプリを独特にするものの構築に集中できます。
パッケージがまだ存在しない場合、自分で構築できます—そして、最初にExpoを選択した理由となったすべての利点を保持できます。
開発者体験と継続的成長
私たちはExpo SDK 44から始まり、現在SDK 54に到達しました—この旅は単なるアップグレードパス以上のものでした。3年以上にわたる継続的な反復とイノベーションであり、各リリースがパフォーマンスの向上、安定性の強化、新しい開発者の喜びをもたらしています。
EAS BuildとUpdateはCI/CDを合理化し、大規模での信頼性を確保し、学習を楽しいものにする機能に集中できるようにします—ビルドの複雑さの管理ではなく。
優れた開発者体験は、優れたユーザー体験を可能にします。
プラットフォーム間での実証されたパフォーマンス
私たちの作業の影響は、ユーザーエンゲージメント、評価、クロスプラットフォームの一貫性に現れています。
- 世界中で400万人のユーザー
- iOSで111,000件の評価で4.9つ星
- Androidで63,000件の評価で4.8つ星
- 統一されたコードベースからのiOS、Android、Webサポート
- OTAを介したA/Bテスト、新機能、重要なアップデートの継続的配信
今後の展望
私たちは現在、新しいアーキテクチャで動作し、最新のExpo SDK 54にアップグレードしています。これは、Expoとの10バージョン記念を意味します。私たちは革新、改良、成長を続け、小さな情熱的なチームが世界をより繋がったものにするツールを構築できることを証明しています。
私たちのアプリに興味がありますか?Web、iOS、Androidでチェックできます。
リンクと参考資料
- Apple Developer Story
- Lingvanoの開発者ブログ
- Instagram: @lingvano