Goal
スモウルビーオリジナルのスプライト2体(Shimaraby, Shimacat)をスプライトライブラリに追加する。アセットは Scratch CDN に依存せず、ローカルバンドルで配信する。
スプライト仕様
| Sprite |
Name |
Costumes |
Sound |
Tags |
| シマラビ |
Shimaraby |
Shimaraby1.png, Shimaraby2.png |
Chirp |
animals |
| シマネコ |
Shimacat |
Shimacat1.png, Shimacat2.png |
Meow |
animals |
- コスチューム画像は bitmapResolution=2 で ~190x200px にリサイズ(表示上 ~95x100px、Cat スプライト相当)
- キャラクターの中心が画像の中心になるように余白を調整
- rotationCenter は画像の中心
Affected Files
static/smalruby-assets/*.png — リサイズ済みコスチューム画像(新規、4ファイル)
packages/scratch-gui/src/lib/legacy-storage.ts — WebStore 追加(ローカルアセット配信)
packages/scratch-gui/src/lib/libraries/sprites.json — スプライトエントリ追加
packages/scratch-gui/src/components/library/library.jsx — getItemIcons のローカルアセット対応(rawURL 利用)
Implementation Steps
Phase 1: 画像準備 & 静的アセット配置
Phase 2: ローカルアセット配信インフラ
Phase 3: スプライトライブラリエントリ追加
Phase Final: Integration Tests & Browser Verification
Definition of Done
Test Plan
| Type |
Timing |
Target |
| Unit tests (TDD) |
Before implementation (RED → GREEN) |
sprites.json のエントリ存在確認 |
| Integration tests |
After implementation |
スプライト追加・コスチューム表示 |
| Browser verification |
After CI green |
Playwright MCP で DoD 確認 |
Risks & Open Questions
rawURL の相対パス解決: rawURL に static/smalruby-assets/... と書いた場合、webpack-dev-server と本番環境の両方で正しく解決されるか確認が必要。static/ ディレクトリは webpack の CopyPlugin でコピーされるはずだが、実装時に検証する。
- scratch-storage の WebStore フォールバック順序: CDN 404 後にローカルストアが試行されるまでの遅延。ライブラリ表示は
rawURL で直接読むので影響なし、スプライト追加時のみの問題。許容範囲と判断。
設計メモ
ローカルアセット配信の仕組み
サムネイル表示: library.jsx の getItemIcons はコスチュームに rawURL フィールドがあればそれを直接使用(既存の仕組み)。
スプライト追加時: legacy-storage.ts に追加する WebStore が static/smalruby-assets/{assetId}.{dataFormat} からアセットを提供。scratch-storage は登録順にストアを試行するため、Scratch CDN にないアセットはローカルストアにフォールバックする。
Goal
スモウルビーオリジナルのスプライト2体(Shimaraby, Shimacat)をスプライトライブラリに追加する。アセットは Scratch CDN に依存せず、ローカルバンドルで配信する。
スプライト仕様
Affected Files
static/smalruby-assets/*.png— リサイズ済みコスチューム画像(新規、4ファイル)packages/scratch-gui/src/lib/legacy-storage.ts— WebStore 追加(ローカルアセット配信)packages/scratch-gui/src/lib/libraries/sprites.json— スプライトエントリ追加packages/scratch-gui/src/components/library/library.jsx—getItemIconsのローカルアセット対応(rawURL利用)Implementation Steps
Phase 1: 画像準備 & 静的アセット配置
static/smalruby-assets/に配置feat: add Shimaraby and Shimacat costume assetsPhase 2: ローカルアセット配信インフラ
legacy-storage.tsのaddOfficialScratchWebStoresに WebStore 追加(static/smalruby-assets/)feat: add WebStore for local smalruby sprite assetsPhase 3: スプライトライブラリエントリ追加
rawURLフィールド追加(ローカルサムネイル用)3b8236bbb288019d93ae38362e865972.wav, Meow:83c36d806dc92327b9e7049a565c6bff.wav)を参照feat: add Shimaraby and Shimacat to sprite libraryPhase Final: Integration Tests & Browser Verification
test: add integration tests for custom sprite loadingDefinition of Done
Test Plan
Risks & Open Questions
rawURLの相対パス解決:rawURLにstatic/smalruby-assets/...と書いた場合、webpack-dev-server と本番環境の両方で正しく解決されるか確認が必要。static/ディレクトリは webpack の CopyPlugin でコピーされるはずだが、実装時に検証する。rawURLで直接読むので影響なし、スプライト追加時のみの問題。許容範囲と判断。設計メモ
ローカルアセット配信の仕組み
サムネイル表示:
library.jsxのgetItemIconsはコスチュームにrawURLフィールドがあればそれを直接使用(既存の仕組み)。スプライト追加時:
legacy-storage.tsに追加する WebStore がstatic/smalruby-assets/{assetId}.{dataFormat}からアセットを提供。scratch-storage は登録順にストアを試行するため、Scratch CDN にないアセットはローカルストアにフォールバックする。