この記事でのバージョン
Unity 2020.3.11f1
Backtrace 3.6.0-preview.1
はじめに
今回はBacktraceというエラーやクラッシュを管理するサービスをUnityで使ってみようという記事!
先にちょっと触ってみた感想を列挙すると、以下のようにかなりオススメ出来そうな感じでした!
- 導入や使い方が簡単
- 得られる情報が例外やクラッシュ、Debug.LogErrorと幅広い
- Unityエディタ上で発生したエラーや例外も取得可能
- サイトが見やすい上に情報の反映も早い(リアルタイム?)
- 個人開発者は無料で使える。
- 担当者や状態も設定出来るので、そのままバグ管理ツールとしても使える
Backtraceとは
まずはBacktraceの概要ですが、Unityのサイトで以下のように説明がされている通り、
ユーザのデバイスで起きたエラーやクラッシュを集計し解決の手助けとなるサービスです。
Backtraceは、ゲーム内のクラッシュやエラーの補足、優先順位付け、解決作業を自動化してくれるサービスです。
BacktraceはUnityの公認ソリューションパートナー(VSP)であり、Unityの厳しい審査基準を満たして合格した商品です。
あらゆる規模のスタジオが、モバイル、PC、コンソール、ウェブで安定した高パフォーマンスのゲームを実現するためにBacktraceを選んでいます。
実際にどのような情報が取得出来るかというと、例外やクラッシュはもちろん
Debug.LogErrorで出したエラーやハングアップ(モバイル限定)した事まで取得可能です。
The plugin will report on 6 'classes' or errors:
Log Errors - Programmers use Debug.LogError, a variant of Debug.Log, to log error messages to the console.
Unhandled Exceptions - Unhandled Exceptions are exceptions in a game that occur outside of an explicit try / catch statement.
Handled Exceptions - Exceptions that are explicitly caught and handled.
Crashes - An end to the game play experience. The game crashes or restarts.
Hangs (mobile only) - A game is non responsive. Some platforms will tell the user “This app has stopped responding
Out of memory crashes (mobile only) - A game crashed under memory pressure.
DeepL翻訳
プラグインは、6つの「クラス」またはエラーについて報告します。ログエラー - プログラマーは、Debug.Logの一種であるDebug.LogErrorを使用して、エラーメッセージをコンソールに記録します。
ハンドリングされていない例外 - ハンドリングされていない例外とは、ゲーム内で明示的な try / catch ステートメント以外で発生する例外のことです。
ハンドリングされた例外 - 明示的にキャッチされ、処理された例外。
クラッシュ - ゲームのプレイが終了すること。ゲームがクラッシュしたり、再起動したりすること。
Hangs (Mobile only) - ゲームがレスポンシブでないこと。一部のプラットフォームでは、ユーザーに「このアプリは応答しなくなりました」と表示されます。
Out of memory crashes (mobile only) - メモリ不足でゲームがクラッシュします。
📦 Backtrace - io.backtrace.unity | OpenUPM
さらにモバイル(Android、iOS)やPC(Windows、Mac)、
PS4&5やNintendo Switchと家庭用ゲーム機にも対応していますし、Unity以外の開発環境でも使えます。
こんなに多機能だと気になるお値段ですが、なんと個人開発者の場合は無料で使えます。
ちなみに個人開発者でなくとも、無料トライアルという形で30日間は無料で使えます。
登録方法
ここからはBacktraceの登録方法です。
まず、以下のページで諸々記入した後、Start My Free Trialを押します。
すると登録が完了し、ログイン出来るようになります。
なおログイン後に、プロジェクトを作成する感じになります。
ちなみにUnity公式のページにも「無料トライアルを開始する」というボタンがありますが、
ここから登録しても上記ページのリンクがメールで飛んでくるだけなので二度手間になります。
Unityのプロジェクトに導入
続いてUnityのプロジェクトにBacktraceを導入する方法です。
ちなみにドキュメントは以下のページです。
(2021/8/8段階だと右下で日本語を選ぶと項目が全て消える)
https://support.backtrace.io/hc/en-us/articles/360040515991-Unity-Integration-Guide
プロジェクトへの導入方法は手動でダウンロードして追加するか、
Package ManagerでGit URLを使ってインストールするか、
OpenUPMを使う方法があります。
今回はドキュメントで推奨していたのでOpenUPMを使ってみます。
まずEdit/Project Settingsからウィンドウを開き、
Package Managerの項目でNameをBacktrace(何でもいい)、URLをhttps://package.openupm.com、
Scope(s)をio.backtrace.unityにしてSaveを押します。
その後、Window/Package Managerでウィンドウを開き、
Packages:My Registriesを選ぶと、Backtraceの項目が表示されるのでInstallボタンを押します。
(2021/8/8段階だと3.6.0-preview.2だとエラーが出たので3.6.0-preview.1を使用)
Backtraceのインストールが完了されると、
Assets/Backtrace/Configurationという項目が表示されるようになるので、
これを押して設定ファイルを作成します。
さらにHierarchy上のオブジェクトにBacktrace Clientというコンポーネントを追加し、
先程作成した設定ファイルをアタッチします。
後はBacktrace Clientに表示されているSever Addressを入力すれば完了です。
なお、Sever Address<のアドレスはBacktraceのページの右上からプロジェクト設定を選び、
さらにインテグレーションガイドのUnityを選んだ先の
サーバーアドレスで確認する事が出来ます。
実際の使用イメージ
最後に実際にどのような感じで情報が取得出来るのか確認していきます。
情報収集には以下のようなAwakeとStartでエラーログ、
ボタンを押した時に例外が発生するようなコードを使い、
Unityエディタ上とMac用にビルドした物で確認しました。
//================================================================================= //自動処理 //================================================================================= private void Awake() { Debug.LogError($"Awake エラー"); } private void Start() { Debug.LogError($"Start エラー"); } //================================================================================= //ボタン押した時 //================================================================================= /// <summary> /// 0除算による例外を発生させる /// </summary> public void DivisionZero() { var zero = 0; var a = 1 / zero; } /// <summary> /// nullの例外を発生させる /// </summary> public void NullException() { GameObject nullObject = null; var transform = nullObject.transform; }
上記のコードを実行すると、ブラウザ上でほぼリアルタイムに情報が確認出来ます。
情報はいつ、何件、どこのコード及びシーン、どんな端末(端末名、OS)で、
Debug.LogErrorならログの内容等、かなり詳細に確認する事が可能です。
ちなみに各情報に状態やタグ、担当者を設定する事も可能なので、
そのままバグ管理ツールとしても使えます。