コンテンツにスキップ

保護者アカウントの停止・再開の本番配備

2026-09-23。合意済みモック・実装画面をユーザーが確認し、「これで本番実装しましょう」と依頼した。卒園後に弟妹が入園する場合も、既存アカウントとパスワードを保持して再開する。

現在の状態

2026-09-23 06:30:49 JSTに本番反映完了。06:31:01 JSTに実機メタデータとの独立照合、06:31:23 JSTに公開ヘルスチェックのHTTP 200を確認した。

基準と配備対象

  • 直前の配備記録:docs/deployment-initial-ledger-2026-09-22.md。実機メタデータを再取得し、記録と一致することを確認した。
  • 基準commit:15b13a9dd1eb6ae1b4d171186cb12c1dcc33326c。
  • 基準イメージ:sha256:8eee8704af57ee8bac122f01e4dfd50cfe4bec3c115de16eb64c329bd0d92d1b。
  • 基準deployment.json SHA256:84234a295ab7d2d32c6e3ea963f1e905ef965ec828d9165a818c7ca1d306a3d0。
  • Compose SHA256:a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b。今回も同一内容を保持する。
  • 配備commit:06951a6eed379536e1791d4abdcf775ecd799a99。
  • ローカル専用ブランチ:codex/parent-lifecycle-20260923-production。
  • 配備用作業コピー:.local-dev/truenas-parent-lifecycle-20260923/source。
  • 固定配備ファイル:.local-dev/truenas-parent-lifecycle-20260923/bundle。
  • 実機専用ディレクトリ:/home/truenas_admin/parent-lifecycle-20260923-06951a6。
  • systemdサービス:hoikuict-parent-lifecycle-20260923-06951a6。

現在の本番commitから今回の22ファイルだけを取り込んだ。開発中のmain全体は配備しない。既存の家庭アーカイブ、初期台帳、復元、定期バックアップ等のコードを保持する。停止・再開の変更内容は docs/account-lifecycle-unification-implementation-2026-09-23.md に記載した。

GitHubへの専用ブランチのpushは自動承認レビューが送信先確認不足を理由に拒否したため、実行していない。配備commitとソースアーカイブはローカルに固定保存し、同一アーカイブを既存の本番サーバーへ転送して照合済み。GitHubへの保存は本番配備の前提ではない。

配備前の検証

  • 本番基準で29モジュール・339テスト成功。初回入力を途中停止した場合の再案内を補正・回帰テスト追加後、関連77テスト成功。最終一式は340件で収集できることを確認した。
  • 卒園した子の状態、パスワード、既存の紐づけを保持し、新しい弟妹を明示的に追加して通常再開するケースが成功。
  • 新しい本番用の読み取り専用検査を、利用中・旧版の台帳有効/認証停止・停止中・再開手続き待ちの4状態で確認。検査前後のDB全体のダンプが同一。
  • 既存設定保持、バックアップ・復元との排他、切替成功・失敗時の復旧、DBを巻き戻さない処理を含む配備手順6テストがWindowsと実機Linuxで成功。
  • 固定入力15ファイル、UPDATE.json、SHA256SUMSを実機で照合。配備対象368ソースファイルのハッシュを固定。
  • 転送後も本番のcommit・Compose・deployment.jsonが基準と一致することを再確認。bundle/live-before.json に保存。

認証後の自動処理

  1. 本番稼働版・設定・復元キュー・ソースを照合する。基準との差異があれば切替前に停止する。
  2. 新イメージを構築し、ソースを照合。ネットワークなしの使い捨てコンテナで復元演習と340テストを行う。
  3. 本番DBコピーで起動・データ保持・家庭アーカイブ・初期台帳・停止再開画面を検査し、既存バックアップとの互換性を確認する。
  4. 公開接続を短時間停止。進行中のバックアップ・復元を確認し、アプリと両ワーカーを止める。ZFSスナップショット、主DB、施設DB、設定を退避して切り替える。
  5. 既存73テーブルの内容、添付、設定、スキーマ、ソース、サービスを照合。認証管理・一覧・編集・確認画面の共通状態と権限を読み取り専用で検査し、公開を再開する。

本番の保護者アカウントの状態変更や試験メール送信は行わない。園児との紐づけを保持する。過去の不整合アカウントを配備時に自動で有効化しない。DBスキーマ追加は不要。

切替失敗時は旧アプリ・設定・両ワーカーを復旧し、DBは自動で巻き戻さない。スキーマ差異があれば保守状態と退避物を保持して停止する。

管理者認証

sudo -n true が sudo: a password is required を返したため、実機の管理者認証をユーザーが行った。配備自体は依頼済み。

ユーザーのPowerShellで実行済みのコマンド(再実行不要):

ssh -t truenas_admin@100.65.124.96 "sudo python3 /home/truenas_admin/parent-lifecycle-20260923-06951a6/start-systemd.py"

Update service started と表示されたら再実行しない。SSHを閉じてもsystemdが処理を続ける。

完了の確認

実機の同ディレクトリの status.json が complete となり、.local-dev/truenas-parent-lifecycle-20260923/capture_completion.py で実機メタデータを独立して照合した。

本番反映の結果

  • 完了:2026-09-23 06:30:49 JST。独立照合:06:31:01 JST。
  • 稼働版:06951a6eed379536e1791d4abdcf775ecd799a99。
  • 実機イメージ:sha256:e5dc0464446912e4ca1f2a465a6d9ea2a85dd20f462af8ebffce3cf0606776ec。
  • 本番ソース:/mnt/main/open-hoikuict-pilot/releases/06951a6eed37-20260922T212406Z。
  • Compose SHA256:a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b(変更なし)。
  • 更新後deployment.json SHA256:f6ba533ed02dde2de1acb7098b5de14431e678ee9bc940d298861bbd6a36de0a。
  • 実機の隔離環境で340テスト成功。失敗・スキップ・収集エラーは0件。復元演習、本番DBコピーの起動と読み取り専用検査、既存バックアップ8件の互換性確認も成功。
  • アプリ・gateway・backup-worker・restore-workerが正常。公開接続の再開後、公開 /healthz のHTTP 200と status: ok を独立確認した。
  • 更新前の既存73テーブルの記録、添付8ファイル、DBスキーマ、設定を照合し保持。園児100人、家庭134件、保護者アカウント8件、園児との紐づけ105件を維持した。
  • 保護者ID 4の98人への紐づけを保持。配備前のDBコピーと配備後の両方で、利用中7件・停止中1件の状態を確認。配備による状態変更と検査用メール送信は0件。
  • 全保護者の認証管理・一覧・編集の共通状態、プロフィールからの状態変更欄の非表示、対象7件の確認画面、管理者以外の認証管理拒否を読み取り専用で検査した。
  • 家庭アーカイブ52件とその履歴、初期台帳の38項目・確認画面・権限等の既存機能も読み取り専用で検査。配備に伴う家庭削除・アーカイブ・台帳への試験登録は0件。
  • 定期バックアップは更新直前と同じ「有効・毎日02:00 JST・weekday=0」を保持。
  • 直前退避:/mnt/main/open-hoikuict-pilot/backups/before-parent-lifecycle-20260922T212406Z。
  • スナップショット:main/open-hoikuict-pilot/runtime@before-parent-lifecycle-20260922T212406Z。

完了記録は .local-dev/truenas-parent-lifecycle-20260923/bundle/ の completed-status.json、live-after.json、verified-completion.json、public-health-after.json に保存した。

今後の停止・再開は保護者アカウントの「認証管理」で行う。通常再開は現在のパスワードと園児との紐づけを保持し、再ログインを求める。卒園後に弟妹が入園する場合は、弟妹への閲覧許可を明示的に追加して再開する。