コンテンツにスキップ

2026年9月11日 仕様変更・実機反映の引き継ぎ

9月13日追記:実機反映完了

実機への反映は2026年9月13日04:19:13 JSTに完了した。 配備コミットは 9940452。43テーブルの既存レコードと構成の保持、アプリの正常起動、公開サイトの応答を確認済み。詳細は デプロイ完了記録 を参照。

以下は9月11日に中断した時点の引き継ぎ記録であり、現在の未完了事項ではない。記載されている再開コマンドを今回の配備に対して再実行する必要はない。

9月11日の中断時点の状況

当時は実装とGitへのプッシュが完了し、実機への反映は未完了だった。

実機の更新プログラムはsudo認証後に起動したが、更新前の確認で停止した。アプリの停止・イメージ切替・DB変更には進んでいない。停止後に、旧版の配備メタデータが変わっていないことと、公開 /healthz がHTTP 200・{"status":"ok"} を返すことを確認済み。

ユーザーの希望により、その日の再試行はせず、翌日以降へ持ち越した。このファイル作成時点では更新を再開していない。再開時には、まず実機の最新状態を確認する。

項目 内容
リポジトリ hoikuict/open-hoikuict
作業ブランチ codex/truenas-beta-validation
配備対象のアプリコミット 99404528a1086336f59bfd7082910c8015622c1c
実機の最終確認バージョン e480ef125c0cf8c35b3705b6181004a5bc5267d4
未完了の作業 更新前確認のエラー調査・解消、実機反映、更新後の確認

この引き継ぎ文書のコミットは、アプリのコミットより後になる。転送済みパッケージの対象は上記の 9940452 であり、ブランチの最新HEADと取り違えない。

実装済みの内容

詳細と仕様の境界は 9月11日の変更内容 を参照。

  • 文書の添付・本文入力による管理者への確認依頼、ホームの承認待ちへの統合。
  • タイムラインの通常リンク表示修正、投稿・返信内URLのリンク化。
  • 保護者KIOSKの接続監視、確認文字の拡大、入力欄の優先配置、16・17・18時ボタンの拡大。
  • 家族検索、一般職員の担当/全クラスのホーム切替、園児一覧の生年月日降順。
  • 誤打刻の取消と監査履歴。未確定の延長料金を無効化し、確定・調整・対象外・請求転送済みの料金がある場合は取消を拒否。
  • 今日の予定の全件表示、次の予定から終日予定を除外。
  • 共通QRの承認時に承認先を確認し、入力エラーでも理由・選択内容を保持。
  • 出欠確認のプッシュとメールの併用。メールは保護者による任意設定で、既存アカウントは初期OFF。
  • 家族に属するきょうだい候補の絞り込みと明示的な一括選択。
  • 期限切れアンケート回答時のHTML案内。

留意する仕様:打刻取消だけでは「保護者連絡なし」等の独立したアラームは消さない。家族選択だけでは園児の閲覧権限を増やさない。メール併用は既存の出欠確認依頼が対象で、お知らせ・アンケート等の新しい自動配信は追加していない。予定は閲覧可能なカレンダーの確定予定が対象。

DB変更は次の5テーブルの追加のみ。既存テーブルの列変更はない。

attendance_corrections
document_review_requests
guardian_terminal_status
parent_email_preferences
parent_notification_emails

文書添付は既存の永続化領域 storage/document_reviews/ に保存する。

検証済みの範囲

全体テスト653件が成功。その後の追加・更新に対して関連54件、新機能13件、KIOSK6件を再検証し、いずれも成功した。これらは重複を含み、合計件数として加算しない。Ruffと git diff --check も成功。

ブラウザーでは架空データとCSRF検証を使い、390/768/1280pxで専用KIOSKの入力・確認画面を検証。通常スレッド、家族検索、きょうだい一括選択、確認依頼の提出、取消履歴、端末設定保存も成功し、JavaScriptエラーはなかった。

主要な回帰確認ファイル:

test_spec_improvements_20260911.py
test_parent_public_registration.py
test_parent_push_api.py
test_surveys.py
test_guardian_terminal.py
tools/spec_20260911_browser_fixture.py
tools/test-spec-20260911-browser.cjs

メールはcapture方式で検証し、実メール・プッシュは送信していない。物理タブレットの通信断試験と、新版を配備した実機での操作確認は未実施。

全体テストを元のWindows作業環境で再実行する場合、過去の一時ファイルの権限エラーを避けるため次の除外が必要だった。

.\venv\Scripts\python.exe -m pytest -q -p no:cacheprovider --ignore=.local-dev --ignore=.pytest_cache --tb=short

実機で止まった箇所

status.json の失敗日時は 2026-09-11 17:51:26 JST(08:51:26 UTC)。

state: failed
exception: OSError
errno: 38
main (update-pilot.py:333)
  -> running_baseline (update-pilot.py:212)
  -> output (update-pilot.py:60)
  -> subprocess.run / Popen / _execute_child

最初の docker compose ... ps -q app を子プロセスとして起動する段階で失敗した。原因は未特定。 認証は通っており、単なるパスワード入力待ちの状態ではない。

このエラーを直す前に、同じ更新コマンドを繰り返したり、稼働中のアプリを停止したりしない。まずサーバー上のPython・Dockerコマンドの実行可否を、データを変更しない方法で切り分ける。

公開ヘルスチェックはPython urllibでは403となった一方、Edgeブラウザーからは200だった。urllibの403だけでアプリ停止とは判断しない。

職場から再開する手順

  1. このブランチと配備対象コミットを確認する。別の作業環境に未コミット変更がある場合は、その変更を保持する。
  2. 職場の承認済み接続方法で対象TrueNASへ接続する。接続先・SSHユーザー・認証情報は既存の運用設定を使用する。この文書には記載していない。
  3. SSHユーザーのホームにある spec-20260911-9940452/ を確認し、status.json と配備メタデータを読み取る。別の更新が行われていないか、公開ヘルスも再確認する。
  4. update-pilot.py の該当箇所を読み、最小限の子プロセス実行、Docker/Composeのバージョン確認などで OSError errno=38 の原因を切り分ける。この段階では更新ヘルパー全体を再実行しない。
  5. 原因に応じて修正する。更新ファイルを変更した場合は UPDATE.json 内の該当ハッシュと SHA256SUMS を更新し、転送後にも照合する。現在の配備状態が変わっていた場合は、旧版の照合条件も再準備する。
  6. DBコピーでの起動検証、構成保持、バックアップ・スナップショット、失敗時の復帰を確認してから更新を再開する。sudo認証が必要な場合は、実際のsudoプロンプトで入力する。
  7. status.json の complete、新イメージと配備対象コミット、コンテナヘルス、公開ヘルスを確認する。既存レコードの照合結果とバックアップ場所も記録する。
  8. 実機画面で主要な変更を確認し、実装・プッシュ・実機反映の3点を区別して完了報告する。動作確認だけを目的とした実保護者への通知や実記録の取消は行わない。

パッケージと資料の所在

職場のPCに元の .local-dev がなくても、更新に必要なファイルは実機へ転送済み。SSHユーザーのホームの spec-20260911-9940452/ に次がある。

source.tar.gz
update-pilot.py
launch-update.py
UPDATE.json
SHA256SUMS
status.json

source.tar.gz の転送時SHA256:

17d888ea7cf1d8650962cce8152b8b4352d2b1e814ea81c32cdc8f250f21ade1

更新ヘルパーは旧コード276件・新コード288件の照合、DBコピーでのネットワークなしの起動検証、既存43テーブルの比較、バックアップとZFSスナップショット、イメージ切替、ヘルスチェック、失敗時の旧イメージ復帰を組み込んでいる。ローカルの模擬検証では、構成保持・WALを含むDBバックアップ・データ改変検出・正常更新・更新前停止・失敗時復帰を確認済み。今回の実機実行は、その最初の確認段階で止まった。

元の作業PCだけにある補助資料(Git管理外):

.local-dev/truenas-spec-20260911/prepare.py
.local-dev/truenas-spec-20260911/verify-helper.py
.local-dev/operations/truenas-deployment-20260911-spec-improvements.md

職場でこれらが必要になった場合は、承認済みの方法で元の作業PCから取得する。.env、Compose展開結果、*.private.log は認証情報を含む可能性があるため、引き継ぎ文書やGitには転記しない。

既存の配備方針は TrueNAS運用手順 と パイロット配備仕様 を参照。ただし、実機固有の構成は転送済みヘルパーと現行構成を確認して保持する。

別の作業環境で再開するときの依頼文

docs/handoff-2026-09-11-spec-deployment.md を読み、9月11日の仕様変更の実機反映を再開してください。実装は9940452でプッシュ済みですが、実機更新は更新前のsubprocess起動時にOSError errno=38で停止しました。まず最新の実機状態と原因を確認し、既存データ・構成を保持したうえで実機反映と動作確認まで進めてください。