# 機能設計書 78-band_members

## 概要

本ドキュメントは、dplyrパッケージの`band_members`データセットに関する機能設計書です。`band_members`は、バンドメンバーの情報を含む小規模なサンプルデータセットで、結合操作（join）のデモンストレーションに使用されます。

### 本機能の処理概要

`band_members`データセットは、Beatles（ビートルズ）とRolling Stones（ローリング・ストーンズ）のメンバー情報を含むtibbleです。`band_instruments`データセットと組み合わせて、各種結合操作（join）の説明・教育に使用されます。

**業務上の目的・背景**：データ結合操作（join）の学習には、関連性を持つ複数のデータセットが必要です。`band_members`と`band_instruments`は、シンプルな構造ながら様々な結合操作（left_join, right_join, inner_join, full_join, semi_join, anti_join）の違いを明確に示すことができます。また、スライドや資料に全体を表示できる小さなサイズのデータセットとして設計されています。

**機能の利用シーン**：
- 結合操作（join）の学習・教育
- スライドやプレゼンテーションでのデモ
- left_join/right_join/inner_join/full_joinの違いの説明
- semi_join/anti_joinのフィルタリング結合の説明
- キー列の重要性の理解

**主要な処理内容**：
1. パッケージ読み込み時にデータセットがlazyloadingされる
2. `band_members`と入力するとtibbleがコンソールに表示される
3. 結合操作のデモンストレーションに使用される

**関連システム・外部連携**：外部連携はありません。

**権限による制御**：特になし。dplyrをロードすれば誰でもアクセス可能です。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | 該当なし | - | 本プロジェクトはRライブラリであり、ユーザーインターフェース画面は存在しません |

## 機能種別

サンプルデータセット / 教育用データ

## 入力仕様

### 入力パラメータ

データセットであるため、入力パラメータはありません。

### 入力データソース

パッケージ内に格納された`.rda`ファイルから読み込まれます。

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| name | character | メンバー名（Mick, John, Paul） |
| band | character | 所属バンド（Stones, Beatles） |

### 出力先

R環境内のオブジェクトとして参照されます。

## 処理フロー

### 処理シーケンス

```
1. dplyrパッケージのロード
   └─ library(dplyr)またはdplyr::band_members
2. データセットのlazy loading
   └─ .rdaファイルからデータが読み込まれる
3. tibbleとして利用可能
   └─ 3行2列のtibble
```

### フローチャート

```mermaid
flowchart TD
    A[library dplyr] --> B[lazy loading]
    B --> C[band_members tibble 利用可能]
    C --> D{結合操作}
    D -->|left_join| E[band_instruments と結合]
    D -->|right_join| F[band_instruments と結合]
    D -->|inner_join| G[band_instruments と結合]
    D -->|full_join| H[band_instruments と結合]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-78-01 | 読み取り専用 | データセットは変更不可（コピーして使用） | 常時 |
| BR-78-02 | tibble形式 | data.frameではなくtibbleとして提供 | 常時 |
| BR-78-03 | 最小サイズ | スライドに全体表示できるサイズ（3行2列） | 常時 |
| BR-78-04 | キー列 | name列がband_instrumentsとの結合キー | 結合操作時 |

### 計算ロジック

計算ロジックはありません。静的なデータセットです。

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

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

本機能はデータベースを操作しません。

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| - | - | - | メモリ内データのみ |

## エラー処理

### エラーケース一覧

エラーケースはありません。パッケージに同梱されたデータセットです。

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

トランザクション管理はありません。

## パフォーマンス要件

- 3行2列の極小データセット
- 即座に読み込み可能

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

特別なセキュリティ考慮事項はありません。

## 備考

- `band_instruments`および`band_instruments2`と組み合わせて使用することを想定
- `band_instruments`は`name`列をキーとして持つ
- `band_instruments2`は`artist`列をキーとして持つ（キー列名が異なる例）
- Mick（Stones所属）は楽器情報なし、Keith（楽器情報あり）はband_membersに存在しない
- この非対称性が各種join操作の違いを示すのに最適

---

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

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

### 推奨読解順序

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

データセットの構造と各列の意味を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | data-bands.R | `R/data-bands.R` | データセットのドキュメント |

**読解のコツ**: `band_members`、`band_instruments`、`band_instruments2`の3つのデータセットが関連していることを理解してください。

#### Step 2: データ生成スクリプトを理解する

データがどのように生成されたかを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | band_members.R | `data-raw/band_members.R` | データ生成スクリプト |

**主要処理フロー**:
1. **4-9行目**: band_membersをtribbleで定義（Mick/Stones, John/Beatles, Paul/Beatles）
2. **11行目**: devtools::use_data()でパッケージに保存
3. **14-19行目**: band_instrumentsをtribbleで定義（John/guitar, Paul/bass, Keith/guitar）
4. **21行目**: devtools::use_data()でパッケージに保存
5. **24-29行目**: band_instruments2をtribbleで定義（artistをキー列として使用）
6. **31行目**: devtools::use_data()でパッケージに保存

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

```
data-raw/band_members.R (データ生成時のみ)
    │
    ├─ tribble() [tibble]
    │      └─ 行ごとにデータを定義
    │
    └─ devtools::use_data()
           └─ パッケージに保存

R/data-bands.R (パッケージ使用時)
    │
    └─ ドキュメントのみ（"band_members"等の文字列を定義）
```

### データフロー図

```
[データ生成フロー]

tribble() ────────────▶ band_members
    │                      (3行2列)
    │
    └─▶ devtools::use_data()
              │
              ▼
         data/band_members.rda

[パッケージ使用フロー]

library(dplyr) ─────▶ lazy loading
                            │
                            ▼
                    band_members tibble
                            │
                    ┌───────┴───────┐
                    │               │
                    ▼               ▼
            band_instruments   band_instruments2
                    │               │
                    └───────┬───────┘
                            │
                            ▼
                    各種join操作のデモ
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| data-bands.R | `R/data-bands.R` | ソース | band_members/band_instruments/band_instruments2のドキュメント |
| band_members.R | `data-raw/band_members.R` | データ生成 | 3つのデータセットを生成 |
| band_members.rda | `data/band_members.rda` | データ | パッケージに同梱 |
| band_instruments.rda | `data/band_instruments.rda` | データ | パッケージに同梱 |
| band_instruments2.rda | `data/band_instruments2.rda` | データ | パッケージに同梱 |
| band_members.Rd | `man/band_members.Rd` | ドキュメント | ヘルプファイル |
