デバッグ

Roblox Studio は、統合開発環境(IDE)で一般的に見られる多くのデバッグツールを提供します。 デバッガーは、スクリプトの実行時に一行ずつ検証できるようにするツールです。 これは、観察コールスタックブレークポイント出力ウィンドウにデータを表示し、検査できるようにします。

Studioのデバッガー

デバッガーを無効にして再有効化するには、Studio 設定メニューを開き、デバッガー有効化設定を切り替えてから、Studio を再起動します。

Studio設定でデバッガーを有効化

一般的なワークフロー

バーチャル空間に問題が発生した場合、または意図する通りに動作するかを検証したい場合は、関連するコードを次のようにデバッグできます。

  1. 調べたいコードの行にブレークポイントを挿入します。

  2. スクリプトタブで、テストタブでのプレイまたは実行をクリックして、デバッグセッションとも呼ばれるプレイテストセッションを開始します。

    スクリプトタブのプレイテストオプション
  3. スクリプトがブレークポイントに達すると、プレイテストセッションは一時停止します。 コードを 1 ステップずつ実行します。 観察コールスタック出力ウィンドウを検査し、問題の診断と理解を行います。

  4. まだ実行していないコードの行に追加のブレークポイントを挿入して、追加のデータを検査します。 不要なブレークポイントを無効化または削除します。

  5. スクリプトタブで、停止をクリックして、デバッグセッションを終了します。

    スクリプトタブに、テストと停止ボタンが表示

問題を解決するか、その根本原因を見つけるまで、前の手順を繰り返します。 一般的なワークフローを学ぶと、特定の条件が満たされた場合にのみ中断し、出力ウィンドウにメッセージを印刷し、クライアントまたはサーバーでのみ実行するよう、ブレークポイントを設定できるようになります。 詳細については、ブレークポイントの設定をご覧ください。

ブレークポイントの挿入

ブレークポイントは、特定の行でスクリプトの実行を一時停止または「中断」するチェックポイントです。 一時停止を使用して、体験の検査とデバッグ、変数の観察、およびコールスタックの検査を行うことができます。 ブレークポイントは、機能をデバッグするための最も効果的な方法の 1 つであるため、最も重要なデバッグツールの 1 つです。 実行可能なコードの任意の行にブレークポイントを挿入できます。

コードの行に標準のブレークポイントを挿入するには、行番号の右側にあるマージンを左クリックします。 また、マージンを右クリックし、ブレークポイントを挿入をクリックすることもできます。 ブレークポイントは、赤い点として表示されます。 無効化するには、その点をクリックします。

ガターのブレークポイントは、赤い点

コードを 1 ステップずつ実行

スクリプトの行にブレークポイントを挿入すると、その行を実行する前にスクリプトが一時停止します。 「デバッガー」と呼ばれる黄色の矢印は、コードのどの行が次に実行されるかを示します。

デバッガーのアクティブなブレークポイントには、黄色の矢印が表示

スクリプトが一時停止した際、スクリプトタブのボタンで 1 ステップずつ実行することで、以下のコードを一度に 1 行ずつ実行します。 ボタンは、コールスタックウィンドウの左上にも表示されます。 コードを 1 ステップずつ実行する際、現在の行が実行されるにつれ、体験がどのように変化するかを監視します。

デバッガーセクションに焦点を当てたスクリプトタブ

以下の表は、コードを 1 ステップずつ実行するための 3 つの方法を要約しています。 ブレークポイントに達した後で、コードの実行を継続するには、スクリプトタブで再開をクリックします。

ボタン操作ショートカット概要
コードの行にステップインするためのボタンステップインF11ステップインボタンは、デバッガーを現在の行にある関数のコードに移動します。 現在の行に関数がない場合、デバッガーは次の行に移ります。
コードの行をステップオーバーするためのボタンステップオーバーF10ステップオーバーボタンは、デバッガーを関数ではなく、コードの次の行に移動します。
コードの行からステップアウトするためのボタンステップアウトShift + F11ステップアウトボタンは、デバッガーを現在の関数から、関数の呼び出し後のコードの次の行に移動します。 現在の行が関数の中ではない場合、デバッガーは次の行に移動します。

コードの検査

プレイテスト中にブレークポイントが体験を一時停止すると、観察ウィンドウ、コールスタックウィンドウ、出力ウィンドウ、およびスクリプトエディタを検査して、変数の値と関数の実行に関する情報を検索できます。 この情報により、バーチャル空間内での問題の根本原因を見つけることができます。

観察ウィンドウで

観察ウィンドウには、変数マイ観察の 2 つのタブがあります。 変数タブでは、スコープ内の現在の変数に関する情報が表示され、マイ観察タブでは、定義する変数または式の値が表示されます。 両方のタブが、行が実行される前に情報を表示します。

変数タブには、以下の列があります。

  • 名前 – 変数の宣言された名前。
  • スコープ – 変数のスコープ:Local、Global、Upvalue など、「見る」ことができ、アクセスできる場所。
  • 値 – 変数の現在の値。
  • データタイプ – 変数のデータタイプ。

マイ観察タブには、以下の列があります。

  • 式 – 観察したい式。
  • 値 – 式の現在の値。
  • データタイプ – 式のデータタイプ。

変数タブでは、フィルタアイコンをクリックすることで、変数のスコープをフィルタリングできます。 また、列の名前をクリックして、列を並び替えることもできます。 観察ウィンドウは、展開された表と折り畳まれた表の両方を表示します。

変数の値付きの観察ウィンドウ

観察ウィンドウでコードを検査するには、次の手順に従います。

  1. コールスタックウィンドウが開かない場合、表示タブでコールスタックをクリックします。

  2. プレイテストセッションがブレークポイントで一時停止した場合、現在の行がそのスクリプトの変数の値をどのように変更するかを考えてください。

  3. コードを 1 ステップずつ実行しながら、変数タブで変数の値がどのように変化するかを観察します。 変数タブではなく式を観察したい場合は、マイ観察タブを開きます。 式の列で空の行をクリックし、式を入力します。 スクリプトエディタで変数を観察したい場合は、変数の名前をダブルクリックして、右クリック、そして観察を追加をクリックします。

  4. 変数と式の値を、予測するものと観察ウィンドウで表示されるものとで比較します。 予測する変数の変更方法と実際の変更方法に差異がある場合、変数またはそれらと関係する関数が問題またはバグの原因となっている可能性があります。

コールスタックウィンドウで

コールスタックウィンドウは、デバッガーがブレークポイントに達したときに、コードのどの行が次に実行されるかを示します。 コールスタックは、関数をどの行から呼び出すか、また、他の関数で関数を呼び出す場合、関数の呼び出し順と、他の関数を呼び出す行がどれかを表示します。 コールスタックの最上位関数は、最後に呼び出され、最初に実行されます。 コールスタックを使用して、スクリプト内の関数呼び出しの順序が関数呼び出しのメンタルモデルと一致するかどうかを確認できます。

Studioのコールスタック

異なるスクリプトに複数のブレークポイントがある場合、プレイテストセッションが同時に一時停止する可能性があります。 コールスタックウィンドウのスクリプト名の横にある矢印をクリックすることで、ブレークポイントに移動することができます。 再開をクリックした場合、同時に一時停止したすべてのブレークポイントをステップオーバーします。

複数のブレークポイントを持つコールスタック

デバッグセッション中にコールスタックウィンドウでコードを検査するには、次の手順に従います。

  1. コールスタックウィンドウが開かない場合、表示タブのコールスタックをクリックします。

  2. バーチャル空間がブレークポイントで一時停止した場合、関数呼び出しの順番がそのスクリプトにどのように予測されるかを考えてください。

    2つの関数と1つのブレークポイントを持つスクリプトエディタ
  3. コールスタックは、関数呼び出しの順序を表示します。 ブレークポイントが関数内である場合、コールスタックは、該当する場合、どの関数がその関数を呼び出すかを示します。 コールスタックは、各関数の名前と行番号も表示します。 行をクリックして、そこに関数を移動します。

    コールスタックをクリックして、行に移動
  4. ステップ 2 で考えた関数呼び出しの順序と、ステップ 3 からの実際の順序を比較します。 差異がある場合、予測したコードの動作と実際の動作との間に違いがあるため、潜在的な問題やバグが発生します。

出力ウィンドウで

出力ウィンドウは表示タブからアクセスでき、スクリプトの実行でキャプチャされたエラー、Roblox エンジンからのメッセージ、Logpoints からのログメッセージ、呼び出しからのprint()へのメッセージ、呼び出しからのwarn()へのエラーが表示されます。 出力ウィンドウの詳細とカスタマイズ方法については、出力をご覧ください。

スクリプトエディタで

デバッガーは、スクリプト編集と統合されています。 スクリプトのブレークポイントでバーチャル空間が一時停止した場合、変数の名前の上にマウスを合わせることで、その値を表示できます。 例えば、関数呼び出しで引数としてパスする表の値を表示できます。

スクリプトエディタの変数にマウスオーバーして、値を表示

ブレークポイントの設定

特定の条件が満たされた場合にのみ中断するブレークポイントを設定し、出力ウィンドウにメッセージを印刷し、クライアントまたはサーバーでのみ実行するようにできます。 また、これらの設定を、デバッグのニーズに最適化するよう組み合わせることもできます。

ブレークポイントの編集

ブレークポイントの設定は、プレイテストセッション中を含め、いつでも編集できます。 プレイテストセッション中にブレークポイントを編集する場合、編集は終了後にも持続します。 また、プレイテストセッションをアクティブに一時停止しているブレークポイントを編集することもできますが、次のプレイテストセッションまで変更は適用されません。

ブレークポイントの設定を編集するには、次の手順に従います。

  1. ブレークポイントを右クリックし、ブレークポイントの編集をクリックします。

    Studioでのブレークポイントの編集には右クリック
  2. ブレークポイントの編集ウィンドウで、ブレークポイントをお好みに設定します。

    Studioでのブレークポイントの編集ウィンドウ

条件、ログメッセージ、およびオプション

各ブレークポイントでは、条件ログメッセージ実行の継続、およびコンテキストを設定できます。

条件は、ブレークポイントがアクティブ化するかどうかを決定する式です。 条件はオプションです。 条件が空の場合、ブレークポイントは常にアクティブになります。 条件がある場合、ブレークポイントは、条件が true の場合にのみアクティブ化されます。 例えば、変数のn42に等しい場合にのみブレークポイントをアクティブ化したい場合は、条件をn == 42と設定します。 条件は、特定の変数に特定の値がある際、またはループ内の特定の実行でのみ中断したい場合の、関数の実行のデバッグに便利です。

ログメッセージは、条件が true の場合に出力ウィンドウに印刷される式です。 ログメッセージのフォーマットは、print()ステートメントの引数と同じです。 例えば、ログメッセージを"The value of n:", nと設定して、同様のメッセージをprint("The value of n:", n)として印刷します。 ログメッセージは、印刷ステートメントとは異なり、実行を停止することなく追加および削除することができます。

実行の継続オプションは、アクティブ化した場合にブレークポイントがスクリプトを一時停止するかどうかを決定します。 実行を停止せずに変数または式の値をログ化したい場合に便利です。 このオプションは、デフォルトで無効になっています。

ブレークポイントのコンテキストは、ブレークポイントがクライアント、サーバー、または編集でアクティブ化するかどうかを決定します。 コンテキストがクライアントの場合、ブレークポイントは、クライアント側のスクリプトでトリガーされます。 コンテキストがサーバーの場合、ブレークポイントはサーバー側のスクリプトでトリガーされます。 コンテキストが編集の場合、ブレークポイントはプラグインのデバッグ時にトリガーされます。 カスタムコンテキストをクリックした場合、ウィンドウは現在のコンテキストを表示します。

ブレークポイントの編集ウィンドウは、カスタムコンテキストを表示

条件付きブレークポイントとログポイント

Studio は、ブレークポイントの挿入を高速化するために、名前のついたブレークポイントのバリエーションを提供します。 名前のついたバリエーションを挿入するには、行番号の右側にあるマージンを右クリックし、挿入したいバリアントをクリックします。

右クリックしてブレークポイントを挿入

条件付きブレークポイントは、条件継続実行が無効になっているブレークポイントです。 条件付きブレークポイントは、条件が true の場合にのみスクリプトを一時停止するため、特定の変数に特定の値がある際に関数がどのように実行されるかをデバッグするのに便利です。 条件付きブレークポイントは、行が実行される前に変数の値を使用します。 条件付きブレークポイントを挿入すると、カーソルは条件オプションにフォーカスを合わせるため、素早く設定できるようになります。

ログポイントは、ログメッセージ継続実行が有効になっているブレークポイントです。 ログポイントは、スクリプトを一時停止することなく出力ウィンドウにメッセージをログするため、変数の値のデバッグに便利です。 ログポイントは、行が実行される前に変数の値を使用します。 ログポイントを挿入すると、カーソルはログメッセージにフォーカスを合わせるため、素早く設定できるようになります。

ログポイントは、アクティブなプレイテストセッションを停止または再起動する必要なく出力ウィンドウにメッセージをログできるようにするため、多くの場合、print()ステートメントよりも変数のデバッグ向けに効率的です。 print()ステートメントと比較して、デバッグ中はコードをクリーンに保ち、デバッグ終了後は簡単に削除できます。

ブレークポイントの無効化

ブレークポイントを無効にして再有効化するには、多くの方法があります。

  • ブレークポイントのアイコンをクリックします。
  • ブレークポイントを編集し、有効化チェックボックスを切り替えます。
  • ブレークポイントのアイコンを右クリックし、ブレークポイントを無効化またはブレークポイントを有効化をクリックします。

ブレークポイントの削除

また、アイコンを右クリックし、ブレークポイントの削除をクリックすることもできます。 ブレークポイントを削除するには、アイコンをミドルクリックします。

ブレークポイントウィンドウ

ブレークポイントウィンドウでは、バーチャル空間のすべてのブレークポイントを表示します。 ブレークポイントウィンドウを開くには、Studio の上部にある表示タブをクリックしてから、ブレークポイントをクリックします。

Studioのブレークポイントウィンドウ

ブレークポイントウィンドウには、ラベル付けなし、スクリプト、行、ソース行、条件、ログメッセージ、および実行の継続の列があります。 ラベル付けなし、スクリプト、行の列は常に表示されますが、ウィンドウの右上隅のある 3 つの点をクリックすることで、ほかの列を切り替えることができます。

ラベル付けなしの列では、(x3)ラベルは、コードの同じ行にあるブレークポイントの数を示し、アイコンはブレークポイントの設定を示します。 同じ行の上のブレークポイントは、同じ条件、ログメッセージ、および実行の継続を共有しますが、コンテキストで異なります。 ブレークポイントウィンドウでブレークポイントの設定を編集できます。 例えば、ブレークポイントの条件は、その条件列のテキストエリアを編集することで編集できます。

ブレークポイントウィンドウでブレークポイントの条件を編集

有効化列のブレークポイントアイコンをクリックすることで、ブレークポイントを有効化および無効化できます。 また、以下のボタンをクリックして、一部またはすべてのブレークポイントを有効化、無効化、削除することもできます。

ボタン操作
すべてのブレークポイントを無効にするボタンすべてのブレークポイントを無効化します。 ブレークポイントが無効化されている場合は、すべて有効化します。
すべてのブレークポイントを削除するボタンすべてのブレークポイントを削除します。

ブレークポイントアイコン

ブレークポイントのアイコンは、それが有効化されているか、条件があるか、またログメッセージがあるかによって異なります。 ブレークポイントにログメッセージがある場合、条件の有無にかかわらずログポイントとして表示されます。

名前アイコン有効化条件ログメッセージ
ブレークポイントはいいいえいいえ
いいえいいえいいえ
条件付きブレークポイントはいはいいいえ
いいえはいいいえ
ログポイントはいたぶんはい
いいえたぶんはい

追加のデバッグツール

デバッガーに加えて、Studio はバーチャル空間内の問題やバグを修正するための追加のデバッグツールを提供しています。

コマンドバー

コマンドバーにより、バーチャル空間の実行中に Luau コマンドを実行できます。 Studio では、表示タブと開発者コンソールから利用できます。

デベロッパーコンソール

開発者コンソールは、クライアントとサーバーの出力、メモリ使用量、ネットワークパフォーマンスなど、幅広い詳細を提供します。 バーチャル空間のテストまたはプレイ中に開発者コンソールを開くには、チャットに/consoleを入力するか、F9を押します。 詳しくは、開発者コンソールをごらんください。

ログファイル

スクリプトが、Studio または Player アプリで印刷またはエラーを発生させた際、アプリはローカルファイルシステム内のログファイルにメッセージを記録します。 これらのファイルは、オペレーティングシステムに応じて異なる場所に位置します。

  • Windows では、ログはディレクトリ%LOCALAPPDATA%\Roblox\logsにあります。 変更された日付でフォルダを並び替えます。 ログファイル名は、フォーマットlog_XXXXXで始まります。 同じXXXXX値を持つログは、同じ Studio セッションからのものです
  • macOS では、ログはディレクトリ~/Library/Logs/Robloxにあります。 Finder で、移動メニューをクリックし、フォルダへ移動を選択して、そのディレクトリを入力し、確認します。