コンテンツにスキップ

GitHubの検証済み最新版を取得するインストーラー

2026-09-23。ユーザーの「その方式に合わせたインストーラーを作って」に基づく変更。操作モックを試した後、「この流れで実装を進める」と回答済み。

要望と対象

  • 要望:新しいPCへ導入する際、GitHubから検証済みの最新版を取得する。
  • 対象:既存のWindows 11 x64向けローカル試用を引き継ぐ。Git・Pythonの個別導入は不要。管理者の名前・メール・パスワード・確認、および保存場所・ポート・ログインID・作成理由・実行者・承認者を保持。
  • 通常の本体更新は配布版の更新で対応する。導入済み環境は保存した版を起動する。既存環境の上書き更新、園内公開設定、Linux実行ファイルは今回の対象に含めない。
  • 基準となる業務アプリ:本番配備済み 06951a6eed379536e1791d4abdcf775ecd799a99。保護者の停止・再開、初期台帳、家庭アーカイブ、復元等を含む。開発中main全体で置き換えない。

合意した操作

  1. 新規導入画面を開くと最新版を確認する。公開版・OS・導入アプリとの互換性を確認できるまで進めない。
  2. 版番号、取得元、ダウンロードサイズと変更内容を表示する。管理者情報を入力し、確認画面へ進む。
  3. 「ダウンロードして準備」で表示中の版を取得し、検証、展開、設定・管理者作成、起動確認を行う。初回情報を入力しただけでは保存しない。
  4. 確認後に配布版が変わった場合は新しい版を表示して再確認する。版の一致にはrelease IDとasset ID・サイズ・SHA-256を含める。
  5. 通信失敗は入力を保持して再試行できる。未公開・非対応OS・古い導入アプリ・配布ファイルの不一致を分けて案内する。
  6. 中断時はこの試行が作った準備フォルダーだけを片付ける。既存環境やデータは変更しない。完了後は保存先の実行ファイルから起動する。

モック:tools/github-installer-preview/、http://127.0.0.1:18847/。版番号・通信・導入処理は架空で、DB・外部通信・保存処理に接続しない。

配布の仕様

配布元は既存の公開リポジトリ hoikuict/open-hoikuict に固定する。2026-09-23に最初の配布版 v2026.9.23.1 を公開した。

  • 最新版の取得:GitHub REST APIの /repos/hoikuict/open-hoikuict/releases/latest。公開済みでdraft・prereleaseでない版を使う。
  • 添付:OpenHoikuICT.exe、OpenHoikuICT-windows-x64.json、OpenHoikuICT-windows-x64.zip。
  • JSON:本体のcommit、OS・アーキテクチャ、導入/起動プロトコル、ZIPのサイズ・SHA-256、全ファイルのSHA-256。
  • HTTPSのGitHubと配布CDNだけへ接続する。利用者にGitHub認証やトークンの入力を求めない。
  • GitHub APIのasset digestでJSONを検証し、JSONとAPIが示すZIPのサイズ・ハッシュが一致する場合だけ取得する。取得したZIPと展開ファイルも照合する。
  • 配布用ビルドは変更がコミット済みの専用ソースから作る。未追跡の新機能が欠落するビルドや、未コミットの差分を含む配布を拒否する。

GitHubの公式仕様:Releases API、Release assets API。

検証と結果

境界テスト17件、Ruff、JavaScript構文の確認が成功。Windowsの長い保存先で展開が止まるケースを修正し、配布ファイル一覧から準備中のパス長を事前検査する。標準の保存先を使えばWindows全体の長いパス設定を変更する必要はない。

最終ビルド(ソース 28d551436d57af8bd80fd9d1188461e9b9a1864f)はWindows 11 x64上で実機検証を完了した。

  • 弱いパスワードの拒否と準備用フォルダーの巻戻し、既存環境の上書き拒否。
  • 架空の管理者での実HTTPログイン、healthz、クラス登録、停止、導入先の実行ファイルからの再起動・再ログイン・登録内容の保持。
  • 設定鍵の保持、Argon2ハッシュ、管理者作成監査1件、園児・家庭のデモデータ混入なし。
  • 初期台帳と保護者アカウント一覧の表示。業務アプリの全機能を新規PCで再受入したものではない。
  • 最終実行ファイルの画面で管理者・導入記録の全入力欄、中断・再開時の入力保持、終了処理を確認。
  • 最終実行ファイルから公開GitHub APIへの接続と、Release未公開時の案内を確認。ネット接続不可の場合も「次へ」を無効にし、再試行を案内する。
  • ZIPのファイル一覧から、本番DB・運用環境の.envが含まれないことを確認。従来の配布用文例SQLite 2点だけを含む。

配布物は dist/OpenHoikuICT-Online-Setup-v2026.9.23.1/。実行ファイルは9,416,289 bytes、本体ZIPは73,542,796 bytes。ZIPのSHA-256は 3d7046b85c9c8943fcb19110ed52b3e620b3457f4d9ec80a9e53063b4b2229d8。

ユーザーの公開承認後、専用ブランチ codex/github-installer-20260923 へ最終修正を送信し、3点の添付ファイルをGitHub側のdigestと照合して公開した。Release IDは 394172493、タグのソースは 28d551436d57af8bd80fd9d1188461e9b9a1864f。本番環境の変更やmainへのマージは行っていない。

認証なしで公開された実行ファイルを取得し、ローカル検証済みファイルとのSHA-256一致を確認した。実画面の版番号・サイズ・変更内容の表示も確認済み。

公開先から取得した実行ファイルで、最新Releaseの選択、配布情報・本体の取得とハッシュ照合、新規導入、実HTTPログイン、クラス保存、停止・再起動、保存データの保持まで成功。導入された版が v2026.9.23.1、ソースが 28d5514 であることも導入記録と照合した。検証スクリプトは終了コード0。オンライン試験では同一最終ビルドで確認済みの弱いパスワード巻戻しを省略し、重複したダウンロードを避けた。

配布フォルダーの verification.json と SHA256SUMS.txt に検証結果と各ファイルのハッシュを保存した。

配布版を作る手順

本番機能を含む専用チェックアウトで、変更をコミットしてから次を実行する。各パスは絶対パスで指定する。検証先には階層の浅い専用フォルダーを選ぶ。

./scripts/build_windows_installer.ps1 -Runtime <Python3.12-x64> -BuildPython <build-venv/python.exe> -SitePackages <build-venv/Lib/site-packages> -Output <new-output> -VerificationWorkspace <short-test-folder> -ReleaseTag v2026.9.23.1

このコマンドは境界テスト、実行ファイル・配布データの生成、架空の管理者での実導入・ログイン・再起動を順に行い、失敗した場合は止まる。全て成功した後に3点の添付ファイルをReleaseへ登録し、アップロード後のdigestを照合してから公開する。

公開後には、生成した実行ファイルを使って実際の取得元から導入する。

python scripts/verify_beta_bundle.py --bundle <output/bundle> --workspace <short-test-folder> --online --skip-weak-password