スクリプトプロファイラは、開発者コンソール内のツールで、すべての実行中のスクリプトのプロファイリングセッションを記録し、カスタム録画および表示設定を利用してCPU時間コストを表示します。このツールは、Luau関数、メソッド呼び出し、およびプロパティアクセスを含むすべてのタイプの関数呼び出しを記録できます。このツールは、最もCPUリソースを消費し、パフォーマンスを低下させるスクリプトを特定するのに役立ちます。
プロファイリングセッションの記録
録画を開始する前に、次のいずれかの録画環境を選択する必要があります。
- サーバー — RunContextがServerまたはLegacyに設定されているサーバー側のスクリプトを記録します。スクリプトプロファイラは、各セッションの終了時にすべての収集されたサーバー側データをクリアします。
以下の録画オプションも設定できます:
| 動作 | オプション | デフォルト | 説明 |
|---|---|---|---|
| 頻度 | 1秒あたり1000回(1 KHz) 1秒あたり10,000回(10 KHz) | 1 KHz | 10 KHzの頻度は精度が高く、スクリプトプロファイラは選択した頻度よりも頻繁に実行されるAPI呼び出しをキャッチできない場合がありますが、パフォーマンスコストも高くなります。 |
| セッションの長さ | 1分 5分 10分 手動 | 手動 | 手動オプションでは、手動で録画を停止する必要があります。 |
| ライブポーリング動作 | オン オフ | オフ | この動作は、プロファイリングセッション中に毎秒プロファイリングデータをポーリングして更新します。 |
新しいプロファイリングセッションを記録するには:
開発者コンソールを開きます。
ツールのドロップダウンを展開してスクリプトプロファイラを選択します。

クライアント-サーバードロップダウンを展開してクライアントまたはサーバーを選択します。

(オプション)ライブチェックボックスをオンにしてライブポーリング動作を有効にします。
(オプション)頻度と時間を選択して、デフォルト値を使用したくない場合は録画頻度とセッションの長さを選択します。
開始をクリックしてプロファイリングセッションを開始します。期間を設定した場合、スクリプトプロファイラはセッションの残り時間を示すカウントダウンタイマーを表示します。
停止をクリックするか、録画が終了するまで待ってプロファイリングデータを表示します。
プロファイリングデータの読み取り
セッションが停止すると、スクリプトプロファイラは各関数呼び出しが消費したCPU時間を示すテーブルを生成します。このテーブルは、最も多くの時間を費やした関数呼び出しから最も少ない時間を費やした関数呼び出しまでソートし、特定の関数名で検索することを可能にします。以下の2つのビューが提供されます。
- コールグラフ(デフォルト):フレームタスクに基づいて関数呼び出しをツリー構造に分類し表示します。このビューは、同じルートの下にノードとして各タスクカテゴリを表示し、それらを展開して関数を表示できます。また、ツリー内の任意のノードにカーソルを合わせると、ファイルおよび行情報を表示できます。たとえば、**Stepped/CameraInput/<anonymous>**はPlayers.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125を明らかにするかもしれません。

- 関数:タスクによって分類せずにすべての関数を一覧表示します。

デバッグニーズに合わせて、以下の表示オプションを選択することもできます:
| 名前 | オプション | デフォルト | 説明 |
|---|---|---|---|
| 単位 | ミリ秒(ms) パーセンテージ(%) | ms | 各API呼び出しに費やした時間をミリ秒または総録画セッションのパーセンテージで表示します。 |
| 平均 | オフ 1秒 1分 5分 10分 | オフ | 選択した値によって、各API呼び出しに費やした平均時間を計算します。セッションの長さよりも長いオプションを選択すると、スクリプトプロファイラはセッションの長さを外挿して平均を計算します。たとえば、1分間のセッションに対して5分のオプションを選択すると、5分間コードを実行した場合の予想平均値を確認できます。 |
プロファイリングデータのエクスポート
スクリプトプロファイラは、記録されたプロファイリングデータをJSONファイルとしてエクスポートすることを可能にします。プロファイリングセッション後に記録データをエクスポートするには:
スクリプトプロファイラウィンドウで、エクスポートをクリックします。
エクスポートウィンドウで、エクスポートしたいプロファイリングセッションを選択します。デフォルトのファイル名を変更してカスタム名を設定します。
エクスポートをクリックしてJSONファイルを保存します。

エクスポートされたJSONファイルには、以下のフィールドが含まれます:
- バージョン: バージョン番号。
- セッション開始時刻: セッション開始時間を記録するミリ秒単位のタイムスタンプ。
- セッション終了時刻: セッション終了時間を記録するミリ秒単位のタイムスタンプ。
- カテゴリ: プロファイリングセッションで記録されたフレームタスクカテゴリの配列。各エントリには次の情報が含まれます:
- 名前: 各フレームタスクカテゴリの名前。
- ノードID: タスクカテゴリ(ノード)の一意の識別子。Nodes配列の1基準インデックスです。たとえば、NodeIdが123のノードをNodesの123番目の要素を取得することで確認できます。
- ノード: プロファイリングセッションで記録されたノードの配列。各エントリには次の情報が含まれます:
- 合計時間: ノードがCPU時間で費やす時間(マイクロ秒単位)。
- 関数ID: 関数の一意の識別子の配列。
- ノードID: ノードIDの配列。
- 関数: プロファイリングセッションで記録された関数の配列。
- 合計時間: 関数がCPU時間で費やす時間(マイクロ秒単位)。
- 名前: 関数の名前(利用可能な場合)。
- ソース: 関数のソース(利用可能な場合)。
- 行: 関数の行番号(利用可能な場合)。
- フラグ: 特定の関数実行環境を示すビットフィールド。現在、次の値を持つ可能性があります:
- 0: 0ビットはネイティブコードジェネレーション下でのIsNativeを表します。
- 1: 1ビットはプラグインの一部としてのIsPluginを表します。
エクスポートされたプロファイリングデータの例
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"スクリプト","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}