# 概要

pythonでrailwayな運用自動化ツールを作成する場合のフレームワークを作成します。
手軽にrailwayパラダイムなプログラミング環境が整い、ノードごとの関数を実装するだけでrailwayになることが理想です。
ノード単位でステートレスになるように設計し、原則として関数型パラダイムを採用します。

## 設計哲学

1. **シンプルさ第一**: 5分で始められること
2. **段階的な学習**: 初心者から上級者まで対応
3. **一貫性**: 予測可能で直感的なAPI
4. **型安全性**: mypyで完全にチェック可能
5. **実用性**: 実際の運用自動化に即座に使える

## 基本要件

1. **複数エントリーポイント対応**
   - 配置: `project_root/src/entry1.py`, `project_root/src/entry2.py` など
   - 実行: `railway run entry1` または `uv run python -m src.entry1`

2. **共通ライブラリの分離**
   - 配置: `project_root/src/common/` ディレクトリ
   - 例: `project_root/src/common/api_caller.py`

3. **ノード単位の処理分離**
   - 配置: `project_root/src/nodes/` ディレクトリ
   - 各ノードはステートレスで関数型パラダイムに準拠

4. **パッケージ管理**
   - ツール: `uv` を使用
   - 実行: `railway run entry_name` (推奨) または `uv run python -m src.entry_name`

5. **簡単なエントリーポイント/ノード追加**
   - コマンド: `railway new entry <name>` または `railway new node <name>`
   - 自動生成内容:
     - デコレータ適用済みのテンプレート
     - コマンドライン引数のプレースホルダ
     - 設定ファイル読み込み
     - ロギング設定

6. **環境管理**
   - `.env` ファイルで環境（development/staging/production）を指定
   - 環境別設定: `project_root/config/{env}.yaml` (統合設定ファイル)

## コア技術スタック

1. **Railway Oriented Programming**: `returns` ライブラリを採用
2. **リトライ処理**: `tenacity` を採用
3. **設定管理**: `pydantic-settings` で型安全に管理
4. **ロギング**: `loguru` で構造化ロギング
5. **CLI**: `typer` で自動CLI生成
6. **設定読み込み**: `project_root/src/settings.py` で一元管理

## プロジェクト構造

```
project_root/
├── src/
│   ├── entry1.py              # エントリーポイント
│   ├── entry2.py
│   ├── nodes/                 # 処理ノード
│   │   ├── fetch_data.py
│   │   └── process_data.py
│   ├── common/                # 共通ライブラリ
│   │   └── api_caller.py
│   └── settings.py            # 設定読み込み
├── tests/                     # テストコード
├── config/                    # 環境別設定（統合YAML）
│   ├── development.yaml
│   ├── staging.yaml
│   └── production.yaml
├── logs/                      # ログファイル
├── .env                       # 環境変数
├── .env.example               # 環境変数テンプレート
├── pyproject.toml             # プロジェクト設定
└── TUTORIAL.md                # 段階的チュートリアル
```

## 詳細仕様

詳細な仕様は以下のドキュメントを参照してください：
- **要件定義**: `1_要件.md`
- **実装仕様**: `2_仕様.md`  