# 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 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