---
paths: ["lib/**", "test/**"]
---

# プロジェクト構成ルール (Project Structure)

`lib/` 以下のディレクトリ構成とファイル配置ルールを定める．コードを追加・移動するときは本ルールに従うこと．
アーキテクチャの背景・設計判断は [SPEC_03 アーキテクチャと非機能](../../docs/04_SPEC/SPEC_03_アーキテクチャと非機能.md) を参照する．

## ディレクトリ構造 (Directory Structure)

```text
lib/
├── main.dart                  # エントリポイント，Provider 登録
├── app.dart                   # MaterialApp，テーマ
├── providers/                 # 状態管理（ChangeNotifier）
├── screens/                   # 画面（Scaffold 単位）
├── widgets/                   # 再利用可能な UI 部品
└── services/                  # 外部リソースとの橋渡し
```

## 配置ルール (Placement Rules)

- **1 ファイル 1 クラス** を原則とする．ファイル名はクラス名の snake_case 版
- **screens/**: 各画面に対応する 1 ファイル．画面固有のロジックは対応する Provider に置く
- **widgets/**: 複数画面で再利用する UI 部品，または画面ファイルが大きくなった場合に切り出す部品
- **providers/**: 画面または機能ごとに 1 ファイル．ChangeNotifier を継承する
- **services/**: プラットフォーム API やファイルシステムへのアクセスを担う

## テストの配置 (Test Placement)

テストコードの配置・命名規則は [testing ルール](testing.md) を参照する（`test/` 以下に対象と同じ階層で配置する）．
