---
paths: ["Tongue extraction/**", "DeepTIAS.Tests/**", "Tongue extraction.sln"]
---

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

ファイルを追加・移動するときは本規約に従うこと．

## ディレクトリ構成 (Directory Layout)

```text
DeepTIAS/
├── Tongue extraction.sln          # ソリューション
├── Tongue extraction/             # アプリ本体（DeepTIAS2.7.csproj）
│   ├── Form1.cs                   # 画面と解析の流れ
│   ├── ColorExtractor_fiveClick.cs  # 領域分割（Chiu 法・拡張 Chiu 法・5 点法）
│   ├── Program.cs                 # エントリポイント
│   ├── Properties/                # アセンブリ情報・リソース・設定
│   ├── models/                    # 学習済みモデル（Git LFS）
│   └── runtime/                   # 実行時に exe と同じ場所に必要なファイル（外部 exe・ネイティブ DLL・色補正データ・出力雛形）．ビルドで出力フォルダ直下にコピーされる
├── DeepTIAS.Tests/                # テストプロジェクト（MSTest．作成予定）
├── ColorSubdivision/              # 試作プロジェクト（ソリューション外．保守対象外）
└── docs/                          # ドキュメント
```

- フォルダ名 `Tongue extraction`（スペース入り）とプロジェクト名 `DeepTIAS2.7` は，参照の張り替えが多いため当面変えない．

## 追加するコードの置き場所 (Where New Code Goes)

`Form1.cs` に解析処理が集中しているため，整理で切り出すコードは以下のフォルダに置く．フォルダは実際にファイルを置くときに作る．

| フォルダ | 置くもの | 例 |
| --- | --- | --- |
| `Tongue extraction/Analysis/` | 解析の各工程（画面に依存しない処理） | 舌検出，舌領域抽出，形状特徴 |
| `Tongue extraction/External/` | 外部 exe・ネイティブ DLL の呼び出し | `TongueFeatures.exe` の起動，`DllImport` 宣言 |
| `Tongue extraction/IO/` | 入出力フォルダ・CSV の読み書き | 出力フォルダの作成，`analysis.csv` の追記 |

- **画面（`Form1`）には，画面の更新と操作の受け付けだけを残す．**解析処理は画面の部品（`PictureBox` 等）に触れないようにし，テストから呼べる形にする．
- 1 ファイル 1 クラスを基本とする．ファイル名はクラス名と同じにする．
- 旧形式の csproj はファイルを自動で取り込まないため，追加したファイルは csproj の `<Compile Include>` にも登録する（Visual Studio から追加すれば自動で登録される）．

## 実行時に必要なファイル (Runtime Files)

- モデル・外部バイナリ・雛形フォルダなど，実行時に exe と同じ場所に必要なファイルは，csproj で「出力ディレクトリにコピー」（`CopyToOutputDirectory`）を指定し，ビルドだけで揃うようにする．
- 大きなバイナリ（モデル・exe・DLL）は Git LFS で管理する．新しい拡張子を追加するときは先に `git lfs track` で対象にする．
- `runtime/` には，出力フォルダに置きたい構成のままファイルを置く（csproj がフォルダ構成を保ってコピーする）．空フォルダは `.gitkeep` で保持する（`.gitkeep` は出力にコピーされず，フォルダだけがビルド後に作られる）．
- `runtime/Data/` と出力雛形（`runtime/template_outputDir*/`）は，外部 exe・アプリが読むため改行コードを変換しない（`.gitattributes` で `-text`）．
