概要(ユーザー不具合報告・2 件)
smalruby.app で Scratch プロジェクト URL を入力して読み込む機能(URL ローダー)で、特定のプロジェクトが読み込めない報告が 2 件届いた(同一報告者・2026/07/11)。
一般の URL 読み込みは動作する(過去に修正済み)ため、この 2 プロジェクト固有の内容(未対応ブロック / 拡張機能 / 新しい Scratch フォーマット等)が VM ロードで失敗している疑いが強い。
関連コード(読み込みパイプライン)
packages/scratch-gui/src/lib/url-loader-hoc.jsx — 入力 → fetchProjectInfo(api.smalruby.app/scratch-api-proxy で project_token 取得)→ scratchStorage.load(project.json 取得)→ loadProjectWithChecks → 成功でモーダル閉じ、失敗で formatLoadError を表示。
packages/scratch-gui/src/lib/project-loader-utils.js — loadProjectWithChecks: vm.hasMeshV1Project → vm.loadProject → vm.hasKoshienProject。
packages/scratch-gui/src/lib/url-loader.js — エラー分類(404/403/5xx/network/汎用)。
packages/scratch-gui/src/lib/url-parser.js — URL → projectId 抽出(標準 projects/<id> は対応済み)。
推定原因
- 「初期の画面に戻ってしまう」:
vm.loadProject は現在のプロジェクトをクリアしてから読み込むため、対象プロジェクトのデシリアライズ/ブロック変換で例外が出ると、クリア後・ロード未完了=空(初期)状態のまま残る。エラーは .catch されメッセージは出るが、状態が初期化されたままリセットされるのが「初期画面に戻る」症状。
- 「開かれない」: fetch 失敗(403=未共有 / 404 / network / proxy)または
vm.loadProject の例外で、エラー表示のみでプロジェクトが開かない。
- 2 プロジェクト固有 → smalruby fork の VM/変換が対応しない要素(拡張機能・新ブロック・Ruby 変換不能ブロック等)を含む可能性。
調査方針(worker 向け)
- 再現: 2 つの projectId を
api.smalruby.app/scratch-api-proxy/projects/<id> 経由で取得し vm.loadProject に流して実際の例外/失敗地点を特定する。
- ⚠️ 注意: コンテナの egress allowlist で
scratch.mit.edu / api.smalruby.app に到達できない可能性がある。到達不可なら、失敗する sb3 サンプルの添付を人間に依頼する(本 Issue にコメント)か、コードベースからの推定 + 下記の堅牢化を先行実装する。
- 切り分け: fetch 段階の失敗か、
vm.loadProject の例外か、変換段階か。ログ(log.warn('URL loader error:', error))の実エラーを確認。
修正方針(案)
- 堅牢化(プロジェクト固有の原因に依存せず実装できる本命): URL 読み込みが失敗しても UI を空の初期状態のまま放置しない。
vm.loadProject が throw したら、(a)明確な理由をユーザーに表示し、(b)可能なら直前のプロジェクト状態を保持/復元する(少なくとも「読み込みに失敗した/このプロジェクトは対応していない可能性がある」と分かる文言にする)。「何も言わず初期画面に戻る」を無くす。
- 原因対応: 特定できた未対応要素(拡張機能・ブロック)について、対応 or グレースフルにスキップして読み込む。
- 失敗 sb3 が入手できれば回帰テストを追加(
url-loader / project-loader-utils のユニット or integration)。
DoD
関連
- ユーザー報告(Feedback Discussions):
- 過去の同系統(修正済み): 「Scratchから読み込むが正しく機能していない。前は開けたURLでも今は開けない」(2026/04/28)
概要(ユーザー不具合報告・2 件)
smalruby.app で Scratch プロジェクト URL を入力して読み込む機能(URL ローダー)で、特定のプロジェクトが読み込めない報告が 2 件届いた(同一報告者・2026/07/11)。
一般の URL 読み込みは動作する(過去に修正済み)ため、この 2 プロジェクト固有の内容(未対応ブロック / 拡張機能 / 新しい Scratch フォーマット等)が VM ロードで失敗している疑いが強い。
関連コード(読み込みパイプライン)
packages/scratch-gui/src/lib/url-loader-hoc.jsx— 入力 →fetchProjectInfo(api.smalruby.app/scratch-api-proxyで project_token 取得)→scratchStorage.load(project.json 取得)→loadProjectWithChecks→ 成功でモーダル閉じ、失敗でformatLoadErrorを表示。packages/scratch-gui/src/lib/project-loader-utils.js—loadProjectWithChecks:vm.hasMeshV1Project→vm.loadProject→vm.hasKoshienProject。packages/scratch-gui/src/lib/url-loader.js— エラー分類(404/403/5xx/network/汎用)。packages/scratch-gui/src/lib/url-parser.js— URL → projectId 抽出(標準projects/<id>は対応済み)。推定原因
vm.loadProjectは現在のプロジェクトをクリアしてから読み込むため、対象プロジェクトのデシリアライズ/ブロック変換で例外が出ると、クリア後・ロード未完了=空(初期)状態のまま残る。エラーは.catchされメッセージは出るが、状態が初期化されたままリセットされるのが「初期画面に戻る」症状。vm.loadProjectの例外で、エラー表示のみでプロジェクトが開かない。調査方針(worker 向け)
api.smalruby.app/scratch-api-proxy/projects/<id>経由で取得しvm.loadProjectに流して実際の例外/失敗地点を特定する。scratch.mit.edu/api.smalruby.appに到達できない可能性がある。到達不可なら、失敗する sb3 サンプルの添付を人間に依頼する(本 Issue にコメント)か、コードベースからの推定 + 下記の堅牢化を先行実装する。vm.loadProjectの例外か、変換段階か。ログ(log.warn('URL loader error:', error))の実エラーを確認。修正方針(案)
vm.loadProjectが throw したら、(a)明確な理由をユーザーに表示し、(b)可能なら直前のプロジェクト状態を保持/復元する(少なくとも「読み込みに失敗した/このプロジェクトは対応していない可能性がある」と分かる文言にする)。「何も言わず初期画面に戻る」を無くす。url-loader/project-loader-utilsのユニット or integration)。DoD
npm run lint緑関連