開発者向けセットアップ
必要なもの
- Python 3.11 以上
- Git
- ローカル開発用のブラウザ
セットアップ
git clone https://github.com/hoikuict/open-hoikuict.git
cd open-hoikuict
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
cp .env.example .env
uvicorn main:app --reload
Windows PowerShell の場合:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt -r requirements-dev.txt
Copy-Item .env.example .env
uvicorn main:app --reload
起動後、ブラウザで http://127.0.0.1:8000/ を開きます。
テスト
ruff check .
python -m pytest -q --ignore=gen_bunnrei
データベース
デフォルトではローカルの SQLite ファイル hoikuict.db を使います。開発中にデータを作り直したい場合は、事前にバックアップしたうえで削除してください。
cp hoikuict.db hoikuict.db.bak
rm hoikuict.db
uvicorn main:app --reload
100人規模デモデータ
python -m scripts.seed_demo_100 --wipe-all
uvicorn main:app --reload
--wipe-all は対応テーブルの既存データを削除します。本番DBや実在データが入ったDBでは絶対に使わないでください。
公開デモ用の seed では、カレンダー予定を実行月の前後2か月、登降園データと保護者連絡を実行日の3か月前から当日まで自動生成します。アプリ起動時の自動 seed は行いません。新しいローカルDBへデモデータが必要な場合は、アプリ起動前に上記コマンドを明示的に実行してください。
開発時の注意
- 実在する個人情報をコミットしない
- スクリーンショットに実在情報を含めない
- 権限、監査ログ、エラー時の戻りやすさを確認する
- 保護者画面で他家庭の情報が見えないことを常に確認する
開発用セキュリティ設定
ローカルHTTPでモック認証とキオスクを使う場合は、起動前に次を設定します。本番では使用しません。
$env:HOIKUICT_ENV = "development"
$env:HOIKUICT_ENABLE_MOCK_AUTH = "1"
$env:HOIKUICT_KIOSK_ACCESS_MODE = "open"
$env:HOIKUICT_CSRF_ENFORCE = "0"
職員ローカル認証を試す
モックの代わりにArgon2idの職員認証を使う場合は、開発用DBを用意して次を設定します。
$env:HOIKUICT_ENABLE_MOCK_AUTH = "0"
$env:HOIKUICT_STAFF_AUTH_MODE = "local_password"
$env:HOIKUICT_LOGIN_THROTTLE_HMAC_KEY = python -c "import secrets; print(secrets.token_urlsafe(32))"
$env:HOIKUICT_COOKIE_SECURE = "0"
python -m scripts.auth_user bootstrap-admin
uvicorn main:app --reload
CLIはパスワードを受け取りません。一度だけ表示される6文字・30分有効の有効化コードを管理者本人が /staff/activate へ入力し、表示されたログインIDを確認・必要に応じて修正してから、8文字以上のパスワードを設定します。productionではHTTPS、CSRF、32バイト以上のHMAC鍵、施設承認済みのローカルパスワード禁止リストを必ず設定してください。
既に職員やデモ管理者が存在するDBでは、bootstrap-adminは追加管理者を作らず停止します。その場合は既存職員を選択して有効化コードを発行します。
python -m scripts.auth_user activate-staff
ローカル認証で管理者ログイン後は、/staff/users の「認証管理」から初期設定コードとパスワード再設定コードを発行できます。管理者は本人の新しいパスワードを設定・閲覧せず、一回限りのコードだけを本人へ渡します。
開発上の時刻規約
- 園の業務日付は
time_utils.local_today()を使う。 - 既存DBの登降園時刻は
time_utils.local_naive_now()を使う。 created_at/updated_at等の監査時刻はtime_utils.utc_now()を使う。date.today()/ naiveなdatetime.now()を業務コードで直接使わない。