GameWith Developer Blog

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

2024/07 サービス開発部業務アピール会 #GameWith #TechWith #Unity #AI #GPTs #GA4 #PHPStan

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

サービス開発部では月に一度、全体会にて どのように業務課題を改善したか をアピールする会を行っています。

今回は3件の内容をご紹介します!

先月の発表内容はこちらです

https://tech.gamewith.co.jp/entry/2024/07/10/090000

Stateパターンを利用したUnityの画面制御

GameWithではAIM練習ソフトを開発しています。 これはUnityを用いて開発しており、その際に利用したStateパターンについての発表がありました。

振る舞いを状態に依存させるのがStateパターンで、今回は画面レイアウトの変更についてを例にして説明されていました。

開始するとスタートボタンが表示され、ボタンを選択すると3カウント。その後にゲームが始まるというシーンがあります。

このシーンだけでも15個のStateが存在するそうで、事細かに分かれていますがStateパターンで制御し明確化することで状態毎の調整がやりやすくなっているそうです。

例えば通常のプレイ時とフリープレイ時ではゲーム開始時の動作が異なるため、ユーザー設定に存在するカメラの視野角調整を行うタイミングを制御したり、表示されているオブジェクトを動かさないようにするなどの調整が容易とのことでした。

肝心な画像をお見せできないので伝わりにくくすいません。続報をお待ちください!

使ってるAIツール

生成AIを使ったツールが毎日のようにリリースされていますが、今実際に業務で使えているものを紹介します、という発表でした。

GPTs

  • 知識を与えた専用のGPTを作ることができる
  • OpenAPIのスキーマを教えることでAPIを実行してくれる

社内で分析に使っているBigQueryのDB構造をGPTsに教えることで、誰でも簡単にクエリを実行できるようにした、とのことでした。

Dify

  • AIワークフローが作れる、色んなサービスと連携できる
  • GPTsほどお手軽ではないがもっと複雑なことができる

GameWithには社内版のDifyがあり、自由にワークフローを作ることができます。

Gemini 1.5 pro

ChatGPTなどと同じLLMですが、画像や音声の処理が他のLLMと比較して強いので、使い分けしているとのことでした。

社内ではGoogle meetを使って会議をすることが多いのですが、議事録保存機能が日本語に対応していないため、Geminiを使って音声ファイルから議事録を生成しているとのことです。

UIzard

  • https://uizard.io/
  • プロンプトをもとにデザインをしてくれるサービス

生成されるUIのクオリティが類似サービスに比べて高いとのことでした。すぐに生成してくれるので、ブレスト段階でのデザイン認識合わせなどに重宝しそう、とのことです。

業務効率をあげて週休3日を目指そうということでした!

GAコスト

数値分析チームにおけるGoogle Analytics(GA)を活用したコスト管理についての発表でした。

近年の為替の影響などでGAの使用料金等のコストや単価が上昇することもあるため、より正確な指標に基づいた予算作成が求められています。そのため、Looker Studioを利用し、過去のページビュー(PV)データやイベント数を確認できるダッシュボードを作成しました。

ダッシュボードの作成により、予算作成に必要なデータを視覚的に把握できるようになりました。また、さらなるコスト削減に向けて、不要なイベントを特定することもできるようになりました。

今後は、PVを用いたデータ指標を明確に定め、予算作成の精度を向上させていくための調整を続けていきたい、とのことでした。

より効率的かつ効果的な予算運用を可能として、ビジネス全体のコスト削減にも貢献していきたいですね!

PHPStanを導入した話

GameWith開発リポジトリにPHPStanを導入し、利用促進しているという発表でした。 PHPStanはPHPで静的解析を行うツールで、エラーとなり得る場所を事前に指摘したり、動的型付け言語により変数の型が自由なPHPでも型チェックを行い安全に開発を行えるようにします。 PHPは言語仕様として7.0未満は型宣言が無く、最近リリースされた8.3でクラス変数の型が指定できるようになりました。

PHPStanはPHP7.2以降で利用可能となっており、PHPStanでの型チェックはPHPの型宣言とPHPDocにて記載する形となります。 また、静的解析の強みとして呼び出されないコードの検出や関数名のtypoなども検出できるので動作チェック前にエラーに気付くことも可能です。

静的解析の主な利点としては

  • コードレビュー前にコード品質の保証ができる
  • 過去に人力で行ったテストで漏れていた問題を検知することができた

様々なメリットのあるPHPStanですが、長年運用してきたリポジトリでPHP全チェックを行うとアラートだらけになります。 GameWithはPHP5系の頃から運用されており、長年触れていないコードなども多数存在します。 そのようなコードを全て対象としてしまうと、アラート数が多すぎていつまで経っても運用を行う事ができません。

そのため導入時のポイントとして下記のように調整して導入しました

  • コード差分のみをアラートする
  • 過去のコードでは当たり前のように利用されているためmixed型の制限はなし

CIにも組み込み、PRにラベルを付けるとGitHubActionsで動く設定をして運用しています。

PRを作成後すぐに静的解析ができるようになっており、活用することでレビュアーの負担を減らすことにも成功しています。

最後に

今回もGameWithサービス開発部の裏側をお伝えしました。新たな発見に繋がっていれば幸いです。

こんなGameWithではエンジニアを絶賛募集中です!

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

github.com