Tsuzumi - モバイル習慣トラッカーの開発記録
React NativeFirebaseTypeScriptモバイルアプリ
なぜ作ったか
習慣化を続けるのが難しいという個人的な課題から、シンプルで使い続けたくなるアプリを作りたいと考えました。既存のアプリは機能過多で、「記録するだけ」のシンプルさが欲しかった。そして、記録を続けるモチベーションを維持する仕組みが必要でした。
技術選定
React Native + Expo を選んだ理由は、iOS/Android両対応が必須だったこと、そしてExpo Routerのファイルベースルーティングが直感的で開発効率が高いことです。
Firebase は、バックエンドを自前で構築する手間を省きつつ、Firestoreのリアルタイム同期、匿名認証によるハードルの低いログイン、そしてCloud Functionsでサーバーレスにロジックを実行できる点が決め手でした。
エール機能の設計
最も力を入れたのがエール(応援通知)機能です。Cloud Functionsで4種類のパターンを実装しました。
- 記録直後エール: 習慣を記録した5〜45分後に送信。即時フィードバックでモチベーション向上
- 継続途切れエール: 記録が途切れた翌日に送信(週2回上限)
- 長期離脱エール: 7日・21日・35日の離脱時に段階的に送信
- ランダムエール: 6時間ごとにランダムで送信
お休みモード(デフォルト23:00〜7:00)も実装し、ユーザーの生活リズムを尊重しています。
Phase開発のアプローチ
MVP思考で、Phase 1〜8まで段階的に機能を追加しました。
- 基本的な習慣記録
- Firebase連携(認証・データ同期)
- ストリーク計算・統計表示
- エール通知(Cloud Functions)
- テンプレート機能(22種類の習慣テンプレート)
- Human Yell(ユーザー間のスタンプ送信)
- プッシュ通知(FCM連携)
- UX改善(3ボタンダイアログ、長押しショートカット)
各Phaseで成果物を区切ることで、常に動くプロダクトを維持しながら機能を拡張できました。
学んだこと
- React Nativeのネイティブブリッジの仕組みとパフォーマンス最適化
- Firestoreのデータモデリング(コレクション設計、インデックス)
- Cloud Functionsでのサーバーレスロジック設計
- EAS Buildによる本番ビルドとGoogle Play向けAABファイル生成