# 機能設計書 6-Action Pack

## 概要

本ドキュメントは、Ruby on RailsフレームワークにおけるAction Packの機能設計を記述する。Action Packは、Web-flow・レンダリングフレームワークとしてMVCアーキテクチャのVC（ControllerとView）を担当し、Rackサーバーと連携してHTTPリクエスト/レスポンスを処理する。

### 本機能の処理概要

Action Packは、Action ControllerとAction Dispatchを統合したパッケージであり、WebリクエストのルーティングからレスポンスのレンダリングまでのWebフロー全体を管理する。

**業務上の目的・背景**：Webアプリケーションでは、HTTPリクエストを受け取り、適切なビジネスロジックを実行し、レスポンスを返すという一連のフローを効率的に処理する必要がある。Action Packは、このフローを統一的なインターフェースで提供し、ルーティング、パラメータ処理、セッション管理、レンダリングなどの共通機能を標準化することで、開発者が本質的なビジネスロジックに集中できる環境を提供する。

**機能の利用シーン**：
- HTTPリクエストのルーティング
- コントローラでのリクエスト処理
- パラメータの取得とバリデーション
- セッション・Cookie管理
- レスポンスのレンダリング
- ミドルウェアによるリクエスト/レスポンス処理

**主要な処理内容**：
1. Action Dispatchによるルーティングとミドルウェア管理
2. Action Controllerによるリクエスト処理とレスポンス生成
3. Rackインターフェースとの連携
4. パラメータパースとStrong Parameters
5. セッション・Cookie管理
6. CSRF保護
7. コンテンツネゴシエーション

**関連システム・外部連携**：
- Rack: Webサーバーインターフェース
- Action View: ビューレンダリング
- Active Model: フォーム処理との連携

**権限による制御**：Action Packはbefore_actionによる認可フィルタリングの仕組みを提供する。具体的な認可ロジックはDevise、Pundit等のgemで実装される。

## 関連画面

Action Packはフレームワークの中核として、すべての画面で間接的に利用される。

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | 全画面共通 | 基盤機能 | ルーティング、コントローラ処理、レンダリング |

## 機能種別

Web-flowフレームワーク / リクエスト処理 / レスポンス生成

## 入力仕様

### 入力パラメータ

Action PackはAction ControllerとAction Dispatchを含むパッケージであり、詳細な入力仕様はそれぞれの機能設計書（No.7、No.8）を参照。

### 入力データソース

- HTTPリクエスト
- Rackミドルウェアからの入力
- config/routes.rb

## 出力仕様

### 出力データ

- HTTPレスポンス
- Rackレスポンス（[status, headers, body]）

### 出力先

- Webクライアント（ブラウザ等）
- Rackサーバー

## 処理フロー

### 処理シーケンス

```
1. HTTPリクエスト受信
   └─ Rackサーバーからリクエストを受け取る
2. ミドルウェアスタック処理
   └─ 各ミドルウェアが順次処理
3. ルーティング
   └─ URLパターンからコントローラ・アクションを特定
4. コントローラ処理
   └─ アクションメソッドの実行
5. レンダリング
   └─ ビューまたはJSONの生成
6. ミドルウェアスタック（復路）
   └─ レスポンスの後処理
7. HTTPレスポンス送信
   └─ クライアントへのレスポンス返却
```

### フローチャート

```mermaid
flowchart TD
    A[HTTPリクエスト] --> B[Rackサーバー]
    B --> C[ミドルウェアスタック]
    C --> D[Action Dispatch]
    D --> E{ルーティング}
    E -->|マッチ| F[Action Controller]
    E -->|不一致| G[RoutingError]
    F --> H[アクション実行]
    H --> I[レンダリング]
    I --> J[ミドルウェアスタック復路]
    J --> K[HTTPレスポンス]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | MVC分離 | コントローラはビジネスロジック、ビューは表示を担当 | 常時 |
| BR-002 | RESTful設計 | リソースベースのルーティングを推奨 | routes.rb定義時 |
| BR-003 | ミドルウェア順序 | ミドルウェアは定義順に実行される | リクエスト処理時 |

### 計算ロジック

特記なし（詳細はAction Controller、Action Dispatchを参照）。

## データベース操作仕様

Action Pack自体は直接データベース操作を行わない。

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| - | - | - | Action Pack自体はDB操作を行わない |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 404 | ActionController::RoutingError | ルートが見つからない | routes.rbを確認 |
| 500 | 各種例外 | アクション内でのエラー | エラーハンドリングを実装 |

### リトライ仕様

リクエスト処理でのリトライは行われない。

## トランザクション仕様

Action Packはトランザクション管理を直接行わない。

## パフォーマンス要件

- ルーティングは最適化されたステートマシンで高速処理
- ミドルウェアスタックのオーバーヘッドは最小限

## セキュリティ考慮事項

- CSRF保護（RequestForgeryProtection）
- セッション・Cookieの暗号化
- Strong Parametersによるパラメータフィルタリング
- Content Security Policyの設定

## 備考

Action Packは `actionpack` gem として提供される。Action DispatchとAction Controllerを含む。

---

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

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

### 推奨読解順序

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

Action Packのパッケージ構成を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | action_pack.rb | `actionpack/lib/action_pack.rb` | パッケージの基本定義 |

**読解のコツ**: Action PackはAction DispatchとAction Controllerを統合したパッケージであることを理解する。

**主要処理フロー**:
- **27行目**: action_pack/version の読み込み

#### Step 2: Action Dispatchを理解する

ルーティングとミドルウェアを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | action_dispatch.rb | `actionpack/lib/action_dispatch.rb` | Action Dispatchモジュールの構成 |

（詳細は No.8 Action Dispatch を参照）

#### Step 3: Action Controllerを理解する

コントローラ処理を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | action_controller.rb | `actionpack/lib/action_controller.rb` | Action Controllerモジュールの構成 |

（詳細は No.7 Action Controller を参照）

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

```
Action Pack
    │
    ├─ Action Dispatch
    │      ├─ Routing (ルーティング)
    │      ├─ Middleware (ミドルウェア)
    │      ├─ Request (リクエスト)
    │      └─ Response (レスポンス)
    │
    └─ Action Controller
           ├─ Base (基底コントローラ)
           ├─ Metal (軽量コントローラ)
           ├─ API (APIコントローラ)
           └─ 各種機能モジュール
```

### データフロー図

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

HTTPリクエスト ───▶ Rackサーバー ───▶ ミドルウェアスタック
       │                                    │
       ▼                                    ▼
                    Action Dispatch ───▶ ルーティング
                           │
                           ▼
                    Action Controller ───▶ アクション実行
                           │
                           ▼
                    Action View ───▶ レンダリング
                           │
                           ▼
                    HTTPレスポンス ◀─── Rackサーバー
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| action_pack.rb | `actionpack/lib/action_pack.rb` | ソース | パッケージエントリーポイント |
| action_dispatch.rb | `actionpack/lib/action_dispatch.rb` | ソース | Action Dispatchモジュール |
| action_controller.rb | `actionpack/lib/action_controller.rb` | ソース | Action Controllerモジュール |
| version.rb | `actionpack/lib/action_pack/version.rb` | ソース | バージョン情報 |
