ゲーム開発環境だってオブザーバビリティを実現したい！

ゲームサーバなどユーザが利用するサーバに目が向きがちですが、実は開発環境のリソースが効率的に使われていなかったり、無駄な費用がかかってしまっている事はありませんか？
このような状況を打開する方法の一つとして、ゲーム開発環境のコストやリソースの効率Upするために利用状況の可視化をNew Relicを使って実現する方法を一例としてご紹介したいと思います！

ユーザに影響しないことを理由に監視していなかったり、また締切近いしお金で解決！が定常化しているそこのあなた！！
開発環境だからこそ今どこで何が起こっているのか、それに対してどう対処すればいいかを迅速に把握し効率的なゲーム開発を行うために「オブザーバビリティ」を実現しましょう！

:::note info
ゲーム運用におけるオブザーバビリティについて知りたい方はこちら。
[ゲーム運用におけるオブザーバビリティとは？](https://qiita.com/ume67026265/items/dcdf8e79f2f90f8e8093)
:::


### 前提となる環境
今回前提となる環境は下記のような、サイクルの開発環境を想定しています。
①ソースコードを開発しバージョン管理サーバにコミット
②コミットをフックにジョブを実行
③ビルドサーバにてビルドを実行
④成果物をファイルサーバに保存しQAを実施
<B>※クライアントサーバタイプのゲームにおける開発環境を例としております点ご了承ください</B>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/cc3e3e19-b77e-f5bb-3a3b-a48287910bc9.png" width=80%>

それぞれ何ができてどのようなメリットがあるのか確認していきましょう

### ①バージョン管理システムサーバ
ゲームのソースコードのバージョン管理としてよく使われるツールは「[Perforce Helix Core](https://www.perforce.com/products/helix-core)」と「[GitHub](https://github.co.jp/)」が挙げられます。
どちらもサーバがダウンしてしまったり、ファイルのpushやclone時に著しい遅延が発生してしまっては開発に大きな影響が出てしまいます。
そのためバージョン監視システムサーバのパフォーマンス監視は開発において<B>とても重要</B>なものとなります。

「Perforce Helix Core」のサーバやプロセスの状況はInfrastructure Agentをインストールすることで把握することが可能です。
New Relic の Infrastructure Agent はCPUやメモリだけでなくプロセスの稼働状況、ログも収集することが可能です。これらの情報はほぼリアルタイムに収集し状況を把握できるので、SyncやSubmit時のサーバの状況を把握することができ、リソースの最適化や問題があった時に可視化を行うことが可能です。

Perforce Helix Coreに限らず、この後にご紹介するサーバ(EC2やオンプレサーバを使っているサーバ)に関してはInfrastructure Agentをインストールすることが可能です。

Infrastructure Agentについては下記ドキュメントをご参照ください。
Windows,Linux,Macにインストール可能です。(必要要件は[こちら](https://docs.newrelic.com/jp/docs/infrastructure/infrastructure-agent/requirements-infrastructure-agent/))

https://docs.newrelic.com/jp/docs/infrastructure/choose-infra-install-method/

またp4 ping や p4 lockstatなど使ったHelix Coreのパフォーマンスを確認するコマンドを定期的に実行し、その結果をNew Relicに送信することも可能です。
Infrastructure Agentから取得した情報と合わせて、ダッシュボード化することでリアルタイムにHelix Coreサーバの状況を把握することが可能になります。
Flexの使い方については下記ドキュメントご確認ください。

https://docs.newrelic.com/jp/docs/infrastructure/host-integrations/host-integrations-list/flex-integration-tool-build-your-own-integration/


「GitHub」は主にモバイルゲーム開発においてバージョン管理ツールとしてよく利用されています。
GitHubとは連携することでシステムの可観測性やパフォーマンス、インフラストラクチャの可視化を行うことが可能になります。
※GitHub Integrationは2025年3月現在プレビュー機能になります。利用を検討される場合は、担当の営業にご相談ください

https://docs.newrelic.com/docs/service-architecture-intelligence/github-integration/


### ②ジョブ管理サーバ
バージョン管理を行うファイルサーバからビルドのタスクを実行するために利用されるのがジョブ管理サーバーです。
ここではJenkinsを利用した場合を例にしたいと思います。

Jenkinsと連携することでジョブとパイプラインの実行を分散トレースとして視覚化することが可能になります。
PreBuildのダッシュボードも用意されているので、連携したらすぐにデータを可視化してジョブの実行状況を確認することが可能になります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/a9db86e4-9f33-4d51-8d44-e03f728a1361.jpeg" width=80%>

https://docs.newrelic.com/jp/docs/infrastructure/other-infrastructure-integrations/monitoring-jenkins-ot/


Jenkinsを使ってBackendサーバのアプリケーションのビルドを自動化している場合、New RelicでAPMやBrowerの機能を使ってパフォーマンスを計測することが可能になります。またJenkinsやGitHub Actionsからデプロイのタイミングなどに合わせてバージョン番号や理由を付加し、New Relic上にマーカーとして追加する[Change Tracking](https://docs.newrelic.com/jp/docs/change-tracking/change-tracking-introduction/)という機能を活用することが可能です。
Change Trackingはデプロイ前後でのエラーやレスポンスタイムの変化などを確認するために便利です。
Backendサーバのステージング開発やQA環境へのリリースタイミングでの変化を確認することが可能なので、早い段階からのエラーやパフォーマンスの改善に活用することが可能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/2d64d752-5069-467e-9834-3be4b3784b57.png" width=80%>


https://qiita.com/khara-nrkk/items/7eb11759bf0e17a11bdc


### ③ビルドサーバ
ビルドを行うために必要なビルドサーバのパフォーマンスを監視することで、効率的なリソース活用しながらビルドを行うことが可能になります。

ゲームエンジンとしてよく使われるUnreal Engineの分散ビルドを実施するために、オンプレのPCのリソースだけでなくクラウド上にあるビルドサーバも効率的に活用する必要があります。
その時によく利用される分散ビルドツールが [Incredibuild](https://www.incredibuild.com/ja/)になります。
IncredibuildのHelperサーバはオンプレ・クラウドどちらでも利用することが可能なので、特に繁忙期に関しては一時利用しやすいクラウドをうまく活用する必要がありますが、その分どのくらいのスペックにすれば良いかの検討が難しい場合があります。
ビルドを走らせた時にどれくらいのリソース利用率になるのか、リアルタイムで確認することができると便利です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/87bbc8ac-a579-4ce0-969f-f9caa6fbad84.png" width=80%>

またクラウドを活用する場合、利用の際のコストもまとめてダッシュボードで確認できるといいですよね。
例えばAWSを利用している場合、AWS CloudWatchのMetricと合わせてAWSのBillingデータも取り込むことができるので、下図のようにリソースとコストの相関をまとめてみることでコスト管理も可能になります。
EC2とオンプレのハイブリット環境だったとしてもInfrastructure Agentを入れることで、どこにあったとしてもNew Relicに収集したデータから一元的に把握することが可能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/543174bd-1c54-4963-9f71-c21675b86b23.png" width=80%>


AWSとの連携方法は下記ドキュメントもご参照ください。

https://qiita.com/nr-mito/items/ec595a70336ceb1db84a

https://qiita.com/nr-mito/items/c4e528840294ef9e3a6b

Unityのビルドの際などのMacOSを活用されるような場合も、Infrastructure AgentがMacOSに対応しているので問題なく状況を把握することが可能です。

余談ですが、クライアントをUnityもしくはUnreal Engineを使ってモバイルゲームを開発している場合、New RelicのMobile Agentを使うことで今まで見えなかったユーザの動向やクラッシュなどを確認することが可能になります。開発段階からクライアントのパフォーマンス改善にも是非ご活用ください。

https://docs.newrelic.com/jp/docs/mobile-monitoring/new-relic-mobile-unity/monitor-your-unity-application/

https://docs.newrelic.com/jp/docs/mobile-monitoring/new-relic-mobile-unreal-engine/monitor-your-unreal-engine-application/

https://qiita.com/ume67026265/items/72d5068edd9a77baef2e


### ④ファイルサーバ
③でビルドして生成されたファイルはファイルサーバに保存されます。
この時に保存されるファイルサーバは①と同一である可能性もありますので、その場合は①の項目を参考に設定を行ってください。
ここではファイルサーバとして①のバージョン管理サーバではなく、ビルドの成果物を保存する共有ストレージを想定しています。
ここでよくあるのが気づくと上限に達して保存できないといったユースケースです。

ディスクの使用率はInfrastructure Agentや各クラウドとの連携によるMetricsにてリアルタイムに確認することが可能です。
補足として共有ストレージ内に保存されているファイルサイズの一覧を取得し、いち早く容量を圧迫しているファイルを特定する方法の一つとしてFlexを使った方法があります。
下記BlogにLinuxサーバでの監視実行例がありますので参考までにご確認ください。

https://newrelic.com/jp/blog/how-to-relic/how-to-use-new-relic-flex

またFlexを設定したもののうまくデータを確認することができない場合のデバック方法もご確認ください。

https://qiita.com/MarthaS/items/044ef9909e27667c9eba

### (Appendix)AIの活用
ゲーム開発においてAIの活用事例はかなり増えてきています。それと合わせてAIを使ったアプリケーションの効率化も必要になっています。
例えばプロンプトに質問した内容に対して、どれくらいのレスポンスタイムだったか、どのような内容を返しているのか、エラーが起こっていないかを迅速に把握し改善していくことが可能です。

https://docs.newrelic.com/jp/docs/ai-monitoring/intro-to-ai-monitoring/

https://qiita.com/nr-mito/items/e0b6b392bc40c407bf8b

### 終わりに
今回ご紹介したのはあくまでゲーム開発環境の一部です。
会社毎、プロダクト毎に様々なツールや工程を経てゲームは開発されていますが、開発の状況を可視化していくことでは重要で、問題となる部分を早期に把握・対応が行えるようになるという点は共通のポイントになります。
良いゲームを開発するために、New Relicを活用し効率の良い開発環境運用にお役立てください！

:::note info
ゲーム運用におけるオブザーバビリティについて知りたい方はこちら。
[ゲーム運用におけるオブザーバビリティとは？](https://qiita.com/ume67026265/items/dcdf8e79f2f90f8e8093)
:::
:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::
:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::