Windows導入アプリ:このPC・園内LAN・園外利用
2026-09-23。操作モックをユーザーが試し、「この流れで実装を進める」と承認。以下の操作順を実装対象とする。実機検証と配布の状況は更新記録を参照。
要望・解釈・未確定事項
- 要望:「導入アプリを仕上げてみよう」。直前の合意方向は、Windowsでまず園内LAN運用し、その後にインターネットから利用できるようにすること。
- 解釈:既存のGitHub配布版取得・このPCだけの試用を保持し、同じ導入アプリに園内運用と園外利用の設定を追加する。入力欄を増やすだけでなく、設定前の確認、既存環境の引継ぎ、Windows常駐、失敗復旧、実機確認まで扱う。
- 合意:以下のモックの操作順、ドメイン利用/園内証明書の選択、SMTPをLAN段階で確認する案内、公開停止時の登録・再設定メールの扱い。
- 実環境の値(園名、IP、ルーター、ドメイン、SMTP、バックアップ先)はインストール時に指定する。モック確認に実アカウントの情報は不要。
基準
- 公開導入アプリ:v2026.9.23.1。配布ソース
28d551436d57af8bd80fd9d1188461e9b9a1864f。 - 業務アプリの本番基準:
06951a6eed379536e1791d4abdcf775ecd799a99。保護者の停止・再開、初期台帳、家庭アーカイブ、既存の復元等を保持する。 - 記録:
docs/github-installer-2026-09-23.md、docs/deployment-parent-lifecycle-2026-09-23.md。 - 画面基準:
beta_setup/ui/。管理者の名前・メール・パスワード・確認、保存場所・ポート・ログインID・作成理由・実行者・承認者の全項目を残す。 - 既存開発中mainや未コミットの変更全体を配布ソースにしない。実装時は上記本番機能を含む専用ソースへ必要な変更を取り込む。
モック
tools/windows-server-setup-preview/http://127.0.0.1:18849/- 静的HTML/CSS/JavaScriptのみ。状態はページのメモリー内だけ。HTTPサーバーは4ファイルをloopbackへ配信する。DB・API・外部通信・OS設定・メール送信に接続しない。
- CSPで
connect-src 'none'、form-action 'none'。実データ、実パスワード、実トークンは入力しない。 - 「試す状態」で未入力・一部入力・入力済み・導入済み・LAN利用中・園外利用中を切り替える。「試すエラー」で通信・DNS・SMTP・保存先・権限・設定途中の失敗を模擬する。
操作案
1. 導入ホームとこのPCだけの試用
- 未導入では「このPCに導入する」だけ進める。既存の配布版表示→管理者→確認→ダウンロードの順を保持する。
- 保存場所の既存環境を検出したら、再作成せずに読取り・稼働状態を確認してホームへ出す。不明なフォルダーを上書きしない。
- ダウンロードして準備するまでは新規アカウント・ファイルを作らない。完了時に入力パスワードを画面状態から消す。
- 通信失敗は入力を保持して再試行する。取得版が変更された場合の再確認など、既存版の整合性保護を実装で維持する。
- 完了後は同じ環境から園内LAN設定へ進める。LAN設定前は架空データで試す。
2. 園内LAN
| 画面 | 内容 | 次へ進む条件 |
|---|---|---|
| PC確認 | 既存データ、園名、ネットワーク、容量、対応版 | 環境とプライベートネットワークの確認 |
| 園内接続 | IP、許可する園内CIDR、固定IP、HTTPS方式、ホスト名、園内DNS | URL・証明書設定の確認 |
| メール | SMTPホスト/ポート/ログイン/秘密情報、送信元、確認用宛先 | 明示操作で確認メール送信、受信確認 |
| バックアップ | 保存先、時刻、保存期間、自動起動とスリープ設定 | サービス権限での保存先検査 |
| 確認 | 引継ぎ元、接続範囲、OS変更、バックアップ、園外は未公開 | 「園内LANの設定を適用」 |
| 動作確認 | 別端末でのログイン、PC再起動、隔離場所への復元演習 | 利用者確認+復元演習成功 |
- 現行productionはHTTPS・Secure cookie・CSRF・信頼プロキシ指定・SMTP/STARTTLSを必須にする。LANだからdevelopmentで実データ運用する設計にはしない。
- 園用ドメインを使う場合、Cloudflare DNSの対象zoneだけに限定した権限で証明書発行・更新。園内DNSはサーバーの私設IPを返す。適用前確認ではDNS・権限の事前検査を行い、証明書の発行・永続保存は適用フェーズで行う。
- ドメインを後回しにする場合、園内証明書を利用する。各PC・タブレットへの信頼登録と園内DNSが必要。警告の無視で代替しない。
- ルーター機種ごとのDHCP予約・DNS設定は手動案内。Windows全体のDNSサーバー設定やネットワーク種別を黙って変更しない。
- 適用前にバックアップと復旧情報を固定する。UACは最終適用時。一般権限の画面から任意コマンドを渡せる構造にしない。
- アプリ自体はloopbackに置き、HTTPS受付から接続。Windows Firewallは選択したインターフェース、Private profile、許可CIDR、対象HTTPSポートに限定する。既存ルールは保持する。
- 管理用導入UIはloopback+起動トークン+Host/Origin検証を維持する。
- Windowsサービスの開始・停止・復元排他・バックアップジョブ・失敗後の状態復旧を実装する。サービス専用アカウントとデータ/秘密情報のACLを設計し、権限を最小化する。
- 現行のバックアップ・復元はLinux/TrueNAS用運用の実績。Windowsのファイルロック、原子的置換、パス、ACL、ジョブ再開、復元時の停止・起動を個別検証する。POSIX
chmodのみで秘密情報を保護した扱いにしない。 - LAN適用後、実機確認待ちは独立状態にする。中断や再起動後も確認の続きから再開できる。園外設定はLAN確認完了後に有効にする。
3. 園外からの利用
- LAN運用が確認済みの環境から開始。既存DB・設定鍵・認証・閲覧権限を維持する。
- 公開ホスト名を指定。園用ドメイン方式では園内と同じ名前に限定して初版を単純化する。園内証明書方式では公開用URLを追加し、園内URLを保持する。
- Cloudflareのドメイン・Tunnelを案内に沿って準備する。初版案はユーザーが園用Tunnelの限定トークンを入力する方式。ドメイン購入・アカウント契約は自動化しない。
- 最終確認で職員・保護者向けアプリが公開されること、登録メール等のURL変更、現在の権限が維持されることを示す。
- 「園外からの利用を開始」でのみ常駐接続を開始する。確認ボタンで公開サービスを起動しない。
- 園外の携帯回線からログイン、確認用アカウントでメールリンク、閲覧範囲を確認する。公開完了がメール一斉送信を起動しない。
- ホームから園外公開を停止できる。Cloudflare接続だけを停止し、LAN・DB・アカウントは保持。公開URLに依存する登録・再設定メールを公開再開まで止める案はユーザー確認事項。通常通知を一括停止する仕様とは区別する。
保存・修正・取消
- 画面で「次へ」「戻る」「変更」を操作しても適用しない。確認に使った値が変われば、その接続確認結果を無効にする。
- 実装版の下書きは秘密情報を含めず、専用のアクセス制御された保存先に保存。終了後の再開時は必要な秘密情報を再入力する。
- SMTP・DNS・Tunnelの秘密情報は最終適用時にサービスから利用できるWindows保護領域へ保存し、所有権とACLを限定する。URL、ログ、確認表に露出させない。
- 実行前の取消は設定変更なし。適用中の取消は安全な区切りで停止し、今回の変更記録だけを逆順に戻す。LANの設定完了後に画面を閉じてもサービスは止めない。
- 復旧できなかった場合は「戻しました」と表示しない。未復旧項目・安全に停止している状態・再試行/手動復旧手順を示す。モックは通常の巻戻し成功例のみであり、実装の成功証拠ではない。
- 再試行は記録と実際のサービス/ファイルを照合する。アカウントの重複作成、既存DBの巻戻し、別の環境のファイル削除をしない。
実装の順と受入条件
- モック試用・操作合意。
- 導入状態・下書き・環境識別・変更記録の設計。既存試用環境の検査と安全な移行。
- Windowsサービス・HTTPS・SMTP・Firewall・バックアップ/復元のLAN実装。公開機能の完成を待たずLAN受入をできる単位にする。
- Windows実機で新規導入、既存環境引継ぎ、別端末ログイン、ログオン前起動、既存帳票/初期台帳/家族/保護者認証、バックアップと隔離復元、強制中断後の再開、権限拒否/通信/証明書/保存先/サービス故障を確認。
- 公開用接続・URL変更・公開停止/再開の実装。園外失敗でもLANとデータを保持し、未認証データの露出がないことを確認。
- 依存実行ファイルを公式配布元・固定版・ダイジェストで検証。既存オンライン配布版の検証を維持して最終EXEをビルド。
- 検証済みの完成品に合わせて公開マニュアルと配布物を更新する。モックの作成を新EXEの公開完了とは扱わない。
技術根拠
- Windows Firewallのコマンド操作
- CaddyのHTTPSとDNS challenge:外部から到達できないサーバーでも証明書取得が可能。DNS provider対応moduleの同梱・供給元検証が必要。
- Caddyの常駐運用
- Cloudflare Tunnel
- CloudflareのWindowsサービス