# Issue #40: スケジューラー統合

**Phase:** 2d
**優先度:** 低
**依存関係:** #04 (@entry_pointデコレータ), #13 (railway run)
**見積もり:** 3日

---

## 概要

cron、APScheduler などのスケジューラーとの統合機能を提供します。
定期実行ワークフローの設定と管理を容易にします。

---

## 主な機能

### スケジュール定義
```yaml
# schedule.yaml
schedules:
  - name: daily_report
    entry_point: daily_report
    cron: "0 9 * * *"  # 毎日9時
    enabled: true

  - name: hourly_sync
    entry_point: data_sync
    interval: 3600  # 1時間ごと
    enabled: true

  - name: weekly_cleanup
    entry_point: cleanup
    cron: "0 0 * * 0"  # 毎週日曜0時
    enabled: false
```

### CLIコマンド
```bash
# スケジューラー起動
railway schedule start

# スケジュール一覧
railway schedule list

# スケジュール有効化/無効化
railway schedule enable daily_report
railway schedule disable weekly_cleanup
```

### スケジューラーバックエンド
- **APScheduler**: Python ネイティブ (デフォルト)
- **cron**: システム cron との統合 (Linux/Mac)
- **systemd timer**: systemd 環境での実行 (Linux)

---

## 機能詳細

1. **スケジュール管理**
   - YAML ベースの設定
   - cron 式のサポート
   - 固定間隔のサポート

2. **実行制御**
   - スケジュールの有効化/無効化
   - 手動トリガー
   - 次回実行時刻の表示

3. **モニタリング**
   - 実行履歴の記録
   - 失敗時の通知 (Issue #37 と連携)
   - ログ出力

4. **高可用性**
   - ジョブロック (重複実行防止)
   - 障害時の自動リトライ
   - ヘルスチェック

---

## 技術スタック

- APScheduler
- python-crontab (cron 統合)
- filelock (ジョブロック)
- SQLAlchemy (状態管理、オプション)

---

## 使用例

```python
# schedule.yaml
schedules:
  - name: morning_report
    entry_point: generate_report
    cron: "0 9 * * 1-5"  # 平日 9:00
    timezone: "Asia/Tokyo"
    retry_on_failure: true
    max_retries: 3
```

```bash
# スケジューラー起動 (フォアグラウンド)
railway schedule start

# デーモンモード
railway schedule start --daemon

# 特定スケジュールのみ
railway schedule start --only morning_report
```

---

## 関連Issue

- Issue #37: 通知システム (実行結果の通知)
- Issue #38: 状態管理 (実行履歴の記録)
