マイクロプロファイラーは、Roblox StudioおよびRobloxクライアントにおけるパフォーマンス最適化とトラブルシューティングツールです。キャラクターのアニメーション、物理の更新、スクリプトの実行、ジオメトリのレンダリングなど、フレーム中に実行されるすべてのエンジンタスクに関する詳細な視覚的タイミング情報を提供します。どのタスクがどのフレームで実行されたか、これらのタスクが実行されるのにどれくらいの時間がかかったか、そしてそれらのタスクがフレームタイムの目標を逃す原因となったかを特定できます。
フレームタイム
マイクロプロファイラーを使用するには、フレームタイムとフレームレートの関係を理解する必要があります。
- フレームタイムは、フレームが画面にレンダリングされるのにかかる時間で、一般的にはミリ秒で測定されます。
- フレームレートは、画面にレンダリングされるフレームの数で、一般的には1秒あたりのフレーム数(FPS)で測定されます。
フレームタイムが低いほど、フレームレートは高くなります。1,000ミリ秒(1秒)をフレームタイムで割ることでフレームレートを得ることができます。
| 平均フレームタイム | フレーム毎秒 |
|---|---|
| 33.33 ms | 30 FPS |
| 16.67 ms | 60 FPS |
| 8.33 ms | 120 FPS |
| 4.17 ms | 240 FPS |
しかし、スムーズなゲームプレイには、高いフレームレートだけでは不十分です。一貫したフレームタイムが必要です。たとえば、59フレームが10ミリ秒で到着し、1フレームが410ミリ秒で到着すると、プレイヤーは60 FPSで動作しているにもかかわらず、大きな、衝撃的なスタッターを感じます。すべてのフレームがほぼ同じ時間でレンダリングされる場合、その一貫性により、ゲームはよりスムーズに感じられます。特に低いフレームレートではその傾向が顕著です。
マイクロプロファイラーはフレームタイムに完全に焦点を当てています。その目的は、フレームタイムのスパイクとその原因を特定するのを助けることです。
マイクロプロファイラーを開く
マイクロプロファイラーを開く方法はプラットフォームによって異なります:
モバイルクライアントでは、設定メニューを開き、マイクロプロファイラーをオンにします。その後、同じネットワーク上の開発マシンから、ウェブブラウザを使用して提供されたIPアドレスとポートに移動します。

このスクリーンショットは、172.18.56.105というIPアドレスと1338というポートを示しているため、172.18.56.105:1338に移動します。デバイスのネットワーク構成によっては、複数のIPアドレスが表示されることがあります。1つが機能しない場合は、次を試してください。
デスクトップクライアントでは、CtrlF6(⌘F6)を押します。
スタジオでは、CtrlF6(⌘F6)を押します。
一般的に、モバイルクライアントはゲームをプロファイルするのに最適な場所です。Robloxのほとんどのプレイヤーは電話やタブレットを使用しており、これらのデバイスはパフォーマンスを制限する厳しい熱的および電力の制約があります。もしあなたのゲームが中程度のAndroidタブレットでうまく動作するなら、ほぼ確実にゲーミングデスクトップでははるかに良いパフォーマンスを発揮します。
マイクロプロファイラーの基本
マイクロプロファイラーには、2つの主要なコンポーネントがあります:フレームタイムバーグラフと詳細タスクタイムラインです。
- フレームタイムグラフはインターフェースの上部にあり、各フレームがレンダリングされるのにかかった時間を示します。バーが高いほど、フレームタイムが長いことを意味します。
- タイムラインは、フレーム中に実行されたすべての個々のタスクを示します。バーが広いほど、実行に時間がかかったタスクを表します。
マイクロプロファイラーでの典型的なワークフローは、フレームタイムグラフを使用してスパイク(高いバー)を特定し、次にタイムラインを使用してそのスパイクを引き起こしたタスクを特定することです。その後、タグリファレンスを確認して、タスクに関する情報とそのパフォーマンスを改善する方法を確認できます。

フレームタイムグラフ
各バーの高さは、フレームを完了するのにかかったミリ秒数を示します。最近のフレームは右側にあります。フレームにカーソルを合わせると、CPUおよびGPUの使用状況に関する基本情報が表示されます。

オレンジのバーは、ジョブウォールタイムがレンダーワールタイムを超えるフレームです。これらのフレームでは、スクリプトの実行、物理計算、アニメーションの再生などを行うワーカースレッドのうち少なくとも1つが、メインレンダースレッドよりも長く実行されました。
ゲームがフレームタイムの目標に達しておらず、オレンジのフレームが多数ある場合、一般的な原因はスクリプト、物理、アニメーションです。詳細はパフォーマンスの改善を参照してください。
青いバーは、レンダーワールタイムがジョブウォールタイムを超えるフレームです。これらのフレームでは、メインレンダースレッドがワーカースレッドのいずれよりも多くの時間を要しました。
ゲームがフレームタイムの目標に達しておらず、青いフレームが多数ある場合、それはレンダリングのボトルネックを示しています。一般的な原因は、過剰なオブジェクト密度、オブジェクトの動き、照明です。詳細はパフォーマンスの改善を参照してください。
赤いバーは、次の2つの条件が真であるフレームです:
- レンダーワールタイムがジョブウォールタイムを超える
- GPU待機時間が2.5ミリ秒を超える
赤いバーはオレンジや青よりも少なく、通常は過剰なオブジェクトの複雑さ、テクスチャサイズ、視覚効果の結果です。最適化は青いバーと似ています。詳細はパフォーマンスの改善を参照してください。
フレームの最後に小さなタスクがあると、ジョブウォールタイムとレンダーワールタイムが狂うことがあるため、フレームタイムよりもフレームの色に焦点を当てる方が良い理由です。「良い」色を目指す必要はありません。オレンジ、青、赤の混合は、フレームタイムの目標に達している限り問題ありません。もし目標に達していない場合、色が最適化すべき場所を示すことがあります。
タイムライン
左クリックしてドラッグするとタイムラインをパンできます。多くのCPUコアを持つマシンでは、特定のタスクを実行しているスレッドを見つけるために、上下にかなりパンする必要があるかもしれません。

スクロールするとタイムラインがズームインおよびズームアウトします。タイムラインの上部にあるミリ秒ラベルと組み合わせることで、タスクが絶対的にどれくらいの時間がかかったか、また他のタスクに対してどれくらいの時間がかかったかを把握できます。

バーグラフの緑のオーバーレイは、タイムライン上で現在表示されているフレームの数を示します—あなたのズームレベルです。フレームバーを左クリックすると、タイムラインのその位置にジャンプします。
ズームレベルを調整する必要があるかもしれませんが、バーにカーソルを合わせるとタイムライン上のフレームがハイライトされます。薄い灰色の線がフレームを区切ります。

別のラベルの真下に表示されるラベルは、上位タスクの一部として実行されるタスクを示します。
親タスクではなく、通常は最もパフォーマンスが悪い子タスクをトラブルシューティングしたいです。親タスクは、その子タスクの合計よりも短くなることはできません。
ラベルを右クリックすると、そのタスクの正確な期間にタイムラインをズームします。
情報が多すぎて圧倒される場合は、グループまたはスレッドメニューを使用してタイムラインをフィルタリングします。たとえば、メインスレッドのレンダタスクのみを表示したい場合があります。

CtrlF(⌘F)を使用して、ダンプ内で最も時間を要するタスクの出現にジャンプします。たとえば、computeLightingPerformは、すべてのクライアントフレームで実行されます。128フレームのダンプでそれを検索すると、最も長く完了するのにかかったフレームにジャンプできます。
スレッド
多くのプログラムと同様に、Robloxは複数のスレッドを使用して同時にタスクのシーケンスを実行します。マイクロプロファイラーは、タイムラインの左側にスレッド名を表示します。

重要なスレッドタイプは3つあります:
メイン("RBX Main"):CPUベースのレンダリングタスクを処理します。入力、Humanoids、アニメーション/ツイーニング、物理所有、サウンド、スクリプトの再開を待機します。また、スタジオインターフェースを更新し、他のスレッドを調整します。
ワーカー("RBX Worker"):メインスレッドをネットワーキング、物理、パスファインディングでサポートします。現代のCPUのコア数のため、通常は多くのワーカースレッドがあり、そのほとんどは常にスリープ状態です。
レンダー("GPU"):"準備、実行、提示"のロジックに従います。デバイスのグラフィックス処理ユニット(GPU)と通信します。
- 準備:メインスレッドからの情報を使用してレンダリングモデルを更新します。
- 実行:2Dインターフェースを含むレンダリングコマンドを発行します。
- 提示:GPUと同期します。
カスタムスクリプトプロファイル
スクリプトが複雑なタスクを実行している場合、コードの重要な部分をプロファイルして、時間がかかりすぎていないことを確認できます。debug.profilebegin()とdebug.profileend()でコードをラップして、これらの関数呼び出しの間に行われたすべての処理を計測し、マイクロプロファイラーのタイムラインにラベルを作成します。
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- 例:2つの変数を200,000回入れ替える
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)
タイムライン上のその期間から、他のタスクと比較してその関数が多くの処理時間を使用していることがわかります。
アシスタントでキャプチャを分析
スタジオでは、アシスタントに一時停止したマイクロプロファイラーキャプチャを自動的に分析させ、パフォーマンスのボトルネックを特定し、修正を提案させることができます。
- スタジオで、CtrlF6(⌘F6)を押してマイクロプロファイラーを開きます。
- フレームタイムのスパイクを見つけたら、上部メニューの一時停止を押すか、CtrlP(⌘P)を使用してキャプチャを一時停止します。
- アシスタントを開き、キャプチャを分析するように依頼します。例のプロンプトには以下が含まれます:
- "マイクロプロファイラーでフレームタイムのスパイクをキャプチャしました—分析してください。"
- "スパイクの原因は何ですか?"
- "物理に依存していますか、それともスクリプトに依存していますか?"
- "どのカテゴリが最も排他的な時間を持っていますか?"
- "ハンガーにいるとき、FPSが低下します。問題を再現し、マイクロプロファイラーを使用して原因を見つけ、修正して再テストしてください。"
アシスタントは、マイクロプロファイラーAPIを通じて一時停止したキャプチャを読み取り、考えられるボトルネックに関するレポートを返し、適用できるスクリプトやシーンの変更を提案します。
この機能は、スタジオMCPサーバーを介しても機能するため、マイクロプロファイラーの分析を独自のAIエージェントやエージェントループに統合して、新しい変更がゲームのパフォーマンスに与える影響について自動的なフィードバックを得ることができます。
フレームデータを保存
後でレビューするためにフレームデータのセットを保存したい場合(または他の誰かと共有するために)、ファイルに保存ボタンを使用します。マイクロプロファイラーは、microprofile-<date>-<time>.htmlという名前のスタンドアロンHTMLファイルにフレームデータを保存します。

デスクトップクライアントまたはスタジオでは、ダンプメニューを使用します。いずれの場合も、マイクロプロファイラーは自動的にファイルをRobloxログディレクトリに保存します:
Windowsでは、%LOCALAPPDATA%\Roblox\logsを確認します。
Universal Windows Platform (UWP)アプリを使用している場合は、\Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\を確認します。
macOSでは、~/Library/Logs/Robloxを確認します。
サーバーをプロファイル
クライアントをプロファイルするだけでなく、サーバーアクティビティの短いダンプをキャプチャすることもできます:
デスクトップクライアントで、編集権限のあるゲームに参加します。
CtrlF9(⌘F9)を押して開発者コンソールを開きます。
ドロップダウンメニューからマイクロプロファイラーを選択します。
サーバータブで、キャプチャするフレーム数(最大60)とキャプチャを開始する前の遅延時間(最大4秒)を指定します。
ウェブ専用機能
マイクロプロファイラーには、ウェブUI(モバイルおよびダンプ)とデスクトップUI(クライアントおよびスタジオ)の2つのユーザーインターフェースがあります。可能な限りウェブUIを使用することをお勧めします。一般的に、2つは似たように機能しますが、ウェブUIにはいくつかの追加機能があります:
X-Rayメニューを使用して、メモリアロケーションの色分けを有効または無効にします。

- メインバーグラフ内の明るいフレームは、より高いメモリアロケーションを示します。
- プレビューバーの明るい部分とタイムラインの明るいラベルは、メモリアロケーションが高いフレームの部分を示します。
- X-rayモードでは、Cを押すと、アロケーションの数ではなく、メモリアロケーションの合計サイズが表示されます。
エクスポートメニューを使用して、CPUまたはメモリフレームグラフをエクスポートします。これは、ダンプに含まれるすべてのコールスタックを集約し、親子の階層を維持し、期間に基づいてサイズを調整する専門的な視覚化です。フレームグラフは、フレームタイムの目標を逃さないタスク(したがって気づきにくい)を特定するのに特に役立ちますが、非常に頻繁に実行されるため、その処理時間が重要になります。

スタジオでもフレームグラフを作成できますが、スクリプト(実行時間とメモリアロケーション)のみです。ウェブベースのフレームグラフと比較して、スタジオのものは上から下へのものであり、はるかに長いキャプチャ時間をサポートします。

2つ目のダンプファイルをウェブUIにドラッグアンドドロップして、差分フレームグラフを生成します。これにより、時間の経過とともにゲームのパフォーマンスの改善や後退を特定できます。結合して比較をクリックして、新しいHTMLファイルをエクスポートします。

差分フレームグラフは、CPUまたはメモリをより多く消費するダンプ(左または右)を強調表示し、明るい色はより大きな違いを示します。

デスクトップ専用機能
デスクトップタイムラインでは、ラベルを左クリックすると、右下の折れ線グラフに追加されます。このグラフは、タスクが各フレームでかかる時間を示します。このグラフを使用して、ゲーム内の特定のタスクのパフォーマンスをテストできます。終了したら、グラフを右クリックして非表示にします。

このグラフは、メインプロファイラーバーと同期しています。現在選択されているフレーム範囲は、グラフ上で緑色でハイライトされます。このグラフの任意の場所をクリックすると、メインプロファイラービューがその特定のフレームに再センターされ、詳細ビューでスパイクを見つけるのに役立ちます。
詳細ビューを検索
デスクトップクライアントでは、詳細ビューでタスク名で検索できます:
CtrlF6(⌘F6)を押してマイクロプロファイラーを開き、詳細モードに切り替えます。
CtrlF(⌘F)を押して検索ボックスを開きます。
タスクまたはラベル名の一部を入力します。マッチングは大文字と小文字を区別せず、名前のどこにでもテキストを見つけます。マッチングラベルは色を保持し、他のすべてのラベルは薄く表示されます。マッチを含むフレームは、フレームタイムグラフでハイライトされます。
マッチ間を移動します:
アクション ショートカット 次のマッチ F3またはEnter 前のマッチ ShiftF3またはShiftEnter 検索ボックスの隣にある**<および>**ボタンをクリックすることもできます。現在のマッチはアウトラインで囲まれ、上に三角形が表示され、12 / 340のようなカウンターがすべてのマッチの中での位置を示します。マッチが画面外にある場合、タイムラインはそれにスクロールします。タイムラインをパンしている場合、ナビゲーションは現在表示されているマッチから続行されます。
Escを押すか、再度CtrlF(⌘F)を押して検索を閉じます。検索を閉じてもマイクロプロファイラーは閉じません。
