- 環境変数ファイルを作成
cp .env.example .env- コンテナ起動
docker compose up -d- 依存パッケージをインストール
docker compose run --rm --no-deps app composer install- マイグレーション実行(初期データも登録されます)
docker compose run --rm app php bin/doctrine migrations:migrate -n- アプリ確認
- ブラウザで
http://localhost:8080を開く(未ログイン時は/loginへリダイレクト)
- 画面: セッション認証
.envのAPP_ADMIN_USERNAME/APP_ADMIN_PASSWORD_HASHを利用APP_ADMIN_PASSWORD_HASHはpassword_hashで生成したハッシュ文字列- 生成例:
php -r "echo password_hash('your-password', PASSWORD_DEFAULT) . PHP_EOL;"
- 生成例:
- いずれか未設定(空含む)の場合、ログイン不可
- ログイン試行制限(デフォルト: 5回失敗で10分ロック)
APP_AUTH_MAX_ATTEMPTSAPP_AUTH_WINDOW_SECONDSAPP_AUTH_LOCK_SECONDS
- セッションCookie設定
APP_SESSION_COOKIE_SECUREAPP_SESSION_COOKIE_SAMESITE
- API: API キー認証
Authorization: Bearer <API_KEY>ヘッダを利用- API キーは
api_keysテーブルでハッシュ(SHA-256)管理 - 開発用初期キー:
dev-api-key-change-me
php-cs-fixer(整形/フォーマット)phpstan(静的解析)phpunit(テスト)
docker compose run --rm --no-deps app composer cs:check
docker compose run --rm --no-deps app composer stan
docker compose run --rm --no-deps app composer testまとめて実行:
docker compose run --rm --no-deps app composer check- 軽量構成として
Pico.cssを CDN で読み込み(templates/layout/base.html.twig)
GET /api/v1/reports/hours?date_from=YYYY-MM-DD&date_to=YYYY-MM-DD- レスポンス: 期間内のクライアント別稼働時間合計
例:
curl -H "Authorization: Bearer dev-api-key-change-me" \
"http://localhost:8080/api/v1/reports/hours?date_from=2026-02-01&date_to=2026-02-28"