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 共通
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日(実働)
必要なら、
ガントチャート形式タスク依存関係グラフ(Mermaid)Issue テンプレ大量生成などにも変換できます。
どういう形式に整形したい?