はじめに
超ミニ4X(シヴィライゼーション風のターン制経済シミュレーション)ブラウザゲーム「小さな帝国」の開発連載、最終回です。
- サービスURL:https://satou20250828.github.io/micro-empire/
- リポジトリ:https://github.com/Satou20250828/micro-empire
| 回 | 内容 |
|---|---|
| #1 | 企画・課題発見 |
| #2 | 要件定義 |
| #3 | 設計(技術選定・状態設計・アーキテクチャ) |
| #4 | 開発①ゲームロジック実装編 |
| #5 | 開発②UI・画面実装編 |
| #6 | 開発③テスト・CI/CD構築編 |
| #7 | 開発中に遭遇した技術的問題 |
| #8(本記事) | 完成・振り返り |
全7回を通して開発過程を振り返ってきました。最終回では、開発全体の実績と、連載を通して見えてきたことをまとめます。
数字で振り返る開発
- コミット数:65
- Issue:21件(すべてクローズ済み)
- PR:28件
- リリース:v1.0.0〜v1.0.4の5回
- ユニットテスト:9ファイル・78件(ロジック層)
- CI:全PRでlint・test・buildを自動実行
1本のゲームを、Issue駆動でGit Flowに沿って進め、CI/CDを整備した状態でリリースまで持っていけたのは、今回初めての経験でした。
1年前の自分と、今の自分を比べて
#1で書いた通り、このプロジェクトの出発点は「1年前に初めて作ったテキスト版五目並べと、今の自分を比べる」ことでした。五目並べは、盤面に石を置いて勝敗を判定するだけの、1つのルールで完結するプログラムでした。
「小さな帝国」では、以下のように複数の要素が互いに影響し合う状態管理が必要でした。
- 労働者の位置(
Worker)が資源収穫(harvestResources)を左右する - テックツリーの解放状況(
TechState)が、労働者の移動上限・滞在制限・?マスの結果・勝利しきい値・解放コストという、5つの異なるモジュールの挙動を変える - ?マスのランダム効果、CPU AIの自律行動、難易度ごとの勝利判定が、すべて同じ1つの
render()関数上で矛盾なく画面に反映される
#2で書いたとおり、ゲームの中核ルールは要件定義の途中で3段階作り変わっています。「陣地拡大」から「駒による占領」、最終的に「労働者配置」へ。仕様を変えるたびに、それまで書いたロジックや状態設計を作り直す必要がありましたが、#3で決めた「状態は1箇所に集約し、モジュールは関数の集まりにする」という設計方針があったことで、都度の作り直しを大きな手戻りにせずに進められました。1年前には作れなかった規模のアプリを、規模なりの複雑さに振り回されずに最後まで作り切れたことが、このプロジェクトでの一番の変化だと感じています。
AIとの協働について
#1で「この連載で書かないこと」として触れた、Claude Codeとの協働についてです。実装作業はAIに任せる一方、何を作るか・なぜ作るか・どの設計を採用するかという判断は自分で行う、という役割分担で進めました。
実際に判断が必要になった場面は、連載の中でいくつも出てきました。
- #2:要件が3段階で作り変わる過程で、「陣地の所有を廃止する」「全マス制圧を勝利条件から撤回する」といった仕様の後戻りを判断する
- #7:画面遷移図の改善案を複数提示してもらい、比較表を見ながらどの案を採用するか判断する
判断を丸投げにしないための工夫として、①AIが選択肢とメリット・デメリットを整理して提示する→②相談しながら判断基準を整理する→③自分が選択肢の中から選ぶ、という3ステップを徹底しました。
今後の展望
README にも記載していますが、現時点で検討している拡張は以下の2つです。
- 盤面タイルの六角形化:現在は正方形マスの5×5グリッドです。六角形タイルにすることで隣接方向が4方向から6方向に増え、より戦略性のある盤面にできないか検討しています
- 盤面サイズの拡張:現在は5×5マス固定です。労働者移動方式で実際に遊んでみた結果を踏まえて、盤面を広げるかどうかを検討します
おわりに
全8回、実際のIssue・PR・コードを引用しながら、企画から振り返りまでを書いてきました。次のWebアプリケーションでも、今回と同じくIssue駆動・Git Flow・CI/CDという進め方を続けていく予定です。ここまでお読みいただき、ありがとうございました。