現実とネット上を交差させながら遊べる「メタバーすごろく」のバックエンドサーバーです。
フロントエンド: https://github.com/shii-park/Metasugo-Frontend
サイト: https://metasugo.vercel.app
- リアルタイムなゲームプレイ: WebSocketを使用して、複数のプレイヤーが同時にすごろくゲームをプレイできます。
- 多彩なマス効果: 収入、支出、クイズ、ギャンブル、分岐など、様々な効果を持つマスを実装しています。
- Firebase連携:
- Firebase Authentication: プレイヤーの認証を行い、安全な通信を実現します。
- Cloud Firestore: ゲームのクリアデータ(ランキング情報)を永続化します。
- 柔軟なゲーム設定:
tiles.jsonファイルを編集することで、すごろくの盤面やマスの効果を自由にカスタマイズできます。
GoのWebフレームワークである Gin をベースに構築されています。
- エントリーポイント (
cmd/app/main.go): アプリケーションの起動、ロガーやミドルウェアの設定、Firebaseの初期化、ルーティングのセットアップなどを行います。 - リアルタイム通信 (
internal/hub): WebSocket (gorilla/websocket) を利用したリアルタイム通信の中核を担います。Hubが全クライアントの接続を管理し、ゲームの状態変更をリアルタイムにブロードキャストします。 - ゲームロジック (
internal/sugoroku,internal/game):sugoroku: ゲームの基本的な要素(プレイヤー、タイル、マス効果など)を定義します。game:GameManagerがゲーム全体の進行を管理し、プレイヤーのアクションに応じてゲーム状態を更新し、Hubを介してクライアントに通知します。
- APIハンドラ (
internal/handler): WebSocket接続の処理や、ランキング取得などのHTTPリクエストを処理します。 - 認証 (
internal/middleware): Firebase Authenticationと連携し、リクエストの認証・認可を行います。 - データベース (
internal/service): Cloud Firestoreとのやり取りを抽象化し、データの永続化を担います。
- 接続と認証: クライアントはFirebaseのIDトークンを使ってWebSocket接続をリクエストします。サーバーはトークンを検証し、接続を確立します。
- プレイヤー登録: 新しいクライアントは
Hubに登録され、ゲームに参加します。サーバーは現在の全プレイヤーの情報を新しいクライアントに送信します。 - プレイヤーのアクション:
- クライアントが「サイコロを振る」(
ROLL_DICE) などのアクションをサーバーに送信します。 GameManagerがアクションを処理し、ゲームの状態(プレイヤーの位置、所持金など)を更新します。
- クライアントが「サイコロを振る」(
- 状態の更新と通知:
- 即時効果: マスの効果が即時適用される場合(例: 所持金の増減)、
GameManagerは全プレイヤーに状態変更 (MONEY_CHANGEDなど) をブロードキャストします。 - 入力要求: マスの効果がプレイヤーの入力を必要とする場合(例: 分岐、クイズ)、サーバーは対象のプレイヤーにのみ選択肢 (
BRANCH_CHOICE_REQUIREDなど) を送信します。
- 即時効果: マスの効果が即時適用される場合(例: 所持金の増減)、
- 入力への応答: プレイヤーが選択を行うと、その情報がサーバーに送信され、
GameManagerが結果を処理して、必要に応じて全プレイヤーに状態をブロードキャストします。 - 切断: クライアントが切断すると、
Hubから登録解除され、ゲームから退出します。
クライアントとサーバー間のリアルタイム通信は、すべてJSON形式のメッセージで行われます。
詳細は API.md を参照してください。
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/ranking |
GET |
ゲームをクリアしたプレイヤーのランキングを取得します。 | 必要 |
/tiles |
GET |
現在のゲームボードのタイル情報 (tiles.json) を取得します。 |
必要 |
/bestscore |
GET |
ログインしているプレイヤーの過去最高のスコアを取得します。 | 必要 |
すごろくの盤面(マスの種類、配置、効果など)は tiles.json ファイルで定義されています。このファイルを編集することで、ゲームの内容を自由にカスタマイズできます。
詳細は Tile.md を参照してください。
- Go 1.18 以上
- Firebaseプロジェクト
- Firebase Authentication と Cloud Firestore が有効になっていること。
- サービスアカウントキー (JSONファイル) を取得していること。
-
リポジトリをクローン:
git clone https://github.com/shii-park/Metasugo-Backend.git cd Metasugo-Backend -
環境変数の設定: プロジェクトのルートに
.envファイルを作成し、以下の内容を記述します。# FirebaseのサービスアカウントキーのJSONファイルへのパス GOOGLE_APPLICATION_CREDENTIALS="./firebase-service-account.json" # FirebaseプロジェクトのID FIREBASE_PROJECT_ID="your-firebase-project-id" # ゲームボードのタイル定義ファイルへのパス TILES_JSON_PATH="./tiles.json"firebase-service-account.jsonは、実際に取得したサービスアカウントキーのファイル名に置き換えてください。 -
依存関係のインストール:
go mod tidy
go run cmd/app/main.goサーバーはデフォルトで :8080 ポートで起動します。