🀄

オープン麻雀プロジェクト再始動構想

2024/02/15に公開

はじめに

かつてはネットワーク対戦が可能なオープンソースの麻雀および麻雀 AI を提供していましたが、2015 年頃から更新が停止していました。しかし、クラウド技術の発展に伴い、クラウドエンジニアとしての経験を積んだ作者が、クラウドネイティブな麻雀プロジェクトとしてこれを再始動することを決定しました。この記事では、そのプロジェクトの概要を紹介します。

かつてのプロジェクト

ソースコード

以前は OSDN で公開していたソースコードを、今回は GitHub で管理することに変更しました。オープンソースとして MIT ライセンスを適用し、より多くの人に利用してもらえるようにしています。興味のある方は是非ご覧ください。

リリース物

現在、プロジェクトはまだ開発中で、公開できるレベルには至っていませんが、クオリティが向上次第、クラウド環境での公開を予定しています。現段階のソースコードは公開しているので、興味がある方は覗いてみてください。

一言でいうと

このプロジェクトは、クラウドネイティブな麻雀分析基盤を目指しています。ビッグデータを利用した牌譜解析や機械学習を容易に実行できるシステムを開発中で、AI を用いた麻雀ゲームの提供も考えていますが、これはおまけのようなものです。

インフラ

インフラは Google Cloud を使用して構築しています。AWS も選択肢にはありましたが、異なる環境での経験を得るため、また BigQuery や GKE、VirtexAI といった AI、データ分析にまつわる技術を開拓する目的で Google Cloud を選択しました。

全体構想

プロジェクトの全体構想は、まだ開発中の部分が多く、機械学習基盤や麻雀アプリの実装には至っていません。今後の進展にご期待ください。

全体構成

個々のモジュールの解説

AI Server

AI サーバーでは、様々な AI とデータのやり取りを行い、麻雀対局の流れを実装しています。GCP の Cloud Run を使用しており、開発言語は Rust です。後々対戦機能を実装した際には Kubernetes のサービスへ移行予定です。

AI Engine

AI エンジンは、麻雀のデータを受け取り、意思決定を行う核心部分です。現在は過去のプラグインを利用しており、シャンテン数やあがり役といったアプリと共通の機能の実装がされています。将来的にはオリジナルの開発を目指しています。開発言語は Rust と一部 C++です。

また、docker コンテナ上でまうじゃんプラグイン(WIN32 DLL)を動作させるため、loadlibrary を Rust に移植して動かしています。

Score

AI 対局やネット麻雀の解析を可能にするために、BigQuery で解析可能な Parquet 形式でデータを蓄積しています。GCP Cloud Run を使用しています。

Analysis Backend

牌譜データを解析し、フロントエンドに提供するバックエンドです。GCP App Engine と BigQuery を使用し、開発言語は Python 3.12 です。

Analysis Frontend

牌譜データをブラウザで分析できるフロントエンドです。SPA を採用し、開発言語は TypeScript と React です。Vite を利用してビルドを行います。

運用コスト

現在の運用コストは日額約 300〜400 円で、月額約 10000 円となっています。これは予算内での運用となっています。

コスト推移

その他やったこと

CodeRabbit

AI によるプルリクエストのサマリー作成やレビューをしてくれる SaaS を試しました。

レビュー

1 人プロジェクトでは誰にもレビューされないまま進み結果として読みにくいコードになりがちでしたが、それを予防する策として非常に機能します。公開リポジトリなら無料ですが 1 時間に 1 回という制限があります。サマリー作成機能も個人的に気に入っています。

Kubernetes Gateway API と Istio

Kubernetes Gateway API のテストと Istio の初使用を行いました。これにより、HTTPS のルーティングやバーチャルホスティングの恩恵を受けています。

Kiali

モニタリング基盤として Kiali を導入しましたが、現在はエラーが発生しており、機能していません。今後の改善を目指しています。

他やりたかったこと

キャラ画像の生成

昨今話題の StableDiffusion を使用したキャラ画像の生成を試みましたが、GCP プロジェクトの日が浅く GPU インスタンス立ち上げが許可されませんでした。

AI 自動対局

もう少し時間があれば、AI による自動対局の実装も可能だと考えています。

麻雀アプリの開発

麻雀アプリの開発に関しては、急がずじっくりと進める予定です。

Discussion