# 画面設計書 1-該当なし

## 概要

本ドキュメントは、dplyrプロジェクトにおける画面設計書です。dplyrはRプログラミング言語用のデータ操作ライブラリであり、ユーザーインターフェース（GUI画面）は存在しません。本ドキュメントでは、画面が存在しない理由と、代替としてdplyrのコマンドラインインターフェース（関数API）について説明します。

### 本画面の処理概要

dplyrはユーザーインターフェース画面を持たないRライブラリです。画面の代わりに、Rコンソールまたはスクリプトから呼び出す関数群を提供しています。

**業務上の目的・背景**：dplyrは「データフレーム操作の文法（A Grammar of Data Manipulation）」を提供するライブラリです。データ分析において頻繁に行われるデータの抽出、変換、集計、結合といった操作を、直感的で一貫性のある関数インターフェースで実現することを目的としています。GUIではなくコマンドラインベースのAPIを採用することで、再現可能なデータ分析ワークフローの構築、スクリプトによる自動化、バージョン管理との親和性を実現しています。

**画面へのアクセス方法**：本プロジェクトに画面は存在しません。dplyrの機能にアクセスするには、Rコンソール、RStudio、Jupyter Notebook等のR実行環境から `library(dplyr)` コマンドでライブラリを読み込み、提供される関数を呼び出します。

**主要な操作・処理内容**：
1. `filter()` / `filter_out()` - 条件に基づいて行を抽出または除外
2. `select()` - 列を選択・リネーム
3. `mutate()` - 新しい列を作成または既存列を変更
4. `summarise()` - データを集計して要約統計量を算出
5. `arrange()` - 行を並べ替え
6. `group_by()` - グループ化操作の適用
7. `join` 系関数 - 複数データフレームの結合

**画面遷移**：画面が存在しないため、画面遷移は該当しません。ただし、dplyrの関数はパイプ演算子（`|>` または `%>%`）でチェーン接続でき、データ処理フローを構築できます。

**権限による表示制御**：本プロジェクトはRライブラリであり、権限による表示制御の概念は該当しません。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | 本プロジェクトはRライブラリであり、画面機能マッピングは適用外です |

## 画面種別

該当なし（Rライブラリのため画面は存在しません）

## URL/ルーティング

該当なし（Webアプリケーションではありません）

## 入出力項目

本プロジェクトは画面を持たないため、画面の入出力項目は該当しません。

代わりに、dplyrの主要関数の入出力を以下に示します。

| 関数名 | 入力 | 出力 | 説明 |
|--------|------|------|------|
| filter() | データフレーム、論理条件 | データフレーム（行のサブセット） | 条件に合致する行を抽出 |
| select() | データフレーム、列指定 | データフレーム（列のサブセット） | 指定した列を選択 |
| mutate() | データフレーム、式 | データフレーム（列追加/変更済み） | 新しい列を作成・変更 |
| summarise() | データフレーム、集計式 | データフレーム（集計結果） | 集計統計量を算出 |
| arrange() | データフレーム、並べ替え条件 | データフレーム（並べ替え済み） | 行を並べ替え |
| group_by() | データフレーム、グループ化変数 | グループ化データフレーム | 後続操作のグループ化を設定 |

## 表示項目

該当なし（画面は存在しません）

## イベント仕様

該当なし（GUIイベントは存在しません）

dplyrの関数呼び出しは即時実行され、処理結果がRコンソールに表示されるか、変数に代入されます。

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| - | - | - | dplyrはインメモリのデータフレーム操作ライブラリであり、直接データベースを更新しません |

### 備考

dplyrはインメモリのデータフレームを操作するライブラリです。データベースとの連携には、別パッケージの `dbplyr` を使用します。dbplyrを使用すると、dplyrの関数がSQLに変換されてデータベースに対して実行されます。

## メッセージ仕様

dplyrは以下のような条件でメッセージを出力します。

| 種別 | 条件 | メッセージ例 |
|------|------|------------|
| 情報 | select()でグループ化変数が含まれていない場合 | "Adding missing grouping variables: `group_var`" |
| 警告 | 非推奨の関数が使用された場合 | lifecycle パッケージによる非推奨警告 |
| エラー | 不正な引数が渡された場合 | "`..1` must be a logical vector, not {type}" |
| エラー | filter()で論理値以外が返された場合 | "must be a logical vector" |
| エラー | mutate()で結果サイズが不一致の場合 | "must be size {expected}, not {actual}" |

## 例外処理

| 例外条件 | 発生関数 | エラーメッセージ | 対処方法 |
|----------|----------|-----------------|----------|
| 不正な型の引数 | filter() | "`..1` must be a logical vector" | 論理ベクトルを返す条件式を指定 |
| サイズ不一致 | mutate() | "must be size {n} or 1" | 正しい長さのベクトルまたはスカラーを返す |
| 存在しない列 | select() | "Column `name` doesn't exist" | 存在する列名を指定 |
| NULL引数 | 各関数 | 引数に関するエラー | 有効な値を指定 |

## 備考

- dplyrはtidyverseエコシステムの中核パッケージの一つです
- バージョン1.2.0.9000（開発版）
- 主要な依存パッケージ: rlang, vctrs, tibble, tidyselect, pillar
- dplyrの関数はジェネリック関数として実装されており、他のパッケージが独自のメソッドを提供可能です

---

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

本プロジェクトはRライブラリであり画面は存在しませんが、dplyrのコード構造を理解するための読解ガイドを以下に示します。

### 推奨読解順序

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

dplyrの中核となるデータ構造はRのdata.frameおよびtibbleです。dplyrはこれらに対する操作を提供します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | grouped-df.R | `R/grouped-df.R` | グループ化データフレームの構造と属性を理解する |
| 1-2 | data-mask.R | `R/data-mask.R` | データマスク（式の評価環境）の仕組みを理解する |
| 1-3 | rowwise.R | `R/rowwise.R` | 行ごと処理のデータ構造を理解する |

**読解のコツ**: Rのジェネリック関数とメソッドディスパッチの仕組み（`UseMethod()`）を理解しておくと、dplyrの拡張性の高い設計が理解しやすくなります。

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

dplyrの主要な動詞（verb）関数がエントリーポイントとなります。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | dplyr.R | `R/dplyr.R` | パッケージのロード時の初期化処理、インポート宣言を確認 |
| 2-2 | filter.R | `R/filter.R` | filter関数の実装。216-228行目でジェネリック関数定義 |
| 2-3 | select.R | `R/select.R` | select関数の実装。53-55行目でジェネリック関数定義 |
| 2-4 | mutate.R | `R/mutate.R` | mutate関数の実装。145-147行目でジェネリック関数定義 |

**主要処理フロー**:
1. **216-219行目（filter.R）**: `filter()`ジェネリック関数定義、`UseMethod("filter")`でメソッドディスパッチ
2. **231-239行目（filter.R）**: `filter.data.frame()`メソッド実装、`filter_impl()`を呼び出し
3. **252-283行目（filter.R）**: `filter_impl()`でquosures処理、DataMask作成、行のフィルタリング実行

#### Step 3: データマスクと式評価を理解する

dplyrの核心的な機能であるtidy evaluationの仕組みを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | data-mask.R | `R/data-mask.R` | DataMask R6クラスの実装。式をデータフレームのコンテキストで評価する仕組み |
| 3-2 | context.R | `R/context.R` | cur_data(), cur_group()などのコンテキスト関数 |
| 3-3 | pick.R | `R/pick.R` | pick()関数によるtidy-select統合 |

**主要処理フロー**:
- **data-mask.R**: `DataMask$new()`でマスク作成、`$eval_all_filter()`や`$eval_all_mutate()`で式を評価

#### Step 4: グループ操作を理解する

group_byとそれに関連する処理を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | group-by.R | `R/group-by.R` | group_by()の実装とグループ構造の構築 |
| 4-2 | group-data.R | `R/group-data.R` | グループ情報へのアクセス関数 |
| 4-3 | summarise.R | `R/summarise.R` | グループごとの集計処理 |

#### Step 5: 結合操作を理解する

join関数群の実装を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 5-1 | join.R | `R/join.R` | left_join, right_join等の実装 |
| 5-2 | join-by.R | `R/join-by.R` | join_by()による結合条件指定 |
| 5-3 | join-cols.R | `R/join-cols.R` | 結合時の列処理 |
| 5-4 | join-rows.R | `R/join-rows.R` | 結合時の行マッチング処理 |

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

dplyrの主要な関数呼び出し関係を示します。

```
filter(.data, ...)
    │
    ├─ UseMethod("filter")  [ジェネリックディスパッチ]
    │      │
    │      └─ filter.data.frame()
    │             │
    │             └─ filter_impl()
    │                    ├─ compute_by()  [.by引数の処理]
    │                    ├─ filter_rows()
    │                    │      ├─ DataMask$new()
    │                    │      ├─ filter_expand()
    │                    │      │      └─ expand_pick() / expand_if_across()
    │                    │      └─ filter_eval()
    │                    │             └─ mask$eval_all_filter()
    │                    └─ dplyr_row_slice()
    │
mutate(.data, ...)
    │
    ├─ UseMethod("mutate")
    │      │
    │      └─ mutate.data.frame()
    │             ├─ compute_by()
    │             ├─ mutate_cols()
    │             │      ├─ DataMask$new()
    │             │      └─ mutate_col() [各式を処理]
    │             │             ├─ expand_pick() / expand_across()
    │             │             └─ mask$eval_all_mutate()
    │             ├─ dplyr_col_modify()
    │             ├─ mutate_relocate()
    │             └─ mutate_keep()
```

### データフロー図

dplyrの典型的なデータ処理フローを示します。

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

data.frame / tibble ───▶ filter() ───▶ 行サブセット
       │                     │
       │                     ▼
       │               select() ───▶ 列サブセット
       │                     │
       │                     ▼
       │               mutate() ───▶ 列追加/変更
       │                     │
       │                     ▼
       │              group_by() ───▶ グループ化
       │                     │
       │                     ▼
       │             summarise() ───▶ 集計結果
       │                     │
       │                     ▼
       │              arrange() ───▶ 並べ替え済み
       │                     │
       └─────────────────────┴──────▶ data.frame / tibble
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| DESCRIPTION | `DESCRIPTION` | 設定 | パッケージメタデータ、依存関係定義 |
| NAMESPACE | `NAMESPACE` | 設定 | エクスポート関数、インポート宣言 |
| dplyr.R | `R/dplyr.R` | ソース | パッケージ定義、グローバル設定 |
| filter.R | `R/filter.R` | ソース | filter(), filter_out()関数実装 |
| select.R | `R/select.R` | ソース | select()関数実装 |
| mutate.R | `R/mutate.R` | ソース | mutate()関数実装 |
| summarise.R | `R/summarise.R` | ソース | summarise()関数実装 |
| arrange.R | `R/arrange.R` | ソース | arrange()関数実装 |
| group-by.R | `R/group-by.R` | ソース | group_by()関数実装 |
| join.R | `R/join.R` | ソース | join関数群実装 |
| data-mask.R | `R/data-mask.R` | ソース | DataMask R6クラス（式評価の核心） |
| context.R | `R/context.R` | ソース | cur_*()コンテキスト関数 |
| grouped-df.R | `R/grouped-df.R` | ソース | グループ化データフレーム定義 |
| rowwise.R | `R/rowwise.R` | ソース | rowwise()関数実装 |
| slice.R | `R/slice.R` | ソース | slice系関数実装 |
| distinct.R | `R/distinct.R` | ソース | distinct()関数実装 |
| bind-rows.R | `R/bind-rows.R` | ソース | bind_rows()関数実装 |
| generics.R | `R/generics.R` | ソース | ジェネリック関数宣言 |
| vctrs.R | `R/vctrs.R` | ソース | vctsパッケージ連携 |
| zzz.R | `R/zzz.R` | ソース | パッケージロード/アンロードフック |
