メインコンテンツへスキップ

FreezerMan WBS

FreezerMan WBS(Kotlin + Jetpack Compose + Clean Architecture)


0. プロジェクト基盤準備

0.1 プロジェクト作成

  • FreezerMan プロジェクト作成(package: com.yasumu.freezerman

  • Kotlin + Compose BOM / Material3

  • Min SDK 設定(推奨: 24)

  • Java17 設定

0.2 基本モジュール構成

  • ui/

  • domain/

  • data/(Room, DataStore)

  • core/(共通 util, date utils など)

0.3 共通

  • Navigation(Compose)

  • アイコン / フォント設定


1. データレイヤ設計(Data)

1.1 モデル定義(保存構造)

  • StockEntity

  • CategoryEntity

  • StorageLocationEntity
    ※仕様書の項目に完全に対応

1.2 DAO / Room Schema

  • StockDao

  • CategoryDao

  • StorageLocationDao

  • Migrations

  • TypeConverters(Date → Long)

1.3 Repository 実装

Domain の IF → Data の実装

  • StockRepositoryImpl

  • CategoryRepositoryImpl

  • StorageLocationRepositoryImpl

  • Entity ↔ DomainModel Mapper 実装

1.4 DataStore(アプリ設定)

  • ソート状態(規定値・昇順/降順など)

  • LAST_EDITED など必要なら


2. ドメインレイヤ設計(Domain)

2.1 Domain Model 作成

  • Stock

  • Category

  • StorageLocation

2.2 UseCase 定義

Stock 系

  • GetStocksSortedUseCase(調理日/保管場所/期限)

  • AddStockUseCase

  • UpdateStockUseCase

  • DeleteStockUseCase

  • IncrementQuantityUseCase

  • DecrementQuantityUseCase

  • CleanInvalidRefsUseCase(カテゴリ削除などに伴う null 化)

Category 系

  • GetCategoriesUseCase

  • AddCategoryUseCase

  • UpdateCategoryUseCase

  • DeleteCategoryUseCase(紐づく Stock の category=null)

StorageLocation 系

  • GetStorageLocationsUseCase

  • AddStorageLocationUseCase

  • UpdateStorageLocationUseCase

  • DeleteStorageLocationUseCase(紐づく Stock の location=null)


3. 画面 UI 仕様に基づく ViewModel 実装(UDF)

(仕様すべて に基づく)

3.1 ストック一覧画面 ViewModel

  • 初期ロード(ソート既定値)

  • スワイプ削除(quantity==0 のみ許可)

  • +/− 数量変更(0–30 ガード)

  • 並べ替え(調理日/保管場所/期限)

  • 期限計算(expireDate(00:00 JST) - Today(00:00 JST))

3.2 ストック追加画面 ViewModel

  • 入力フォーム State

  • バリデーション(名称1–30、数量1–30、期限>=調理日)

  • 未保存チェック(デフォルト値と比較)

  • 保存処理(登録日時付与)

3.3 ストック編集画面 ViewModel

  • 初期値ロード

  • 変更検知(元値 vs 現在値)

  • 数量 0 の時はエラー表示、保存不可

  • 保存 / 削除

3.4 カテゴリ編集画面 ViewModel

  • リスト管理

  • 並び替え(ドラッグ)

  • ボトムシート UI 状態

  • 名前 1 文字以上のバリデーション

  • 削除時の確認ダイアログ(関連 Stock の category=null)

3.5 保管場所編集画面 ViewModel

  • リスト管理

  • 並び替え(ドラッグ)

  • アイコンパレット(30 個)

  • 削除時の確認ダイアログ(関連 Stock の location=null)

3.6 FreezerMan について画面

  • バージョン番号取得

  • ライブラリ一覧(Gradle → license-plugin)


4. UI 実装(Compose)

(導線・文言・動作は仕様そのまま )

4.1 共通 UI

  • AppTheme

  • TopAppBar(戻る/設定/家アイコン)

  • 設定ポップアップメニュー

  • ダイアログコンポーネント(削除確認など)

  • BottomSheet 共通化

4.2 ストック一覧

  • ソートバー

  • リスト(アイコン/期限/カテゴリ/残数)

  • スワイプ削除(quantity==0のみ)

  • FAB(追加)

  • 空状態表示

4.3 ストック追加

  • テキスト入力

  • 日付ピッカー(調理日・期限)

  • カテゴリ選択

  • 保管場所選択

  • バリデーション表示

  • 保存ボタン活性制御

4.4 ストック編集

  • 追加画面とほぼ同じ

  • 削除ボタン(赤)

  • 保存ボタン活性制御

  • 未保存戻り確認

4.5 カテゴリ編集

  • リスト + ペンアイコン

  • FAB

  • ボトムシート

  • 並び替え(ReorderableLazyList)

4.6 保管場所編集

  • アイコン付きリスト

  • アイコンパレット(30 個)

  • ボトムシート

  • 並び替え

4.7 FreezerMan について

  • アプリアイコン

  • バージョン

  • ライブラリ一覧(スクロール)


5. テスト

5.1 Unit Test

  • UseCase

  • Repository

  • Mapper

5.2 Instrumented Test(UI)

  • 画面遷移

  • 数量 +/− 動作

  • 並び替え

  • スワイプ削除

  • 保存/削除動作

5.3 テストデータ投入

  • Category 5 種

  • 保管場所 3–5 種

  • Stock 10–20 件


6. リリース準備

6.1 バージョニング

6.2 アプリアイコン作成

6.3 AndroidManifest 権限確認

6.4 Proguard/R8 設定

6.5 Play Store(今回は任意)


7. 保守/改善タスク(任意)

  • ソート条件永続化(DataStore)

  • Category/StorageLocation アイコンの外部化

  • ExpireDate の自動判定オプション

  • 並び替えアニメーション改善


全体スケジュール(目安)

  • 0〜1:1日

  • 2(Data):2〜3日

  • 3(Domain):1日

  • 4(UI):4〜6日

  • 5(テスト):2〜3日
    = 合計 10〜14日(実働)