# 画面設計書 16-シンプルデフォルトページネーション

## 概要

本ドキュメントは、Laravelフレームワークにおけるシンプルデフォルトページネーションビューの設計仕様を定義する。

### 本画面の処理概要

シンプルデフォルトページネーションは、「前へ」「次へ」のナビゲーションのみを提供する簡易版ページネーションである。フレームワーク非依存の汎用的なHTML構造を持ち、ページ番号リンクや総件数表示を省略したミニマルなデザインとなっている。SimplePaginator（シンプルページネーター）と組み合わせて使用される。

**業務上の目的・背景**：大量のデータセットを扱う際、全件数をカウントするSQLクエリはパフォーマンス上のオーバーヘッドとなる。シンプルページネーションは総件数を取得せず、「次のページが存在するか」のみを判定するため、大規模データでも高速に動作する。ユーザーがページ番号を直接指定する必要がない、連続的なブラウジング（無限スクロールの代替等）に適している。

**画面へのアクセス方法**：Bladeテンプレート内で`$paginator->links()`を呼び出す。`Paginator`クラス（SimplePaginator）を使用している場合、自動的にシンプルビューが選択される。または`$paginator->links('pagination::simple-default')`で明示的に指定する。

**主要な操作・処理内容**：
1. 前のページへのナビゲーション - 「Previous」テキストリンクで前ページへ移動
2. 次のページへのナビゲーション - 「Next」テキストリンクで次ページへ移動
3. 無効状態の表示 - 先頭/末尾ページで該当リンクを無効化

**画面遷移**：前へ/次へリンクをクリックすると、対応するページURLへGETリクエストで遷移する。

**権限による表示制御**：ページネーションコンポーネント自体には権限制御機能はない。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 50 | ページネーション | 主機能 | 前へ/次へのみの簡易ページネーション表示 |
| 17 | URL生成 | 補助機能 | 前後ページリンクURL生成処理 |

## 画面種別

コンポーネント（シンプルページネーションナビゲーション）

## URL/ルーティング

このコンポーネント自体はルーティングを持たない。ページネーションリンクのURLは以下の形式で生成される：
- 前ページ：`{base_path}?page={current_page - 1}`
- 次ページ：`{base_path}?page={current_page + 1}`

## 入出力項目

| 項目名 | 型 | I/O | 説明 |
|--------|-----|-----|------|
| $paginator | Paginator | 入力 | シンプルページネーション情報を含むPaginatorインスタンス |

## 表示項目

| 項目名 | 表示形式 | CSSクラス | 説明 |
|--------|----------|-----------|------|
| 前へリンク | テキスト「Previous」 | disabled（無効時） | 前ページへのナビゲーション |
| 次へリンク | テキスト「Next」 | disabled（無効時） | 次ページへのナビゲーション |

## イベント仕様

### 1-前へリンククリック

現在のページ番号から1を引いたページへ遷移する。
- 条件：`$paginator->onFirstPage()`がfalseの場合のみリンクが有効
- 表示：翻訳キー`pagination.previous`の値

### 2-次へリンククリック

次のページへ遷移する。
- 条件：`$paginator->hasMorePages()`がtrueの場合のみリンクが有効
- 表示：翻訳キー`pagination.next`の値

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

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| ページリンククリック | - | SELECT | ビュー自体はDB操作を行わない |

### テーブル別更新項目詳細

ページネーションビューはデータベースの更新を行わない。

## メッセージ仕様

| 種別 | メッセージキー | 表示内容 | 表示条件 |
|------|---------------|----------|----------|
| ラベル | pagination.previous | Previous | 前へリンク |
| ラベル | pagination.next | Next | 次へリンク |

## 例外処理

| 状態 | 処理内容 |
|------|----------|
| ページ数が1以下 | ページネーション全体が非表示 |
| 先頭ページ | 前へリンクが無効（disabled）状態で表示 |
| 末尾ページ | 次へリンクが無効（disabled）状態で表示 |

## 備考

- `Paginator`クラス（SimplePaginator）と組み合わせて使用
- LengthAwarePaginatorと異なり、total()やlastPage()メソッドは使用不可
- `$elements`変数はシンプルビューには渡されない
- `@lang`ディレクティブで翻訳を適用

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Paginator.php | `src/Illuminate/Pagination/Paginator.php` | SimplePaginatorの実装、hasMore判定 |
| 1-2 | AbstractPaginator.php | `src/Illuminate/Pagination/AbstractPaginator.php` | $defaultSimpleView（137行目） |

**読解のコツ**: Paginatorクラス（SimplePaginator）はtotalを持たず、perPage+1件を取得して「次があるか」を判定する。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Paginator.php | `src/Illuminate/Pagination/Paginator.php` | render()メソッド（117-122行目） |

**主要処理フロー**:
1. **117行目**: `render()`メソッド定義
2. **119行目**: `$defaultSimpleView`を使用（elementsは渡さない）
3. **77-84行目**: `setItems()`でperPage+1件目の有無をチェック

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | simple-default.blade.php | `src/Illuminate/Pagination/resources/views/simple-default.blade.php` | シンプルな前後ナビゲーション（20行） |

**主要処理フロー**:
- **1行目**: `hasPages()`で表示可否を判定
- **5-6行目**: `onFirstPage()`で前へリンクの無効状態を判定
- **8行目**: 有効な前へリンク
- **12-13行目**: `hasMorePages()`で次へリンクの有効状態を判定
- **15行目**: 無効な次へリンク

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

```
Paginator（SimplePaginator）インスタンス生成
    │
    ├─ setItems() - perPage+1件で次ページ判定
    │      └─ $hasMore = items.count() > perPage
    │
    └─ $paginator->links() / render()
           │
           ├─ Paginator::render()
           │      └─ ViewFactory::make($defaultSimpleView)
           │
           └─ simple-default.blade.php
                  ├─ onFirstPage() → 前へリンク状態
                  ├─ previousPageUrl() → 前ページURL
                  ├─ hasMorePages() → 次へリンク状態
                  └─ nextPageUrl() → 次ページURL
```

### データフロー図

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

Paginator             ──▶ simple-default.blade.php   ──▶ HTML出力
  - currentPage            │                             <nav>
  - hasMore                ├─ 前へリンク判定               <ul class="pagination">
  - perPage                │   onFirstPage()               <li>
                           │                                 Previous
                           └─ 次へリンク判定               </li>
                               hasMorePages()               <li>
                                                             Next
                                                           </li>
                                                           </ul>
                                                           </nav>
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| simple-default.blade.php | `src/Illuminate/Pagination/resources/views/simple-default.blade.php` | テンプレート | シンプルページネーション描画 |
| Paginator.php | `src/Illuminate/Pagination/Paginator.php` | ソース | SimplePaginator本体 |
| AbstractPaginator.php | `src/Illuminate/Pagination/AbstractPaginator.php` | ソース | 基底クラス、defaultSimpleView定義 |
| PaginationServiceProvider.php | `src/Illuminate/Pagination/PaginationServiceProvider.php` | ソース | ビュー登録 |
