概要
iOS/Androidを別々に作らず、Flutterの単一コードベースで両OS向けに開発したアプリ。立ち上げの速さと、リリース後に拡張しても破綻しない保守性の両立を狙った。
課題
- ネイティブで両OSを別開発すると工数・保守が二重になる。
- 機能追加に伴い状態管理が複雑化し、バグの温床になりやすい。
アプローチ(技術選定理由)
状態管理にRiverpodを採用。理由は、状態の依存関係を明示でき、規模が大きくなっても流れを追いやすいため。機能単位でディレクトリを分け、UI・状態・データの責務を分離した。
バックエンドはSupabaseで、認証・データ・ストレージを素早く揃えた。個人開発のスピード感を保ちつつ、後から差し替え可能な抽象化を意識している。SDKのバージョン差異による事故を防ぐため、FVMでFlutterのバージョンを固定した。
結果・学び
「最初の設計が、その後の改修コストを決める」ことを体感したプロジェクト。状態管理と機能分割に初期投資したことで、機能追加が安全に回せる土台になった。