1
/
5

サーバエンジニア必見!GoとKotlinでつくる新規web3サービスのサーバ技術とは?『cocone TECH TALK Vol.6』イベントレポート

ブロックチェーンとのバックエンド連携

『cocone TECH TALK』はココネの現場エンジニアによるライトニングトークイベントです。
各エンジニアが担当するプロジェクトを通じて学んだ技術ネタを整理し、アウトプットをする場です。

6回目を迎えた今回は、サーバ(バックエンド)に特化したテーマを3つご用意。

  • リアルタイム対戦 x バックエンドアーキテクチャ
  • ココネグループのブロックチェーン「MOOI」との連携開発
  • Kotlin バックエンドアーキテクチャ of アバターサービス

発表者は、自社で運営するweb3サービス(2022年冬リリース)の開発メンバー。
初めての取り組みに四苦八苦しながら開発し、リリースを迎えて気づいたことや苦労したことなどをお話ししました。

※ここでは技術面の詳しい紹介は割愛します。
当社テックブログ「cocone engineering」で公開中の関連記事リンクもつけておりますので、ぜひそちらも合わせてご覧ください。

1.リアルタイム対戦 x バックエンドアーキテクチャ

どのような技術を用いて『JANKEN』での「リアルタイム対戦」を実現したか、採用した技術や苦労したポイントについてご紹介します。

※『JANKEN』についての記事はこちら

じゃんけんを世界的なエンタテインメントに | web3 project
日本発祥と言われ、19世紀以降に世界に普及したという説もある手遊び「じゃんけん」をベースにしたブロックチェーンゲーム。シンプルな「じゃんけん」のルールにオリジナル要素を加えて深い戦略性を生み出し、eスポーツのような世界観を創りだしています。じゃんけんに勝つことでユーティリティートークンを得ることができ、勝負で使用する「J-Card」はNFTとして収集を楽しむことができます。 ...
https://www.wantedly.com/companies/cocone/post_articles/484964

採用した通信技術

初期に採用したのはgRPC Bidirectional Streaming RPC。
この時点ではゲームシステムが確定していなかったため、無難に双方向通信、かつ他のAPIでgRPCを利用していたため選択しました。

しかし開発が進むにつれて開発コストが増加!
コードやテストの複雑化、クライアント/サーバ間の取り決めが多いなど、問題点が顕在化します。

試行錯誤し最終的にはgRPC Unary RPC + Server Streaming RPCで着地しました。
基本的にはUnary RPCを利用するため、フローがシンプルになり、いつも通りの実装やテスト手法を用いることができます。

苦労したポイントは負荷対策とPubSub

開発を進めていく中で、苦労したポイントは下記の4つでした。

  • 再接続時の復帰処理
  • 細かいエッジケース対応
  • 負荷対策
  • PubSubに悩まされる

細かなエッジケース対応の仕組み作りについては、こちらの記事でもご紹介しています。

参考記事:『マルチプレイ実装をBOTでテストした話』

マルチプレイ実装をBOTでテストした話 - Qiita
「ネットワークプログラミング...マルチプレイ...」 その甘美な響きに魅了され、手を出したエンジニアの方も多いのではないでしょうか。 私もその一人で、気がつけば何でもかんでもマルチ対応させたがるやっかいなエンジニアへと変貌していました。 ...
https://qiita.com/maruc/items/2393647be5caa32623e3

まとめ

  • ゲームデザインにあった技術選定・設計が重要
  • 表面上動くものはすぐに作れる時代だが、その先を考えておく(例えば「バイナリが改造されたら?」「このタイミングで切断されたら?」など)
  • どのようにテストを行うか、初期段階で考えておく

2.ココネグループのブロックチェーン「MOOI」との連携開発

自社ブロックチェーン基盤と連携する事例をご紹介します。
基盤側の話や連携方法の詳細、通信仕様、セキュリティ担保に関わる内容は範囲外としています。「web3事業に関わることになった1サーバエンジニア」の解釈としてご紹介します。

自社ブロックチェーン基盤「MOOI Network」とは

「MOOI Network」はココネグループのPOST VOYAGERが開発したブロックチェーン基盤。ココネが展開するメタバースサービスは、全てこの基盤を使用。

※「MOOI Network」について

世界30位以内を目指すココネグループのブロックチェーン「MOOI」 | web3 project
ココネグループのPOST VOYAGER(※1)が今夏にローンチしたブロックチェーンネットワーク「MOOI」。https://mooinetwork.io/mooinetworkココネのweb3...
https://www.wantedly.com/companies/cocone/post_articles/457608

ブロックチェーン連携をするとはどういうことなのか?

デジタルアイテムをNFTとして所有することができ、データの破壊や改ざんを技術的に守ることができます。
また、サービスでNFTを発行(Mint)し、マーケットプレイスで取引したり、MOOI Networkで発行している暗号資産「MOOI」と交換可能なトークンを発行することも可能です。

▲MOOI Networkの公式NFTマーケットプレイス『Jellyme』

サーバサイドエンジニアとしての外部連携開発経験が生かせる

パブリックチェーンとの連携と比較すると、以下のような要素は良い特徴と言えると思います。

  • 質問先が自社グループ内にあり、スピーディーに対応できる
  • Walletを含めて自社で保有しており、機能開発の要望も出しやすい
  • 「自社グループのブロックチェーン」という楽しさ

そしてブロックチェーンと連携する対象はサービス内の"データ"となりますので、その連携においてはサーバサイドエンジニアの活躍する領域となります。例えば決済対応のような外部連携と似たもの、と考えても差支えはありません。
ブロックチェーン周辺の知識は求められますが、従来の外部連携開発経験を生かすことができます。

3.Kotlin バックエンドアーキテクチャ of アバターサービス

昨年12月にリリースした『ClawKiss』は「Dress&Earn」をうたったアバターサービスで、ブロックチェーンネットワーク「MOOI」を使ったweb3サービスです。

※『ClawKiss』について

【新サービスインタビュー】NFTで"Dress & Earn"する『ClawKiss』の意義 | web3 project
独自ブロックチェーン「MOOI Network」を基盤にした新作web3アプリ『ClawKiss』。 ココネグループが提供するブロックチェーンサービス4作目として、昨年12月にグローバルでリリースしました。 今回、『ClawKiss』の概要やヴァンパイアをテーマにした世界観、プロジェクトにかける想いについて改めて本サービスのプロジェクトリーダー(以下、PL))に話を聞きしました。 ...
https://www.wantedly.com/companies/cocone/post_articles/474448

ココネでは、バックエンドの言語はGoかKotlinを多く使用しています。
クライアントはUnityで、通信をgRPCで行い、ビルドはGradle 7.4.xを使用しています。

初のgRPCを使った環境構築

ALBのヘルスチェックが通らないという問題が発生し、デプロイしてもヘルスチェックのログすら記録されない状態に。
インフラチームと話し合い、tcpdumpを取ってみたところ解決の糸口が見え、HTTP2を許可することで解決することができました。

参考記事:Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと

Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと
Spring BootとgRPCをApplication Load Balancer(ALB)で動かそうとしてハマったこと こんにちは、cocone connectでサーバーサイドを担当している大友です。 cocone connectでは新サービスを絶賛開発中です。 今回は新プロジェクト開発の中でハマった点と、どのように解決に至ったのかについてご紹介できればと思います。 開発中のプロジェクトでは、インフラ環境としてAWSを利用しVPC内に複数アベイラビリティゾーンを用意、Application Load
https://engineering.cocone.io/2022/06/10/run_springboot_and_grpc_with_alb/

まとめ

  • Kotlin on Spring Bootは良い選択
  • アバターサービスにおいても一般的なWebサービスと同じ技術を使って構築している

web3への挑戦

トーク後にCTOの髙山も参加し、質疑応答が行われました。

「新サービスの開発前からブロックチェーン・web3に関する知識は持っていましたか?」という質問には、発表者の一人から「大まかな知識はありましたが、基盤技術が全く異なる世界だと思っていました。ですが、サーバエンジニアが関わるのはあくまで連携の部分なので、これまでの知見を生かすことができます。必要な知識は開発を進めながら習得しています。新しい知識を身に着けたい人には向いていると思います」とコメント。

web3サービスに携わったことがないという方でも、外部連携開発などの知見など様々な経験を活かしていただくことが可能です!
新しい分野にチャレンジしたい、という方にはピッタリの環境がココネには整っています!

イベントの最後に

当社のご紹介と、積極採用中のポジション“サーバエンジニア”についてご案内しました。

ココネではGolang、Java(SpringBoot)、Kotlin、MongoDB、MySQL、Redis、Elasticsearchなどの技術を用いてサービスを開発しています。また、エンジニア陣は、大容量データのハンドリングやトラフィックを処理するためには?という問題意識を常に持ち、高い技術力をもって日々業務にあたっています。

またグローバルな市場を視野に入れたサービスも開発中です!

ぜひこちらの記事もご覧ください

【cocone TECH TALK VOL6・前編】 リアルタイム対戦xバックエンドアーキテクチャ
【cocone TECH TALK VOL6・前編】 リアルタイム対戦xバックエンドアーキテクチャ こんにちは、新卒のCです。 2023年4月25日に開催された「cocone Tech Talk vol.6」では、弊社の3人の開発者がバックエンドに関するテーマについて発表しましたが、その内容を前・中・後編に分けてまとめていきたいと思います。 ...
https://engineering.cocone.io/2023/05/26/cocone-tech-talk-vol6-1/
雑誌 Software Design 2023年6月号:インタビュー "世界のプレイヤーを相手にじゃんけん対戦を楽しんでもらうために" 堀尾大地・戸丸良【後編】 | ココネのエンジニア
この記事は「Software Design 2023年6月号」に掲載された記事を許諾を受けて転載しています。 世界に愛されるデジタルワールドでトップレベルの実績 ...
https://www.wantedly.com/companies/cocone/post_articles/506624
ココネ株式会社's job postings
3 Likes
3 Likes

Weekly ranking

Show other rankings