GCP上で動作する、本格的なオンライン将棋アプリケーション
✨ アピールポイント
⚡ Go による高パフォーマンスバックエンド
バックエンドには Go 1.23 を採用。Goのgoroutineによる軽量な並行処理で、数百の対局セッションを低メモリ・低レイテンシで同時にさばくことができます。JavaやPythonと比較してメモリ効率が高く、Cloud Runのコールドスタート時間も最小限に抑えられます。
🧠 将棋AIエンジンに「水匠5.7」を採用
本アプリのAI対戦エンジンには、コンピュータ将棋界のトップソフト 水匠(すいしょう) の評価関数ファイル(v5.7)を使用しています。
- 藤井聡太・渡辺明など、プロ棋士も棋譜解析に使用する実力派エンジン
- 世界コンピュータ将棋選手権・電竜戦で複数回の優勝実績を持つ強豪ソフト
- やねうら王の探索部(USIプロトコル)と組み合わせたNNUE(深層学習系)評価関数を採用
- 10段階のレベル調整により、初心者から上級者まで幅広い対局体験を提供
🔥 Firebase × Firestore によるリアルタイムマッチング
待機部屋システムはすべて Firestore のリアルタイムリスナー で実装。ポーリング不要で、対戦申請や承認の通知が即座に全クライアントへ伝播します。
- 待機ユーザーは TTL 10分で自動クリーンアップ。古くなったデータが残らない設計
- ブラウザを閉じた瞬間に WebSocket切断を検知し、待機リストから即座に削除
- 対戦申請〜両者合意〜対局URLへの自動リダイレクトまでをシームレスに実現
🗄 データ特性に応じたハイブリッドDB構成
| データ | 使用DB | 理由 |
|---|---|---|
| ユーザー情報・戦績・棋譜 | Cloud SQL(PostgreSQL) | 永続性・整合性・統計クエリ |
| 待機リスト・マッチング・セッション | Firestore | リアルタイム同期・TTL・一時データ |
1つのDBに無理に集約せず、データの性質に合わせて最適なDBを使い分ける設計により、スケーラビリティと保守性を両立しています。
🔐 Firebase Authentication + 2FA 対応
- メール+パスワード認証に加え、TOTP(Google Authenticator等)による2段階認証をユーザーが任意で設定可能
- すべてのAPIリクエストはサーバー側で Firebase JWT を検証。フロントエンドの認証情報をそのまま信頼しない設計
♟ サーバー側での厳密な将棋ルール判定
不正操作を防ぐため、すべての指し手はサーバー側でバリデーションしています。
- 二歩・打ち歩詰め・王手放置などの反則手を自動検出
- 成り・不成の選択、強制成りの判定
- 詰み・投了による自動終了処理
🏗 CI/CDパイプライン(Cloud Build × Terraform)
- GitHub
mainブランチへのpushで Cloud Build が自動起動 - ビルド時に ユニットテストを自動実行し、テストレポートをCloud Storageへ保存
- AVX2バイナリの存在チェックをCIに組み込み、誤ったバイナリのデプロイを防止
- インフラは Terraform で IaC 管理。Cloud Run・Cloud SQL・Firestore・Artifact Registry をコードで定義
📱 レスポンシブ対応UI(React × Tailwind CSS)
- PCでは盤面横に情報パネル、スマホでは縦積みレイアウトに自動切り替え
- 駒選択時に移動可能範囲を半透明の矢印でガイド表示
- Framer Motion によるなめらかな駒移動アニメーション
- 駒を置く効果音など、将棋の臨場感を演出するUI/UX
🛠 技術スタック
| 領域 | 技術 |
|---|---|
| バックエンド | Go 1.23 / gorilla/websocket / Firebase Admin SDK |
| フロントエンド | React / TypeScript / Tailwind CSS / Framer Motion / Zustand |
| 認証 | Firebase Authentication(TOTP 2FA対応) |
| データベース | Cloud SQL(PostgreSQL 15)/ Firestore |
| AIエンジン | やねうら王(USIプロトコル)+ 水匠5.7評価関数 |
| インフラ | GCP / Cloud Run / Firebase Hosting / Cloud Load Balancer |
| CI/CD | Cloud Build / Artifact Registry / Terraform |