Files
kondiplo_front/README.md
kontei f25fd6f802
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled
フロントエンドプレイアブル
2026-02-15 14:57:17 +09:00

150 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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