Smalruby3 Monorepo 移行計画
概要
Scratch Foundation の upstream リポジトリ構造が変更され、monorepo (scratch-editor) に移行しました。Smalruby3 もこれに追従し、以下の移行を実施します:
現在の構造
gui/
├── smalruby3-gui/ # smalruby/smalruby3-gui (独立リポジトリ)
└── scratch-vm/ # smalruby/scratch-vm (独立リポジトリ)
新しい構造
gui/
└── smalruby3-editor/ # smalruby/smalruby3-editor (monorepo)
└── packages/
├── scratch-gui/ # 旧 smalruby3-gui に対応
├── scratch-vm/ # 旧 scratch-vm に対応
├── scratch-render/
├── scratch-svg-renderer/
└── task-herder/
重要な変更: smalruby3-gui は scratch-gui にディレクトリパスを戻します(upstream と一致させる)。
調査結果
smalruby/scratch-vm のカスタマイズ内容
1. 追加された拡張機能
-
koshien - Koshien プログラミングコンテスト用拡張機能
src/extensions/koshien/
- ブロックアイコン、translations.json を含む
-
microbitMore - micro:bit 拡張版
src/extensions/microbitMore/
- BLE/Serial 通信サポート
- 傾き、タッチ、ジェスチャーブロック
-
scratch3_mesh - レガシー Mesh ネットワーク機能
src/extensions/scratch3_mesh/
- mesh-host.js, mesh-peer.js, mesh-service.js
-
scratch3_mesh_v2 - 新 Mesh ネットワーク機能 (GraphQL/AppSync)
src/extensions/scratch3_mesh_v2/
- GraphQL operations, rate limiter, mesh client
-
scratch3_smalrubot_s1 - Smalrubot S1 ロボット制御
src/extensions/scratch3_smalrubot_s1/
2. コアファイルの変更
src/engine/runtime.js - Mesh 機能統合、環境変数サポート
src/engine/block-utility.js - カスタムユーティリティ追加
src/engine/blocks.js - ブロック処理の拡張
src/engine/target.js - ターゲット管理の変更
src/extension-support/extension-manager.js - カスタム拡張機能のロード
src/virtual-machine.js - VM コア機能の拡張
src/util/debug-logger.js - デバッグログ機能
3. テストファイル
test/integration/extensions/mesh-v2-data-merge.test.js
test/integration/extensions/mesh-v2-variable-sync.test.js
- 各拡張機能のテスト
4. 設定ファイル
.env.example - 環境変数テンプレート (Mesh設定など)
.format-message-lint.json - メッセージフォーマット設定
5. コミット数
smalruby/smalruby3-gui のカスタマイズ内容
1. Opal (Ruby to JavaScript) 統合
opal/ - Opal ライブラリファイル
opal.js, opal.min.js
opal-parser.js, opal-parser.min.js
config-opal.js, config-opal-parser.js
2. Ruby to Blocks Converter
src/lib/ruby-to-blocks-converter/ - Ruby コードをブロックに変換
- 各カテゴリ別コンバーター (motion, looks, sound, etc.)
- 拡張機能コンバーター (microbit, mesh, koshien, etc.)
- エラーハンドリング
3. Smalruby 特有のコンポーネント
src/components/mesh-domain-modal/ - Mesh ドメイン設定モーダル
src/components/koshien-test-modal/ - Koshien テストモーダル
src/components/block-display-modal/ - ブロック表示モーダル
src/components/url-loader-modal/ - URL ローダーモーダル
src/components/google-drive-save-dialog/ - Google Drive 保存ダイアログ
4. ビルド・セットアップスクリプト
scripts/make-setup-opal.js - Opal セットアップ自動化
scripts/postbuild.mjs - ビルド後処理 (Service Worker など)
scripts/prepublish.mjs - 公開前処理
scripts/makePWAAssetsManifest.js - PWA アセットマニフェスト生成
5. GUI コンポーネントの変更
src/components/gui/gui.jsx - メインGUI (Ruby タブ追加など)
src/components/menu-bar/menu-bar.jsx - メニューバー (Mesh 状態、Koshien など)
src/components/blocks/blocks.jsx - ブロックエディタ拡張
src/containers/blocks.jsx - ブロックコンテナ拡張
6. アセット・アイコン
- Smalruby/Koshien ロゴ
- Mesh 接続/切断アイコン
- Ruby 言語アイコン
- Hatti キャラクターアイコン
7. 設定ファイル
.env.example - 環境変数テンプレート
package.json - smalruby 固有の依存関係とスクリプト
cspell.json - スペルチェック設定
8. ドキュメント
docs/adr/ - Architecture Decision Records
docs/google-drive-setup.md - Google Drive 連携設定
9. コミット数
Upstream (scratchfoundation) の新機能
scratch-vm
- scratch3_face_sensing - 顔認識拡張機能(新規追加)
scratch-gui
cards コンポーネント - チュートリアルカード機能 削除した機能。トレードマークを含むため。新機能ではない。
CHANGELOG.md 削除したファイル。不要。
TRADEMARK ファイル 削除したファイル。新機能ではない。
移行戦略
Phase 1: リポジトリセットアップ (推定工数: 2-3日)
1.1. smalruby3-editor の初期化
1.2. ディレクトリ構造の理解
Phase 2: scratch-vm の移行 (推定工数: 1-2週間)
2.1. 拡張機能の移行
優先度順に実施:
-
高優先度 (コア機能):
-
中優先度:
2.2. コアファイルの変更移行
2.3. テストの移行
2.4. 設定ファイルの移行
Phase 3: scratch-gui (旧 smalruby3-gui) の移行 (推定工数: 2-3週間)
3.1. Opal 統合の移行
3.2. Ruby to Blocks Converter の移行
3.3. コンポーネントの移行
優先度順:
-
高優先度:
-
中優先度:
-
低優先度:
3.4. ビルドスクリプトの移行
3.5. アセット・アイコンの移行
3.6. 設定ファイルの移行
3.7. スタイルシートの移行
Phase 4: 統合テストとデバッグ (推定工数: 1-2週間)
4.1. ローカル開発環境での動作確認
4.2. 機能テスト
4.3. ビルド・デプロイテスト
Phase 5: Docker 環境の更新 (推定工数: 2-3日)
5.1. Dockerfile の更新
5.2. docker-compose.yml の更新
5.3. entrypoint.sh の更新
Phase 6: CI/CD の更新 (推定工数: 1-2日)
6.1. GitHub Actions の更新
6.2. デプロイワークフローの更新
Phase 7: ドキュメント更新 (推定工数: 1-2日)
7.1. README.md の更新
7.2. CLAUDE.md の更新
7.3. その他のドキュメント
Phase 8: 旧リポジトリのクリーンアップ (推定工数: 1日)
8.1. 旧リポジトリの整理
8.2. リポジトリ設定の更新
リスクと対策
リスク 1: 大量のコミット履歴
- リスク: 2,000+ コミットの変更を手動でマージするのは困難
- 対策: Git の merge/rebase 戦略を活用、段階的な移行
リスク 2: 依存関係の衝突
- リスク: Monorepo 内の他のパッケージとの依存関係衝突
- 対策: 段階的なテスト、依存関係の慎重な管理
リスク 3: ビルドシステムの違い
- リスク: Monorepo のビルドシステムが異なる可能性
- 対策: ビルドスクリプトの慎重な移行と動作確認
リスク 4: Upstream の継続的な変更
- リスク: 移行中に upstream が更新される可能性
- 対策: 定期的な upstream の確認、変更の追跡
完了条件
必須条件
推奨条件
推定総工数
- Phase 1: 2-3日
- Phase 2: 1-2週間
- Phase 3: 2-3週間
- Phase 4: 1-2週間
- Phase 5: 2-3日
- Phase 6: 1-2日
- Phase 7: 1-2日
- Phase 8: 1日
合計: 約 6-9週間
次のステップ
- この移行計画のレビューと承認
- Phase 1 の開始: リポジトリセットアップ
- 定期的な進捗レポート
- 問題が発生した場合の迅速なエスカレーション
Smalruby3 Monorepo 移行計画
概要
Scratch Foundation の upstream リポジトリ構造が変更され、monorepo (scratch-editor) に移行しました。Smalruby3 もこれに追従し、以下の移行を実施します:
現在の構造
新しい構造
重要な変更:
smalruby3-guiはscratch-guiにディレクトリパスを戻します(upstream と一致させる)。調査結果
smalruby/scratch-vm のカスタマイズ内容
1. 追加された拡張機能
koshien - Koshien プログラミングコンテスト用拡張機能
src/extensions/koshien/microbitMore - micro:bit 拡張版
src/extensions/microbitMore/scratch3_mesh - レガシー Mesh ネットワーク機能
src/extensions/scratch3_mesh/scratch3_mesh_v2 - 新 Mesh ネットワーク機能 (GraphQL/AppSync)
src/extensions/scratch3_mesh_v2/scratch3_smalrubot_s1 - Smalrubot S1 ロボット制御
src/extensions/scratch3_smalrubot_s1/2. コアファイルの変更
src/engine/runtime.js- Mesh 機能統合、環境変数サポートsrc/engine/block-utility.js- カスタムユーティリティ追加src/engine/blocks.js- ブロック処理の拡張src/engine/target.js- ターゲット管理の変更src/extension-support/extension-manager.js- カスタム拡張機能のロードsrc/virtual-machine.js- VM コア機能の拡張src/util/debug-logger.js- デバッグログ機能3. テストファイル
test/integration/extensions/mesh-v2-data-merge.test.jstest/integration/extensions/mesh-v2-variable-sync.test.js4. 設定ファイル
.env.example- 環境変数テンプレート (Mesh設定など).format-message-lint.json- メッセージフォーマット設定5. コミット数
smalruby/smalruby3-gui のカスタマイズ内容
1. Opal (Ruby to JavaScript) 統合
opal/- Opal ライブラリファイルopal.js,opal.min.jsopal-parser.js,opal-parser.min.jsconfig-opal.js,config-opal-parser.js2. Ruby to Blocks Converter
src/lib/ruby-to-blocks-converter/- Ruby コードをブロックに変換3. Smalruby 特有のコンポーネント
src/components/mesh-domain-modal/- Mesh ドメイン設定モーダルsrc/components/koshien-test-modal/- Koshien テストモーダルsrc/components/block-display-modal/- ブロック表示モーダルsrc/components/url-loader-modal/- URL ローダーモーダルsrc/components/google-drive-save-dialog/- Google Drive 保存ダイアログ4. ビルド・セットアップスクリプト
scripts/make-setup-opal.js- Opal セットアップ自動化scripts/postbuild.mjs- ビルド後処理 (Service Worker など)scripts/prepublish.mjs- 公開前処理scripts/makePWAAssetsManifest.js- PWA アセットマニフェスト生成5. GUI コンポーネントの変更
src/components/gui/gui.jsx- メインGUI (Ruby タブ追加など)src/components/menu-bar/menu-bar.jsx- メニューバー (Mesh 状態、Koshien など)src/components/blocks/blocks.jsx- ブロックエディタ拡張src/containers/blocks.jsx- ブロックコンテナ拡張6. アセット・アイコン
7. 設定ファイル
.env.example- 環境変数テンプレートpackage.json- smalruby 固有の依存関係とスクリプトcspell.json- スペルチェック設定8. ドキュメント
docs/adr/- Architecture Decision Recordsdocs/google-drive-setup.md- Google Drive 連携設定9. コミット数
Upstream (scratchfoundation) の新機能
scratch-vm
scratch-gui
cards コンポーネント - チュートリアルカード機能削除した機能。トレードマークを含むため。新機能ではない。CHANGELOG.md削除したファイル。不要。TRADEMARK ファイル削除したファイル。新機能ではない。移行戦略
Phase 1: リポジトリセットアップ (推定工数: 2-3日)
1.1. smalruby3-editor の初期化
gui/smalruby3-editorを確認scratchfoundation/scratch-editor1.2. ディレクトリ構造の理解
Phase 2: scratch-vm の移行 (推定工数: 1-2週間)
2.1. 拡張機能の移行
優先度順に実施:
高優先度 (コア機能):
中優先度:
2.2. コアファイルの変更移行
src/engine/runtime.jsの変更をマージsrc/engine/block-utility.jsの変更をマージsrc/extension-support/extension-manager.jsの変更をマージsrc/virtual-machine.jsの変更をマージ2.3. テストの移行
2.4. 設定ファイルの移行
.env.exampleのマージPhase 3: scratch-gui (旧 smalruby3-gui) の移行 (推定工数: 2-3週間)
3.1. Opal 統合の移行
opal/ディレクトリをコピーscripts/make-setup-opal.jsの移行3.2. Ruby to Blocks Converter の移行
src/lib/ruby-to-blocks-converter/全体を移行3.3. コンポーネントの移行
優先度順:
高優先度:
中優先度:
低優先度:
3.4. ビルドスクリプトの移行
postbuild.mjsの移行と動作確認prepublish.mjsの移行makePWAAssetsManifest.jsの移行3.5. アセット・アイコンの移行
3.6. 設定ファイルの移行
.env.exampleのマージpackage.jsonの依存関係をマージ3.7. スタイルシートの移行
Phase 4: 統合テストとデバッグ (推定工数: 1-2週間)
4.1. ローカル開発環境での動作確認
npm installで依存関係のインストールnpm run buildでビルド成功を確認npm startで開発サーバー起動確認4.2. 機能テスト
4.3. ビルド・デプロイテスト
Phase 5: Docker 環境の更新 (推定工数: 2-3日)
5.1. Dockerfile の更新
5.2. docker-compose.yml の更新
gui/smalruby3-editorに変更5.3. entrypoint.sh の更新
Phase 6: CI/CD の更新 (推定工数: 1-2日)
6.1. GitHub Actions の更新
.github/workflows/ci-cd.ymlの調整6.2. デプロイワークフローの更新
Phase 7: ドキュメント更新 (推定工数: 1-2日)
7.1. README.md の更新
7.2. CLAUDE.md の更新
7.3. その他のドキュメント
Phase 8: 旧リポジトリのクリーンアップ (推定工数: 1日)
8.1. 旧リポジトリの整理
gui/smalruby3-guiの削除または archivegui/scratch-vmの削除または archive8.2. リポジトリ設定の更新
リスクと対策
リスク 1: 大量のコミット履歴
リスク 2: 依存関係の衝突
リスク 3: ビルドシステムの違い
リスク 4: Upstream の継続的な変更
完了条件
必須条件
推奨条件
推定総工数
合計: 約 6-9週間
次のステップ