# 画面設計書 2-アプリケーションプロパティ画面

## 概要

本ドキュメントは、Ruby on Rails フレームワークにおけるアプリケーションプロパティ画面の画面設計を定義するものである。

### 本画面の処理概要

本画面は、Railsアプリケーションの開発環境において、アプリケーションの動作環境に関する詳細情報を一覧表示する開発者向けデバッグ画面である。Rails.Infoモジュールによって収集された各種プロパティ情報をHTMLテーブル形式で表示する。

**業務上の目的・背景**：開発者がアプリケーションの実行環境を迅速に把握するために使用される。Railsバージョン、Rubyバージョン、RubyGemsバージョン、Rackバージョン、ミドルウェア構成、データベースアダプタ、環境名などの情報を一元的に確認できる。これにより、デバッグ時の環境確認、チーム間での環境差異の特定、トラブルシューティングが効率化される。

**画面へのアクセス方法**：開発環境において、ブラウザで `/rails/info/properties` または `/rails/info` にアクセスする。ローカルリクエストのみ許可されており、リモートからのアクセスは拒否される。

**主要な操作・処理内容**：
1. Rails.Info.to_htmlメソッドを呼び出し、収集されたプロパティ情報をHTMLテーブルとして生成
2. 各プロパティの名前と値のペアをテーブル行として表示
3. 配列形式の値（例：ミドルウェア一覧）は箇条書きリストとして表示

**画面遷移**：
- 遷移元：Railsウェルカム画面、ルーティング一覧画面、その他の開発ツール画面
- 遷移先：特になし（表示専用画面）

**権限による表示制御**：`before_action :require_local!` によりローカルリクエストのみ許可される。リモートからのアクセスは403 Forbiddenとなる。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 2 | Railties | 主機能 | Rails.Infoによるアプリケーション情報の収集・表示処理 |
| 5 | Action View | 補助機能 | ERBテンプレートによるプロパティ情報のHTML描画 |
| 8 | Action Dispatch | 補助機能 | ローカルリクエスト検証（require_local!） |

## 画面種別

一覧画面（プロパティ情報一覧）

## URL/ルーティング

| HTTP メソッド | URL パターン | コントローラー#アクション |
|--------------|--------------|--------------------------|
| GET | /rails/info | rails/info#index（routesにリダイレクト） |
| GET | /rails/info/properties | rails/info#properties |

## 入出力項目

本画面は表示専用であり、ユーザーからの入力項目は存在しない。

### 出力項目

| 項目名 | 表示形式 | 説明 |
|--------|----------|------|
| プロパティテーブル | HTMLテーブル | 名前と値のペアで構成される2列テーブル |

## 表示項目

| No | 項目ID | 項目名 | データ型 | 取得元 | 備考 |
|----|--------|--------|----------|--------|------|
| 1 | rails_version | Rails version | String | Rails.version | Railsフレームワークのバージョン |
| 2 | ruby_version | Ruby version | String | RUBY_DESCRIPTION | Rubyインタープリタのバージョン |
| 3 | rubygems_version | RubyGems version | String | Gem::VERSION | RubyGemsのバージョン |
| 4 | rack_version | Rack version | String | Rack.release | Rackのバージョン |
| 5 | javascript_runtime | JavaScript Runtime | String | ExecJS.runtime.name | JavaScript実行エンジン名 |
| 6 | middleware | Middleware | Array | Rails.configuration.middleware | ミドルウェアスタック一覧 |
| 7 | application_root | Application root | String | Rails.root | アプリケーションのルートパス |
| 8 | environment | Environment | String | Rails.env | 実行環境名（development等） |
| 9 | application_revision | Application revision | String | Rails.app.revision | アプリケーションのリビジョン |
| 10 | database_adapter | Database adapter | String | ActiveRecord::Base.connection_pool.db_config.adapter | DBアダプタ名 |
| 11 | database_schema_version | Database schema version | Integer | ActiveRecord::Base.connection_pool.migration_context.current_version | スキーマバージョン |

## イベント仕様

本画面は表示専用であり、ユーザーインタラクションによるイベントは存在しない。

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

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

本画面はデータベースへの書き込みは行わない。読み取り専用でスキーマバージョン情報を取得する。

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 画面表示 | schema_migrations | SELECT | スキーマバージョンの取得 |

## メッセージ仕様

本画面ではシステムメッセージの表示は行わない。

## 例外処理

| 例外条件 | 動作 |
|---------|------|
| リモートからのアクセス | 403 Forbiddenエラーを返却 |
| ExecJSランタイムが未設定 | JavaScript Runtime項目は表示されない |
| ActiveRecordが未接続 | Database adapter/schema version項目は表示されない |

## 備考

- 本画面は開発環境でのみ使用される
- 本番環境では通常アクセスできないよう設定される
- プロパティの取得中に例外が発生した項目は、表示から除外される（Rails::Info.propertyメソッドの仕様）
- XHRリクエストの場合、レイアウトなしで描画される

---

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

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

### 推奨読解順序

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

プロパティ情報の収集と保持の仕組みを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | info.rb | `railties/lib/rails/info.rb` | Rails::Infoモジュールの構造とプロパティ登録方法を理解する |

**読解のコツ**:
- `mattr_accessor :properties, default: []` でプロパティ配列を保持
- `property` クラスメソッドで各プロパティを登録（行25-29）
- `to_html` メソッドでHTMLテーブルを生成（行43-56）

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

コントローラーアクションの処理フローを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | info_controller.rb | `railties/lib/rails/info_controller.rb` | propertiesアクションの実装を理解する |

**主要処理フロー**:
1. **7行目**: RESCUES_TEMPLATE_PATHSをビューパスに追加
2. **8行目**: XHRリクエスト時はレイアウトなし
3. **10行目**: `before_action :require_local!` でローカルアクセスのみ許可
4. **16-19行目**: `properties` アクションで `Rails::Info.to_html` を呼び出し

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

HTML描画の仕組みを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | properties.html.erb | `railties/lib/rails/templates/rails/info/properties.html.erb` | テンプレートの構造を理解する |

**主要処理フロー**:
- **1行目**: `@info.html_safe` でHTML安全なプロパティテーブルを出力

#### Step 4: ローカルリクエスト検証を理解する

アクセス制御の仕組みを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | application_controller.rb | `railties/lib/rails/application_controller.rb` | require_local!メソッドの定義を理解する |

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

```
ブラウザリクエスト (GET /rails/info/properties)
    │
    ├─ before_action :require_local!
    │      └─ ローカルIPアドレスチェック
    │
    └─ Rails::InfoController#properties
           │
           ├─ Rails::Info.to_html 呼び出し
           │      │
           │      └─ properties配列をループ
           │             │
           │             ├─ Rails.version
           │             ├─ RUBY_DESCRIPTION
           │             ├─ Gem::VERSION
           │             ├─ Rack.release
           │             ├─ ExecJS.runtime.name
           │             ├─ Rails.configuration.middleware
           │             ├─ Rails.root
           │             ├─ Rails.env
           │             ├─ Rails.app.revision
           │             ├─ ActiveRecord::Base.connection_pool.db_config.adapter
           │             └─ ActiveRecord::Base.connection_pool.migration_context.current_version
           │
           └─ properties.html.erb テンプレート描画
                  │
                  └─ @info.html_safe 出力
```

### データフロー図

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

HTTPリクエスト ──▶ InfoController#properties ──▶ properties.html.erb
(GET /rails/info/properties)
        │
        │ require_local! によるアクセス制御
        │
        └──▶ Rails::Info.to_html
                    │
                    ├─ システム情報取得
                    │    ├─ Rails, Ruby, Rack バージョン
                    │    ├─ ミドルウェア一覧
                    │    └─ DB情報
                    │
                    └─ HTMLテーブル生成
                                                              ↓
                                                    HTML レスポンス
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| info_controller.rb | `railties/lib/rails/info_controller.rb` | コントローラー | プロパティ画面のアクション定義 |
| properties.html.erb | `railties/lib/rails/templates/rails/info/properties.html.erb` | テンプレート | HTML描画テンプレート |
| info.rb | `railties/lib/rails/info.rb` | ソース | プロパティ情報の収集・HTML生成 |
| application_controller.rb | `railties/lib/rails/application_controller.rb` | コントローラー | 親クラス、require_local!定義 |
