---
paths: ["src/**", "tests/**"]
---

# コーディング規約 (Coding Style)

Python コードを書くときは本規約に従うこと．基本方針として [PEP 8](https://peps.python.org/pep-0008/) と Ruff のデフォルトルールに準拠し，プロジェクト固有の上書き項目のみ以下に定める．

## フォーマット・lint (Format & Lint)

- フォーマット・lint は **Ruff** に一任する（`uv run ruff format` / `uv run ruff check`）．手動整形で Ruff と争わない
- 1 行の長さ: 100 文字（pyproject.toml の `line-length` で設定）
- 文字コード: UTF-8．ソース内の日本語（コメント・UI 文字列）は UTF-8 で直接書く

## 命名 (Naming)

- モジュール・関数・変数: `snake_case`／クラス: `PascalCase`／定数: `UPPER_SNAKE_CASE`（PEP 8 どおり）
- 旧実装のハンガリアン記法（`m_Img`・`m_xView` 等）は**移植時に廃止**し，意味の分かる名前に付け替える
- 診断ドメインの用語は英語に統一する（例: `tongue_color`，`transform_matrix`，`diagnosis_result`）．5 色のキーは `purple` / `dark_red` / `crimson` / `pink` / `pale` を使う

## 型ヒント (Type Hints)

- 関数・メソッドの引数と戻り値には型ヒントを必ず付ける
- NumPy 配列は `numpy.typing.NDArray` を使い，dtype が重要な箇所は docstring で形状・dtype を補足する

## コメント・docstring (Comments & Docstrings)

- docstring・コメントは日本語でよい
- 公開関数（core パッケージの API）には docstring を付け，1 行要約＋必要なら引数・戻り値の説明を書く
- 旧実装との対応が保守に役立つ箇所（数式・パラメータ等）は「現行実装踏襲」の旨と根拠（SPEC_02 参照等）をコメントで残す

## import (Imports)

- 並び順は Ruff（isort ルール）に一任する
- `from module import *` は禁止（旧実装の `using namespace cv` に相当する濫用を避ける）
- OpenCV は `import cv2`，NumPy は `import numpy as np` の慣用名を使う

## その他 (Miscellaneous)

- パス操作は `pathlib.Path` を使う（`os.path`・文字列連結は使わない）．**絶対パスのハードコード禁止**（ENV_02「環境再現性のルール」参照）
- マジックナンバーは定数化する（ROI サイズ・SVM パラメータ・白色点等は SPEC_02 と対応する名前を付ける）
