---
generated_at: 2026-02-25 10:30:00
metrics:
  claims_total: 28
  claims_with_evidence: 28
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：models-column 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：28 / 28、根拠なし：0
- 優先レビュー（高）
  1. **トランザクション確認（UT-COL-028）**：実際のDB挙動の検証が必要
  2. **非連続positionでの隣接取得（UT-COL-013, UT-COL-016）**：エッジケースの確認推奨
  3. **swap_position_withのnil引数（UT-COL-027）**：早期リターンの挙動確認

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

- E-01: `app/models/column/colored.rb` - Column::Coloredモジュール（13行）
- E-02: `app/models/column/positioned.rb` - Column::Positionedモジュール（53行）
- E-03: `app/models/column.rb` - Columnモデル本体（10行）
- E-04: `app/models/color.rb` - Colorクラス定義（25行）
- E-05: `test/models/column_test.rb` - 既存のColumnモデルテスト（27行）

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

### Column::Colored モジュール（UT-COL-001 〜 UT-COL-004）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | colorメソッドでColorオブジェクトが返却される | E-01 L10-12: `Color.for_value(super)` | ○ |
| C-02 | 無効な色値でDEFAULT_COLORが返却される | E-01 L11: `\|\| DEFAULT_COLOR` | ○ |
| C-03 | 未設定時にDEFAULT_COLORが自動設定される | E-01 L7: `self[:color] \|\|= DEFAULT_COLOR.value` | ○ |
| C-04 | 既存色値は上書きされない | E-01 L7: `\|\|=` 演算子の挙動 | ○ |

### Column::Positioned モジュール - set_position（UT-COL-005 〜 UT-COL-006）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-05 | 新規作成時に最大position+1が設定される | E-02 L39-41: `max_position + 1` | ○ |
| C-06 | カラムなしでposition=1が設定される | E-02 L40: `maximum(:position) \|\| 0` + L41 | ○ |

### Column::Positioned モジュール - move_left/move_right（UT-COL-007 〜 UT-COL-010）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-07 | move_leftで左カラムとposition入れ替え | E-02 L10-11: `swap_position_with left_column` | ○ |
| C-08 | 最左端でmove_left無効 | E-02 L44-45: `return if other_column.nil?` | ○ |
| C-09 | move_rightで右カラムとposition入れ替え | E-02 L14-15: `swap_position_with right_column` | ○ |
| C-10 | 最右端でmove_right無効 | E-02 L44-45: `return if other_column.nil?` | ○ |

### Column::Positioned モジュール - left_column/right_column（UT-COL-011 〜 UT-COL-016）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | left_columnで左隣が取得できる | E-02 L18-19: `where("position < ?", position).sorted.last` | ○ |
| C-12 | 最左端でleft_columnがnil | E-02 L18-19: 条件に合うカラムなしでnil | ○ |
| C-13 | 非連続positionで直近の左カラムが返る | E-02 L19: `.sorted.last` により最大値を取得 | ○ |
| C-14 | right_columnで右隣が取得できる | E-02 L22-23: `where("position > ?", position).sorted.first` | ○ |
| C-15 | 最右端でright_columnがnil | E-02 L22-23: 条件に合うカラムなしでnil | ○ |
| C-16 | 非連続positionで直近の右カラムが返る | E-02 L23: `.sorted.first` により最小値を取得 | ○ |

### Column::Positioned モジュール - leftmost?/rightmost?（UT-COL-017 〜 UT-COL-020）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | 最左端でleftmost?がtrue | E-02 L26-27: `left_column.nil?` | ○ |
| C-18 | 最左端以外でleftmost?がfalse | E-02 L26-27: left_columnが存在する場合 | ○ |
| C-19 | 最右端でrightmost?がtrue | E-02 L30-31: `right_column.nil?` | ○ |
| C-20 | 最右端以外でrightmost?がfalse | E-02 L30-31: right_columnが存在する場合 | ○ |

### Column::Positioned モジュール - adjacent_columns（UT-COL-021 〜 UT-COL-024）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | 両隣がある場合に2件返却 | E-02 L34-35: `where(id: [left_column&.id, right_column&.id].compact)` | ○ |
| C-22 | 最左端で右隣のみ返却 | E-02 L35: `compact`によりnilが除外される | ○ |
| C-23 | 最右端で左隣のみ返却 | E-02 L35: `compact`によりnilが除外される | ○ |
| C-24 | カラム1つで空Relation | E-02 L35: 両方nilで`compact`後に空配列 | ○ |

### Column::Positioned モジュール - sorted/swap_position_with（UT-COL-025 〜 UT-COL-028）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | sortedでposition昇順 | E-02 L5: `order(position: :asc)` | ○ |
| C-26 | swap_position_withでposition入れ替え | E-02 L47-50: `update_column`で相互更新 | ○ |
| C-27 | nilで何も起きない | E-02 L45: `return if other_column.nil?` | ○ |
| C-28 | トランザクション内で更新 | E-02 L47: `transaction do` | ○ |

## 4) 不足情報（Unknown / Missing）
- なし（全テストケースがソースコードに基づいて生成されている）

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードから直接導出されている
- 補足事項:
  - トランザクションの挙動（C-28）は統合テストでの検証も推奨
  - `update_column`はバリデーション・コールバックをスキップする点に注意

## 6) レビュアーチェックリスト（最小）
- [ ] Column::Coloredの色値フォールバック挙動が期待通りか確認
- [ ] Column::Positionedのposition自動設定が競合状態で問題ないか確認
- [ ] swap_position_withのトランザクション分離レベルが適切か確認
- [ ] adjacent_columnsの返却型（ActiveRecord::Relation）が期待通りか確認
- [ ] 既存テスト（E-05）との整合性を確認
