msw-ui-system について
msw-ui-system は、MSW の `.ui` インターフェースを作成するためのスキルです。設計、コンポーネント API、ビルダー、実行時パターンを扱い、作成・変更をビルダー経由に統一して検証とプレビューも案内します。
主な機能
- 01`.ui` の設計とコンポーネント指針
- 02ビルダーによる UI 作成・編集
- 03`.mlua` の実行時 UI パターン
- 04UI 検証とレイアウトプレビュー
活用シーン
- 01HUD、ポップアップ、メニューの設計
- 02スクロールリストやインベントリグリッドの作成
- 03`.mlua` プロパティと UI 要素のバインド
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ msw-git/ msw-ai-coding-plugins-official --skill msw-ui-systemインストール後、Claude Code で/msw-ui-systemを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/component-api.mdlayout-recipes.mdruntime-patterns.mdreferences/templates/scripts/ruid-lookup.cjsui-structure.cjsreferences/templates/style-1-black/ButtonGroup.uiDefaultGroup.uiHUDGroup.uiPopupbutton.mluaruid-map.mdstructure.mdToastGroup.uireferences/templates/style-2-diary/HUDGroup.uiPopupbutton.mluaPopupbutton.uiPopupGroup.uiruid-map.mdstructure.mdToastGroup.uiTrashBin.uireferences/templates/style-3-wood/ButtonGroup.uiDefaultGroup.uiHUDGroup.uiPopupbutton.mluaruid-map.mdstructure.mdToastGroup.uireferences/templates/style-4-blue/ButtonGroup.uiDefaultGroup.uiHUDGroup.ui詳細
msw-ui-system
MSW の .ui 用の単一エントリーポイントです。デザインガイド+コンポーネント API+ビルダーの呼び出し方法+ランタイムのパターンを、ひとつのスキルにまとめています。
既存スキルとの役割分担:
| スキル | 担当範囲 |
|---|---|
msw-ui-system(このスキル) | .ui に関するすべて。デザイン(何を・いつ・なぜ)、コンポーネント API/列挙型(何か)、ビルダーの呼び出し方法(変更方法)、ランタイムの mlua パターン。.ui の変更には、必ずこのスキルのビルダーを使用してください |
references/templates/ | 事前構築済みのスタイルバンドル(.ui+ruid-map+ボタンハンドラーパッケージ) |
0. ルーティング
リクエストのキーワードに基づいて、サブリファレンスに進んでください。
| トリガー | リファレンスドキュメント |
|---|---|
| 「アンカー/ピボット/座標/位置がおかしい理由」、「RectTransform」、「ストレッチ」 | references/ui-fundamentals.md §1~§8 |
| 「モバイル」、「セーフエリア」、「1920」、「MobileOnly」、「ActivePlatform」、「タッチサイズ」、「PC の予約領域」、「デバイス別フォントサイズ」 | references/ui-fundamentals.md §9 |
| 「UIGroup」、「ポップアップの上」、「z-order」、「displayOrder」、「CanvasGroup」、「不透明度の伝播」、「Enable と Visible の違い」 | references/ui-hierarchy.md。ランタイムの兄弟順序の変更については、references/runtime-patterns.md §7 も参照してください |
| 「どのコンポーネントか」、「Sprite と Text と Button の違い」、「9 スライス」、「スクロールリスト」、「GridView と ScrollLayoutGroup の違い」 | references/component-api.md §「コンポーネント選択ガイド」 |
| 「スプライトのピボット」、「9 スライスの境界線」、「スライスの境界」、「スライス済みアセットのメタデータ設定」、「リソースの保存プロパティ」 | msw-mcp の asset_update_resource_storage_info を使って、アセット側のメタデータを直接設定してください。.ui 側については、references/component-api.md §「SpriteGUIRenderer — ImageType の選択」を参照してください |
| 「HUD の作成」、「ポップアップの配置」、「トースト」、「メニュー」、「インベントリグリッド」、「スクロールリスト」、「ランキング」、「リーダーボード」、「クエストリスト」、「フレンドリスト」、「メールボックス」 | references/layout-recipes.md |
.ui ビルダーで構築した後に .mlua を接続する、「プロパティのデフォルト UUID」、「ドラッグせずにバインド」 | ../msw-general/references/builder-protocol-ui.md §3.6 バインディングの注入(統合エントリーポイント。builder-protocol.md のコアと一緒に読み込んでください) |
ランタイムでの UI コンポーネントフィールドの読み書き、コンポーネントのプロパティ名/型(ButtonComponent.Colors、TextGUIRendererComponent.Overflow、SpriteGUIRendererComponent.FillAmount など) | UI コンポーネントフィールドに .mlua からアクセスする前に、毎回 references/component-api.md を参照してください |
列挙型の値(AlignmentType、TextOverflowMode、ImageType、UIBasicParticleType など) | references/component-api.md §列挙型 |
| ランタイムの mlua パターン(ポップアップの開閉、トーストのフェード、HP バー、GridView、ドラッグ、タブ、クールダウン)、ランタイム UI の注意事項(クライアント専用、サーバー側では nil など) | references/runtime-patterns.md |
.ui ビルダーの呼び出し方法(UIBuilder API、アンカープリセット、書き込み時の自動リンティング、コンポーネントの追加/パッチ適用/削除) | ../msw-general/references/builder-protocol-ui.md §3 UIBuilder(統合エントリーポイント。builder-protocol.md のコアと一緒に読み込んでください。.map の MapBuilder と .model の ModelBuilder は、兄弟ファイルの各ビルダー用ファイルにあります) |
| 「サウンド」、「sfx」、「クリック音」、「ホバー音」、「ボタンの音声」、「PlaySound」 | references/ui-sound.md |
1. 基本的なワークフロー
(1) Clarify intent Layout sketch (ASCII or verbal) + which group to attach to
(2) Check design guide Match at least one of ui-fundamentals / ui-hierarchy / component-api §Component Selection Guide
(3) Builder Preflight Read ../msw-general/references/builder-protocol.md (core) + builder-protocol-ui.md §3 (unified call-protocol entry point)
(4) Match recipe Select the closest template from layout-recipes.md
(5) Invoke builder Create/patch via scripts/msw_ui_builder.cjs (protocol: builder-protocol-ui.md §3)
(6) Inject bindings Auto-inject .mlua property default UUIDs via b.write(path, { bind: {...} }) or b.injectBindings(...) (builder-protocol-ui.md §3.6 Binding Injection)
(7) Self-verify write() auto-runs scripts/ui_lint.cjs (strict ON by default)
(8) Preview Visual check via scripts/preview_ui_layout.cjs
(9) Sound pass For any interactive button, offer click/hover SFX wiring (references/ui-sound.md)
(10) Maker Refresh Apply to engine
2. グローバルルール
絶対にしないこと
.uiの JSON を直接編集しないでください —.uiの作成・変更は、必ずscripts/msw_ui_builder.cjsを通して行ってください。手動編集すると、UUID・ValueType・@componentsの整合性が崩れ、データがひそかに欠落する原因になります。- 既存の
.uiファイルもビルダー経由で読み込んでください —UIBuilder.read(filepath)/.find()/.listEntities()で照会してください。生の JSON を直接 grep/解析しないでください。.uiの直接のReadや、cat/type/Get-Content/rg/grep/sed/awk/cp/mvなどのシェルコマンドは、登録済みガードによってブロックされます。読み込みにはUIBuilder.read/load/snapshot、書き込みにはb.write()を使用してください。.uiファイル全体を削除するビルダー API はありません。node -e "require('fs').unlinkSync('ui/<File>.ui')"で削除してからrefreshを実行してください(シェルのrm/catはガードによってブロックされます。node -eによるビルダー呼び出しはブロックされません)。
Positionを直接設定しないでください —anchoredPositionのみを使用してください(Position はエンジンによって管理されます)。- 固定アンカー(AnchorsMin == AnchorsMax)で OffsetMin/Max を使ってサイズを指定しながら、
anchoredPositionも使用しないでください — 2 つのモードを混在させないでください。 - ビルダーは新しい UUID を作成しますが、
.mluaのプロパティのデフォルト値は更新しません — バインディングが壊れます。
必ず行うこと
- ビルダーのプロトコルを事前確認 —
../msw-general/references/builder-protocol.md(コア)と../msw-general/references/builder-protocol-ui.md§3 を、.uiを変更する前に必ずコンテキストに含めてください(このセッションでまだ読み込んでいない場合、またはコンパクションで失われた場合のみ読み込んでください)(UIBuilder API、自動書き込み lint、位置/アンカーのルール、バインディングの注入、カバレッジの不足箇所)。コアには共有契約とビルダー間のフローが記載されています。.mapの MapBuilder と.modelの ModelBuilder は、兄弟ファイルにある個別のビルダードキュメントを参照してください。各フローが相互に連携しているため、統一されたエントリーポイントを用意しています。 - ビルダーを呼び出す前に、少なくとも 1 つのデザインガイドを確認してください(
ui-fundamentals/ui-hierarchy/component-api§Component Selection Guide)。 - まずレシピに合うものがないか確認し、ゼロからの構築は最後の手段にしてください。
- 端への配置には、次の式を使用してください:
pos = ±(margin + size/2) - ポップアップとトーストは、それぞれ独立した
.uiルート UIGroup に分け、単独で表示/非表示にしてください。内部コンテナーにはempty()/panel()を使用し、入れ子のgroup()は使わないでください。 - 「中央揃えにしたのに左に寄ってしまう」場合 → テキストに明示的な
UpperLeft(0)の配置値が設定されています。MiddleCenter(4)に設定してください。どちらの世代のテキストコンポーネントも、配置のデフォルトは中央揃えです。 - ボタンのタッチ領域は 88×88 以上にしてください(モバイルサポート)。
- インタラクティブなボタンを作成したら —
references/ui-sound.mdを参照して、クリック/ホバー時の効果音を設定するよう積極的に提案してください(デフォルトの UI 効果音 RUID を利用できます)。ユーザーが明示的に辞退した場合、またはボタンが装飾専用の場合に限り、省略してください。 - ツリーはフラットではなく、入れ子で構築してください。 1 つのまとまりを構成するコントロール(ウィンドウ+タイトル/閉じるボタン、行+チップ/値、スロット+アイコン/数)は、
"Parent/Child"パスを使って同じ親の下に置いてください。そうすることで、まとまりとして移動/フェード/表示切り替え/バインドできます。各親を子より先に作成してください。親が存在しないと lint が失敗します(L025ERROR)。 - ルートレベルのテキストを、兄弟のボックスに重ねないでください。
ui_lintではL030WARN として報告されます。テキストをボックスの下にネストする、クリック可能なラベル付きボックスにはbutton()を使用する、またはpanel()/sprite()のtextオプションで直接ラベルを設定してください。
3. サブドキュメント
references/ui-fundamentals.md— 座標系、RectTransform の 3 要素、アンカーモードの決定(§1~§8)+解像度・セーフエリア・PC の予約領域・タッチターゲット・フォントサイズ・プラットフォームの分離(§9)references/ui-hierarchy.md— UIGroup / displayOrder / CanvasGroup / Enable と Visible の違いreferences/component-api.md— §「コンポーネント選択ガイド」(どれを/いつ/なぜ)+コンポーネントの全プロパティ・メソッド・イベントテーブル(何があるか)+UI 関連の全列挙値(§Enums)references/layout-recipes.md— レイアウトテンプレート集references/runtime-patterns.md—.mluaのランタイムパターン(ポップアップ/トースト/HP/グリッド/ドラッグ…)+ランタイム UI の注意事項references/ui-sound.md— UI サウンドの統合(_SoundService:PlaySound、クリック/ホバーのフック、UI のデフォルト SFX RUID)../msw-general/references/builder-protocol-ui.md§3 —.uiCJS ビルダーの呼び出しプロトコル(統合エントリーポイント —builder-protocol.mdのコアと併せて読み込んでください) —.mapの MapBuilder /.modelの ModelBuilder は、兄弟ファイルとして各ビルダー専用のファイルにあります。panel / text / sprite / button / slider / scroll / script / group / mask / grid / avatar / touchReceive / skeleton / areaParticle / basicParticle、コンポーネントの CRUD、アンカープリセット、書き込み時の自動リンティング、.mluaプロパティ UUID の自動バインドは、すべて §3 と §3.6 にあります。references/templates/templates.md— 事前構築済みスタイルバンドルのインデックス(style-N-*.ui、ruid-map.md、Popupbutton.mlua)
4. スクリプト
scripts/msw_ui_builder.cjs—.uiビルダーのコア(UIBuilder クラス)。使用前に../msw-general/references/builder-protocol.md(コア)と../msw-general/references/builder-protocol-ui.md§3(統合エントリーポイント)を読んでください。scripts/preview_ui_layout.cjs—.uiレイアウトの視覚チェック+タッチターゲットの警告scripts/ui_lint.cjs—.uiファイルの自己検証(write()によって自動的に呼び出されます)scripts/ui_recipe.cjs— レシピベースのひな形生成
対象外
.map/.model/.tilesetビルダー — このスキルの対象外です.uiJSON スキーマ(生のフィールド形状、@type/@componentsのラッピング、AlignmentOption 0~15 のマッピングなど)— ビルダー内部で処理されます。ユーザー/AI が直接把握する必要はありません- アクセシビリティのパターン(代替テキスト、スクリーンリーダー向けのヒント、フォーカス順序)— 対象外です
- エラー状態の UI パターン(
Transition.Disabled以外の無効ボタンのスタイル、検証メッセージ、ローディングスピナー)— 対象外です。プロジェクトごとに個別に設計してください ui_lint.cjsとpreview_ui_layout.cjsを超える自動 UI テスト/レイアウトアサーション — 提供されません- カスタムシェーダーマテリアル(
MaterialId)— フィールドは公開されていますが、シェーダーの作成はこのスキルの対象外です
コメント
Markdown 対応