先生PCのGUIアプリから、生徒PC全台に対してブラウザ自動操作(Selenium)を一括起動するツールです。
先生PC: 生徒PC起動アプリ.exe
│ HTTP POST /start(ポート 8080)
▼
生徒PC: trigger_server.exe(常駐)
│
└──▶ agent.exe(Selenium でログイン・ワールド起動)
| ファイル | 説明 |
|---|---|
生徒PC起動アプリ.exe |
先生PC用GUIアプリ |
agent.exe |
生徒PCで動くブラウザ自動操作 |
trigger_server.exe |
生徒PC常駐HTTPサーバー(port 8080) |
students.json |
生徒データ・設定(要作成・students.json.example から作成) |
students.json.example |
students.json のテンプレート |
mkcd_map.json |
ワールド名の表示名↔ファイル名対応表 |
.env |
認証トークン(要作成・.env.example から作成、先生PC・生徒PC共通) |
.env.example |
.env のテンプレート |
setup_teacher.ps1 |
先生PC初期設定(1回だけ実行) |
setup_student.ps1 |
生徒PC初期設定(1回だけ実行) |
build.ps1 |
EXEビルドスクリプト(開発環境のみ) |
Python + PyInstaller がインストールされた開発環境で実行します。
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
.\build.ps1出力:
dist\teacher\→ 先生PC用配布物(生徒PC起動アプリ.exe/students.json.example/mkcd_map.json等)dist\student\→ 生徒PC用配布物(trigger_server.exe/agent.exe等)
- Windows 10 / 11、全台同一LAN
- Google Chrome インストール済み
配布フォルダで .env.example をコピーして .env を作成します。
Copy-Item .env.example .env.env を開き、TRIGGER_TOKEN に任意の文字列を設定します。
TRIGGER_TOKEN=your_secret_token_here
注意: このトークンは生徒PCにも配布されます。推測されにくい文字列にしてください。
認証不要の場合はTRIGGER_TOKEN=(空欄)にすることもできます。
作成した .env は、後の手順で生徒PC用配布フォルダにもコピーして配布します。
PowerShell を管理者権限で開き、以下を実行します。
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
.\setup_teacher.ps1セットアップ内容:
- 配布フォルダ内に
lessons\フォルダを作成 lessonsフォルダをネットワーク共有(認証済みユーザー 読み取り)
完了後、以下を行います。
lessons\に各生徒の.mkcdファイルを配置students.jsonを作成・編集(後述)mkcd_map.jsonを編集(後述)
GitHub Releases からの配布(推奨):
- GitHub Releases から
student-app.zipをダウンロードして展開 - Step 1 で作成した
.envを展開したフォルダにコピー - USBメモリ等で生徒PCへ転送
開発環境からの直接配布:
dist\student\フォルダをコピー- Step 1 で作成した
.envをdist\student\にコピー - USBメモリ等で生徒PCへ転送
生徒PCで PowerShell を管理者権限で開き、以下を実行します。
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
.\setup_student.ps1画面の指示に従い PC番号(01〜09) を入力します。
セットアップ内容:
- ポート 8080 のファイアウォールルールを追加(全プロファイル対象)
trigger_server.exeをログオン時自動起動として登録(スタートアップフォルダ)trigger_server.exeを即時起動し、動作確認
完了後、再起動します(コンピュータ名変更の反映に必要)。
再起動後、ログオン時に
trigger_server.exeが自動的にバックグラウンドで起動します。
students.json.example をコピーして students.json を作成し、編集します。
Copy-Item students.json.example students.json{
"site_url": "https://your-site.com/login",
"mkcd_share": "",
"last_assignment": {},
"students": [
{
"id": "s001",
"name": "田中太郎",
"weekday": 1,
"class": 1,
"login_id": "tanaka@example.com",
"login_pw": "pass123",
"next_mkcd": "tanaka_lesson2.mkcd"
}
]
}| キー | 説明 |
|---|---|
site_url |
ログインページのURL |
mkcd_share |
設定不要(アプリ起動時に先生PCのホスト名を自動取得) |
weekday |
曜日(0=月〜6=日)。GUIでのグループ表示に使用 |
class |
クラス番号。GUIでのグループ表示に使用 |
next_mkcd |
次回起動するワールドのデフォルトファイル名 |
GUIのプルダウンに表示するワールド名と実際のファイル名の対応表です。
[
{"display": "レッスン1-1", "file": "lesson1-1.mkcd"},
{"display": "レッスン1-2", "file": "lesson1-2.mkcd"}
]生徒PC起動アプリ.exe をダブルクリックして起動します。
- 起動時にネットワーク上の
PC-01〜PC-09を自動検出 - 各PC行のドロップダウンで生徒とステージを割り当て
- 「全PC起動」ボタンで全台を並列起動
- 「更新」ボタンでPCを再スキャン
- 前回の割り当ては次回起動時に自動復元
- 各生徒の次回ワールドをプルダウンで選択
- 「保存」ボタンで
students.jsonに書き込み、タブ1にも即時反映
すべて配布フォルダ内で完結します。アンインストールはフォルダごと削除するだけです。
| 場所 | 説明 |
|---|---|
配布フォルダ\ |
作業ディレクトリ |
配布フォルダ\lessons\ |
.mkcd ファイル置き場(先生PCのみ・共有) |
配布フォルダ\students.json |
生徒データ設定(先生PCのみ・要作成) |
配布フォルダ\students.json.example |
students.json のテンプレート(先生PCのみ) |
配布フォルダ\生徒PC起動アプリ.exe |
GUIアプリ(先生PCのみ) |
配布フォルダ\agent.exe |
ブラウザ操作(生徒PCのみ) |
配布フォルダ\trigger_server.exe |
常駐サーバー(生徒PCのみ) |
配布フォルダ\.env |
トークン(先生・生徒共通・要作成) |
配布フォルダ\.env.example |
.env のテンプレート |
配布フォルダ\trigger_server.log |
サーバーログ(生徒PC) |
生徒PCのポート 8080 がブロックされているか、trigger_server.exe が動いていない可能性があります。
生徒PCのPowerShell(管理者)で確認:
netstat -an | findstr ":8080"表示されない場合は手動で起動します。
Start-Process ".\trigger_server.exe" -WindowStyle Hidden
Start-Sleep 2
netstat -an | findstr ":8080"先生PCと生徒PCの TRIGGER_TOKEN が一致していません。
# 先生PC・生徒PC ともに配布フォルダで
cat .\.env生徒PCの .env を更新したら trigger_server.exe を再起動します。
Get-Process trigger_server -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Process ".\trigger_server.exe" -WindowStyle Hidden- 生徒PCが起動・ログオン済みであること
- 先生PCと生徒PCが同一LANに接続されていること
- コンピュータ名が
PC-01〜PC-09形式になっていること(setup_student.ps1で設定) - 再起動してコンピュータ名の変更が反映されていること
- タブ1の「更新」ボタンで再スキャンを試す
cat .\trigger_server.logdist/フォルダは Git で管理していません (.gitignoreに含まれる)- 修正方法: Python コード修正 →
build.ps1実行 →dist/に新しい exe が生成される - 別PCでの実行可否: ビルド成果物(exe)は別PCでも実行可能です
- 前提条件: Chrome がインストール済み
- 配布方法:
dist\teacher\とdist\student\フォルダの内容をそのまま配布
- main: 本番向け安定版
- develop: 開発・統合ブランチ(機能追加・修正時はここから作業)
- 修正後は develop → main へのマージを推奨