Skip to content

samiosu/StudentEngineerDevelopmentSurvival

Repository files navigation

締切7日前―学生エンジニア開発サバイバル

締切まで残り7日。実装、テスト、仕様確認、AI活用、睡眠、現実逃避を選びながら、14ターンでWebアプリの提出を目指す1人用育成シミュレーションゲームです。大学のソフトウェア工学課題として、AI駆動開発の効果を検証するために制作しています。

ゲームはブラウザ内だけで動作します。バックエンド、データベース、外部API、APIキー、有料サービス、CDNは使用しません。同一のpublic/をDockerのNginxとGitHub Pagesの両方から配信します。

公開版: GitHub Pagesでゲームをプレイする

すぐに起動する

DockerとDocker Composeを利用できる環境で、リポジトリのルートから次を実行します。

docker compose up --build

コンテナが起動したら、ブラウザで http://localhost:8080 を開いてください。終了するには、起動中のターミナルで Ctrl+C を押してから次を実行します。

docker compose down

Webサービスはソースコードを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つになります。

  1. 徹夜の末に力尽きる
  2. AIに任せすぎて本人が説明できない
  3. 高品質リリース成功
  4. 奇跡の最終日完成
  5. 動くけれどバグだらけ
  6. 期限ぎりぎり提出完了
  7. 未完成だがREADMEだけ完璧
  8. Dockerコンテナだけ完成
  9. 期限内に提出できず

技術構成

用途 採用技術
画面・ゲーム 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の相対パスです。

GitHub Pages公開版

公開中のゲームは次の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ターン終了後にエンディング、スコア、中間提出からの変化、履歴を表示します。
4日目の中間提出画面 エンディングとスコアを表示した最終結果画面

ライセンス

このプロジェクトはMIT Licenseで公開されています。

About

「締切7日前―学生エンジニア開発サバイバル」という名古屋工業大学のソフトウェア工学の授業の課題であるAI駆動開発によって作成されたゲームです。

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors