職員のログイン時間設定の確認案(2026年9月20日)
状態: 9月20日に実装・検証・プッシュ、9月21日3:45:52 JSTに本番反映完了。 詳細は設定・ログイン時間の本番更新記録を参照。
要望と確認済み事項
- 再ログインで業務が止まるため、セッションが切れる時間を設定できるようにしたい。
- 対象は職員が使う管理画面。
- その日の勤務中、約12時間はログインを維持したい。
- 設定は頻繁には操作しないため、メニューの「設定」にまとめたいとの提案を受けた。
現行実装の確認
基準は9月20日の本番更新に記録された 801ed69915846bc42ec6e1f1342fc4f9f9aa6771。開発ブランチには別の認証変更があるため、本番版との差分を確認した。
- 職員の非操作期限は環境変数
HOIKUICT_STAFF_SESSION_IDLE_MINUTES。既定30分、許容5〜480分。 - ログイン時からの最長期限は
HOIKUICT_STAFF_SESSION_ABSOLUTE_HOURS。既定12時間、許容1〜24時間。 - 現状、管理画面からこの設定を保存する機能はない。
- 有効な認証付き通信で非操作期限が延びる。DBの更新は最短5分間隔。キー入力やスクロールだけでは延びないため、長文入力中に期限に達し得る。
- 最長期限とCookieの有効期間はログイン時に決まる。非操作期限だけを延ばしても最長期限は延びない。
- 上記は本番配備コードの既定値・動作の確認であり、本番プロセスの環境変数や個別のログアウト原因を確認した結果ではない。
- 保護者セッション、共用端末の登録、Cloudflare等の外側の認証は別管理。
合意した画面仕様
新しい管理者専用ページ「ログイン時間設定」を /settings/staff-sessions に設ける。左メニュー下部の「設定」から設定一覧を開き、その一覧から移動する案。園内の全職員に共通の設定とする。現行の管理画面の色・余白・入力部品を基準にする。新規ページなので既存入力項目の置き換えや省略はない。
設定をまとめるメニュー案
左メニューに「設定」を1項目追加し、/settings に一覧を設ける。常設メニューで個別の設定項目を並べず、設定一覧で選ぶ。全体点検を受け、初期の4項目から次の9項目に広げる案へ更新した。
設定一覧全体を管理者専用とする初期案は撤回する。クラス管理と延長保育料金ルールは、既存権限どおり一般職員も閲覧・編集できるため、職員ごとに利用できる項目を表示する。新規のログイン時間設定は管理者専用。
| 設定一覧の項目 | 移動先 | 現行の入口 |
|---|---|---|
| ログイン時間設定 | /settings/staff-sessions |
新規 |
| 職員管理 | /staff/users |
アカウント内の「職員管理」 |
| 職員権限設定 | /staff/permissions |
アカウント内の「権限設定」 |
| クラス管理 | /classrooms/ |
基本業務内の「クラス管理」 |
| 児童記録設定 | /settings/child-records |
基本業務内の「児童記録設定」 |
| 延長保育料金ルール | /extended-care-fees/settings |
延長保育料金画面内 |
| 保護者登録の受付 | /parent-accounts/registration-qr |
保護者アカウント画面内 |
| 保護者端末の監視 | /settings/guardian-terminals |
管理者ホーム |
| バックアップ管理 | /settings/backups |
アカウント内の「バックアップ管理」 |
設定一覧から各ページに移動する。今回のモックでは一覧とログイン時間設定の往復を操作でき、他の8項目は配置の確認用とする。既存8画面の入力項目・保存処理は変更対象に含めない。リンク先URL、既存の画面内リンク、各機能の権限判定を保持する。直接アクセス時も権限を検証する。
ログイン時間設定には「設定一覧へ戻る」を表示する。未保存の変更がある場合は、「編集を続ける」または「変更を破棄して戻る」を選べる。後者は入力を保存済み値に戻して一覧へ移動する。保存は明示的な保存ボタンだけで行う。
全体点検では、職員管理とクラス管理もマスター管理として設定に適合すると判断した。一方、保護者キオスクは起動と登録案内が混在しているため、画面ごと移す対象には含めない。項目ごとの判断とカレンダー等の分離候補は全体点検を参照。9項目を今回の実装対象として承認済み。
ログイン時間設定の入力
入力順:
- 「操作がない場合にログアウトするまで」: 数値と単位(分/時間)。5分〜24時間、分に換算して整数。
- 「ログインを維持する最長時間」: 1〜24時間の整数。
- 「変更を取り消す」「設定を保存」。
「勤務中は12時間維持」のボタンで両方を12時間にする。押しただけでは保存せず、保存ボタンで確定する。非操作期限が最長時間より長い入力はエラーにする。無期限の選択肢は設けない。
初期表示は保存済み設定(未保存なら現行環境の設定)を表示する。モックの保存前データは架空の30分・12時間であり、本番実値を表すものではない。
保存・反映・取消
- 管理者が明示的に「設定を保存」を押したときだけ保存する。
- 保存成功後、同じ画面に保存結果を表示する。サーバー再起動は不要とする。
- 変更後に新しくログインする職員から適用する。 現在のログインの期限は変えず、保存を理由に強制ログアウトしない。
- 新しい設定を使いたい職員は、一度ログアウトして再ログインする。時間変更で、既に失効したセッションを復活させない。
- 「変更を取り消す」は未保存の入力を保存済み値に戻す。保存済みの設定を削除したり既定値に戻したりしない。
- 入力エラー時は保存せず、入力値とエラーを同じ画面に残す。
- 手動ログアウト、アカウント無効化、資格情報の変更による失効は引き続き有効。
モックで確認する事項
- 左メニューの「設定」1項目から一覧を開き、個別の設定に移動する構成でよいか。
- 一覧にまとめる9項目、4分類、職員の権限による表示と、一覧へ戻る際の未保存変更の扱い。
- 数値と単位による入力、12時間の一括入力、保存、取消が分かりやすいか。
- 次回ログインから適用する運用でよいか。
- 確認用の状態切替から、未入力・一部入力・入力済み・入力エラー・保存済みを試せる。
- モックの保存は画面内の架空データだけ。実アカウント、DB、外部送信には接続しない。
実装時の確認点
- 管理者権限とCSRF検証、サーバー側の範囲・整数・大小関係検証。
- 保存履歴に変更者、変更時刻、変更前後の時間を残す。
- 初回導入で環境変数の既存値を保持する。設定を保存するまでは期限を勝手に変えない。
- 新規セッションに非操作期限の長さも保持する等、既存セッションに新設定が混入しない設計にする。Cookieとサーバーの最長期限を一致させる。
- 既存セッションの移行、有効期限の境界、設定を延長・短縮した場合、失効済みセッションの扱いをテストする。
- 保護者・共用端末の認証と本番固有機能を回帰確認する。
- 外側の認証によるログイン要求や、期限切れ時の入力内容復旧は今回の画面案だけでは解決したと判断しない。
今回の機能について、モックと全体点検の後に実装・配備の明示的な依頼を受けた。
モックの動作確認
2026年9月20日、ローカルの確認用画面で以下を確認した。
- 12時間・12時間の保存成功と保存済み値の更新。
- 編集後の取消で保存済み値に戻る。
- 空欄の保存を拒否し、両方の入力にエラーを表示。
- 非操作12時間・最長8時間の組合せを拒否し、保存済み値を保持。
- 一括入力ボタン、時間/分の単位変更(12時間 → 720分)。
- 幅736pxと320pxで入力欄・説明・保存ボタンが横にはみ出さない。
- ドキュメントの
mkdocs build --strictと差分の空白検査が成功。 - 設定一覧からログイン時間設定へ移動し、保存後に一覧へ戻って再度開いても保存済み値を保持。
- 未保存で戻ると確認を表示。「編集を続ける」で入力を保持し、「変更を破棄して戻る」で保存済み値を保持して一覧へ移動。
上記はモックの検証履歴。今回の本実装と配備の結果は下記および更新記録に追記する。
実装(2026年9月20日)
- 現行本番
801ed69915846bc42ec6e1f1342fc4f9f9aa6771を土台に実装した。9項目を設定にまとめ、一般職員はクラス・料金ルールの2項目を利用できる。保護者のローカル認証が無効なら登録受付の項目を隠す。 - 管理者の設定保存はDB上の有効な管理者とCSRFを検証し、変更前後・変更者・時刻を同じトランザクションで記録する。
- 新規テーブル3個(設定・履歴・新しい職員ログインの非操作時間)を追加する。既存の認証テーブルや既存データの書換えは不要。起動時の既存のスキーマ作成処理で追加する。
- 配備前の職員ログインは環境変数の従来の非操作時間を維持する。配備後に作るログインはその時点の設定を固定し、保存後の設定変更と混在させない。Cookieの最長時間も同じログイン結果から設定する。
- 5分設定で操作を続けても更新間隔が期限に達してしまわないよう、新規ログインの更新間隔を非操作時間の半分と5分の短い方にした。
- 職員Cookieがある状態で発行するフォーム用CSRF Cookieは24時間とし、認証が有効なのに8時間で保存だけ失敗することを防ぐ。CSRFの照合・ログアウト時の破棄と、保護者だけで利用する場合の既定8時間は維持する。
- 非操作時間の単位を切り替えると値も換算する。分に換算して整数になる小数時間を許可する。未保存表示、設定後の時間例、取消、未保存で戻る確認を実装した。
- 導入だけで既存の設定値を12時間へ変更しない。管理者が「勤務中は12時間維持」→「設定を保存」を実行すると、次回ログインから12時間になる。
本実装の検証
- 本番用版の全体テスト783件成功(359.38秒)。その後、単位換算をモックに合わせ、実アプリからの操作用JavaScript配信も検証し、設定・認証の対象テスト34件を再実行して全件成功した。
- 管理者・編集可・閲覧のみの設定一覧、未ログイン拒否、無効化・降格済み管理者の拒否、CSRF拒否、入力値保持、保存監査を確認。
- 旧ログインの非操作時間保持、設定変更前後の期限とCookieの一致、期限切れ・ログアウト・資格情報変更・利用停止の失効、最短5分での操作継続を確認。
- ローカルの合成DBで実装した画面を開き、保存、取消、未保存で戻る確認、入力エラー、30分から0.5時間への換算と保存を確認。320px幅で入力と設定一覧に横方向のはみ出しがないことを確認。
- Ruffと差分の空白検査が成功。MkDocs strictも成功。
配備用の git archive で backups export-ignore が templates/backups にも適用されることを確認した。除外指定を /backups に限定し、実データのバックアップを除外しながら、設定画面のテンプレートは配備物に含める。配備物内で既存8画面のテンプレートも検証する。