# KonDiplo Front

外交ゲーム（Diplomacy）のWebフロントエンドアプリケーション。
モダンなUIで、ゲームの作成・参加・命令入力・ターン処理・自動進行管理までをブラウザ上で完結できます。

## 主な機能

### 🎮 ゲーム管理

- **ゲーム作成**: タイトル、メモ、パスワード保護、参加人数などの設定。
- **モード**:
  - **ソロモード**: 1人で全7カ国を操作（テストや練習用）。
  - **マルチプレイヤーモード**: 複数のユーザーで国を担当。
- **国割り当て**: 管理者による手動選択、またはランダム割り当て。

### ⏱️ ターン進行管理

- **手動進行**: 全員が命令完了後、管理者がボタンでターンを進める方式。
- **自動進行 (Auto Turn)**:
  - **スケジュール設定**: 毎日決まった時間（例: 0時, 12時, 18時）に自動でターンを進めることが可能。
  - **デッドライン管理**: 次の更新時間をカウントダウン表示。
  - **NPC自動処理**: 期限までに命令未提出の国や、プレイヤー不在の国（NPC）は、自動保持(HOLD)またはランダム命令が適用されます。

### 🗺️ マップ・UI

- **動的SVGマップ**: ターンごとの戦況を可視化。
- **命令入力**: プルダウン形式で直感的に命令を作成（支援・輸送も対応）。日本語訳付き。
- **視認性向上**:
  - **国別カラー**: 地図上の色に近いバッジ（Austria=赤, England=紫, etc.）で国名を表示。
  - **NPCバッジ**: 人間が操作していない国に🤖アイコンを表示。
  - **フェーズ表示**: ゲーム一覧で現在の時期（例: 1901年 春）を確認可能。

### ⚙️ ハウスルール

- **年数制限**: 指定年数でゲーム終了。
- **目標SC数**: 勝利条件となるSC数（デフォルト: 18）を変更可能。
- **スコアリング**: SC数ベース、DSS、SoSなど複数の評価方式に対応。
- **引き分け投票**: 参加者の過半数の同意で引き分け終了。

---

## 技術スタック

| カテゴリ | 技術 | 解説 |
|---|---|---|
| **言語** | Ruby 3.x / 4.x | |
| **フレームワーク** | Rails 8.1 | 最新のRails機能を活用 |
| **フロントエンド** | Hotwire | Turbo + Stimulus によるSPA風体験 |
| **CSS** | Tailwind CSS | ユーティリティファーストなスタイリング |
| **DB** | SQLite3 / PostgreSQL | 開発はSQLite、本番はPostgreSQL推奨 |
| **非同期処理** | **Solid Queue** | データベースベースのジョブキュー（自動ターン処理に使用） |
| **API連携** | Faraday | 外部のDiplomacy判定ロジックサーバーと通信 |
| **アセット** | Propshaft | 前提アセットパイプライン |

## アーキテクチャ

```
[ ブラウザ ] ⟷ [ Rails App (KonDiplo Front) ] ⟷ [ Diplomacy API (Python/FastAPI) ]
                          ↕                                  port 8000
                [ DB (SQLite/Postgres) ]
                          ↕
                [ Solid Queue Worker ]
           (自動ターン処理ジョブを定期実行)
```

- **Rails App**: フロントエンド表示、ユーザー管理、ゲーム進行管理、自動ターンのスケジューリング。
- **Diplomacy API**: ゲームのコアロジック（移動判定、支援カット、撤退判定など）とマップ描画を担当。

---

## セットアップ

### 1. 前提条件

- Ruby 3.x 以上
- Node.js (Tailwind CSS ビルド用)
- **Diplomacy API サーバー**: 別途起動が必要です（デフォルト: `http://0.0.0.0:8000`）。

### 2. インストール

```bash
# リポジトリのクローン
git clone <repository_url>
cd kondiplo_front

# 依存関係のインストール
bundle install

# データベースのセットアップ
# (Solid Queue 用のテーブルもここで作成されます)
bin/rails db:create db:migrate

# 初期データの投入
# ※ db/seeds.rb で管理者ユーザーのメール・パスワードを確認・変更してください
bin/rails db:seed
```

### 3. 起動

開発環境では `bin/dev` を使用します。これにより、Webサーバー、CSSビルド、バックグラウンドワーカーが一括で起動します。

```bash
bin/dev
```

- アクセス: `http://localhost:3000`
- **注意**: 自動ターン処理を機能させるには、`bin/dev` で起動し、Solid Queueのワーカーが動いている必要があります。

---

## 使い方ガイド

### 自動ターン進行の設定

1. ゲーム作成または編集画面の「ターン進行方式」セクションへ移動。
2. プリセットから選択するか、「カスタム」を選んで時間を入力（例: `0,12,18` = 毎日0時・12時・18時に更新）。
3. ゲームが開始されると、設定された時刻に自動で判定処理が走ります。

### NPC（非参加国）の挙動

- 「自動処理モード」で設定可能です。
  - **HOLD**: 何もしない（全ユニット維持）。
  - **Random**: ランダムに移動・支援・輸送命令を生成して実行。

---

## トラブルシューティング

### サーバーが起動しない / Solid Queue エラー

- `relation "solid_queue_jobs" does not exist` などのエラーが出る場合は、マイグレーションが不足しています。

  ```bash
  bin/rails db:migrate
  ```

  を実行してテーブルを作成してください。

### 自動ターンが進まない

- `bin/dev` コンソールのログを確認してください。
- `AutoTurnProcessJob` が定期的に（1分毎）実行されているか確認してください。
- Solid Queue のワーカープロセスが立ち上がっているか確認してください（`bin/dev` で `worker` プロセスが表示されているはずです）。

---

## ライセンス

Private
