プロジェクトへ戻る

App Store公開

PolyLog

日本語学習で見つけた『書く→直す→復習する』の流れを、12時間のMVPからApp Store公開まで育てたアプリです。

日本語の日記を書くとGeminiの添削を受け、分からない単語を保存し、そのまま復習できるアプリです。勉強会のメンバーから聞いた添削待ちと単語記録の手間をもとに12時間でMVPを作り、一人でApp Storeへ公開しました。

期間
2025.10 - 2025.12
担当範囲
アプリ全体 · AI添削 · App Store配布
チーム
個人開発
リポジトリ
非公開リポジトリ

書いた直後に自然な表現を確かめるまでの課題

日本語勉強会のメンバーから、日記を書いても自然な表現かすぐ確認できず、分からない単語を別に調べて記録することも面倒だという話を聞きました。文章を書くことと単語を復習することが、別々の作業になっていたのです。

12時間ハッカソン『チキンソン』では、コミュニティ機能を広げるのではなく、日記→AI添削→単語保存→復習という一つの流れに絞りました。

学習ループ

日記を書いた瞬間から、次の復習までをつなぐ

  1. 01

    日記を書く

    学習者の文章

  2. 02

    AIフィードバック

    Geminiで修正と説明

  3. 03

    記録を保存

    Firebaseに日記・単語を保存

  4. 04

    手元で復習

    Hiveの単語帳と復習状態

自由なAI応答の前に、画面を守る境界を置く

Geminiのレスポンスで項目が欠けたり形式が変わると、添削結果画面が必要な項目を読めず表示に失敗します。

12時間でMVPを作る必要があり、APIキーをクライアントへ入れずに、成功・失敗・再試行をFlutter画面で区別できる最小構成が必要でした。

GeminiへのリクエストはFirebase Functions経由にし、JSONモードでレスポンス形式を制限しました。現在はJSON.parseで画面モデルへ変換しており、実行時スキーマ・自動再試行・エラーログは未実装です。

  • プロンプトとJSONモードで必要フィールドを指定しました。
  • FunctionsでGemini APIキーを管理しました。
  • JSON.parse結果をFlutterのフィードバックモデルへ変換しました。

この構成を含むv1.0.1をApp Storeへ公開しました。配布は確認できましたが、解析成功率・レイテンシ・フィールド欠落率は測定していません。

JSON形式を指定するだけでは契約にならず、実行時検証・再試行・ログ記録まで実装して初めて失敗を管理できると学びました。

PolyLogの日記入力画面

素早い復習のためのFirestoreとHiveの役割分担

単語帳は短い項目を続けて読み、復習状態を頻繁に更新する画面です。単語を切り替えるたびFirestoreの応答を待つと、短い学習の流れが通信状態に左右されます。

12時間MVPから始まった個人アプリで、複雑なオフライン優先同期を新しく作る余裕はありませんでした。一方、端末だけを正本にすると、ログイン後のユーザーデータをFirebaseで管理する構成とも合いませんでした。

Firestoreをリモートの原本として残し、ログイン・初期同期で単語をHiveへ保存しました。通常の一覧と復習はHiveから読み、変更時はリモートとローカルの両方を更新する構成にしました。

  • ログイン後にFirestoreの単語データをHiveへ同期しました。
  • 単語一覧と復習順序を端末内の状態から構成しました。
  • 追加・復習状態の変更をFirestoreとHiveへ反映しました。

この構成を含むアプリをApp Storeへ公開しました。通信回数や表示時間の前後比較は測定しておらず、オフライン変更の衝突規則もまだ文書化していません。

ローカルキャッシュを追加することは読み取りを速くするだけでなく、どのデータを正本とし、いつ同期するかを決める設計だと学びました。

PolyLogの単語学習画面

App Storeにバージョン1.0.1を公開しました。利用者から提供された集計値では、総ダウンロード数は約30回です。

初めて自分のサービスをApp Storeへ公開し、大きな達成感を得ました。また、初めてのFlutter作品として、クライアントがリクエスト前に読み込み中を表示し、バックエンドのレスポンスを画面状態へ変換し、失敗時には再試行を案内する流れを実装しました。その結果、APIを設計するときも、画面が分岐できるレスポンス形式とエラー情報まで考えるようになりました。

JLPT合格との因果関係は主張していません。また、Gemini応答を正しく解析できた割合(解析成功率)、応答時間(レイテンシ)、性能の改善値は測定していません。

  • Gemini応答の実行時スキーマ、再試行、エラーログを追加
  • Firestore/Hive同期とオフライン変更方針を文書化
  • 現行アプリの分析と保守方針を決める