Skip to content

feat(tutorial): add deck setup foundation (Phase 2 base)#684

Merged
takaokouji merged 1 commit into
developfrom
feature/tutorial-setup-foundation
May 11, 2026
Merged

feat(tutorial): add deck setup foundation (Phase 2 base)#684
takaokouji merged 1 commit into
developfrom
feature/tutorial-setup-foundation

Conversation

@takaokouji
Copy link
Copy Markdown

Summary

Phase 2 の基盤実装: チュートリアル deck 起動時に タブ・Ruby モード・拡張機能を自動セットアップ する横断機構 applyDeckSetup を導入。Phase 2 以降のすべての新規 deck (Ruby / Block / DNCL) がこの仕組みに依存する。

新規 deck では以下のように setup プロパティを宣言するだけで、tipsLibrary から起動した瞬間に正しい環境が整う:

'ruby-basics-1-numbers': {
    setup: {
        tab: 'ruby',
        rubyMode: 'ruby',
    },
    // ...
},
'block-math-lv0': {
    setup: {
        tab: 'code',
        extensions: ['pen'],
    },
    // ...
},
'dncl-basics-1-display': {
    setup: {
        tab: 'ruby',
        rubyMode: 'dncl',
    },
    // ...
},

Architecture

tips-library.jsxhandleItemSelect で deck activate 直前に applyDeckSetupawait 呼び出し し、全前提条件が整ってからチュートリアルカードを表示する。

setup フィールド 動作
tab: 'code'/'blocks'/'costumes'/'sounds'/'ruby' editor-tab reducer の activateTab を dispatch
rubyMode: 'dncl' setDnclMode(true) + furigana off (localStorage)
rubyMode: 'furigana' setDnclMode(false) + furigana on (localStorage)
rubyMode: 'ruby' setDnclMode(false) + furigana off (localStorage)
extensions: [...] 各 ID を vm.extensionManager.loadExtensionURL で順次 await ロード

全操作が 冪等 (既に正しい状態なら no-op)。拡張ロード失敗時は console.warn するのみで deck 開始を阻害しない (graceful degradation)。

既存 10 deck への影響

setup を持たないため何も実行されず、現状動作を完全に維持。後方互換あり。

Ruby モードと furigana state の連携

furigana フラグは ruby-tab.jsx のローカル state (Redux 化されていない) のため、applyDeckSetup は localStorage を更新するに留めます。既に mount 済みの ruby-tab には次回 mount 時 (タブ切替などをトリガー) に反映されます。setup.tab: 'ruby' を併せて指定するチュートリアルでは、タブ切替が ruby-tab を新規 mount するため即座に反映される設計。

Changes

File Change
packages/scratch-gui/src/lib/deck-setup.js NEW — applyDeckSetup(setup, dispatch, vm) ヘルパー実装
packages/scratch-gui/src/containers/tips-library.jsx handleItemSelect を async 化し setup を適用、vm を Redux から接続
packages/scratch-gui/test/unit/lib/deck-setup.test.js NEW — 10 ケースの単体テスト
packages/scratch-gui/.prettierignore 新 Smalruby ファイル 2 件を whitelist 登録
.claude/rules/scratch-gui/smalruby-prettier-files.md 同上
docs/tutorial/progress.md Phase 1 ✅ マージ済みに更新、基盤の進捗反映

Test plan

  • bin/dx bash -c "cd packages/scratch-gui && npm run lint"
  • bin/dx bash -c "cd packages/scratch-gui && npm exec jest test/unit/lib/deck-setup.test.js" 全 10 ケース pass
  • CI 全体 (lint / unit / integration)
  • 既存 deck (intro-getting-started, chat-1-basic-1 等) が setup 不在でも従来通り動作することを Playwright で確認
  • Phase 2 の最初の Ruby deck (ruby-basics-1-numbers) が実装されてから setup の実機動作を結合確認

Closes

部分対応 (foundation のみ): #679 (Phase 2 — Ruby チュートリアル拡充)。Ruby deck 本体は後続 PR で対応するため issue は close しない。

Related

🤖 Generated with Claude Code

チュートリアル deck 起動時に「タブ・Ruby モード・拡張機能」を自動セットアップ
する横断機構を導入。Phase 2 以降のすべての新規 deck (Ruby/Block/DNCL) がこの
仕組みに依存する。

deck 定義に新しい `setup` プロパティを追加可能にする:

    'deck-id': {
        setup: {
            tab: 'ruby',                      // 'code' | 'costumes' | 'sounds' | 'ruby'
            rubyMode: 'dncl',                 // 'ruby' | 'furigana' | 'dncl'
            extensions: ['pen', 'microbitMore'],
        },
        // ...
    }

`tips-library.jsx` の `handleItemSelect` で deck activate 直前に
`applyDeckSetup` を await 呼び出しし、:

- `tab` → `editor-tab` reducer の `activateTab` を dispatch
- `rubyMode` → `dncl-mode` reducer の `setDnclMode` を dispatch +
  `smalruby:furiganaEnabled` localStorage を同期 (ruby-tab.jsx が次回 mount 時に反映)
- `extensions` → `vm.extensionManager.loadExtensionURL` を順次 await
  (ロード失敗は `console.warn` のみで deck 開始を阻害しない)

全操作が冪等。setup を持たない既存 10 deck は影響なし (後方互換)。

- `src/lib/deck-setup.js`: `applyDeckSetup(setup, dispatch, vm)` ヘルパー実装
- `src/containers/tips-library.jsx`: setup 呼び出し + vm prop 接続
- `test/unit/lib/deck-setup.test.js`: 10 ケースの単体テスト (全 pass)
- `.prettierignore` / `smalruby-prettier-files.md`: 新 Smalruby ファイルの whitelist 登録
- `docs/tutorial/progress.md`: Phase 1 を ✅ マージ済みに更新、基盤の進捗を反映

Refs: #679, #682

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

@takaokouji takaokouji merged commit 74fd673 into develop May 11, 2026
9 checks passed
@takaokouji takaokouji deleted the feature/tutorial-setup-foundation branch May 11, 2026 02:04
github-actions Bot pushed a commit that referenced this pull request May 11, 2026
…ial-setup-foundation

feat(tutorial): add deck setup foundation (Phase 2 base)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant