f25fd6f8022dc35b6983586f5ac540422e56c291
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. インストール
# リポジトリのクローン
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ビルド、バックグラウンドワーカーが一括で起動します。
bin/dev
- アクセス:
http://localhost:3000 - 注意: 自動ターン処理を機能させるには、
bin/devで起動し、Solid Queueのワーカーが動いている必要があります。
使い方ガイド
自動ターン進行の設定
- ゲーム作成または編集画面の「ターン進行方式」セクションへ移動。
- プリセットから選択するか、「カスタム」を選んで時間を入力(例:
0,12,18= 毎日0時・12時・18時に更新)。 - ゲームが開始されると、設定された時刻に自動で判定処理が走ります。
NPC(非参加国)の挙動
- 「自動処理モード」で設定可能です。
- HOLD: 何もしない(全ユニット維持)。
- Random: ランダムに移動・支援・輸送命令を生成して実行。
トラブルシューティング
サーバーが起動しない / Solid Queue エラー
-
relation "solid_queue_jobs" does not existなどのエラーが出る場合は、マイグレーションが不足しています。bin/rails db:migrateを実行してテーブルを作成してください。
自動ターンが進まない
bin/devコンソールのログを確認してください。AutoTurnProcessJobが定期的に(1分毎)実行されているか確認してください。- Solid Queue のワーカープロセスが立ち上がっているか確認してください(
bin/devでworkerプロセスが表示されているはずです)。
ライセンス
Private
Description
Languages
HTML
53.2%
Ruby
42.7%
Shell
1.7%
JavaScript
1.3%
Dockerfile
0.8%
Other
0.3%