-
-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
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.jstest/integration/extensions/mesh-v2-variable-sync.test.js- 各拡張機能のテスト
4. 設定ファイル
.env.example- 環境変数テンプレート (Mesh設定など).format-message-lint.json- メッセージフォーマット設定
5. コミット数
- 2024年以降: 約 2,083 コミット
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.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 Recordsdocs/google-drive-setup.md- Google Drive 連携設定
9. コミット数
- 2024年以降: 約 614 コミット
Upstream (scratchfoundation) の新機能
scratch-vm
- scratch3_face_sensing - 顔認識拡張機能(新規追加)
scratch-gui
cards コンポーネント - チュートリアルカード機能削除した機能。トレードマークを含むため。新機能ではない。CHANGELOG.md削除したファイル。不要。TRADEMARK ファイル削除したファイル。新機能ではない。
移行戦略
Phase 1: リポジトリセットアップ (推定工数: 2-3日)
1.1. smalruby3-editor の初期化
- 既存の
gui/smalruby3-editorを確認 - upstream リモート追加:
scratchfoundation/scratch-editor - ブランチ戦略の確立 (develop がデフォルト)
1.2. ディレクトリ構造の理解
- Monorepo (npm workspaces) の仕組みを確認
- ビルドシステムの理解
- 各パッケージ間の依存関係マップ作成
Phase 2: scratch-vm の移行 (推定工数: 1-2週間)
2.1. 拡張機能の移行
優先度順に実施:
-
高優先度 (コア機能):
- scratch3_mesh_v2 の移行と動作確認
- microbitMore の移行と動作確認
-
中優先度:
- scratch3_mesh (レガシー) の移行
- koshien の移行
- scratch3_smalrubot_s1 の移行
2.2. コアファイルの変更移行
-
src/engine/runtime.jsの変更をマージ -
src/engine/block-utility.jsの変更をマージ -
src/extension-support/extension-manager.jsの変更をマージ -
src/virtual-machine.jsの変更をマージ - その他のコアファイル変更
2.3. テストの移行
- 拡張機能テストの移行
- Mesh v2 テストの移行
- すべてのテストが通ることを確認
2.4. 設定ファイルの移行
-
.env.exampleのマージ - その他の設定ファイル
Phase 3: scratch-gui (旧 smalruby3-gui) の移行 (推定工数: 2-3週間)
3.1. Opal 統合の移行
-
opal/ディレクトリをコピー -
scripts/make-setup-opal.jsの移行 - Webpack 設定の調整
- Opal ビルドプロセスの動作確認
3.2. Ruby to Blocks Converter の移行
-
src/lib/ruby-to-blocks-converter/全体を移行 - 各拡張機能のコンバーター動作確認
- エラーハンドリングのテスト
3.3. コンポーネントの移行
優先度順:
-
高優先度:
- mesh-domain-modal
- GUI コンポーネントの変更 (gui.jsx, menu-bar.jsx, blocks.jsx)
-
中優先度:
- koshien-test-modal
- block-display-modal
-
低優先度:
- url-loader-modal
- google-drive-save-dialog
3.4. ビルドスクリプトの移行
-
postbuild.mjsの移行と動作確認 -
prepublish.mjsの移行 -
makePWAAssetsManifest.jsの移行 - Monorepo ビルドシステムとの統合
3.5. アセット・アイコンの移行
- すべてのカスタムアイコンとアセットをコピー
- アセットパスの調整
3.6. 設定ファイルの移行
-
.env.exampleのマージ -
package.jsonの依存関係をマージ - その他の設定ファイル
3.7. スタイルシートの移行
- カスタム CSS の移行
- スタイルの動作確認
Phase 4: 統合テストとデバッグ (推定工数: 1-2週間)
4.1. ローカル開発環境での動作確認
-
npm installで依存関係のインストール -
npm run buildでビルド成功を確認 -
npm startで開発サーバー起動確認
4.2. 機能テスト
- Ruby ⇔ Blocks 変換の動作確認
- すべての拡張機能の動作確認
- Mesh v2 機能の動作確認
- Koshien 機能の動作確認
- microbitMore の動作確認
4.3. ビルド・デプロイテスト
- Production ビルドの成功確認
- デプロイプロセスの動作確認
- PWA 機能の動作確認
Phase 5: Docker 環境の更新 (推定工数: 2-3日)
5.1. Dockerfile の更新
- Monorepo 構造に対応した Dockerfile 作成
- ビルドプロセスの調整
5.2. docker-compose.yml の更新
- パスを
gui/smalruby3-editorに変更 - 環境変数の調整
5.3. entrypoint.sh の更新
- Monorepo のビルドコマンドに対応
Phase 6: CI/CD の更新 (推定工数: 1-2日)
6.1. GitHub Actions の更新
-
.github/workflows/ci-cd.ymlの調整 - Monorepo ビルドプロセスに対応
- テスト実行の調整
6.2. デプロイワークフローの更新
- デプロイスクリプトの調整
- 環境変数の設定
Phase 7: ドキュメント更新 (推定工数: 1-2日)
7.1. README.md の更新
- 新しいディレクトリ構造の説明
- ビルド手順の更新
- 開発ワークフローの更新
7.2. CLAUDE.md の更新
- プロジェクト構造の説明を更新
- サブモジュールに関する記述を削除/更新
- 新しい Monorepo ワークフローを追加
7.3. その他のドキュメント
- ADR の移行 (必要に応じて)
- Google Drive セットアップガイドの移行
Phase 8: 旧リポジトリのクリーンアップ (推定工数: 1日)
8.1. 旧リポジトリの整理
-
gui/smalruby3-guiの削除または archive -
gui/scratch-vmの削除または archive - .gitignore の更新
8.2. リポジトリ設定の更新
- GitHub リポジトリ設定の更新
- Dependabot の設定更新
- ブランチ保護ルールの確認
リスクと対策
リスク 1: 大量のコミット履歴
- リスク: 2,000+ コミットの変更を手動でマージするのは困難
- 対策: Git の merge/rebase 戦略を活用、段階的な移行
リスク 2: 依存関係の衝突
- リスク: Monorepo 内の他のパッケージとの依存関係衝突
- 対策: 段階的なテスト、依存関係の慎重な管理
リスク 3: ビルドシステムの違い
- リスク: Monorepo のビルドシステムが異なる可能性
- 対策: ビルドスクリプトの慎重な移行と動作確認
リスク 4: Upstream の継続的な変更
- リスク: 移行中に upstream が更新される可能性
- 対策: 定期的な upstream の確認、変更の追跡
完了条件
必須条件
- すべての Smalruby 拡張機能が動作する
- Ruby ⇔ Blocks 変換が正常に動作する
- Mesh v2 機能が正常に動作する
- すべてのテストがパスする
- Production ビルドが成功する
- Docker 環境で正常に起動する
- CI/CD が正常に動作する
推奨条件
- ドキュメントが最新の状態に更新されている
- 旧リポジトリが適切に archive されている
- デプロイが正常に完了する
推定総工数
- 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 の開始: リポジトリセットアップ
- 定期的な進捗レポート
- 問題が発生した場合の迅速なエスカレーション
Metadata
Metadata
Assignees
Labels
No labels