UE5にSentryを入れてエラー監視を楽にする

この記事は[Unreal Engine (UE) Advent Calendar 2023](https://qiita.com/advent-calendar/2023#participating_calendar) の12月22日の記事になりまーす（ΦωΦ）

またせたな。
「[UE4にSentryを入れてエラー監視を楽にする](https://sentry.io/welcome/)」を書いて一年以上経っちゃいましたが、UE5での導入方法と
Sentry以外のクラッシュレポート収集ができるプラグインについても紹介します。

まずはSentryから！　
ほとんどUE4のときと同じです～♪



# Sentryって？
[Sentry](https://sentry.io/welcome/)はエラー監視をやってくれるプラグインです。
UnityやWebアプリではよく使われてますがUEではなぜが記事がないのが不思議です。




# Sentryの準備
Sentryのプラグインはマーケットプレイスから取得できます
![sent.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/76e6677d-2caa-e8dd-6b47-2941d7b40613.jpeg)

以前は[こちらのGithub](https://github.com/getsentry/sentry-unreal/releases)から取ってくる形でしたが楽になりました。


その後プラグインが読み込まれたことを確認して
DSNを登録する箇所があるのでそこに必要なURLを入れます
クラッシュレポートのエンドポイントもここで設定できます。
URLに関してはこのあとのSentry側のプロジェクト作成で確認できます。
![sent8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/1269d88b-9468-7fca-4d20-9e033d9734a3.jpeg)




# Sentry側のプロジェクト作成
Sentry側でレポートなど受け取るプロジェクトを作成しまう、
この登録をするとすぐ出てきます。
プロジェクトをUEを選んで
![set2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/d059633b-47fc-7678-2b2d-f21846b9a737.jpeg)


アラート周りやプロジェクト名を設定して
![sent3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/51ad4265-3d9d-8022-3091-56d4c74c510a.jpeg)
それでおしまーい


エンドポイントについては、"Client Keys" 設定ページの一番下にあります。
これ入れないとスタックトレース情報など受け取れないので注意してください

![sent10.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/b302c634-1931-4623-90bb-23ea18a15567.jpeg)




■クラッシュポイント設定
クラッシュレポータエンドポイントの設定
クラッシュ レポーターとデバッグ ファイルが含まれるようになったので、UE5はクラッシュをどこに送信するかを知る必要があります。


UE5.2以降だとSentry側の機能でクラッシュ情報を通知してくれる用になってます。
エンドポイントの登録などはプロジェクト設定の方でできるので以前より簡単になりました。
下記の用にクラッシュレポート側の.iniを変えなくてもいいですが
気になる人は変えておくといいかもです。
Sentry側の設定はちょっと見づらいので「Crash」で検索してみてください

一般のところにある「Override Windows default crash capturing mechanism」のところにチェックを入れるとSentry側のクラッシュ通知機能を使います
![sent7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/2d3cd721-2271-0fda-861e-90f5044103f1.jpeg)

ですが、筆者としてはこれは使わないほうがいいです。
UE5側後の実際にクラッシュさせたときにも書いてますが
UE5側のクラッシュレポート機能に出てくるトレース情報がないのは困るのときがあるので




古いやり方ですが、直接iniを書き換える場合はここです
```
engine-dir\Engine\Programs\CrashReportClient\Config\DefaultEngine.ini
```
下記を追加する感じです
[CrashReportClient]
    CrashReportClientVersion=1.0
    DataRouterUrl="--------------------------これ-----------------------"

それではそのへんの対応ができた
ってところでいきなりやると大変なので

[サンプルプロジェクト](https://github.com/getsentry/sentry-unreal/tree/main/sample)があるのでそれを使ってから
移植していくのが良いと思います。

サンプルプロジェクトを使う場合はプロジェクトの中のPluginsの中にReleaseから持ってきた
UE5のバージョンに合わせてあプラグインを持ってきて入れておかないと起動時にプラグインがないぞと怒られて起動しません
注意しましょう。



それでは、[サンプルプロジェクト](https://github.com/getsentry/sentry-unreal/tree/main/sample)からイベントとクラッシュをさせてみましょう

起動するとこんな画面になりメッセージやイベント、クラッシュが出ます
では
イベントの押してみますー
![sentry4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/dfa6f3e3-9b22-0b18-1132-60405e07ff87.png)

Sentyの管理画面のissuesにイベントやクラッシュ報告が出ます

イベント通知が来てま～す。

イベントの中身を見るとどこで呼ばれたのかやそのイベントを呼び出した
PCや端末の情報を見ることができます。
この辺はUE4のころと変わらず
どのような環境のユーザーから飛んできたイベントなのかが確認できます。
![sentry7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/743b3855-a301-16d3-3827-64755b61c4ee.png)


次はクラッシュさせてみます。

クラッシュのボタンを押すと
Sentry側の
クラッシュレポートが出てきてー
と思ったけど、「Override Windows default crash capturing mechanism」をチェック入れてると何もでません
なのでこれ切っておいたほうがいいと思うの開発中だとなんでエラーなのか出ないので困るからです。

管理画面にクラッシュの報告が来てます。
![kurasy.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/986ef868-a4af-eecb-1b5c-845daa4ebc82.jpeg)


まず、クラッシュした端末の情報とどんなクラッシュなのか
GPUの情報も飛んできます

![sentry10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/a7b7e546-630c-17e1-e59e-06dd173e3954.png)


こんな感じでエンドポイントがちゃんと設定されてるとコールスタック情報も入ってます。
これはあとで「どこで起きたエラーだ？」ってなったときでも助かりますね。
![stak.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/06fc1d70-583a-ca8b-367c-e339faa25c2c.jpeg)




# 自分のプロジェクトにイベント通知を追加する
それでは、自分のプロジェクトにメッセージを飛ばすイベントを通知してみようと思います。
BPの場合はこれだけです。　日本語入れると化けちゃうかもなので非推奨ですー。

![sent9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62400/ce989eba-8f86-87cd-db5e-cc52f27a5d39.jpeg)

C++の場合
#include "SentrySubsystem.h"

```
void EventMessage()
{
    // Capture message
    USentrySubsystem* SentrySubsystem = GEngine->GetEngineSubsystem<USentrySubsystem>();
    SentrySubsystem->CaptureMessage(TEXT("test"));
}

```

こんな感じです。


# おまけ
Sentry以外のクラッシュ監視でUE5対応のものを紹介します。

### [BugSplat](https://www.bugsplat.com/)
エラーモニタリングや、安定性管理のサービスです。
Sentryに似てますが、パッと見ドキュメントが最近のUEに対応してるのはこちらです
動作確認用の利用ぐらいなら無料でできそうなので次回はこちらのサービスを調査してみようと思います。

### [BugSnag](https://www.bugsnag.com/)
こちらもエラーモニタリングのサービスなのですが
30日間のみ無料であとは有料みたいかな？それか機能制限みたいです。
あまり情報がないので、こちらはまとまった時間をとって調査してみようと思います。



# 最後に
またUE5に関して記事書くときは、もう少しエンジン側の内容を書こうかと思います（ΦωΦ）

一緒に開発してくれる方も絶賛募集中です！興味あったらいつでも僕に声かけてください！
会社へのエントリーもお待ちしてます！
https://www.blastedge-games.co.jp/recruit
一緒にUnreal Engineでゲームを作りましょー！