はじめに
ゲーム開発中、デバッグ作業を効率的に行うためにはログの管理は結構重要ですよね。
GameMaker Studio 2(以下GMS2)にもshow_debug_messageとかでログを出せますが、正直読みにくいのが現状です。
そこで今回は、便利なログビューアーを使って効率的にログを管理する方法を紹介しようと思います。
正直GMS2のデフォルトのログは読みにくいので、ログを頻繁に使う人にとっては必須レベルの機能です。
Logbertの導入
今回はログビューアーとして、Logbertを使いたいと思います。
Logbertとは
Logbertとは、log4netやlog4jなどのログフレームワークに対応した高度なログビューアです。
複数のログレシーバをサポートしており、UDP、TCP、ファイル、ディレクトリベースのログを受信して表示することができます。
特にログメッセージのフィルタリングや検索機能が充実していて、大量のログを効率的に管理できます。
自分も使ったんですけど、結構見やすいです。ログレベルを設定出来たり、フィルタ機能が優秀なのが良いですね。

Logbertのインストール
下記のリンクにアクセスします。
github.com
インストーラーをダウンロードします。

ダウンロードしたインストーラーを起動します。

特殊な設定は無いので、Nextを押してインストールをしてください。
この画像が出たらインストール完了です。

アセットの導入
LogbertとGMS2を連携させる仕組みですが、なんとアセットを無料公開してくださっている方がいるので
そちらを使わせていただきましょう。(こんな便利なアセットを無料公開とは...本当、頭が上がりません。ありがとうございます)
GMLogger Log Exporterのインストール
こちらのリンクに飛んでください。
marketplace.gamemaker.io
[Download for Studio2]ボタンを押してパッケージをダウンロードします。

もしこのボタンが無かったらログインできていない可能性があります。
右上のログインボタンを押してログインしてからアクセスしましょう。

GMS2にインポート
GMS2を起動して「ツール」「ローカルパッケージをインポート」を選択します。

エクスプローラーが開くので、先ほどダウンロードしたパッケージを選択します。

そしたらインポート画面が開くので、「すべて追加」をクリックして「インポート」を押します。


※注意 コードの修正
パッケージをインポートした後ビルドしようとすると、ビルドエラーが出ます。

エラー内容通りにloggerスクリプトの61行目を見に行くとこんなコードがあります。


このエラー内容は
「[method]って名前の関数は既に存在するから変数として宣言しないでくれや」
と言った感じです。
なので、このmethod変数を別の名前にして、利用個所も全て変更してしまいましょう。
まずはエラーが出ていた61行目と、その下の64行目のmethodを別の名前にします。

次は96行目の部分です。
文字列で黄色くなっている方ではなく、関数として呼ばれているオレンジ色の方のみを修正してください。


これでビルドをすると成功するはずです。
使い方
Logbertのセットアップ
まず、Logbertを起動しましょう。

起動したら、Log4Net UDP Receiverを選択します。

そしたら新しいウィンドウが出てくるので、portが7071になっていることを確認してOKを押します。
もし7071以外の数字が入力されていたら、7071に変更してください。

このような画面になったらセットアップ完了です。

ログの送信
ついにログを出力してみましょう!
とは言え使い方は非常にシンプルで、logger関数を呼び出して、ログレベルとログ内容を記述すれば送信されます。
logger(LOGLEVEL.INFO, "hogehoge");

第一引数でログレベルを設定することができます。
logger(LOGLEVEL.TRACE, "hogeTrace"); logger(LOGLEVEL.DEBUG, "hogeDebug"); logger(LOGLEVEL.INFO, "hogeInfo"); logger(LOGLEVEL.WARN, "hogeWarn"); logger(LOGLEVEL.ERROR, "hogeError"); logger(LOGLEVEL.FATAL, "hogeFatal");

ログレベルを設定すると、ログが色分けされるだけでなく、フィルタもかけることが出来るので非常に便利です。
積極的に活用していきましょう!

▶ログレベルの使い分けメモ
ざっくりとした使い分けです。
必ずこれに従う必要はありませんので、プロジェクト毎に使い分けてください。
ログレベル使い分け
1. ALL
- 説明: すべてのログメッセージを出力
- 用途: デバッグ作業中に、すべてのログ情報を確認したい場合に使用。最も詳細なログレベル
2. TRACE
- 説明: 非常に詳細なログメッセージを出力。プログラムのフローを追跡するための情報を提供
- 用途: プログラムの詳細な実行フローや状態を追跡したい場合に使用。通常は開発者向け
3. DEBUG
- 説明: デバッグ情報を出力。通常の操作では不要な、追加の詳細情報を含む
- 用途: 開発中にプログラムの動作を確認し、バグを発見・修正するために使用
4. INFO
- 説明: 一般的な情報メッセージを出力。プログラムの正常な動作に関する重要な情報を提供
- 用途: システムの運用中に、重要な状態変化や動作を記録するために使用
5. WARN
- 説明: 警告メッセージを出力。今後問題が発生する可能性がある状況を示す
- 用途: 注意が必要な状況や、潜在的な問題を記録するために使用。すぐに対処は不要だが、後で確認が必要な場合に役立つ
6. ERROR
- 説明: エラーメッセージを出力。プログラムの一部が失敗した場合に使用される
- 用途: システムの動作に支障をきたす問題が発生したときに使用。即時の対処が必要
7. FATAL
- 説明: 致命的なエラーメッセージを出力。プログラムが続行できない重大なエラーを示す
- 用途: プログラムのクラッシュや、即時に対応が必要な重大な問題が発生したときに使用
8. NONE
- 説明: すべてのログメッセージを無効にする
- 用途: ログ出力を完全に無効にしたい場合に使用。リリース時にログを無効にする際に役立つ
ログの削除
何度もゲームを起動すると同じログがたまって読みにくくなります。
そこで、現在表示中のログを全て削除するボタンがあるので、ゲームを起動するたびに削除しておきましょう。

フィルタ機能
もう一つ、Logbertで外せない機能はフィルタ機能です。
下の方にある「Filter」をクリックしてください。

そしたら下のウィンドウがフィルタに切り替わります。
この状態で左のプラスボタンを押しましょう。

そうするとフィルタ設定ウィンドウが新たに表示されるため、ここでフィルタを設定します。
今回は「ログ内容」に「Error」が含まれるものだけ表示させるように設定します。
- Column to filterをMessageに変更
- Expression to filter for: に Error と入力
- OKを押下

すると、hogeErrorだけが表示されて他は非表示になりました!

フィルタ設定後も、下のチェックボックスを外せばフィルタを無効化することができます。

複数フィルタ設定を作り、オンとオフを切り替えれるので非常に心強い機能です!
リリース時の注意点
開発中は非常に便利なこのログ機能ですが、ゲームをリリースする際には無効にすることを忘れないでください。
logger_set_level()をNONEに設定することでログ機能を無効にできます。
if(!debug_mode){ logger_set_level(LOGLEVEL.NONE); }
これを怠ると、プレイヤーがログビューワーを使ってゲームの内部メッセージを監視することが可能になるので注意が必要です。
まとめ
LogbertとGMLogger Log Exporterを使用することで、GameMaker Studio 2でのログ管理が飛躍的に向上します。
今回紹介した以外にも、ブックマーク機能やCSVへの出力機能なども備わっています。
ログレベルを指定してのログ表示、詳細なフィルタリング、検索機能など、多くの便利な機能を活用して、開発中のデバッグ作業を効率化しましょう。