roblox-dev-skill について
Roblox のドキュメント、Luau 仕様、Roblox Lua Style Guide に基づき、Luau で Roblox 体験を開発するためのスキルです。分野別のリファレンスを備え、利用可能な場合は Roblox Studio 内蔵の MCP ツールを使い、使えない場合は配置可能なスクリプトを提示します。
主な機能
- 01Luau の構文とスタイルのガイド
- 02アーキテクチャとゲームシステムのリファレンス
- 03Roblox API とドキュメントの検索手順
- 04Roblox Studio MCP ツールの利用方法
- 05MCP ツールがない場合のコピー可能な Luau スクリプト
活用シーン
- 01Roblox 体験の開発やデバッグ
- 02クライアント・サーバー通信とセキュリティの確認
- 03コード変更前の Roblox API の調査
- 04Studio ツールを使ったゲーム環境の調査とテスト
MCP 対応
このスキルは MCP サーバーではなく、ツールも提供しません。利用可能な場合に Roblox Studio 内蔵の MCP ツールを検出して使う方法を案内します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ msayib/ roblox-dev-skill --skill roblox-dev-skillインストール後、Claude Code で/roblox-dev-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitattributes.gitignoreLICENSEREADME.mdCHANGELOG.mdinstall.shinstall.cmdinstall.ps1metadata.json.github/workflows/ci.ymldocs/installation.mdhow-it-works.mdrobloxdocs.mdclaims.mdtesting.mdevals/evals.jsonreferences/agent-safety.mdfile-formats-and-assets.mdmonetization.mdlegacy-migration.mddatastore-persistence.mdmcp-integration.mdluau-fundamentals.mdnetworking.mdperformance-optimization.mdstudio-plugins-and-limits.mdproject-structure.mdworked-examples.mdsecurity-hardening.mdui-systems.md詳細
Roblox ゲーム開発スキル
Luau を使用した Roblox エクスペリエンスの構築を支援する、専門的な開発コンパニオンです。公式 Roblox ドキュメント(https://create.roblox.com/docs)、Luau 言語仕様(https://luau.org)、Roblox Lua スタイルガイド(https://roblox.github.io/lua-style-guide/)に基づいています。
エンジン:Roblox Studio 0.744.0.7441077 と Luau 0.743(2026-10-16 リリース。0.744 はまだリリースされていません) — ダンプをダウンロードして再分割し、2026-10-22 に 0.743 と比較しました。開発者に見える変更はすべて Studio 0.744 で実行済みです。クラスは 947 個、列挙型は 652 個です。ローカルでは、
*Serviceという名前のクラスファイルが 266 個(346 個のクラスにServiceタグが付いています)、非推奨クラスが 48 個(メンバーは 574 個)あります。公式ドキュメントは 2026-10-22 まで確認済みです。Roblox はおよそ毎週リリースされるため、この記載は意図的に古くなります。今日のバージョンとして引用しないでください。代わりに、以下の方法で再確認してください。
curl -s "https://clientsettings.roblox.com/v2/client-version/MacStudio" # または WindowsStudio64 curl -s "https://api.github.com/repos/luau-lang/luau/releases?per_page=1" | grep tag_name
WindowsStudio(64なし)エンドポイントが返す値はかなり古く、2026-09-06 に確認した時点でも0.578.0.5780566を返していました。WindowsStudio64またはMacStudioを使用してください。API に確信が持てない場合は、記憶に頼らず調べてください(下記の API とドキュメントの検索 を参照)。それでも不明な場合は、先にユーザーに確認してください。
MCP の検出
呼び出しのたびに、処理を進める前に利用可能な Roblox Studio MCP ツールを検出してください。
公式 Roblox MCP(Roblox_Studio サーバー)
このスキルはナレッジベースであり、MCP サーバーではありません。 ツールも実行機能も提供しません。以下のツールは Studio に組み込まれた Roblox 独自の MCP サーバーに属するもので、このスキルはそれらの適切な使用方法を説明するだけです。公式リファレンス: https://create.roblox.com/docs/studio/mcp
ドキュメントのページには 26 個のツールが記載されています。2026-10-17、2026-10-21(Studio 0.743)、2026-10-22(Studio 0.744)に確認したビルドでは、28 個が公開されていました。これらに、ドキュメントに記載されていない generate_texture と segment_mesh が加わっています。2026-10-11(Studio 0.742)に確認された list_plugin_guis と capture_plugin_gui はなくなっていました。この表を鵜呑みにせず、ホストで実際に公開されているツールを検出してください。
| ツール | 目的 |
|---|---|
execute_luau | プラグイン権限で Studio 内の Luau を実行します — 結果またはエラーを返します |
multi_edit | 1 つのスクリプトに複数の完全一致編集を適用します(存在しない場合は作成します)。対象は Edit データモデルのみです |
script_read | スクリプトのソース全体、または指定した行範囲を読み取ります。出力形式は LINE→CONTENT です |
script_search / script_grep | 名前(あいまい検索、最大10件)または内容(最大50件)でスクリプトを検索します |
search_game_tree | DataModel をフラットな JSON として探索します。パス、タイプ、キーワードで絞り込めます |
inspect_instance | 1 つのインスタンスのプロパティ、属性、子の概要を表示します |
subagent | 自律的な複数ステップの作業を行う Roblox 側のサブエージェントを起動します(タイプはビルドによって異なります) |
get_studio_state | プレイ状態と、利用可能なデータモデルのタイプを表示します |
start_stop_play | プレイテストを開始/停止します |
get_console_output | Output/コンソールログを読み取ります |
screen_capture | 必要に応じてカスタムカメラを使用し、ビューポートをキャプチャします |
character_navigation | キャラクターを位置またはインスタンスのパスまで移動します |
user_mouse_input / user_keyboard_input | マウス/キーボード操作を順番にシミュレートします |
search_asset / insert_asset | Creator Store と Inventory を検索し、アセット ID で挿入します |
store_image | ローカルの png/jpg(最大5 MB)を、他のツールで使う IMAGEID_ URI に変換します |
upload_image | HTTP(S) URL から一括アップロードし、imagePath→assetId のマップを返します |
generate_mesh / generate_procedural_model | 3D コンテンツを生成します |
generate_material | MaterialVariant を生成します。ベースマテリアルとバリアント名を返します |
generate_texture | 既存の MeshPart/Model にテクスチャを適用し直します — 元の内容をその場で置き換えます(先に複製してください) |
segment_mesh | 既存のメッシュを最大5つの名前付きパーツに分割し、元のメッシュの隣に新しい Model を挿入します |
wait_job_finished | バックグラウンドの jobId(ツール自体の async: true から取得)を待ちます |
http_get | 許可リストにある Roblox ドキュメントを取得します。URL は .md で終わるか、llms.txt である必要があります |
skill | Roblox 公式の rbx-* リファレンス(デバッグ、パフォーマンス、シーン分析など) |
list_roblox_studios | 接続されている Studio インスタンスを列挙します(名前+プレース ID) |
すべての呼び出しに
studio_idが必要です。 「アクティブな Studio を設定」するツールはありません。まずlist_roblox_studiosを呼び出し、その後の各呼び出しで使用したい ID を渡してください。複数の Studio インスタンスが同時に開いていることが多いため、誤った ID を選ぶと、気付かないまま別のプレースが対象になります。
datamodel_typeの対応範囲は対称ではありません。execute_luauはEdit/Client/Serverを受け付けますが、multi_editが受け付けるのはEditのみです。そのため、プレイテスト中にスクリプトを編集することはできません。先に プレイテストを停止してください。ClientとServerはプレイテスト中のみ存在します。get_studio_stateで確認してください。
multi_editの呼び出し1回につき、編集できるスクリプトは1つです。file_pathとedits[{old_string, new_string, replace_all}]を渡します。置換は順番に実行され、完全一致で適用されます。また、1回の呼び出し内では アトミックです。一致しないold_stringが1つでもあると呼び出しは失敗し、スクリプトは変更されません(2026-10-11にテスト済み)。事前のscript_readは必須ではありませんが、old_stringは空白も含めてソースと完全に一致する必要があるため、先に読み取ってください。
script_grepの行番号はscript_readで確認してください。 2026-09-06、171行目にあると報告された一致箇所は、script_readではさらに15行下にありました。2026-10-11(Studio 0.742)には、2回のテストで正確な行が返されましたが、原因は不明です。 文字列を含むスクリプトの特定には使い、実際の位置はscript_readで確認してください。
run_as_jobツールはありません。 このファイルの以前のバージョンには記載されていましたが、ドキュメントにも確認済みのビルドにも存在しません。 非同期実行はツールごとの引数で指定し、jobIdを返します。 MCP ツールを利用できる場合は、次の用途での利用を優先してください。
- 新しいスクリプトを書く前に既存のスクリプトを読む(
script_read、script_search) - コードを実行して変更を検証する(
execute_luau) - ゲームツリーを調べてプロジェクト構造を把握する(
search_game_tree) - プレイテストで変更をテストする(
start_stop_play、get_console_output) - デバッグ、MicroProfiler、シーン分析には、Roblox 独自のドメインスキル(
skill)を利用する — ファーストパーティ製で、Studio とともにバージョン管理されています
セッションで最初に変更を加える前に、references/agent-safety.md を読んでください。Roblox は次のように警告しています。"MCP クライアントは、開いている Roblox のプレース内のコンテンツを読み取り、変更できます。" ドライランはなく、確実な取り消し方法もありません。書き込みを行う前に、対象のプレースを確認してください。
MCP ツールを利用できない場合は、コピーしてすぐに使える Luau スクリプトと、配置場所の明確な指示(どのサービスコンテナーに配置するか)を提供してください。
ルーティング表
ユーザーの意図に合ったリファレンスファイルを選んでください。コードを生成する前に、ファイルを読んでください。
| ユーザーの意図 | リファレンスファイル |
|---|---|
| 実際にどういう順序で進めればよいですか? エンドツーエンドの実践パターン:サーバー権威型の機能を構築する、MCP を使ってデバッグする、非推奨機能を移行する、API を検証する、安全でないリクエストを拒否する、開発者製品を付与する、保存データを移行する、Input Action からメニューを開く | references/worked-examples.md |
| Luau の構文、型、命名規則、スタイル | references/luau-fundamentals.md |
| プロジェクトのレイアウト、アーキテクチャ、パターン | references/project-structure.md |
| プレイヤーデータの保存/読み込み、DataStore、ProfileStore | references/datastore-persistence.md |
クライアントとサーバー間の通信、RemoteEvents、入力、テキストチャット(TextChatService、チャットコマンド、プラットフォーム統合チャット) | references/networking.md |
| セキュリティ、エクスプロイト対策、サーバー権限、BAN | references/security-hardening.md |
| エージェントから Studio への安全性、破壊的な MCP 操作、プレースコンテンツによるプロンプトインジェクション | references/agent-safety.md |
| パフォーマンス、メモリ、最適化、Parallel Luau | references/performance-optimization.md |
| Roblox Studio MCP ツールの効果的な使い方 | references/mcp-integration.md |
| UI、GUI、ScreenGui、メニュー、HUD、StyleQuery | references/ui-systems.md |
| レガシーコード、非推奨 API の移行 | references/legacy-migration.md |
| マネタイズ、ゲームパス、寄付、譲渡 | references/monetization.md |
| ファイル形式、インポート/エクスポート、アセット管理 | references/file-formats-and-assets.md |
プラグイン、Script.Source の制限、HttpService/エンジンの制限 | references/studio-plugins-and-limits.md |
タスクが「知る」タスクではなく「実行する」タスク(構築、デバッグ、移行、調査、販売、入力の割り当て)の場合は、worked-examples.md から始めてください。呼び出しの順序と検証手順が示されており、各例には 「これはしない」 リストがあるため、よく似ているものの異なるリクエストを、最も馴染みのあるパターンではなく適切な場所に振り分けられます。例とリファレンスファイルの内容が異なる場合は、リファレンスファイルを優先してください。
意図が複数の領域にまたがる場合は、関連するファイルをすべて読んでください。 リファレンスファイルでトピックが十分に網羅されていない場合は、以下の公式ドキュメント参照ワークフローを利用してください。
API とドキュメントの参照
優先度 1:ローカル API リファレンス(~/RobloxDocs/)
必ず最初にローカルファイルを確認してください。あらかじめ分割されており、全データを読み込むよりはるかに低コストで、ネットワークも不要です。~/RobloxDocs/RobloxAPI/ が存在する場合は、これを使用してください。
どれほど低コストか、2026-10-22 に 0.744.0.7441077 で再測定(以前の「845 倍小さい」という数値は、どの測定からも再現できなかったため、実際の数値と測定に使用したコマンドを示します):全データは 8,637,337 bytes です。947 個の分割クラスファイルのサイズは、最小 101 B、中央値 2,059 B、平均 4,863 B、最大 105,173 B です。したがって、一般的なクラスを調べる場合に読み込むのは全データの約 0.02% で、最大のクラスでも 1.3% 未満です。次のコマンドで再測定できます。
# Portable (macOS, Linux, Windows). Do not use `stat -f %z`: on Linux `stat -f` reports the
# *filesystem*, not the file, and prints a wrong number without any error. It also reads the
# 75-byte latest.json symlink instead of the dump unless you remember -L.
python3 -c "import os,glob,statistics as s; d=os.path.expanduser('~/RobloxDocs/RobloxAPI'); \
z=sorted(os.path.getsize(f) for f in glob.glob(d+'/classes/*.json')); \
print('dump', os.path.getsize(os.path.realpath(d+'/dumps/latest.json')), 'B | n', len(z), \
'min', z[0], 'median', int(s.median(z)), 'mean', int(s.mean(z)), 'max', z[-1])"
# Look up a specific class (~2 KB median vs the 8.6 MB full dump — see measurement above)
cat ~/RobloxDocs/RobloxAPI/classes/<ClassName>.json
# Query a specific property/method (jq if installed; the python3 form works everywhere)
jq '.Members[] | select(.Name == "<MemberName>")' ~/RobloxDocs/RobloxAPI/classes/<ClassName>.json
python3 -c "import json,os; print([m for m in json.load(open(os.path.expanduser('~/RobloxDocs/RobloxAPI/classes/<ClassName>.json')))['Members'] if m['Name']=='<MemberName>'])"
# Find all services
cat ~/RobloxDocs/RobloxAPI/service-index.json
# Check what's deprecated
cat ~/RobloxDocs/RobloxAPI/deprecated-index.json
# Search across classes by filename
ls ~/RobloxDocs/RobloxAPI/classes/ | grep -i <keyword>
# Search for a property across all classes
grep -l '"<PropertyName>"' ~/RobloxDocs/RobloxAPI/classes/*.json
古さの確認: ローカルデータを使用する前に、最新かどうかを確認してください。
# Check when local data was last updated
cat ~/RobloxDocs/RobloxAPI/.current-version
# → {"version": "0.744.0.7441077", "platform": "MacStudio", "platformVersion": "0.744.0.7441077",
# "winHash": "version-7aaa6838d36c4448", "updatedAt": "2026-10-22T08:20:48Z", "checkedAt": "2026-10-22T08:20:48Z"}
存在する方のタイムスタンプを読み取ってください:
updatedAtまたはcheckedAt。updatedAtはデータを最後にダウンロードした日時、checkedAtはバージョンを最後に確認した日時です。現在のモニター(skill 2.12.0 以降)は常に両方を書き込みますが、以前の zsh スクリプトはダウンロード後にupdatedAtのみを書き込んでいました。そのため、ツールを更新していない環境では、checkedAt自体が存在しない場合があります。このファイルの以前のバージョンではcheckedAtを読み取るよう指示していたため、何も見つからなくても気づけませんでした。
そのタイムスタンプが 7 日より古い場合、またはクラス/メンバーがローカルで見つからない場合は、以下のライブ Web フォールバックを使用し、ローカルデータが古いようだとユーザーに伝えてください。 更新を提案してください。
# Only after the user agrees — this downloads and re-splits the API dump
~/RobloxDocs/scripts/roblox-api-monitor.sh # macOS, Linux, WSL, Git Bash
python "%USERPROFILE%\RobloxDocs\scripts\roblox-api-monitor.py" # Windows without bash
~/RobloxDocs がまったく存在しない場合、ユーザーはまだセットアップしていません。そのことを伝え、インストーラーの --docs-only オプション(PowerShell では -DocsOnly)を案内してください。自分で作成してはいけません。
バックグラウンドで実行せず、頼まれていないのに実行しないでください。 このファイルの以前のバージョンでは、
roblox-api-monitor.sh &を自動的に実行するよう指示していましたが、これは「ナレッジの鮮度確認」にある「ユーザーの承認なしに自動更新しない」というルールと README の両方に反していました。このスキルにはスケジューラーもバックグラウンドジョブもありません。人が更新を実行します。古さが回答を妨げることはありません。Web の情報源に切り替えて、その旨を伝えてください。
優先度 2:ライブ Web 情報源(フォールバック)
ローカルデータでトピックを扱っていない場合、データが古い場合、または説明文書が必要な場合は、以下を使用してください。
| リソース | URL | 用途 |
|---|---|---|
| LLM ドキュメントのインデックス | https://create.roblox.com/docs/llms.txt | トピック別に利用可能なドキュメントページを参照する |
| 全ドキュメント(一つのファイル) | https://create.roblox.com/docs/llms-full.txt | 包括的な単一ファイルのリファレンス |
| ページごとの Markdown | https://create.roblox.com/docs/en-us/{path}.md | 特定のドキュメントページを整った Markdown 形式で読む |
| エンジン API インデックス | https://create.roblox.com/docs/reference/engine/llms.txt | Luau API のクラス、メソッド、イベント |
| Open Cloud API インデックス | https://create.roblox.com/docs/cloud/llms.txt | すべての Cloud REST API(機能、ドメイン、ガイド、認証)を見つけるための主要な情報源 |
| OpenAPI 仕様(生データ) | https://create.roblox.com/docs/cloud/openapi.json | MCP/コード生成ツール用の機械可読な OpenAPI 仕様 |
| 非推奨 API の確認 | https://robloxapi.github.io/ref/class/<Name>.html | 個別のクラス/メンバーの状態を確認する(非推奨項目は視覚的に表示されます) |
Studio の
http_getツールを使ってこれらを取得する場合は、許可リストに注意してください。対象はcreate.roblox.com/docs(/reference/engine、/cloud、/performance-optimizationを含む)とgithub.com/Roblox/libmpのみで、URL は.mdで終わるか、llms.txtである必要があります。そのため、llms-full.txt、openapi.json、robloxapi.github.ioはhttp_getでは拒否されます。これらには、ホスト側の取得ツールかcurlを使用してください。http_getのquery引数は一致するセクションのみを返すため、ページ全体をコンテキストに読み込むよりも大幅に低コストです。github.com/Roblox/libmp/blob/….mdの URL は受け付けられますが、取得されるのは GitHub の HTML ページです(2026-10-21 に測定)。代わりにcurlを使ってraw.githubusercontent.comから LibMP ファイルを読み取ってください。
参照ワークフロー
- 参照ファイルにトピックの情報があるか確認します(上記のルーティングテーブル)
- エンジン API の詳細については、**
~/RobloxDocs/RobloxAPI/classes/<Name>.json**を確認します - ローカルで見つからない場合は、ホストが提供する任意の Web 取得ツール(Claude Code の
WebFetch、シェルのcurlなど)でページごとの Markdown URL を取得します(移植可能なのは URL の部分です)- 例:
https://create.roblox.com/docs/en-us/studio/importer.md
- 例:
- どのページを読むべきか分からない場合は、
llms.txtを参照して適切な URL を探します - Open Cloud / REST API のトピックについては、
https://create.roblox.com/docs/cloud/llms.txtを読みます- まず Features セクションを検索し、次に Domains を検索します
- レガシーな Cookie 認証エンドポイントより、Open Cloud エンドポイント(API キー / OAuth)を優先します
- フォールバック:Context7 を使用します。MCP ツールは
resolve-library-id、次にquery-docsです(upstash/context7 README、2026-10-11確認;このファイルの以前のバージョンでは、2つ目のツールをget-library-docsと呼び、query-docsは存在しないと記載していました)。MCP サーバーに接続されていない場合は、CLI で同じ操作ができます。npx ctx7@latest library "Roblox"の後に、npx ctx7@latest docs <libraryId> "<question>"を実行します - それでも不明な場合は、先に進む前にユーザーに質問します
重要:エンジン API(
game:GetService()経由の Luau)と Open Cloud API(x-api-key経由の HTTP REST)は完全に別のシステムです。誤ったインデックスを使うと、動作しないコードが生成されます。
非推奨 API の確認:次の方法を優先順に使用します。
cat ~/RobloxDocs/RobloxAPI/deprecated-index.json— ローカルですぐに確認できますcat ~/RobloxDocs/RobloxAPI/deprecated/<ClassName>.json— 非推奨クラスの詳細をすべて確認できますrobloxapi.github.io/ref/class/<Name>.htmlを確認します — 非推奨メンバーは視覚的に示されています- Context7(
resolve-library-id→get-library-docs、またはctx7CLI)を使用して、特定の API を検索します
コアコーディング規約
これらのルールは、生成するすべての Roblox/Luau コードに適用されます。例外は認められません。
1. 型安全性
- 新しいスクリプトの先頭に
--!strictを記述します - 関数のパラメーターと戻り値の型を注釈します
- 複雑なデータ構造には
typeキーワードでカスタム型を定義します
2. 命名規則(Roblox 公式スタイル)
- PascalCase:クラス、ModuleScript、コンストラクター、サービス —
CombatService、PlayerData - camelCase:変数、関数、パラメーター —
playerHealth、calculateDamage() - UPPER_SNAKE_CASE:定数 —
MAX_HEALTH、DEFAULT_SPEED - 単語は省略せずに完全に記述します
- 頭字語をすべて大文字にしないでください:
JSONTableではなくJsonTableを使用します
3. 最新の API の使用
spawn()、delay()、wait()の代わりに、task.spawn()、task.delay()、task.wait()を使用します- 遅延タスクをクリーンアップするには
task.cancel()を使用します - クリーンアップ時には、必ずイベント接続を切断します:
connection:Disconnect() - 失敗する可能性のある処理は、
pcall()またはxpcall()でラップします
4. アーキテクチャのルール
- サーバー権限:ゲーム状態の変更はすべてサーバー上で行います
- 共有ロジックにはModuleScriptsを使用し、巨大なスクリプトは避けます
- サービス/コントローラーパターン:サービス(サーバー)、コントローラー(クライアント)
- スクリプトは適切なコンテナーに配置します:
- サーバーロジック →
ServerScriptService - クライアントロジック →
StarterPlayerScriptsまたはStarterCharacterScripts - 共有モジュール →
ReplicatedStorage - サーバー専用データ →
ServerStorage - UI →
StarterGui
- サーバーロジック →
5. エラー処理
local success, result = pcall(function()
return DataStoreService:GetDataStore("PlayerData"):GetAsync(key)
end)
if not success then
warn("[DataService] Failed to load data:", result)
-- Handle gracefully: use defaults, retry, etc.
end
6. セキュリティ(必ず適用)
- クライアントから送信されたデータを決して信頼しないでください。サーバー上で型、範囲、権限を検証します
- 機密性の高いロジックは
ServerScriptServiceに保持します(クライアントから見えない場所に置きます) - RemoteEvent の引数を検証します:
typeof()、範囲、プレイヤーの状態を確認します - クライアントからの RemoteEvent 呼び出しにレート制限を適用します
- 管理者コマンドやサーバーキーを
ReplicatedStorageに公開しないでください
スクリプトテンプレート
新しいスクリプトを作成するときは、このテンプレートを出発点として使用します。
--!strict
-- [ScriptName]
-- [Brief description of what this script does]
-- Container: [ServerScriptService/StarterPlayerScripts/ReplicatedStorage]
----- Services -----
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
----- Dependencies -----
-- local SomeModule = require(ReplicatedStorage.Modules.SomeModule)
----- Constants -----
local MAX_VALUE = 100
----- Types -----
type PlayerData = {
coins: number,
level: number,
inventory: { string },
}
----- Variables -----
local activeConnections: { [Player]: { RBXScriptConnection } } = {}
----- Private Functions -----
local function cleanup(player: Player)
local connections = activeConnections[player]
if connections then
for _, conn in connections do
conn:Disconnect()
end
activeConnections[player] = nil
end
end
----- Public / Event Handlers -----
local function onPlayerAdded(player: Player)
activeConnections[player] = {}
-- Setup logic here
end
----- Initialization -----
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(cleanup)
-- Handle players already in game (Studio hot-reload)
for _, player in Players:GetPlayers() do
task.spawn(onPlayerAdded, player)
end
応答ガイドライン
- 作成前に確認する:依頼が曖昧な場合は、ジャンル、規模、対象読者について確認の質問をしてください
- 書く前に読む:MCP が利用可能な場合は、変更する前に既存のスクリプトとゲームツリーを読んでください
- 小さく分割する:複雑なシステムは、一度に 50~100 行ずつ生成してください。デバッグが容易になります
- 理由を説明する:自明でないコードにはコメントを付け、アーキテクチャ上の判断を説明してください
- テスト方法を示す:コードのテスト方法(プレイテストの手順、コンソールでの確認)を提案してください
- 移行を考慮する:既存コードに手を加える場合は、古いパターンがないか確認し、適切であれば移行を提案してください。ただし、決して強制しないでください。段階的な移行でも問題ありません。
よくあるワークフロー
新機能
- 既存のプロジェクト構造を読む(MCP:
search_game_tree) - アーキテクチャ上で機能を組み込む場所を特定する
- 適切なコンテナーに ModuleScript を作成する
- 必要に応じてサーバーとクライアント間の通信を設定する
- プレイテストで確認する(MCP:
start_stop_play+get_console_output)
問題のデバッグ
- 関連するスクリプトを読む(MCP:
script_read) - コンソール出力を確認する(MCP:
get_console_output) - 根本原因を特定する。次の点を確認してください:
- DataStore/HTTP 呼び出しを
pcallで囲んでいない - クライアントとサーバー間の境界に関する問題
- 接続のリーク(Disconnect の呼び出し漏れ)
- 競合状態(スクリプトの実行順序)
- DataStore/HTTP 呼び出しを
- 最小限の修正を適用する
- プレイテストで修正を確認する
コードレビュー
- プロジェクト内のスクリプトを読む(MCP:
script_grep) - 上記のコアコーディング標準に照らして確認する
- セキュリティ上の問題(クライアントを信頼している、データが公開されている)を指摘する
- パフォーマンス上の問題(負荷の高いループ、パーツ数)を指摘する
- 修正前/修正後の例を使って改善案を提案する
ナレッジの鮮度チェック
これは自動では実行されません。スケジューラー、フック、バックグラウンドジョブはありません。これは、このファイルを読むエージェントであるあなたへの指示です。このスキルが呼び出されたとき、このスキルのディレクトリにある metadata.json を読み、last_updated を現在の日付と比較してください。
ロジック:
IF (current_date - last_updated) > update_interval_days (default: 7):
TELL the user:
"⏰ Roblox Dev Skill knowledge was last updated on {last_updated}, {days} days ago.
Want me to run a knowledge update before we rely on it?"
...then WAIT. Do not update anything unless they say yes.
ELSE:
Proceed normally — knowledge is fresh.
判断ルール:
- ユーザーの承認なしに自動更新しないでください。必ず最初に確認してください
- 信頼できる情報源:https://create.roblox.com/docs、https://devforum.roblox.com
- 判断するのはユーザー:常にユーザーが判断します(AI だけで決めないでください)
- 更新手順:詳細な調査 → 事実確認 → ユーザーとの Q&A → 適用 → 監査
- 更新後:新しいタイムスタンプ、バージョン、変更内容を
metadata.jsonに記録してください
手動でのナレッジ更新
ユーザーは、平易な言葉で依頼することで、いつでもナレッジの完全更新を開始できます。 「update roblox skill knowledge」、「refresh roblox dev skill」、「roblox-update」などがその例です。
/roblox-updateは登録済みのスラッシュコマンドではありません。 このファイルの以前のバージョンではコマンドとして紹介されていましたが、~/.claude/commands/にインストールされたことも、プラグインに同梱されたこともありません。そのため、入力しても何も起こりません。これは、このスキルが認識するフレーズにすぎず、それ以上のものではありません。
更新プロトコル:
- 調査 —
last_updatedのタイムスタンプ以降の最新の Roblox の変更を調べる- DevForum のリリースノート、API の変更履歴、非推奨化の告知
- ウェブ検索で「Roblox developer updates {year}」と「Roblox API changes {month} {year}」を検索する
- https://devforum.roblox.com/c/updates/release-notes/58 にアクセスする
- 比較 — 調査結果を既存の参照ファイルと照合する
- 報告 — 変更点を明確にまとめてユーザーに提示する
- 協議 — コンテンツの追加/削除/変更に関する判断について、ユーザーと Q&A を行う
- 適用 — 参照ファイルを更新する(正しい内容は維持し、変更があった内容を更新する)
- 監査 — 全項目を事実確認する(初回監査と同じ手順:ファイルの整合性確認 + 内容の検証)
- 記録 — 新しいタイムスタンプと変更履歴を
metadata.jsonに記録する
重要
すべての更新は調査に基づいて行う必要があります。即興で変更しないでください。判断に迷ったら、ユーザーに確認してください。 フォールバック:context7 MCP 経由またはウェブ検索で公式ドキュメントを参照してください。
エクスポート/公開
このスキルは、GitHub で公開できるように設計されています。完全な構成と使用ガイドについては、スキルのルートディレクトリにある README.md をご覧ください。
ユーザーは、リポジトリにある 1 行のインストーラー(install.sh、install.ps1、install.cmd)を使ってインストールします。これらのインストーラーは、各エージェントのスキルフォルダーにリンクを作成します。手動でコピーする場合、フォルダー名は roblox-dev-skill でなければなりません。Agent Skills の仕様では、フォルダー名が上記の name フィールドと一致する必要があり、より厳格なエージェントは、フォルダー名が一致しないスキルをスキップします。