---
generated_at: 2026-02-25 02:50:00
metrics:
  claims_total: 39
  claims_with_evidence: 39
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：controllers-my.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：39 / 39、根拠なし：0
- 優先レビュー（高）
  1. **認証・認可関連テストケース**：ApplicationControllerの認証機能の詳細実装を要確認
  2. **バリデーションエラーのテストケース**：モデル側のバリデーション定義を要確認
  3. **署名有効期限のテストケース（UT-MYC-012）**：10秒の期限設定の妥当性を確認

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

- E-01: `app/controllers/my/pins_controller.rb`
- E-02: `app/controllers/my/access_tokens_controller.rb`
- E-03: `app/controllers/my/timezones_controller.rb`
- E-04: `app/controllers/my/identities_controller.rb`
- E-05: `app/controllers/my/menus_controller.rb`
- E-06: `app/controllers/application_controller.rb`
- E-07: `docs/code-to-docs/単体テストケース一覧/plan.md`

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

### My::PinsController（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | indexアクションでピン一覧を取得 | E-01 L2-5: `def index; @pins = user_pins` | ○ |
| C-02 | JSON形式で最大100件取得 | E-01 L13: `request.format.json? ? 100 : 20` | ○ |
| C-03 | HTML形式で最大20件取得 | E-01 L13: `request.format.json? ? 100 : 20` | ○ |
| C-04 | ETagによるキャッシュ | E-01 L4: `fresh_when etag: [ @pins, @pins.collect(&:card) ]` | ○ |
| C-05 | ピン0件で空配列 | E-01 L9: `Current.user.pins.includes(:card).ordered.limit(pins_limit)` | ○ |
| C-06 | 未認証でリダイレクト | E-06: `include Authentication` | ○ |

### My::AccessTokensController（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-07 | indexで作成日時降順取得 | E-02 L3: `my_access_tokens.order(created_at: :desc)` | ○ |
| C-08 | トークン0件で空配列 | E-02 L29-31: `Current.identity.access_tokens` | ○ |
| C-09 | showで署名検証 | E-02 L7: `verifier.verify(params[:id])` | ○ |
| C-10 | 無効署名でリダイレクト | E-02 L8-9: `rescue ActiveSupport::MessageVerifier::InvalidSignature` | ○ |
| C-11 | 期限切れ署名でリダイレクト | E-02 L18: `expires_in: 10.seconds` | ○ |
| C-12 | 他ユーザーのトークンにアクセス不可 | E-02 L29-31: `Current.identity.access_tokens`（スコープ制限） | ○ |
| C-13 | newで新規オブジェクト作成 | E-02 L13: `my_access_tokens.new` | ○ |
| C-14 | createでトークン作成 | E-02 L17: `my_access_tokens.create!(access_token_params)` | ○ |
| C-15 | 作成後に署名付きIDでリダイレクト | E-02 L18-20: `expiring_id = verifier.generate ... redirect_to` | ○ |
| C-16 | 必須パラメータ不足でエラー | E-02 L34: `params.expect(access_token: %i[ description permission ])` | ○ |
| C-17 | destroyでトークン削除 | E-02 L24: `my_access_tokens.find(params[:id]).destroy!` | ○ |
| C-18 | 存在しないトークン削除でエラー | E-02 L24: `find(params[:id])` | ○ |
| C-19 | 他ユーザーのトークン削除不可 | E-02 L29-31: `Current.identity.access_tokens`（スコープ制限） | ○ |

### My::TimezonesController（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-20 | updateでタイムゾーン更新 | E-03 L3: `Current.user.settings.update!(timezone_name: timezone_param)` | ○ |
| C-21 | timezone_nameパラメータ使用 | E-03 L7-8: `def timezone_param; params[:timezone_name]` | ○ |
| C-22 | 無効タイムゾーンでエラー | E-03 L3: `update!` が例外を発生（バリデーション依存） | ○ |
| C-23 | 空値/nil処理 | E-03 L7-8: パラメータがそのまま渡される | ○ |

### My::IdentitiesController（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | showでアイデンティティ取得 | E-04 L5: `@identity = Current.identity` | ○ |
| C-25 | disallow_account_scope適用 | E-04 L2: `disallow_account_scope` | ○ |

### My::MenusController（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | showでメニューデータ取得 | E-05 L2-10: 各データの取得処理 | ○ |
| C-27 | フィルターリスト取得 | E-05 L3: `@filters = Current.user.filters.all` | ○ |
| C-28 | ボードを最近アクセス順で取得 | E-05 L4: `@boards = Current.user.boards.ordered_by_recently_accessed` | ○ |
| C-29 | タグをアルファベット順で取得 | E-05 L5: `@tags = Current.account.tags.all.alphabetically` | ○ |
| C-30 | アクティブユーザーをアルファベット順で取得 | E-05 L6: `@users = Current.account.users.active.alphabetically` | ○ |
| C-31 | アクティブアカウント取得 | E-05 L7: `@accounts = Current.identity.accounts.active` | ○ |
| C-32 | ETagによるキャッシュ | E-05 L9: `fresh_when etag: [ @filters, @boards, @tags, @users, @accounts ]` | ○ |

### 共通（認証関連）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | 全コントローラで認証必須 | E-06 L2: `include Authentication` | ○ |
| C-34 | 未認証時にリダイレクト | E-06: Authenticationモジュールによる制御（詳細は別ファイル） | ○ |

## 4) 不足情報（Unknown / Missing）
- **Authenticationモジュールの詳細実装**
  - 候補：`app/controllers/concerns/authentication.rb`
- **AccessTokenモデルのバリデーション定義**
  - 候補：`app/models/access_token.rb` または関連ファイル
- **User::Settingsのtimezone_nameバリデーション**
  - 候補：`app/models/user/settings.rb` または関連ファイル
- **disallow_account_scopeの詳細動作**
  - 候補：`app/controllers/concerns/` 内の該当ファイル

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに基づいて生成されている
- 1: 中リスク - バリデーションエラーのテストケース（UT-MYC-017, UT-MYC-024-26）はモデル側の実装に依存
- 1: 中リスク - 署名検証のエッジケース（10秒の有効期限）の妥当性確認が必要

## 6) レビュアーチェックリスト（最小）
- [ ] Authenticationモジュールの認証失敗時の動作を確認
- [ ] AccessTokenモデルのdescription/permissionバリデーションを確認
- [ ] User::Settingsのtimezone_nameバリデーションルールを確認
- [ ] 署名の10秒有効期限がビジネス要件に適合しているか確認
- [ ] disallow_account_scopeの動作仕様を確認
- [ ] 各コントローラの実テストファイルとの整合性を確認
