GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

2023/07 サービス開発部業務アピール会 #GameWith #TechWith #ChatGPT #nft #terraform #rollbar

こんにちは!GameWithサービス開発部です。

サービス開発部では月に一度、サービス開発部全体会にて
どのように業務課題を改善したか をアピールする会を行っています。
この会は1人あたり5分程度で発表を行うLT会のような感じです。

そこで、今回は7月の全体会で発表された一部をご紹介します!

更新可能なスマートコントラクトを調査/実装してみた

発表者は今年3月入社の方で初めての発表でした。

以前NFTを体験する(簡易なWEBサービス作成・利用する)会を社内で実施しており、開発部内でもNFTに対する知見を増やしています。
それに引き続き分散型アプリケーション(DApps)上で更新可能なスマートコントラクトについて調査・実装してみた内容をまとめた発表になります。

以下、要点をまとめました。

  • ブロックチェーンは登録されたデータは原則改竄できない特性があります。⇒ブロックチェーンの特性を生かし、デジタルデータの所有権を証明する技術がNFT。
  • NFTはスマートコントラクトによって生成され、発行したNFTは生成したスマートコントラクトに管理されます。
  • Dappsは、ブロックチェーン上で実行されるスマートコントラクトを利用した分散型アプリケーション。
  • Proxyパターンを利用することでデータとロジックを分離して、ロジックだけを更新できるような状態にします。
  • OpenZeppelinのContracts Upgradableというプラグインを利用することでProxyコントラクトを実装しなくても、実装コントラクトをデプロイする際に自動でProxyコントラクトもセットでデプロイしてくれます。

上記で今回検証したのはTransparent Proxyですが、Proxyパターンには他にもUUPS Proxy、Beacon Proxyがある、ということでした。

ChatGPT Code Interpreterを使ってみた

ChatGPT Code Interpreterとは言語で入力したものに対して、コードの自動生成/実行/結果の出力までをやってくれる、2023/7月にβ公開されたChatGPTの新機能です。
この機能を使って、Kaggleにあるタイタニックの乗客の生存予測モデルを作成し、その精度を競うコンペに挑戦してみました。

www.kaggle.com

  1. サンプルデータをChatGPTに渡して内容を確認してもらい、レポートを作ってもらう。
  2. 渡したサンプルデータを元に、予測モデルを作成してもらう。
  3. テスト用の乗客情報を渡し、2で作成した予測モデルを通した結果を指定した形式で出力してもらう。

実行したところ、5分弱で上記ステップが終わってしまいました。

実際の実行画面

出力された結果は74.6%で、その後試行錯誤によって78.2%まで向上できたということでした。

AIM練習ソフトのリモートログ収集導入紹介

GameWithではゲーム攻略の延長としてAIM練習ツールというものを開発しています。
こちらはUnityを用いて開発を行っており、以前にもシューティングゲームの銃弾の当たり判定を作ってみるという記事を投稿していますので是非ご覧ください。

今回はエラー検知用にリモートロガーを導入した際に検討した結果が発表されました。
候補に挙がったのはSentry、Bugsnag、Rollbarなど。

Sentry Unity SDKあり 社内での利用経験あり。しかしプラン的に相乗りは難しそう。
Bugsnag Unity SDKあり 使い勝手は良さそう。しかし検知数のカスタマイズ性が低く、Sentryより料金が高くなる想定。
Rollbar Unity SDKなし 無料ユーザーでもログの保持期間や検知数のカスタマイズ性が実用的な範囲。

他にもいくつか検討した結果Rollbarを導入することとなりました。
RollbarはUnity用のSDKがなかったのですが、.NET向けのライブラリがあったので簡単に導入できたそうです。 集計自体はエラーと例外のみ収集し、Slackに通知されるようになっています。

BigQueryのリソースをTerraform管理にした話

Notionで手動管理されていたBigQueryのリソースの管理方法を改善したという発表です。
逆引きができず探すための時間が浪費されたり、利用する時に更新されたりしていました。
これをTerraform管理、つまりテキストベースでの管理にすることでGitHubのPRで管理できるようになり様々な改善をすることができました。

改善出来た内容

  • リソース命名のルール化
  • リソース作成時の設定漏れ防止に繋がった
  • バージョン管理とレビュープロセスの導入
  • 再現性と一貫性の確保
  • 検索網羅性の確保

最後に

今回は、GameWithサービス開発部の裏側をお伝えしました。
NFT、AI、Unity、Terraformと幅広い内容の発表があり、新たな発見に繋がっていれば幸いです。

こんなGameWithではエンジニアを絶賛募集中です!
サーバーエンジニアやフロントエンジニアの方、AIに興味がある方や、Unityでの開発に興味がある方もお気軽にカジュアル面談をお申し込みください!

github.com