【Realingo】あなたや友達のストーリーを教材に!SNS型AI語学アプリ
はじめに
この度初めてSwiftUIでiOSアプリを開発したので,記事にまとめました!
アプリ名は"Realingo (Reality + 某lingo)"で,「自分の身の回りの実世界の写真(や音声)を題材に外国語学習ができるアプリ」というコンセプトで開発しました.
Google CloudのAPIやGGUFからのllama.cppを使ったオンデバイスGemmaといった新しく触る技術が多く,とても実用的なアプリになっていると思うので,ぜひご一読ください!
アプリのデモ動画はこちらです:
今回作成したアプリはこちらのハッカソンに応募しました!
背景
人々によって必要な外国語の語彙や覚えるべき文章は異なる
海外旅行で使いたいフレーズ,ビジネスで必要な専門語,あるいは趣味について語るための言葉など,外国語を学ぶ目的は人それぞれです.しかし,既存の多くの語学学習アプリでは,画一的な教材が提供されがちで,必ずしも個人のニーズに合致しているとは限りませんでした.自分が実際に生活する上で出会うモノやコトに関連する語彙から学ぶ方が,より実践的に外国語能力を伸ばすことができるはずです[1].
興味のある教材や記憶にまつわる教材を使う勉強は効率的
学習心理学において,自分自身の経験(エピソード記憶)に関連付けられた情報は,単なる事実(意味記憶)よりも記憶に定着しやすいと言われています[2].例えば,旅行先で撮った写真や,友達との思い出の写真といった個人的なコンテンツを教材にすることで,学習内容が単なる文字列ではなく,鮮明な記憶と共に脳に刻まれます.
Duolingoなどはユーザによらず一定の問題を出題することになっていますが(2025年6月末現在),Realingoは,この「自分ごと化」を学習の中心に据えました.
Realingoのゴール
「自分や友達がスマホで撮った写真や音声が,教材になる」
ユーザがカメラを向けた対象・周囲の音をそのまま学習素材に変換します.並び替え問題,穴埋め問題,スピーキング,ライティング,およびお手本文章などさまざまなバリエーションにGemini APIやGemmaといった生成AIを使って変換を行います.
さらに!友達の写真もあたかもSNSストーリーを見るかのように「みんなの写真」モードで課題として使えたり,自分の1週間前,1ヶ月前,半年前...といったマイルストーンの出来事をアルバムを眺めるように課題として使えます.
これにより,自分の身の回りの語彙や文章を集中的に取り入れ,さらに自分の記憶や興味と結びつくような題材をもとに外国語学習が可能になります!
(以降可読性重視のためである調で記述します)
アプリ概要
Realingoは,写真・音声ベースの教材の個人最適化と友達との画像シェアによる学習モチベーションの維持を特徴とした語学学習アプリである.
システムアーキテクチャ図
フロントエンドにSwiftUI,バックエンドにfirebaseとCloud Run Functionを使って開発した.システムアーキテクチャ図は以下である.
iOSアプリとして開発することにより,ユーザがiPhoneに保存しているアルバムに直接アクセスすることができ,画像のアップロードの工程を除けるため導線の短縮が期待できる.
iOSの外国語学習アプリにおける問題文,ユーザの回答,画像のパスなどはFirebase Firestoreに保存される.画像はCloud Run FunctionのVision APIを使ってNSFWや過激な画像か否かの診断を行ったのちFirebase Storageに保存される.問題生成には,Google CloudのGemini APIと,デバイス上で動作するオンデバイスVLM(Gemmaなど)をハイブリッドで利用している.
画面構成
画面構成は以下.まずアプリを開くとトップページとしてメニュー画面*が表示される.メニュー画面から学習モードをまず選択し,それに応じて写真撮影やiPhoneの写真アルバムから抽出された画像をもとに問題が生成され,学習画面に遷移する.
*メインメニュー
機能要件
メイン機能
-
カメラで撮影モード:目の前にある物体を撮影し,それについて問題を出力する.
-
思い出と学習(レミニセンス)モード:1週間前,半年前などのマイルストーンとなる時刻で撮られた写真をiPhoneのアルバムから探してきて,それについて問題を出力する.これにより,エピソード記憶と結びついた学習を促進する.
-
みんなの写真モード: 他ユーザがクラウド(Firebase Storage)上に投稿した公開写真を使って学習できる.友達が共有した写真で学習することで,モチベーションの維持向上を図る.
誰も投稿しない場合悲しいことになる.
サブ機能
-
音声入力モード: iPhone備え付けマイクからの音声や,音声ファイル(会議や雑談の録音など)を入力するとリアルタイムで文字起こしを行い,そのテキストを題材に学習コンテンツを生成する.
-
スクリプトモード: CLAUDE AI Pinなど,音声ではなくテキスト文字起こしのデータしか引き出せない場合,それを入力できるモード.文字起こしされたテキストから直接学習を始められる.
出題形式
単語並び替え
DuolingoライクなUIで,提示された単語の選択肢を正しい順序に並べ替えて文章を完成させる.
穴埋め問題
文章の中にいくつか存在する空欄に,適切な単語を選択肢の中から選んで補充する.
スピーキング
提示された文章を読み上げたり,写真について説明したりする.ユーザーの発音,流暢さ,正確さをAIが評価し,具体的なフィードバックを提供する.
ライティング
写真について説明する文章などを自由記述で作成する.AIが文法,語彙,表現の自然さなどを添削し,より良い文章にするための提案を行う.
写真の説明
1枚の写真に対して,AIが学習中の言語で詳細な説明文を生成する.ネイティブの表現をインプットとして学ぶことができ,TTS(Text-to-Speech)による音声読み上げも可能.
技術
本アプリの開発で使用した詳細な技術は以下の通り.
- フロントエンド: SwiftUI, Combine
-
バックエンド: Firebase
- データベース: Firestore
- ストレージ: Cloud Storage
- 認証: Anonymous Authentication
- セキュリティ: App Check
- クラウドコンピューティング: Google Cloud Run (Vision APIによる画像診断)
- 生成AI (クラウド): Google Gemini API (gemini-1.5-flash)
-
生成AI (オンデバイス):
- 推論エンジン: llama.cpp
- モデル: Gemma-3-4B-it, Heron-NVILA-Lite-2B (GGUF形式)
-
iOSネイティブ機能:
- 音声認識: Speech Framework
- 音声合成: AVFoundation (AVSpeechSynthesizer)
- 写真: PhotoKit
- バックグラウンド処理: BackgroundTasks
こだわりポイント
-
リテンション率向上のテクニック:「思い出と学習モード」と「みんなの写真モード」はSNSのストーリーや振り返り機能といったユーザのリテンション率を高めるところから着想を得たため,似たような効果が期待できると思われる.
-
iOSアプリにすることにより画像取得までの動線を短縮: ユーザは数タップで自分のアルバムの写真やカメラを学習教材に変換できる.
-
オンデバイスVLMによるプライバシーフレンドリーな学習にも対応: ユーザーはプライバシーと性能のトレードオフを考慮し,クラウドAPIを使わずにデバイス上で完結する学習モードを選択できる.
-
エピソード記憶の活用: 「思い出と学習モード」により,個人の体験と強く結びついた学習を提供し,記憶の定着を促進する.
-
多様な学習形式: 単語並べ替えからスピーキング,ライティングまで,多角的なアプローチでユーザーを飽きさせず,総合的な言語能力の向上をサポートする.
-
多言語対応
-
アイコン
可愛い
将来的展望
- 友達機能の追加 みんなの写真モードについて,友達機能を取り入れないと,赤の他人の写真を見ることになってしまい,課題にそぐわない.よって友達機能を取り入れる予定である.
- 対応言語の拡充: 現在のアーキテクチャは多言語対応を前提に設計されており,容易に新しい言語を追加できる.
- オフライン機能の強化: オンデバイスVLMの活用をさらに進め,ネットワーク接続がない環境でもほとんどの機能が利用できる完全なオフライン学習モードの実現を目指す.
- 学習進捗の可視化: 学習時間,正答率,語彙の成長などをグラフで可視化し,学習者が自身の成長を実感できる機能を追加する.
- ゲーミフィケーション: エフェクトのリッチ化,SNSに寄せた運用など
リポジトリは以下
Discussion