スクリプトプロファイラーは、開発者コンソール内のツールで、すべての実行中のスクリプトのプロファイリングセッションを記録し、カスタム記録および表示設定でCPU時間コストを表示することができます。Luau関数、メソッド呼び出し、プロパティアクセスなど、すべてのタイプの関数呼び出しを記録できます。このツールは、最もCPUリソースを消費し、パフォーマンスを低下させるスクリプトを特定するのに役立ちます。
プロファイリングセッションの記録
記録を開始する前に、次のいずれかの記録環境を選択する必要があります。
- サーバー — Scriptsで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ファイルには、次のフィールドが含まれます。
- バージョン: バージョン番号。
- セッション開始時間: セッション開始時間を記録するミリ秒単位のタイムスタンプ。
- セッション終了時間: セッション終了時間を記録するミリ秒単位のタイムスタンプ。
- カテゴリ: プロファイリングセッションで記録されたフレームタスクカテゴリの配列。各エントリには次の情報が含まれます:
- 名前: 各フレームタスクカテゴリの名前。
- NodeId: タスクカテゴリ(ノード)の一意の識別子。Nodes配列への1ベースのインデックスです。たとえば、NodeIdが123のノードを取得するには、Nodesの123番目の要素を取得します。
- ノード: プロファイリングセッションで記録されたノードの配列。各エントリには次の情報が含まれます:
- TotalDuration: ノードがCPU時間でコストをかけた時間(マイクロ秒単位)。
- FunctionIds: 関数の一意の識別子の配列。
- NodeIds: ノードIDの配列。
- 関数: プロファイリングセッションで記録された関数の配列。
- TotalDuration: 関数が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":"Script","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}
]
}