# Issue #13: コンテキスト変数アクセスのチュートリアル追加

## 概要
パイプライン内で処理済みnodeの返り値（コンテキスト変数）にアクセスする方法をTUTORIAL.mdで説明する。

## 依存関係
- Issue #01-05: コンテキスト変数アーキテクチャ（先行）

**重要**: 本issueはIssue #01-05の新設計に基づく。#01-05完了後に内容を最終確定する。

## 背景
運用自動化では、前段のnodeで取得・処理したデータを後続のnodeで参照することが一般的。Issue #01-05で導入されるContext変数により、この「コンテキスト変数へのアクセス方法」が明確に定義される。

## 現状の問題
- TUTORIAL.mdでは基本的なpipelineの使い方は示されている
- しかし、複数nodeの結果を組み合わせる方法が明示されていない
- 後続nodeから前段の結果を参照する方法が不明確

## 提案される解決策
TUTORIAL.mdにコンテキスト変数へのアクセス方法を説明するセクションを追加する。

### 追加するセクション案

```markdown
## Step X: コンテキスト変数の活用

パイプライン内で、各nodeはContextオブジェクトを通じてデータを共有します。

### 基本的なデータの受け渡し

```python
from railway import node, pipeline, Context

@node
def fetch_user(ctx: Context) -> None:
    """ユーザー情報を取得"""
    user_id = ctx.get_param("user_id")
    ctx["fetch_user"] = {
        "id": user_id,
        "name": "Alice",
        "email": "alice@example.com"
    }

@node
def fetch_orders(ctx: Context) -> None:
    """ユーザーの注文履歴を取得"""
    # 前段のnodeの結果を参照
    user = ctx["fetch_user"]
    ctx["fetch_orders"] = [
        {"order_id": 1, "user_id": user["id"], "amount": 1000}
    ]

@node
def generate_summary(ctx: Context) -> None:
    """サマリーを生成"""
    orders = ctx["fetch_orders"]
    total = sum(o["amount"] for o in orders)
    ctx["generate_summary"] = {
        "count": len(orders),
        "total": total,
        "message": f"注文件数: {len(orders)}, 合計: {total}円"
    }

# パイプライン実行
ctx = Context(entry_point="order_summary")
ctx.set_param("user_id", 1)

pipeline(ctx, fetch_user, fetch_orders, generate_summary)

print(ctx["generate_summary"]["message"])
# => "注文件数: 1, 合計: 1000円"
```

### アクセスパターン

| 用途 | 方法 | 例 |
|------|------|-----|
| 初期パラメータ取得 | `ctx.get_param()` | `ctx.get_param("user_id")` |
| 他nodeの結果取得 | `ctx[node_name]` | `ctx["fetch_user"]["name"]` |
| 自nodeの結果書き込み | `ctx[node_name] = {}` | `ctx["fetch_user"] = {...}` |
| 結果の存在確認 | `node_name in ctx` | `if "fetch_user" in ctx:` |
| 安全な取得 | `ctx.get()` | `ctx.get("fetch_user", {})` |

### nodeの依存関係

nodeは他nodeの「データ構造（スキーマ）」に依存しますが、「実行順序」には依存しません。

```python
@node
def process_data(ctx: Context) -> None:
    # このnodeは fetch_user の結果スキーマに依存
    # しかし、fetch_user が直前に実行される必要はない
    user = ctx["fetch_user"]
    ctx["process_data"] = {"processed": True, "user_name": user["name"]}
```

### ポイント
- 各nodeはContextオブジェクトを唯一の引数として受け取る
- 結果は `ctx[node_name]` に辞書として書き込む
- 他nodeの結果は `ctx[node_name]` で参照
- 初期パラメータは `ctx.get_param()` で取得
```

## 優先度
中

## 関連ファイル
- `TUTORIAL.md`

## 参考情報
運用自動化では、処理済みnodeの返り値を後続の処理で参照することが本質的に重要。Issue #01-05で導入されるContextクラスにより、このパターンが明確に定義される。
