フロントエンドプレイアブル
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

This commit is contained in:
2026-02-15 14:57:17 +09:00
commit f25fd6f802
198 changed files with 10342 additions and 0 deletions

149
README.md Normal file
View File

@@ -0,0 +1,149 @@
# 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