締切まで残り7日。実装、テスト、仕様確認、AI活用、睡眠、現実逃避を選びながら、14ターンでWebアプリの提出を目指す1人用育成シミュレーションゲームです。大学のソフトウェア工学課題として、AI駆動開発の効果を検証するために制作しています。
ゲームはブラウザ内だけで動作します。バックエンド、データベース、外部API、APIキー、有料サービス、CDNは使用しません。同一のpublic/をDockerのNginxとGitHub Pagesの両方から配信します。
DockerとDocker Composeを利用できる環境で、リポジトリのルートから次を実行します。
docker compose up --buildコンテナが起動したら、ブラウザで http://localhost:8080 を開いてください。終了するには、起動中のターミナルで Ctrl+C を押してから次を実行します。
docker compose downWebサービスはソースコードをbind mountしないため、コンテナの起動・停止でリポジトリ内のファイルが変更されることはありません。
| 区分 | 内容 |
|---|---|
| 入力 | 行動の選択、ゲーム開始・続行・再プレイ・リスタート、保存データの初期化 |
| 処理 | 行動効果、条件付きランダムイベント、値の上限・下限処理、昼夜と日付の進行、中間評価、スコアとエンディングの判定、自動保存 |
| 出力 | 6ステータスと直前の増減、イベント結果とログ、中間提出の評価・講評・提案、最終スコア、エンディング、ハイスコアと最大10件の履歴 |
- 7日間を昼と夜に分けた合計14ターンです。各ターンで行動を1つ選びます。
- 行動の効果を適用した後、条件を満たす場合だけランダムイベントを抽選します。
- 同じ作業行動を連続すると集中力が落ち、そのターンの進捗が3少なくなります。実装、テスト、仕様確認、AIを組み合わせることが重要です。
- 6~7日目は作業行動の一般イベント発生率が5ポイント上がります。危険イベントには、選んだ行動の進捗を帳消し以上にするものもあります。
- 7ターン目(4日目の昼)の行動終了後には、固定イベント「中間提出」が必ず1回だけ発生します。中間提出はターンを消費せず、確認後は4日目の夜から再開します。
- 14ターン目(7日目の夜)が終わると、ステータスから最終評価、0~1000点のスコア、1つのエンディングを決定します。
- 体力やストレスが限界でも途中終了はしません。ただし、疲労中の作業は効率が落ち、最終評価とエンディングにも影響します。
- 1プレイはおよそ3~5分です。
| ステータス | 範囲 | 意味 |
|---|---|---|
| 開発進捗 | 0~100 | 提出物がどこまで完成したか。締切時の完成度へ直結します。 |
| コード品質 | 0~100 | 読みやすさや変更しやすさ。バグ発生と保守性評価へ影響します。 |
| バグ数 | 0~99 | 未解決の不具合数。多いほど安定性とスコアが下がります。 |
| 体力 | 0~100 | 作業を続ける余力。少ない状態での作業にはペナルティがあります。 |
| ストレス | 0~100 | 心理的な負荷。高すぎると失敗しやすくなります。 |
| AI依存度 | 0~100 | AIへ任せている度合い。低ければよいのではなく、品質と検証とのバランスが重要です。 |
画面では数値、ゲージ、状態を示す文字を併記します。警告と評価ランクは色だけに依存しません。
| 行動 | 概要 |
|---|---|
| 実装する | 進捗を大きく伸ばしますが、体力とストレスを消費し、約30%を基準に品質・疲労で上昇する確率でバグが3件増えます。 |
| テストを書く | 進捗を少し進めながら品質を上げ、バグを2件減らします。バグが0でも品質向上の効果があります。 |
| 仕様を見直す | 品質を上げ、AI依存を抑え、続く3ターンの実装リスクを下げます。 |
| AIに実装させる | 進捗とAI依存度が大きく増えます。一発成功、通常、重大な手戻りを伴う幻覚の結果がありますが、外部AIへは通信しません。 |
| 睡眠する | 体力を大きく回復し、ストレスを下げます。夜の睡眠には追加効果があります。 |
| 遊んで現実逃避する | ストレスを大きく下げますが、ときどき締切への焦りが増します。 |
中間提出では、現在の状態を「完成度」「保守性」「安定性」「健康」「AI活用」の5項目と総合評価に分け、S~Dで表示します。教員役の講評、現在の問題点、理由付きのおすすめ行動(最大3件)を確認して、残り7ターンの戦略を変更できます。評価とスナップショットはゲーム状態へ保存されるため、再読み込みしても重複発生しません。最終画面では中間提出時からのステータスと総合評価の変化も表示します。
最終スコアは、進捗、品質、バグ、体力、ストレス、AI利用のバランス、完成ボーナスから0~1000点で計算します。AI依存度は50付近を基準にしつつ、品質不足やバグ過多の場合はAI活用点を減らします。
優先順位付きの条件から、必ず次のいずれか1つになります。
- 徹夜の末に力尽きる
- AIに任せすぎて本人が説明できない
- 高品質リリース成功
- 奇跡の最終日完成
- 動くけれどバグだらけ
- 期限ぎりぎり提出完了
- 未完成だがREADMEだけ完璧
- Dockerコンテナだけ完成
- 期限内に提出できず
| 用途 | 採用技術 |
|---|---|
| 画面・ゲーム | HTML、CSS、Vanilla JavaScript(ES Modules) |
| 保存 | ブラウザのlocalStorage |
| Docker配信 | Nginx 1.30 Alpine、Docker Compose |
| 静的公開 | GitHub Pages、GitHub Actions |
| 自動テスト | Node.js 24の標準node:test / node:assert |
ビルドツールとnpm依存パッケージはありません。ゲームロジックはDOM操作から分離し、乱数を注入して再現可能なテストを行えるようにしています。
.
├── public/ # Docker/Pages共通の公開ルート
│ ├── index.html
│ ├── css/styles.css
│ └── js/
│ ├── main.js # 起動、入力、画面遷移
│ ├── config.js # 初期値、上限、確率
│ ├── data/ # 行動、イベント、表示文
│ ├── game/ # 状態、ターン、評価、結果
│ ├── storage.js # 保存、検証、移行
│ └── ui.js # DOM描画
├── tests/ # Node標準テスト
├── nginx/default.conf # 静的配信設定
├── .github/workflows/pages.yml # test後のPages公開
├── docs/
│ ├── AI_DEVELOPMENT_LOG.md # 会話と検証に基づくAI駆動開発記録
│ └── screenshots/ # README用画像の配置先
├── AGENTS.md # AI向けの設計原則と変更ガイド
├── Dockerfile
├── compose.yaml
└── package.json
Node.js 24以上がホストにある場合は、追加インストールなしで実行できます。
npm testホストにNode.jsがない場合は、Docker内のNode.js 24で同じテストを実行できます。テスト用コンテナはリポジトリを読み取り専用でmountし、ネットワークを無効にします。
docker compose --profile test run --rm testテスト対象は、行動とターン進行、条件付きイベント、中間提出、最終評価・スコア・全エンディング、保存データの破損・移行・上限処理、公開assetの相対パスです。
公開中のゲームは次のURLからプレイできます。
https://samiosu.github.io/StudentEngineerDevelopmentSurvival/
mainブランチへpushするか、Actions画面からTest and deploy GitHub Pagesを手動実行すると再デプロイできます。ワークフローはNode.js 24で全テストを実行し、成功した場合だけpublic/を公式Pages Actionsで公開します。
HTML、CSS、JavaScriptの参照は相対パスなので、このプロジェクトサイトのサブディレクトリでも動作します。Dockerファイル、テスト、文書は公開artifactへ含まれません。
次の2キーだけを使用します。
student-engineer-survival:profile:ハイスコアと新しい順のプレイ履歴(最大10件)student-engineer-survival:active:進行中ゲームの自動セーブ
ゲーム開始時、各行動後、中間提出の確定・確認後に保存します。保存値にはschema versionを持たせ、欠損値、範囲外の数値、古い形式、壊れたJSONを安全に処理します。localStorageが拒否された場合も、現在のタブ内のメモリでゲームを続け、画面に警告します。「データ初期化」はこのアプリの2キーだけを削除します。
localStorageはブラウザのoriginごとに分離されます。このため、http://localhost:8080のDocker版とhttps://samiosu.github.ioで配信するGitHub Pages版では、セーブデータやハイスコアを共有しません。
- 320px以上を想定したmobile-firstのレスポンシブ表示
- セマンティックな見出し、ボタン、表、リストとキーボード操作
- フォーカス表示、44px以上の操作領域、結果の
aria-live通知 - 色だけに頼らない警告と評価、
prefers-reduced-motionへの配慮 - 最新の主要ブラウザ(Chrome、Edge、Firefox、Safari)
- 日本語・1人用・難易度1種類です。音声、外部画像、オンラインランキング、複数端末同期はありません。
- 乱数を使うため、同じ行動列でもイベント結果が変わる場合があります。
- 保存はブラウザ内だけです。サイトデータの削除、プライベートブラウズ終了、ブラウザ設定による拒否で永続データを失う場合があります。
- クライアントだけで完結するため、localStorageのスコアは改変可能です。競技用の不正防止は目的としていません。
| タイトル画面 | ゲーム画面 |
|---|---|
| 7日間・14ターンの開発サバイバルを開始します。 | ステータスを確認しながら、6つの行動から次の一手を選びます。 |
![]() |
![]() |
| 中間提出 | 最終結果 |
|---|---|
| 4日目に5項目の評価、講評、問題点、おすすめ行動を確認できます。 | 14ターン終了後にエンディング、スコア、中間提出からの変化、履歴を表示します。 |
![]() |
![]() |
このプロジェクトはMIT Licenseで公開されています。



