コンテンツにスキップ

コンパクトな出欠確認・名前一覧・園連絡・閉園設定の実機反映

2026-09-24。ユーザーがモックの実装を確認した後、「実機に反映して」と依頼した。

現在の状態

2026-09-24 20:23:30 JSTに修正版の本番反映が完了。20:23:33 JSTに実機メタデータとの独立照合、20:23:51 JSTに公開ヘルスチェックのHTTP 200・status: okを確認した。

sudo -n true が sudo: a password is required を返したため、ユーザーが実機の管理者認証を行った。認証と配備は完了しており、コマンドの再実行は不要。

本番反映の結果

  • 稼働commit:79bd070a720f9546558a768026567f72168edd10。
  • 実機イメージ:sha256:8d0631611e54ee3135b469a6dfe94da005d3dcef86eee5bd416e44d62b585942。
  • 本番ソース:/mnt/main/open-hoikuict-pilot/releases/79bd070a720f-20260924T111618Z。
  • Compose SHA256:a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b(内容を保持)。
  • 更新後deployment.json SHA256:09f3133b574cd36eba010db5d8edd50dff4650a2b771987debdd9154d7172c86。
  • 実機の隔離環境で530テストすべて成功。失敗・スキップ・収集エラーなし。復元演習、本番DBコピーでの移行と読み取り専用画面検査、既存バックアップ9件の互換性検査も成功。
  • アプリ・gateway・backup-worker・restore-workerが正常。公開接続を再開し、公開 /healthz のHTTP 200・status: okを独立確認。
  • 既存73テーブルの記録、添付13ファイル、設定を保持。園児記録100人、家庭134件、保護者アカウント8件、園児との紐づけ104件を更新直前のまま保持。
  • 在籍98人について、全4状態の名前一覧・出欠確認・連絡詳細・履歴を本番DBで読み取り専用検査。園連絡8件は公開状態を保持。閉園時刻は初期値19:00で、管理者専用画面と権限を確認。
  • 家庭アーカイブ52件と履歴、初期台帳38項目、保護者アカウントの利用中7件・停止中1件と紐づけ等を検査。配備による状態変更・検査メール送信・試験登録は0件。
  • 承認した4列・2テーブルだけを追加。既存の記録は変更せず、旧バックアップの復元用コピーへの追加移行も検証した。
  • 定期バックアップは「有効・毎日02:00 JST・weekday=0」を保持。
  • 直前退避:/mnt/main/open-hoikuict-pilot/backups/before-spec24-20260924T111618Z。
  • スナップショット:main/open-hoikuict-pilot/runtime@before-spec24-20260924T111618Z。

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

本番の名前一覧:https://hikarinomori.hoikuict.net/attendance-checks/roster。トップの人数表示は維持し、サイドメニューまたはトップのリンクから名前一覧へ移動できる。

基準と初回の固定配備ファイル

  • 最新の配備記録:docs/deployment-parent-lifecycle-2026-09-23.md。
  • 実機へSSH接続し、稼働版・Compose・deployment.jsonが記録と一致することを準備前と転送後に確認。
  • 基準commit:06951a6eed379536e1791d4abdcf775ecd799a99。
  • 基準イメージ:sha256:e5dc0464446912e4ca1f2a465a6d9ea2a85dd20f462af8ebffce3cf0606776ec。
  • 基準deployment.json SHA256:f6ba533ed02dde2de1acb7098b5de14431e678ee9bc940d298861bbd6a36de0a。
  • Compose SHA256:a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b。内容は維持する。
  • 配備commit:04617f78c754b58f0342fce357c3720321dac766。
  • ローカルブランチ:codex/spec-20260924-production。
  • 本番基準の専用作業コピー:.local-dev/truenas-spec-20260924/source。
  • 固定配備ファイル:.local-dev/truenas-spec-20260924/bundle。
  • 実機ディレクトリ:/home/truenas_admin/spec-20260924-04617f7。
  • systemdサービス:hoikuict-spec-20260924-04617f7。

現行本番commitから承認済み41ファイルだけを取り込んだ。既存の家庭アーカイブ、初期台帳、保護者アカウント停止・再開、復元・定期バックアップ等を保持する。作業中のWindowsセットアップや復元処理の別変更は取り込んでいない。配備内容は docs/implementation-2026-09-24.md に記載。

配備前検証

  • 本番基準の作業コピーで41モジュール・525テスト成功(失敗・スキップ・収集エラーなし)。
  • 配備手順8テストがWindows・実機Linuxともに成功。設定保持、復元/バックアップとの排他、失敗時に両ワーカーを復旧する処理、DBを巻き戻さない処理を含む。
  • 今回の4列・2テーブルだけを許可するスキーマ照合を追加。移行の途中で失敗した場合も、許可された追加のみなら旧アプリへ復旧できる。未知の変更は保守状態と退避物を保持して停止する。
  • 新しい読み取り専用画面検査を架空100人で実行。4状態の名前一覧、全員の出欠確認、各園児の連絡詳細・履歴、閉園設定と権限を検査し、前後のDB全体のダンプが同一であることを確認。
  • 固定配備入力18ファイル、UPDATE.json、SHA256SUMSを実機で照合。ソース386ファイルのハッシュを固定。
  • 転送後の本番基準の再照合結果を bundle/live-before.json に保存。

認証後の処理

  1. 現行イメージ・ソース・設定・復元キューを再確認。基準に差異があれば停止。
  2. 新イメージを構築。ネットワークなしの使い捨てコンテナで、復元演習と525テストを実行。
  3. 本番DBのコピーに起動時移行を2回適用し、既存記録・許可されたスキーマ追加・新旧機能の読み取り専用画面検査・既存バックアップ互換性を確認。
  4. 公開接続を短時間停止し、バックアップ・復元との排他を確保。アプリと両ワーカーを停止し、ZFSスナップショット、主DB・施設DB・設定を退避して切り替える。
  5. 起動、ソース、既存記録・添付・バックアップ設定、許可されたスキーマ追加、新旧画面を照合し、公開を再開。

検査用の保護者連絡送信や実データへの試験登録は行わない。閉園時刻は未設定なら19:00が適用され、管理者が「設定」→「閉園時刻」から変更できる。

初回の停止と修正

初回は17:51:10 JSTに開始。実機内の525テストと復元演習、新しい列・テーブルの移行、本番DBコピーでの名前一覧・出欠確認・連絡詳細・履歴・閉園設定、既存のアーカイブ・初期台帳・保護者停止再開の検査まで成功した。

既存バックアップ互換性検査が失敗した。従来の restore_family_archive.py は家庭アーカイブ追加だけを扱っていたため、今回の4列・2テーブルが追加されたDBへ旧バックアップを復元する経路が不足していた。

修正版では、復元用コピーだけに今回の承認済み追加を適用する。元のバックアップは変更しない。既存の家庭アーカイブ追加との同時移行、未対応の変更・不完全な追加・型変更・ダウングレードの拒否を検証した。新しい5テストを含む復元関連21テストが成功。

  • 修正版commit:79bd070a720f9546558a768026567f72168edd10。
  • 修正版ブランチ:codex/spec-20260924-production-r2。
  • 修正版作業コピー:.local-dev/truenas-spec-20260924-r2/source。
  • 初回の固定ファイル・失敗記録は .local-dev/truenas-spec-20260924/bundle に保持。
  • 本番基準からの変更は修正・テストを含む43ファイル。

修正版の本番用コードで530件を実行し、528件成功。追加した復元テスト2件は開発版だけにあるテスト用設定引数で失敗したため、テスト用設定を両方の版に対応させた。アプリ側のコードは変更せず、追加テスト全5件を本番用コードで再実行して成功した。全体実行と再実行のXMLをそのまま保持し、配備準備時に失敗したケースをすべて再検証済みであることと、その間に変更されたファイルが当該テストのみであることを照合している。

修正版の固定配備ファイルは .local-dev/truenas-spec-20260924-r2/bundle。入力18ファイル・ソース387ファイルを実機で照合し、配備手順8テストもWindows・実機Linuxともに成功。転送後も本番基準が変わっていないことを確認済み。

18:13 JSTに公開 /healthz のHTTP 200・status: okを確認。PythonのHTTPクライアントは403だったため、証明書検証を維持した通常のcurlで確認した。

修正版の管理者認証コマンド

実機ディレクトリは /home/truenas_admin/spec-20260924-79bd070、systemdサービスは hoikuict-spec-20260924-79bd070。

ユーザーが実行済み(再実行不要)。

ssh -t truenas_admin@100.65.124.96 "sudo python3 /home/truenas_admin/spec-20260924-79bd070/start-systemd.py"

認証後は実機の隔離環境で530件を再実行し、全件成功・既存バックアップ互換性を確認してから切り替える。完了結果は .local-dev/truenas-spec-20260924-r2/capture_completion.py、公開ヘルスチェックは同ディレクトリの capture_public_health.py で確認する。

初回の管理者認証コマンド(再実行しない)

ユーザーがPowerShellで実行済み(再実行不要)。

ssh -t truenas_admin@100.65.124.96 "sudo python3 /home/truenas_admin/spec-20260924-04617f7/start-systemd.py"

Update service started と表示されたら再実行しない。SSHを閉じてもsystemdが処理を継続する。進捗は同ディレクトリの status.json、完了の独立照合はローカルの .local-dev/truenas-spec-20260924/capture_completion.py で行う。

修正版の完了結果は冒頭の「本番反映の結果」に記録済み。