Skip to content

Monorepo 移行: smalruby3-gui/scratch-vm から smalruby3-editor への移行計画 #29

@takaokouji

Description

@takaokouji

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-guiscratch-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. コミット数

  • 2024年以降: 約 2,083 コミット

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. コミット数

  • 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. 拡張機能の移行

優先度順に実施:

  1. 高優先度 (コア機能):

    • scratch3_mesh_v2 の移行と動作確認
    • microbitMore の移行と動作確認
  2. 中優先度:

    • 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. コンポーネントの移行

優先度順:

  1. 高優先度:

    • mesh-domain-modal
    • GUI コンポーネントの変更 (gui.jsx, menu-bar.jsx, blocks.jsx)
  2. 中優先度:

    • koshien-test-modal
    • block-display-modal
  3. 低優先度:

    • 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週間

次のステップ

  1. この移行計画のレビューと承認
  2. Phase 1 の開始: リポジトリセットアップ
  3. 定期的な進捗レポート
  4. 問題が発生した場合の迅速なエスカレーション

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions