Search Unity

Backtraceでクラッシュログ管理

  • Backtrace
  • 開発者向け

<このページで学べる内容>

Backtraceは開発中及びリリース後のゲームやアプリのフリーズ、クラッシュ、エラーなどの様々なエラーを検出してそのデータを収集することができます。このページではBacktraceの設定とログの見方を紹介します。  

使用環境を以下に示します。

  • Unity 2020.3.19f1
  • backtrace-unity ライブラリ 3.6.1

Backtraceとは?

皆さんが日々開発をされているゲームやアプリなどは非常に多くの時間をかけてテストが行われていると思います。しかし、どんなにテストを行っていたとしてもリリース後にフリーズ、クラッシュ、エラーなどの発生は避けられません。これはロジックのミスと言う単純なミスと言うケースもありますが、特定の環境のみで発生する環境依存系のケースやメモリやストレージなどの記憶領域の一時的な不足など実行時にしか発生しないタイミング系のケースもあります。

また日々の開発においても多数のフリーズ、クラッシュ、エラーが発生すると思います。独立した機能であれば、その機能だけ修正して再度テストを行って不具合が直っていることを確認すると言うことをしていると思います。さらに規模が大きくなるとある機能の組み合わせの時にだけ問題が発生するということもあるでしょう。それらの修正をするには担当者間のやり取りで解決することもありますが、お互いに忙しく連絡し忘れたり連絡を受けても後回しにしてしまいいつまで経っても直らなかったり、不具合のことが忘れられたりすることもあるでしょう。

このように、不具合の管理と言うのは日々の開発及びリリースのいずれの開発フェーズにおいてもとても重要となります。

そのため、多くの組織ではJira、GitHub の Issues、Phabricator、FogBugz などの問題追跡システムを使用してエンジニアリングチームの作業内容を追跡し管理していると思います。これらのシステムに不具合を登録する作業は主に手動で行いますが、登録漏れが起きないように様々な方法で自動的に登録されるような仕組みを作っている組織もあると思います。

さて、前置きが長くなりましたが、今回ご紹介する「Backtrace」はソフトウェア開発において避けて通れない「フリーズ、クラッシュ、エラーの発生」に注目し、ソフトウェアの異常を検出してデータを収集して管理するシステムです。多数のプラットフォームにも対応しているので、1つのゲームタイトルを複数のプラットフォームにリリースしているケースにおいてもまとめて管理することができます。また、Jira、GitHub の Issues、Phabricator、FogBugz などの問題追跡システムとの連携も可能なので、既存の開発システムに組み込むこともできます。

価格

Backtraceは無料プランと有料プランに2つのプランがあります。

無料プランは個人利用を想定したものです。一人の開発者がモバイル、PC、ゲームコンソール、サーバーで使用する場合は無料で利用できます。一か月で毎月最大で 25,000 件のエラー、1か月間のデータ保持、ストレージ容量が10GBと言う制限はありますが、よほど大規模な開発をしている場合でない限りは問題ない制限だと思います。

小規模チームや企業は有料プランになります。有料プランは「モバイルのみ」、「モバイル+PC」、「モバイル、PC、ゲームコンソール、サーバー」の3パターンあり、それぞれ1ユーザー当たりの月額価格が異なります。契約は1年間の契約となっています。詳しくは https://unity.com/ja/products/backtrace の「価格」をご覧ください。

個人の利用はプラットフォーム問わず無料で使えますので、製品リリースをしている個人開発者はお手軽に試して欲しいと思います。

利用の流れ

ここでは無料版の利用の流れについて紹介します。

利用者の登録

始めに https://unity.com/ja/products/backtrace を開きます。ページの上部にある「無料プランを始める」をクリックします。

必要事項を入力し、利用規約やプライバシーポリシーに同意したらチェックをして「送信」ボタンをクリックします。

しばらくすると「Backtrace 無料プランについて」と言う題名のメールが届きます。このメールの中にある「Backtraceを始める」をクリックしてサインアップを完了させます。最終的なサインアップはbacktrace.io ドメインで行います。

クリックすると下図の様なページが表示されます。

会社名に利用できる文字はアルファベットのみのようなので、記号(例えば Co., Ltd. のような . や , )はNGです。サブドメイン名はユーザー別のBacktrace管理コンソール用URLとなるものです。重複チェックはこのタイミングで行われるため、もしエラーになったら修正してください。必要項目の入力が終わったら「はじめる」ボタンをクリックします。

そのあとはプロジェクトの作成画面が表示されます。何か適当なプロジェクト名を入力してください。プロジェクトは後から追加、変更、削除ができますが、ここで作成した最初のプロジェクトは削除できません(不具合なのか仕様なのかは不明)。

Unityとインテグレーションするための準備

ログイン後の画面はサマリページになっています(正確には「トリアージ」ページです)。

Unityのプロジェクトと連携するためには右上の名前のアイコンをクリックして「プロジェクトの設定」を選択し、

「インテグレーションガイド」をクリックします。

インテグレーションガイドのネイティブプラットフォームにある「Unity」をクリックします。

ここを見ながら設定することで利用できます。

では実際に設定してみましょう。

Unityとのインテグレーション

Unity Hubを起動し新規にUnity Projectを作成します。ここではUnity 2020.3.19f1を利用しています。執筆時点において、Unityのバージョンは Unity 2017.4以降に対応しています。

初めにBracktraceパッケージをインポートします。パッケージのインポート方法は以下の3種類あります。

  • OpenUPM
  • Git URL
  • 手動ダウンロード

ここでは公式ドキュメントで推奨されているOpenUPMによる方法を紹介します。
まず、ChromeやFirefox、EdgeなどのWebブラウザで https://openupm.com/ を開きます。

上部の検索欄に「Backtrace」と入力します。するとBacktraceのパッケージが見つかりますのでそれをクリックします。

この時、ページ上部にパッケージ名が表示されていることを覚えておいてください( Home / Packages / io.backtrace.unity の「io.backtrace.unity」の部分)。

Unityに戻って、[Edit]-[Project Settings]を開き、Package Managerをクリックします。

Name:Backtrace

URL:https://package.openupm.com

Scope(s):io.backtrace.unity

と入力をして「Save」ボタンを押します。

これでPackage Manager経由でインポートすることができます。

[Window]-[Package Manager]を起動し、Packagesを「My Registries」に変更します。

すると、Backtraceが表示されるので、通常のパッケージのようにインポートします。

次にBacktraceコンフィグレーションファイルを作成します。Projectビューにて作成ボタンを押すか、マウス右クリックをして、[Backtrace]-[Configuration]を実行します。

するとコンフィグレーションファイルの「Server Address」欄がエラーになっています。

これはUnityインテグレーションガイドに掲載されていた以下のURLをコピーして入力してください。

各パラメータの詳細はドキュメントを参照してください。ここではデフォルトのまま進めます。

https://support.backtrace.io/hc/en-us/articles/360040515991-Unity-Integration-Guide

次にUnityインテグレーションガイドに書かれていたスクリプトを作成します。新規にC#スクリプトを作成し、名前を「StartupScript」とします。そしてインテグレーションガイドに掲載されていたスクリプトをコピー&ペーストしてください。作成したら空のゲームオブジェクトを作成し、StartupScriptをアタッチしてください。

もし40行目でエラーが出たときは、

attributes: new Dictionary<string, object>() { { "key", "value" } },
を
attributes: new Dictionary<string, string>() { { "key", "value" } },

に修正してください。

もう一つ空のゲームオブジェクトを作成して名前を「Backtrace」に変更します。これは上記で作成したStartupScriptで検索しているためです。そして、Backtraceゲームオブジェクトに「BacktraceClient」スクリプトをアタッチします。

そしてBacktrace ClientスクリプトのBacktrace Configrationフィールドに、BacktraceConfigrationファイルを設定します。

これでとりあえずエラーなしで動きますが、それでは何も情報が記録されませんのでBracktraceが検出するエラーを意図的に組み込んでみます。

さて、Backtraceが検出するエラーについての説明がありませんでした。Backtraceが検出エラーは以下に示します。

  1. エラーのログ - プログラマは、Debug.Logの一種であるDebug.LogErrorを使用して、エラーメッセージをコンソールに記録することができます。
  2. Unhandled Exceptions - Unhandled Exceptionsとは、ゲーム内で明示的なtry / catch文以外で発生する例外のことです。
  3. ハンドリングされた例外 - 明示的にキャッチされ、処理された例外。
  4. クラッシュ - ゲームのプレイが終了すること。ゲームがクラッシュしたり、再起動したりすること。
  5. Hangs (Mobile only) - ゲームがレスポンシブでないこと。一部のプラットフォームでは、ユーザーに「このアプリは応答しなくなりました」と表示されます。
  6. Out of memory crashes (mobile only) - メモリ不足でゲームがクラッシュします。
  7. BacktraceClientが明示的に送信するメッセージレポートです。

ここでは1.のDebug.LogError()を使用します。SampleScript.csのStart()の最後に以下の処理を追加します。

Debug.LogError("First backtrace message!");

なお、Update()内に同様の処理を書くと毎フレーム送信してしまうため無料の範囲を超えかねませんのでご注意ください。

実行するとUnityのConsoleに以下のように表示されます。

そうしたらWebブラウザでBacktraceのコンソールを表示します。すると、Debug.LogError()によるメッセージを検出して記録していることが分かります。

おわりに

Backtraceはソフトウェアライフサイクルの全ての場面においてエラーに関する情報を記録することができるツールです。プロジェクトの早い段階で導入することで多数のエラーログを記録することができます。エラーの記録の自動化にもつながるので皆様の開発の支援に役立つと思います。Backtraceにはまだまだ多数の機能がありますので、機会があればほかの機能についてもご紹介できればと思います。

この記事はいかがでしたか?