gihyo.jp×ココネ 特別企画

Web3の新時代を拓くココネのエンジニアリング力を探る
世界のプレイヤーを相手にじゃんけん対戦を楽しんでもらうために

誰もが知るじゃんけんに独自の戦略性を加え、世界中のプレイヤーが対等に無料でプレイできるようにしたPlay&Earnのブロックチェーンサービス『JANKEN⁠⁠。グローバルなリアルタイム対戦を実現している技術について、前回に引き続きココネの堀尾大地氏と戸丸良氏にお伺いした。

――自己紹介をお願いします。

堀尾大地(以下、堀尾) ココネ株式会社の堀尾大地です。JANKENプロジェクトでは開発リーダーで、クライアント開発がメインです。

戸丸良(以下、戸丸) 同じく戸丸良です。JANKEN開発チームでサーバ開発を担当しています。

写真1 堀尾大地氏(左)、戸丸良氏(右)
写真1

――『JANKEN』について教えてください。

堀尾 1対1のじゃんけん対戦をリアルタイムで行い、先に2勝したほうが勝ちとなります。シンプルで気軽に楽しめるサービスですが、配られたグー・チョキ・パーのカードをどのように出すかという戦略を練るおもしろさもあります。対戦相手は世界中のプレイヤーからランダムに割り当てられます。

戸丸 格闘ゲームやレースゲームほどシビアではありませんが、リアルタイム対戦を実現するために、通常のAPI呼び出しとは異なる設計・実装が必要となります。

リアルタイム対戦の実装手法について

堀尾 リアルタイム対戦が要件となるものはココネではあまりやっていないので、最初は模索が続きました。gRPCを使う必要があるだろうと目星を付けたあたりで戸丸さんがチームに合流してくれました。リアルタイム処理の経験があったんですよね?

戸丸 子どものころからゲームが好きで、とくにMMORPG(Massively Multiplayer Online Role-Playing Game)という大勢のプレイヤーが同時に参加するオンラインRPGが好きでした。そこから興味を持ち、リアルタイム通信技術に関する知見を得たり、実装経験を積んだりしてきました。

――リアルタイム対戦はどのように実現していますか?

戸丸 ⁠JANKEN』では、クライアント/サーバ間のデータ通信にgRPCを使用しています。これはGoogleが開発したRPC プロトコルの1つで、通信方式には① Unary RPC、② Server streaming RPC、③ Client streaming RPC、④ Bidirectional streaming RPC の4種類があります。

当初は双方向通信を利用するために④で設計・実装していましたが、ほかの選択肢と比べて実装が複雑になり、品質の担保や今後の拡張性で支障が出る懸念がありました。また、行動(Request)に対して必ず結果(Response)が発生するゲームデザインであったことから、①と②を組み合わせる設計に変更しました図1⁠。大規模な変更ではありましたが、結果的にシンプルな設計となり、処理を追いやすくなりました。

図1 『JANKEN』の処理
図1

――リアルタイム対戦の処理で難しいところは?

戸丸 予想しにくい問題が多いことですね。たとえば通信面では、PCや据え置き機を使うようなゲームであれば、自宅など比較的通信環境が安定したところからのアクセスが前提となることが多いです。しかしスマホアプリの場合、Wi-Fiとキャリア回線が切り替わったり、移動によってキャリアの基地局が替わったりと、通信環境が安定しない場合が多々あります。このような場面では瞬断や遅延、EOFを検知できない切断など、さまざまな問題が発生するため、開発時に考慮しておく必要があります。また、データの整合性を担保しつつ、常にI/O負荷を意識する必要もあるなど、設計で気にする要素が多いです。

これから先も遊んでもらえるように

――開発ではUnityを使ったそうですが、こだわった点は?

堀尾 組織によっても考え方は異なりますが、そもそもUnityを使うかどうかの見極め方です。Unityは描画エンジンとして優れているため、描画に関するところで使うのはいいのですが、すべてにおいてUnityを使うのがいいとは限りません。⁠JANKEN』では描画以外、たとえばロジック寄りの処理や計算処理であれば、Unityを使う必然性がないのでC#のピュアクラスでコーディングしています。

Unityに頼りすぎると、ソースコードがわかりにくくなってしまうリスクがあります。同じソースコードの中に、通信のコード、描画のコード、ロジックのコードなどが混在すると、⁠ここは何について書いているのか?」と読み解かなくてはなりません。描画とそれ以外を分離しておいたほうが、あとでコードを読む人のためにいいと考えています。

――今後『JANKEN』をどのように発展させようと考えていますか?

堀尾 基本的な遊び方やルールは変えず、演出面で改良を加えていこうと考えています。たとえば勝ったときの画面上の演出をよりエキサイティングにするなどです。

『JANKEN』はプレイヤー同士で対戦し、機械が対戦相手になることはありません。多くのプレイヤーがいないと成立しないので、この先も長く遊んでくれるプレイヤーを増やしていきたいです。そのためには、居心地の良さや手軽さが大事だと思います。ゲームには一度遊び始めるとすぐにやめられないものもありますが、⁠JANKEN』は数分で終えることもできるので、気軽にリアルタイム対戦を楽しんでほしいです。

戸丸 オンラインゲームの中には(負荷や遅延のリスクを下げるために)居住国ごとにサーバを分け、国内のプレイヤーとしか遊べないものもありますが、⁠JANKEN』では国境を越えて世界中のプレイヤーと対戦が可能です。そういった中で、対戦相手の国の多様さを目にしながら、お客様がそれぞれのアイデンティティを表現できるようなサービスにしていきたいです。

堀尾 世界各地からプレイヤーがアクセスするので、インフラ面を強化していく必要があると考えています。実際リリース以降、世界各地からのプレイヤーが思った以上に遊んでくれています。これからも「楽しかったな。明日もまた遊ぼう」と思ってもらえるといいですね。

※ サービスに関する内容はインタビュー当時の情報であり、変更される可能性があります。

おすすめ記事

記事・ニュース一覧