# 画面設計書 70-公開ボードNot Now画面

## 概要

本ドキュメントは、Fizzyアプリケーションにおける公開ボードNot Now画面の設計仕様を定義するものである。

### 本画面の処理概要

この画面は、公開ボード内の「Not Now」（延期）カラムを全画面表示するための画面である。延期状態のカードを一覧表示し、各カードの詳細画面へのリンクを提供する。未認証ユーザーでもアクセス可能。

**業務上の目的・背景**：現時点では対応しないが、将来的に検討する可能性があるアイテムを確認するための画面を提供する。外部ステークホルダーが「後回しにされているアイテム」を把握できるようにし、プロジェクトの優先順位付けの透明性を高める。

**画面へのアクセス方法**：公開ボード詳細画面の「Not Now」カラムにある「最大化」ボタン（グリッドアイコン）をクリックしてアクセス。または直接URL（`/public/boards/:board_id/columns/not_now`）にアクセス。

**主要な操作・処理内容**：
1. 「Not now」カラムタイトルの表示
2. 延期されたカードの一覧表示（ページネーション対応）
3. 各カードの詳細画面への遷移
4. 公開ボード詳細画面への戻り

**画面遷移**：
- 遷移元：公開ボード詳細画面
- 遷移先：公開カード詳細画面、公開ボード詳細画面

**権限による表示制御**：認証不要（未ログインでもアクセス可能）。ただし、ボードが公開設定されている必要あり。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 86 | 公開ボード閲覧 | 主機能 | 公開ボードのNot Nowカラムを表示 |

## 画面種別

一覧（公開ビュー）

## URL/ルーティング

`GET /public/boards/:board_id/columns/not_now`

- `:board_id`はBoard::Publicationのkey

## 入出力項目

（入力項目なし - 閲覧のみ）

## 表示項目

| 項目名 | 説明 |
|--------|------|
| ページタイトル | 「Column: Not now」固定 |
| 戻るリンク | 公開ボード詳細画面への戻りリンク（ボード名を表示） |
| カード一覧 | 延期されたカードのプレビュー一覧 |
| ページネーション | 自動ページネーション（スクロール時） |
| 空状態メッセージ | カードがない場合「No cards here」 |
| フッター | Fizzyのコロフォン |

## イベント仕様

### 1-カードクリック

公開カード詳細画面（`/public/boards/:board_id/cards/:id`）に遷移する。

### 2-戻るリンク押下

公開ボード詳細画面（`/public/boards/:board_id`）に遷移する。

### 3-スクロール

自動ページネーションにより、追加のカードを読み込む。

## データベース更新仕様

（データベース更新なし - 閲覧のみ）

## メッセージ仕様

| メッセージ種別 | メッセージ内容 | 表示条件 |
|---------------|---------------|----------|
| 空状態 | No cards here | カラム内にカードがない場合 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| 公開キーが見つからない | 404エラー |
| アカウントがキャンセル済み | 404エラー |

## 備考

- HTTPキャッシュ：30秒のpublic cacheが設定されている
- カードはpostponed（延期）でlatest（最新順）で取得
- ストリームカラムとは異なり、with_golden_firstは適用されない
- Turbo Frameを使用した自動ページネーション対応
- 左矢印キーまたはEscキーで戻ることが可能（ホットキー対応）
- Not Nowカラムはシステム定義のため、IDではなく専用ルート（`/columns/not_now`）を使用

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

延期カードの取得ロジックを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | not_nows_controller.rb | `app/controllers/public/boards/columns/not_nows_controller.rb` | showアクション、カード取得ロジック |

**読解のコツ**:
- `@board.cards.postponed.latest` で延期カードを取得
- ストリームとは異なり、`with_golden_first` は適用されていない

#### Step 2: エントリーポイントを理解する

公開用コントローラーの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | base_controller.rb | `app/controllers/public/base_controller.rb` | 公開用ベースコントローラー |
| 2-2 | not_nows_controller.rb | `app/controllers/public/boards/columns/not_nows_controller.rb` | showアクション |

**主要処理フロー（not_nows_controller.rb）**:
1. **2-3行目**: showアクション - postponedカードを取得
2. Columnモデルを経由せず直接カードを取得（システム定義カラム）

#### Step 3: ビューテンプレートを理解する

画面構成を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | show.html.erb | `app/views/public/boards/columns/not_nows/show.html.erb` | メインテンプレート |

**主要処理フロー（show.html.erb）**:
- **1行目**: ページタイトルを「Column: Not now」に設定
- **4-5行目**: 戻るリンク（公開ボード詳細へ）
- **13-24行目**: カード一覧表示（Turbo Frame）
- **17-19行目**: ページネーション付きカード表示
- **21行目**: 空状態メッセージ

### プログラム呼び出し階層図

```
[ユーザー] Not Nowカラム最大化ボタンクリック
    │
    └─ GET /public/boards/:board_id/columns/not_now
           │
           ├─ Public::BaseController
           │      │
           │      ├─ allow_unauthenticated_access
           │      │
           │      ├─ set_board
           │      │
           │      └─ set_public_cache_expiration
           │
           └─ Public::Boards::Columns::NotNowsController#show
                  │
                  └─ set_page_and_extract_portion_from
                         │
                         └─ @board.cards.postponed.latest
```

### データフロー図

```
[入力]                          [処理]                               [出力]

GET /public/boards/:key/columns/not_now
                                      │
                                      ▼
                           Public::Boards::Columns::NotNowsController#show
                                      │
                                      ├─ @board = Board.find_by_published_key
                                      │
                                      └─ @board.cards.postponed.latest
                                             │
                                             ▼
                                    public/boards/columns/not_nows/show.html.erb
                                             │
                                             └─ render "cards/display/public_previews"
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| not_nows_controller.rb | `app/controllers/public/boards/columns/not_nows_controller.rb` | コントローラー | 公開Not Now表示 |
| base_controller.rb | `app/controllers/public/base_controller.rb` | コントローラー | 公開用ベース |
| show.html.erb | `app/views/public/boards/columns/not_nows/show.html.erb` | ビュー | Not Now画面 |
| _public_previews.html.erb | `app/views/cards/display/_public_previews.html.erb` | パーシャル | カードプレビュー一覧 |
| _public_preview.html.erb | `app/views/cards/display/_public_preview.html.erb` | パーシャル | カードプレビュー |
| _footer.html.erb | `app/views/public/_footer.html.erb` | パーシャル | フッター |
| routes.rb | `config/routes.rb` | 設定 | ルーティング定義（198行目） |
