---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 74
  claims_with_evidence: 74
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：address_list 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：74 / 74、根拠なし：0
- 優先レビュー（高）
  1. **リポジトリ層のエラーハンドリング**：nullを返却した場合の強制アンラップ（!）によるクラッシュの可能性
  2. **Bloc層のエラーメッセージ**：StringConstants.somethingWrong のローカライズ依存
  3. **_getFormattedAddress のnull安全性**：address1!のnull強制アンラップ

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `lib/screens/address_list/data_model/address_model.dart`
- E-02: `lib/screens/address_list/data_model/default_address_model.dart`
- E-03: `lib/screens/address_list/data_model/country_model.dart`
- E-04: `lib/screens/address_list/data_model/update_address_model.dart`
- E-05: `lib/screens/address_list/bloc/address_bloc.dart`
- E-06: `lib/screens/address_list/bloc/address_event.dart`
- E-07: `lib/screens/address_list/bloc/address_state.dart`
- E-08: `lib/screens/address_list/bloc/address_repository.dart`
- E-09: `lib/screens/address_list/view/address_screen.dart`
- E-10: `lib/screens/address_list/view/widget/saved_address_list.dart`
- E-11: `lib/screens/address_list/view/widget/add_new_address_button.dart`
- E-12: `lib/screens/address_list/view/widget/address_loader_view.dart`
- E-13: `lib/screens/address_list/utils/index.dart`

## 3) Claims と根拠の対応（レビューの主戦場）

### データモデル層（AddressModel, AddressData）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | AddressModel.fromJsonで有効なJSONからインスタンス生成 | E-01 (lines 25-26) | ○ |
| C-02 | AddressModel.fromJsonで空のJSONでもインスタンス生成 | E-01 (lines 21-22) | ○ |
| C-03 | AddressModel.toJsonでシリアライズ | E-01 (lines 28-29) | ○ |
| C-04 | AddressData.fromJsonで全フィールド設定 | E-01 (lines 75-76) | ○ |
| C-05 | defaultAddressがtrueの場合isDefaultがtrue | E-01 (lines 49-50) | ○ |
| C-06 | defaultAddressがfalseの場合isDefaultがfalse | E-01 (lines 49-50) | ○ |
| C-07 | defaultAddress未定義時のデフォルト値false | E-01 (line 49: defaultValue: false) | ○ |
| C-08 | addressフィールドのデフォルト値空文字 | E-01 (line 40-41: defaultValue: "") | ○ |
| C-09 | AddressData.toJsonでシリアライズ | E-01 (line 78) | ○ |

### データモデル層（SetDefaultAddress, CountriesData）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 | SetDefaultAddress.fromJsonで生成 | E-02 (line 14) | ○ |
| C-11 | SetDefaultAddress.addressがnullでも生成可能 | E-02 (line 8: AddressData? address) | ○ |
| C-12 | SetDefaultAddress.toJsonでシリアライズ | E-02 (lines 16-17) | ○ |
| C-13 | CountriesData.fromJsonで生成 | E-03 (lines 20-21) | ○ |
| C-14 | CountriesData.dataが空配列でも生成可能 | E-03 (line 16: List<Data>? data) | ○ |
| C-15 | Data (CountryModel).fromJsonで国データ生成 | E-03 (line 36) | ○ |
| C-16 | States.fromJsonで州データ生成 | E-03 (line 74) | ○ |
| C-17 | Translations.fromJsonで翻訳データ生成 | E-03 (lines 52-53) | ○ |
| C-18 | UpdateAddressModel.fromJsonで生成 | E-04 (lines 20-21) | ○ |

### Bloc層（AddressBloc）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | FetchAddressEventで住所取得成功時にFetchAddressState.success | E-05 (lines 26-27) | ○ |
| C-20 | FetchAddressEventでエラー時にFetchAddressState.fail | E-05 (lines 28-30) | ○ |
| C-21 | RemoveAddressEventで削除成功時にRemoveAddressState.success | E-05 (lines 33-35) | ○ |
| C-22 | RemoveAddressEventでエラー時にRemoveAddressState.fail | E-05 (lines 36-39) | ○ |
| C-23 | SetDefaultAddressEventで成功時にSetDefaultAddressState.success | E-05 (lines 45-46) | ○ |
| C-24 | SetDefaultAddressEventでsuccess=false時にfail | E-05 (lines 47-49) | ○ |
| C-25 | SetDefaultAddressEventでエラー時にfail | E-05 (lines 50-53) | ○ |
| C-26 | SetDefaultAddressEvent時にShowLoaderState発行 | E-05 (line 41) | ○ |
| C-27 | 初期状態がInitialAddressState | E-05 (line 18) | ○ |

### Repository層（AddressRepositoryImp）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | callAddressApiでAddressModel取得 | E-08 (lines 28-37) | ○ |
| C-29 | callAddressApiでApiClientエラー時に例外 | E-08 (line 36: return addressModel!) | ○ |
| C-30 | callRemoveAddressApiでBaseModel取得 | E-08 (lines 40-48) | ○ |
| C-31 | callRemoveAddressApiでApiClientエラー時に例外 | E-08 (line 47: return baseModel!) | ○ |
| C-32 | setDefaultAddressでSetDefaultAddress取得 | E-08 (lines 52-60) | ○ |
| C-33 | setDefaultAddressでApiClientエラー時に例外 | E-08 (line 59: return baseModel!) | ○ |

### Event/State層

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 | FetchAddressEvent生成 | E-06 (lines 14-16) | ○ |
| C-35 | RemoveAddressEvent生成とid設定 | E-06 (lines 18-21) | ○ |
| C-36 | RemoveAddressEventでnull許容 | E-06 (line 19: String? id) | ○ |
| C-37 | SetDefaultAddressEvent生成とid設定 | E-06 (lines 23-26) | ○ |
| C-38 | FetchAddressState.successファクトリ | E-07 (lines 44-45) | ○ |
| C-39 | FetchAddressState.failファクトリ | E-07 (line 47) | ○ |
| C-40 | RemoveAddressState.successファクトリ | E-07 (line 33) | ○ |
| C-41 | RemoveAddressState.failファクトリ | E-07 (line 34) | ○ |
| C-42 | SetDefaultAddressState.successファクトリ | E-07 (lines 55-56) | ○ |
| C-43 | SetDefaultAddressState.failファクトリ | E-07 (line 58) | ○ |

### View層（AddressScreen）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | initStateでFetchAddressEvent発行 | E-09 (lines 32-33) | ○ |
| C-45 | FetchAddressState.successで住所リスト表示 | E-09 (lines 91-94) | ○ |
| C-46 | FetchAddressState.failでEmptyDataView表示 | E-09 (lines 95-97) | ○ |
| C-47 | InitialAddressStateでAddressLoader表示 | E-09 (lines 102-106) | ○ |
| C-48 | ShowLoaderStateでisLoading=true | E-09 (lines 99-101) | ○ |
| C-49 | RemoveAddressState.successで住所削除 | E-09 (lines 107-116) | ○ |
| C-50 | addressModelがnullでEmptyDataView | E-09 (lines 123-125) | ○ |
| C-51 | addressDataが空でAddNewAddressButton | E-09 (lines 126-131) | ○ |
| C-52 | isFromDashboard=trueで表示5件制限 | E-09 (lines 207-211) | ○ |
| C-53 | isFromDashboard=falseで全件表示 | E-09 (line 211) | ○ |
| C-54 | fetchAddressDataでFetchAddressEvent発行 | E-09 (lines 230-233) | ○ |

### View層（SavedAddressList）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | 住所情報の表示（firstName + lastName） | E-10 (lines 39-46) | ○ |
| C-56 | isDefault=trueでデフォルト住所ラベル | E-10 (line 63) | ○ |
| C-57 | isDefault=falseでデフォルト設定ボタン | E-10 (line 64) | ○ |
| C-58 | isFromDashboard=trueでボタン非表示 | E-10 (line 49) | ○ |
| C-59 | デフォルト設定タップでSetDefaultAddressEvent | E-10 (lines 66-69) | ○ |
| C-60 | 編集ボタンでaddAddressScreen遷移 | E-10 (lines 118-126) | ○ |
| C-61 | 削除確認ダイアログ表示 | E-10 (lines 196-228) | ○ |
| C-62 | 「はい」タップでRemoveAddressEvent | E-10 (lines 217-220) | ○ |
| C-63 | 「いいえ」タップでダイアログ閉じる | E-10 (lines 207-212) | ○ |
| C-64 | 住所フォーマット表示 | E-10 (lines 231-240) | ○ |
| C-65 | address1から[]を除去 | E-10 (line 235: replaceAll("[", "").replaceAll("]", "")) | ○ |
| C-66 | stateNameがnullの場合stateを使用 | E-10 (line 235: stateName ?? (addressModel?.state ?? "")) | ○ |
| C-67 | countryNameがnullの場合countryを使用 | E-10 (line 235: countryName ?? (addressModel?.country ?? "")) | ○ |

### View層（AddNewAddressButton, AddressLoader）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-68 | isFromDashboard=falseでボタン表示 | E-11 (lines 25-57) | ○ |
| C-69 | isFromDashboard=trueでボタン非表示 | E-11 (lines 25-27) | ○ |
| C-70 | ボタンタップでaddAddressScreen遷移 | E-11 (lines 33-40) | ○ |
| C-71 | 遷移後reloadコールバック呼び出し | E-11 (lines 36-39) | ○ |
| C-72 | AddressLoaderでスケルトン表示 | E-12 (lines 23-37) | ○ |
| C-73 | isFromDashboard=falseで追加スケルトン | E-12 (lines 22-27) | ○ |
| C-74 | isFromDashboard=trueで追加スケルトン非表示 | E-12 (lines 22-23) | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目はありません。すべてのテストケースがソースコードから直接導出されています。

### 補足：テストカバレッジの留意点
以下の点はテスト実装時に追加考慮が必要です：

1. **ApiClient のモック化**
   - リポジトリ層のテストではApiClientをモックする必要があります
   - 候補：`mockito` / `mocktail` パッケージ

2. **BlocProvider のセットアップ**
   - ウィジェットテストではBlocProviderのセットアップが必要です
   - 候補：`bloc_test` パッケージ

3. **Navigator のモック化**
   - 画面遷移テストではNavigatorのモックが必要です
   - 候補：`mocktail_navigator` / カスタムNavigatorObserver

## 5) リスクフラグ（レビュー観点）

| リスク | レベル | 説明 |
|--------|--------|------|
| 強制アンラップ（!）の使用 | 2 | AddressRepositoryImpでnullの場合クラッシュする可能性（E-08 lines 36, 47, 59） |
| address1!の強制アンラップ | 1 | SavedAddressList._getFormattedAddressでaddress1がnullの場合クラッシュ（E-10 line 235） |
| グローバル変数_addressModel | 1 | AddressScreenで静的変数として定義されており、状態管理上の問題あり（E-09 line 22） |
| エラーメッセージのローカライズ依存 | 0 | StringConstants.somethingWrongがlocalized()される（E-05 lines 38, 52） |

## 6) レビュアーチェックリスト（最小）
- [ ] データモデルの@JsonKeyアノテーションがAPIレスポンスと一致しているか
- [ ] AddressRepositoryImpの強制アンラップ（!）による潜在的なクラッシュリスクを許容するか
- [ ] SavedAddressList._getFormattedAddressのaddress1!がnullの場合のハンドリングが必要か
- [ ] グローバル変数_addressModelの使用が意図的か（状態管理の観点）
- [ ] isFromDashboard=trueの場合の表示件数5件制限が仕様通りか
- [ ] SetDefaultAddressEventでShowLoaderStateを発行する設計が適切か（他のイベントでは発行していない）
