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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions