いむねこ開発記録 企画・設計〜リリース編

雑記
imuneko
スポンサーリンク

前回の記事:

はじめに

前回の「きっかけ編」では、ゲーム制作と配信の基盤構築と「とりあえず世に出す」ことを目指して進めたことを書きました。

今回のテーマを一言で言うなら、「AI(Gemini)と壁打ちして、AI(コーディングエージェント)に渡す指示書を作る」です。

AIと壁打ちしながら企画を練った

「いむねこ」の企画を練るにあたって、まずは頭の中にある抽象的なアイデアをGeminiにぶつけてみることにしました。

最初から完璧な仕様書を書く必要はありません。自分がゲームで何を重視したいのか、その軸だけを箇条書きにしてアドバイスを求めました。

実際に使った初期プロンプトがこちらです。

ゲームの企画練るの手伝って
まずコンセプトを伝えるので、何を詰めるといいかアドバイスを下さい
システムはクリッカー系を想定しているけど、より向いてそうなシステムがあればそっちを採用しようと思います

重視したいこと
・成長実感があること
例えば進行に伴ってステータスやリソースの数値の増え方が桁違いに増える
・カタルシスを感じられること
例えば成長に波があり、大きな成長の前には手頃な苦痛(作業など)があること
・プレイを通して哲学的な学びがあること
例えば仏教の考え方、ストア派哲学の考え方が学べるなど
・かわいいこと
キャラクターが猫、もふもふぷにぷに動く、アクセサリでドレスアップできるなど

Geminiはこれらの要望をうまく咀嚼し、「放置系やりこみゲーム(輪廻転生や試練の概念を組み込む)」という具体的なシステムへ昇華するアイデアを出してくれました。

タイトルは仏教の仏の字を分解してイムとし、いむねこに決定しました。

コーディングエージェント向けの「指示書」を作る

企画の骨組みが見えてきたら、次はこれをAIが理解して実装できる形(中間成果物)に変換しました。

今回は実装にコーディングエージェント(Claude Code等)を使う予定だったので、Geminiに対して「コーディングエージェントに渡すための指示書(Markdown)」を作成してもらうよう依頼しました。

ここまでの内容で最低限のプロトタイプが作れそうです
コーディングエージェント(claude code)に指示するためのmdファイルを作ってください

人間向けの大まかなアイデアを、AIエージェントが迷わず動ける具体的なタスクや構造定義に落とし込んでもらうアプローチです。
人間がゼロから仕様書を書く必要がないのは本当に助かりますね。

技術選定も対話で決定

指示書のベースができたところで、技術スタックや設計思想についても壁打ちを行いました。

「いむねこ」はある程度長期的に運用・アップデートしていく想定です。
そのため、コードの変更容易性を確保するための技術選定を行いました。

技術選定と設計も考えていきたい
ある程度長期的にメンテナンスを行う想定なので型システムを使って変更容易性を確保し、コンパイル言語を使ってランタイムエラーを防いでいきたい
おそらくTSを使うのが適切だと思う
これもAIエージェントに指示する内容に加えて

完成した指示書(サンプル)

こうしてGeminiとの壁打ちを経て完成した、コーディングエージェント用の指示書がこちらです。

# 開発仕様書:ゲームタイトル「いむねこ」

## 1. 概要
プレイヤーが愛着のある猫(名前付き)と共にリソースを稼ぎ、成長を繰り返す放置型クリッカーゲーム。
哲学的なテーマとして「ストア派的忍耐」に加え、「仏教で重要とされる考え方を学ぶ」ことを中核に据え、「執着の解放」をゲームメカニクスに落とし込む。

## 2. ゲームのコアサイクル
1. **実装:** 新たなシステムやリソース生成手段を解放し、猫をシステムに組み込む。
2. **強化:** リソースを消費して成長させ、インフレしていく数値を実感する。
3. **見極め(到達):** 成長が極限に達し、進行が「アイドリング不調」に陥る。獲得可能な転生倍率と現在の進行度を天秤にかけ、プレイヤー自身の判断で修行(忍耐フェーズ)への移行タイミングを決定する。
4. **転生:** 忍耐を乗り越え、蓄積した装飾(執着)をすべて手放すことで、前周回を凌駕する永続的な成長倍率を獲得し、新たな次元へ進む。

## 3. 技術スタック & アーキテクチャ方針

### 技術スタック
ライセンス規約により商用利用NGのライブラリは利用しないこと。
- **Language:** TypeScript (`strict: true`)
- **Build Tool / Framework:** Vite + React
- **Styling:** Tailwind CSS
- **State Management:** Zustand(またはReact Context/Custom Hooks)
  - ゲームの永続化データ(LocalStorage連携)とUI状態の管理。
  - 巨大数のシリアライズおよびデシリアライズ処理を実装すること。
- **Icon / Animation:** Lucide React, Framer Motion
- **Math:** 巨大数計算のため `decimal.js` または `BigInt` 等の導入を必須とする。

### アーキテクチャ方針
- **ビジネスロジックとUIの完全分離:**
  - インフレ計算(√(x × log2(x))などの対数を用いたコスト計算)、転生倍率の算出などのゲームロジックは、Reactコンポーネント(UI)から独立した純粋な関数/ドメインモジュール(`src/domain/`)として実装すること。
  - これにより、計算式の単体テスト(Jest / Vitest)を容易にし、将来的な変更容易性を確保する。
- **型定義の徹底:**
  - `any` 型の使用は禁止。
  - ゲーム状態(`GameState`)、パートナー(`Partner`)、装備・装飾(`Accessory`)等の型を `src/types/` に明示的に定義すること。

## 4. 推奨ディレクトリ構成

    src/
    ├── domain/            # 純粋なビジネスロジック(React非依存)
    │   ├── calculator.ts  # インフレ・コスト計算式
    │   ├── rebirth.ts     # 転生・プレステージ倍率計算
    │   └── endurance.ts   # 忍耐タイマー・成否判定ロジック
    ├── data/              # 静的データ
    │   └── quotes.ts      # 仏教思想のフレーバーテキストデータ
    ├── stores/            # ゲーム状態管理(Zustand等)
    │   └── useGameStore.ts
    ├── types/             # TypeScript型定義
    │   └── index.ts
    ├── components/        # UIコンポーネント
    │   ├── common/        # 汎用UI(ボタン、モーダル等)
    │   ├── game/          # ゲーム画面固有UI
    │   │   ├── PartnerView.tsx   # 猫のアニメーション・リアクション表示
    │   │   ├── EnduranceOverlay.tsx # 忍耐フェーズUI
    │   │   ├── ResourcePanel.tsx # リソース・インフレ数値表示
    │   │   ├── RebirthModal.tsx  # 転生演出・実行画面
    │   │   └── EnlightenmentText.tsx # フレーバーテキスト表示UI
    │   └── ui/            # アニメーション演出パーツ
    ├── hooks/             # カスタムフック(タイマー、ループ処理等)
    │   └── useGameLoop.ts
    ├── App.tsx
    └── main.tsx

## 5. 優先実装機能(MVP要件)

### A. パートナーシステム
- 初回起動時に1匹のパートナー猫の名前を入力させる。
- 名前は永続的に画面UIやメッセージに反映(転生後も保持)。

### B. 無為の苦痛(忍耐フェーズ)
- **トリガー:** 「修行」ボタンはUI上に常設され、プレイヤーが任意のタイミングで実行可能。実行前には現在の転生ポイント獲得期待値が提示される。
- **メカニズム (長押し方式):** 
  - 30秒間「修行ボタンを指で長押しし続ける」必要がある。
  - 長押し中、猫がプレイヤーの指周辺を動き回ったり、「〇〇(猫の名前)が寂しそうに見つめています…」といった誘惑テキストを表示する。
- **判定:** 30秒経過する前に指を離す、あるいは画面の他の場所を触ってしまった場合はタイマーリセット(失敗)。完走で「転生権」を獲得する。

### C. 転生システム(執着の解放)
- それまで得た通常リソースや見た目の装飾をすべてリセット。
- 総獲得リソース等に基づき算出された永続的な成長倍率(プレステージポイント)を獲得。
- 装飾は消えるが、オーラや演出など本質的なステータスのみ引き継ぐ。

### D. 数値インフレモデル
- リソースおよびレベルアップコストが桁違いに跳ね上がるインフレ計算式を実装。
- 大規模な数値の表示変換(例: 1,000 → 1K, 1M, 1B ...)を行う。

### E. 仏教思想のフレーバーテキスト(気付きのシステム)
- **目的:** プレイヤーにゲームを通じて仏教の重要な考え方(諸行無常、一切皆苦、縁起など)への気付きを与える。
- **表示メカニズム:**
  - **日常フェーズ:** 放置中、画面の片隅に静かにテキストがフェードイン・フェードアウトする。「形あるものはいつか壊れる。今のインフレもまた同じ」といった、現状のゲーム進行にリンクした言葉を表示。
  - **忍耐フェーズ:** 誘惑テキストとして「その指を動かすのは煩悩か、それとも慈悲か」といった問いかけを行う。
  - **転生フェーズ:** 獲得した装飾やリソースが消えゆく演出の中で、執着からの解放を称え、次の輪廻へと向かうためのメッセージを表示する。
- **実装上の注意:**
  - 画面の静謐な雰囲気を損なわないよう、テキストにルビ(ふりがな)は一切振らず、漢字の持つ本来の美しさと意味をそのまま提示する。
  - `src/data/quotes.ts` にテキストデータを集約し、拡張性を確保する。

## 6. ビルドおよびデプロイ要件
既存のゲーム群と同様の環境で配信できるよう、以下のビルド設定を徹底すること。
- **出力先ディレクトリの指定:**
  - ビルド成果物は `dist` ではなく `deploy/in` ディレクトリ配下に出力すること。
- **相対パスでのアセット参照:**
  - 任意のサブディレクトリに配置してそのまま動作するよう、ビルド時のベースパス(アセット参照パス)を相対パスに設定すること。
  - ルーティングが必要な場合はURL崩れを防ぐため `HashRouter` を採用する。

## 7. 完成の定義(Definition of Done)
1. 名前入力 → 2. 放置・タップでリソース獲得 → 3. 進行停滞(アイドリング不調) → 4. 忍耐修行成功 → 5. 転生実行(倍率付与&初期化)。
この一連のサイクルが問題なく周回でき、2周目で明らかに成長スピードが変わることを確認できること。さらに、ビルド成果物が `deploy` フォルダに相対パス扱いで出力されること。

## 8. 留意点
1. キャラクターの「可愛さ」にこだわるため、必要なassetsは適宜要求すること(例: 画像スプライト、音声ファイルなど)。必要なassetsが生成AIで生成可能な場合、生成用のプロンプトも提案すること。
2. インフレ要素は今後の開発で追加していくことを考慮した設計とすること。例えば「装飾」に類似した装備システムの種類は今後も増える想定。

わずか1日で初期版をリリース

完成したこの指示書をコーディングエージェントに与え、対話しながら実装を進めていきました。

驚くべきことに、コーディングの期間はわずか1日程度。あっという間に初期版のリリースまでたどり着くことができました。

ちなみに、この1日で作り上げた初期版の要素は以下の3つだけでした。

  • しつらえ
  • 修行と転生
  • 悟り

おわりに

企画のアイデア出しからシステム提案、さらには開発エージェント向けの指示書作成から技術選定、そして初期実装まで、すべてAIとうまく連携することでスムーズに進めることができました。

人間側の仕事は「何を重視したいかというコアの価値観を決めること」と「AIが出してきた提案を判断すること」が主になっていると感じました。
それ以外の整理やドキュメント化、コーディングの大部分はAIが爆速でやってくれます。

次回は「いむねこの機能、システムの意図や背景」ついて書いていこうと思います!

コメント

タイトルとURLをコピーしました