# 通知設計書 2-cur_data_all() 非推奨

## 概要

本ドキュメントは、dplyrパッケージにおける`cur_data_all()`関数の非推奨警告通知について、その設計仕様を定義するものである。

### 本通知の処理概要

`cur_data_all()`関数はdplyr 1.1.0で非推奨となり、`pick()`関数への移行が推奨されている。この通知は、ユーザーが`cur_data_all()`を呼び出した際に、lifecycleパッケージの`deprecate_warn()`関数を通じて警告メッセージを表示する。

**業務上の目的・背景**：`cur_data_all()`は現在のグループのデータを（グループ化変数を含めて）取得する関数であった。しかし、グループ化変数を含むデータの選択は定義があいまいであり、実用的なユースケースが限られていたため、この関数は非推奨となった。`pick()`関数への移行が推奨されるが、完全な1対1の代替は存在せず、ユーザーは必要に応じてコードを再設計する必要がある。

**通知の送信タイミング**：ユーザーがRコード内で`cur_data_all()`関数を呼び出した瞬間に、この警告が発生する。通常、`mutate()`、`summarise()`などのdplyr verb内で使用された際にトリガーされる。同一セッション内では`id = "dplyr-cur-data-all"`により重複警告が抑制される。

**通知の受信者**：Rコンソールまたはスクリプトを実行している開発者・データアナリスト。警告メッセージはRの標準警告システムを通じてコンソールに表示される。

**通知内容の概要**：関数が非推奨である旨、代替として`pick()`の検討を推奨する旨、および非推奨となったバージョン（1.1.0）の情報が表示される。

**期待されるアクション**：ユーザーは`cur_data_all()`の使用を見直し、`pick()`を使用した明示的な列選択に移行することが期待される。グループ化変数を含む必要がある場合は、異なるアプローチを検討する必要がある。

## 通知種別

コンソール警告（lifecycle deprecation warning）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（関数呼び出し時即座に表示） |
| 優先度 | 中（警告レベル） |
| リトライ | 無し（同一セッション内で同じIDの警告は1回のみ） |

### 送信先決定ロジック

警告メッセージはRの標準出力（stderr）に送信される。受信者の決定は不要であり、関数を呼び出したセッションに対して直接表示される。

## 通知テンプレート

### コンソール警告の場合

| 項目 | 内容 |
|-----|------|
| 送信元 | lifecycle パッケージ |
| 形式 | テキスト |

### 本文テンプレート

```
`cur_data_all()` was deprecated in dplyr 1.1.0.
i Please use `pick()` instead.
```

### 添付ファイル

| ファイル名 | 形式 | 条件 | 説明 |
|----------|------|------|------|
| なし | - | - | コンソール警告のため添付ファイルなし |

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| when | 非推奨となったバージョン | ハードコード "1.1.0" | Yes |
| what | 非推奨となった関数名 | ハードコード "cur_data_all()" | Yes |
| with | 代替関数名 | ハードコード "pick()" | Yes |
| id | 重複抑制用ID | ハードコード "dplyr-cur-data-all" | Yes |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| 関数呼び出し | `cur_data_all()`の実行 | 常に（初回のみ表示） | ユーザーがコード内で`cur_data_all()`を呼び出した時点 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| 同一セッション内での2回目以降の呼び出し | `id = "dplyr-cur-data-all"` により同一警告の重複表示を抑制 |
| lifecycle verbosityの設定 | `options(lifecycle_verbosity = "quiet")` で警告を完全に抑制可能 |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[cur_data_all関数呼び出し] --> B[lifecycle::deprecate_warn実行]
    B --> C{同一IDの警告は既出?}
    C -->|No| D[警告メッセージ生成]
    C -->|Yes| E[警告をスキップ]
    D --> F[コンソールに警告表示]
    F --> G[peek_mask処理継続]
    E --> G
    G --> H[current_vars取得]
    H --> I[pick_current実行]
    I --> J[データ返却]
```

## データベース参照・更新仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| なし | - | データベースアクセスは発生しない |

### 更新テーブル一覧

| テーブル名 | 操作 | 概要 |
|-----------|------|------|
| なし | - | データベース更新は発生しない |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| マスク未設定エラー | dplyr verb外で呼び出された場合 | `peek_mask()`がエラーを発生させる |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 該当なし |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | 制限なし（ただし同一ID警告は1回のみ） |
| 1日あたり上限 | 制限なし |

### 配信時間帯

制限なし（ユーザーの関数呼び出しに応じて即座に表示）

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

- 個人情報の取り扱い：なし
- 警告メッセージには機密情報は含まれない
- 外部通信は発生しない

## 備考

- `cur_data_all()`は内部的に`peek_mask()`を使用してデータマスクにアクセスし、`current_vars()`で全ての変数名（グループ化変数含む）を取得した後、`pick_current()`でデータを取得する
- `cur_data()`との違いは、グループ化変数を含むかどうかである
- ドキュメントによると、グループ化変数の選択は定義が曖昧であり、実用的ではないとされている
- この関数も`@keywords internal`としてマークされており、主に内部使用を想定している

---

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

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

### 推奨読解順序

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

dplyrのデータマスク機構と変数の種類（グループ化変数vs非グループ化変数）を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | context.R | `R/context.R` | データマスク内で使用可能なコンテキスト関数の定義 |
| 1-2 | group-data.R | `R/group-data.R` | グループ化変数の管理方法 |

**読解のコツ**: `current_vars()`と`current_non_group_vars()`の違いを理解することが重要。

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

非推奨警告のエントリーポイントとなる`cur_data_all()`関数の定義を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | deprec-context.R | `R/deprec-context.R` | `cur_data_all()`の非推奨定義 |

**主要処理フロー**:
1. **33-43行目**: `cur_data_all()`関数の定義全体
2. **34-39行目**: `lifecycle::deprecate_warn()`の呼び出し（通知のコア部分）
3. **40-42行目**: 実際のデータ取得ロジック（グループ化変数含む）

#### Step 3: cur_data()との違いを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | deprec-context.R | `R/deprec-context.R` | `cur_data()`との比較（27行目 vs 41行目） |

**比較ポイント**:
- `cur_data()`: `mask$current_non_group_vars()` を使用（グループ化変数を除外）
- `cur_data_all()`: `mask$current_vars()` を使用（全変数を含む）

#### Step 4: 代替関数pick()を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | pick.R | `R/pick.R` | `pick()`関数の実装と使用方法 |

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

```
cur_data_all()
    │
    ├─ lifecycle::deprecate_warn()
    │      └─ 警告メッセージ生成・表示
    │
    ├─ peek_mask()
    │      └─ DataMaskオブジェクト取得
    │
    └─ mask$current_vars()
           └─ mask$pick_current(vars)
                  └─ 現在グループのデータ返却（グループ化変数含む）
```

### データフロー図

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

なし ─────────▶ cur_data_all()呼び出し ───▶ 警告メッセージ（stderr）
                      │
                      ▼
              peek_mask() ─────────────────▶ 現在グループのデータフレーム
                                              （グループ化変数を含む）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| deprec-context.R | `R/deprec-context.R` | ソース | `cur_data_all()`の非推奨定義 |
| context.R | `R/context.R` | ソース | コンテキスト関数群の定義 |
| pick.R | `R/pick.R` | ソース | 代替関数`pick()`の実装 |
| mask.R | `R/mask.R` | ソース | DataMaskの実装 |
| group-data.R | `R/group-data.R` | ソース | グループ化変数の管理 |
| NAMESPACE | `NAMESPACE` | 設定 | エクスポート定義 |
