開発ガイド
環境構築、変更とテストの繰り返し、検証失敗からの復旧を扱います。 モジュールの責務や設計判断は エンジニアリングガイドを参照してください。 以下のコマンドはすべてリポジトリのルートで実行します。
最初に一度だけ準備する
| ツール | 必要になる場面 |
|---|---|
| Python 3.12+ | パッケージとテスト。CI の全検証に合わせるなら 3.13 |
| uv 0.12.19 | ロック済み依存関係の管理とコマンド実行 |
| GNU Make | リポジトリの標準コマンド |
| actionlint | make lint と make ci-test。CI は 1.7.12 を使用 |
| Docker と起動済みの daemon | コンテナ関連のコマンドだけ |
make install-deps-dev
uv run --locked template-python --help
make test
.venv は uv が管理します。別の pip install でプロジェクトの依存関係を
導入したり、仮想環境を有効化したりする必要はありません。
make install-deps-dev が表示する actionlint の案内は、Python テストの実行を
妨げません。
Git hook を使う場合だけ、次を実行します。
make install-hooks
make hooks-check
Hook は YAML、空白、Ruff のルールを確認します。型検査、テスト、全品質ゲートの 代わりにはなりません。
日常の開発
- 変更箇所の早見表で、 変更するモジュールとテストを特定します。
- 期待する出力と失敗時の振る舞いを、小さなテストで定義します。
- その契約を満たす最も単純な変更を実装します。
- 対象のテストを実行し、整形と変更範囲に合う検証を行います。
- 振る舞いが変わる場合は、対応する英語と日本語の説明を更新します。
挨拶や CLI を変更する場合の例です。
uv run --locked pytest --no-cov tests/test_core.py tests/test_cli.py
make fix
make ci-test
--no-cov は対象を絞った反復作業だけに使います。一部のテストでパッケージ全体の
カバレッジを測ると、変更とは無関係な不足で失敗するためです。
make test と make ci-test は全テストと branch coverage を実行し、
95% 以上を要求します。一部のテストを通すために閾値を下げないでください。
変更内容に応じた検証
| 変更対象 | 作業中の確認 | 提出前の検証 |
|---|---|---|
| Python の処理・テスト | --no-cov 付きの対象テスト、make fix、make type-check |
make ci-test |
| 依存関係・パッケージ情報 | uv lock、make package-check |
make ci-test。影響する場合は docs・コンテナも検証 |
Markdown・mkdocs.yml |
make docs-serve |
make ci-test-docs |
| GitHub Workflow | actionlint |
make ci-test と、その Workflow が呼ぶ検証 |
| Dockerfile・Compose | make docker-build docker-run |
make ci-test-docker。Compose 変更時は docker compose up --build も実行 |
複数の領域を変更したら、該当する検証をすべて行います。ドキュメントだけの変更で Python やコンテナの品質ゲートを実行する必要はありません。
新しい手順を覚える代わりに、既存コマンドを使います。
| コマンド | 実行すること |
|---|---|
make help |
利用できる Make target の一覧表示 |
make fix |
Ruff による自動修正と整形。自動変更の内容は確認する |
make lint |
mypy strict、Ruff、actionlint、オフラインの zizmor |
make test |
branch coverage 付きの pytest |
make package-check |
wheel と sdist をビルドし、wheel の CLI とモジュール起動を隔離環境で確認 |
make ci-test |
dev 依存関係の同期、整形確認、Lint、テスト、配布物検証 |
CI は Python 3.13 で全品質ゲートと docs ビルド、3.12 と 3.14 で互換性テスト、 別の job で hook の検証を行います。
設定リファレンス
CLI は既定値で動作します。ローカル設定を変更する場合だけ、
.env.template を .env にコピーします。
cp .env.template .env
| 環境変数 | 既定値 | 許容値・影響 |
|---|---|---|
PROJECT_NAME |
template-python |
起動時の debug ログに使う文字列。挨拶の出力は変わらない |
PROJECT_LOG_LEVEL |
INFO |
DEBUG、INFO、WARNING、ERROR、CRITICAL |
優先順位は、環境変数、.env、既定値の順です。変数名の大文字・小文字は区別
しませんが、ログレベルの値は上記の大文字表記にします。
.env は作業ディレクトリから読み、未知の項目は拒否します。別のアプリケーションの
.env を流用しないでください。ローカル設定や秘密情報はコミットしません。
PROJECT_LOG_LEVEL=DEBUG uv run --locked template-python hello --name Ada
uv run --locked template-python --verbose hello --name Ada
--verbose はグローバルオプションなので、hello の前に置きます。
設定を検証した後で debug ログを有効にするため、不正な設定を回避する用途には
使えません。正常な挨拶は stdout、ログと検証エラーは stderr に出力します。
空白だけの --name と不正な設定は、終了コード 2 で失敗します。
依存関係
pyproject.tomlの依存宣言を編集し、uv lockを実行して両方のファイルを コミットします。解決済みの lock エントリを手で編集しません。make updateは全体の更新を意図した場合だけ使います。既存バージョンの同期では なく、uv lock --upgradeを実行するコマンドです。- 実行時の依存関係は
project.dependencies、開発・テスト・docs・Notebook の ツールは既存の各グループへ追加します。 - 既存コマンドは必要な依存グループを選んで同期します。docs と Notebook は
--no-devを使い、その後の dev コマンドで必要な dev グループが再び同期されます。
ドキュメントの開発
make docs-serve
MkDocs が表示する URL(通常は http://127.0.0.1:8000)を開きます。
Ctrl+C でプレビューを終了し、次のコマンドで検証します。
make ci-test-docs
英語と日本語の出力は、Git 管理対象外の site/ に生成されます。
page.md と page.ja.md は一緒に編集してください。ページを追加するときは
mkdocs.yml のナビゲーションと日本語のラベルも追加します。
ドキュメント同士は相対リンクにします。README は導入、このページは手順、
エンジニアリングガイドは設計理由を担当します。
トラブルシューティング
検証を無効にしたり、複数のツールを一度に変更したりせず、最初に失敗した コマンドから原因を確認します。
| 症状 | 確認すること・次の行動 |
|---|---|
uv: command not found |
指定バージョンの uv を導入し、PATH と uv --version を確認する |
| Python のバージョンが合わない | 例として uv sync --locked --group dev --python 3.13 で対応 interpreter を選ぶ |
Lint・CI で actionlint: command not found |
actionlint を導入して actionlint --version を確認する。対象の確認には make test を使える |
| lock の更新が必要と表示される | 意図した依存変更なら uv lock で両方を更新する。それ以外は --locked を外さず宣言と lock のずれを調べる |
Invalid configuration・終了コード 2 |
PROJECT_* と作業ディレクトリの .env を確認し、大文字の許容ログレベルを使う |
| 対象テストだけの実行でカバレッジ不足 | 対象を絞る間は --no-cov、実際の品質ゲートには make test を使う |
| Docker daemon に接続できない | Docker を起動して再実行する。Python だけの作業ならコンテナ環境は不要 |
| ページが表示されない・リンクが切れている | mkdocs.yml、英日のファイル、リンク先を確認し、両言語を再ビルドする |
相談するときは、実行コマンド、最初のエラー、OS、Python・uv のバージョン、 関連する変更を添えます。秘密情報や非公開の設定は伏せてください。