metabase-modular-embedding-to-modular-embedding-sdk-upgrade について
React プロジェクトの Metabase Modular embedding Web コンポーネントを React SDK に移行するワークフロー型スキルです。手順に沿った調査、API に基づく対応付け、コード変更、型チェックを行います。
主な機能
- 01前提条件とプロジェクトの調査
- 02Web コンポーネントと SDK の対応付け
- 03MetabaseProvider 設定の変換
- 04embed.js とグローバル設定の削除
- 05根拠を示した型チェック
活用シーン
- 01React アプリの Metabase 埋め込みを更新
- 02既存の埋め込み属性を SDK の props に対応付け
- 03プロジェクトの型チェックによる移行コードの検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ metabase/ agent-skills --skill metabase-modular-embedding-to-modular-embedding-sdk-upgradeインストール後、Claude Code で/metabase-modular-embedding-to-modular-embedding-sdk-upgradeを入力して読み込まれたか確認します。
同梱ファイルscripts/prepare.shscripts/read-sources.sh
詳細
実行契約
ワークフローの各ステップを順番に実行してください。ステップを飛ばしてはいけません。最初にチェックリストを作成し、その後、各ステップを実行して、根拠を示しながら完了を明示してください。各ステップの出力は次のステップに引き継がれるため、ステップを飛ばすと移行が正しく行われません。
情報不足またはツールの不具合によりステップを完了できない場合は、必ず次の対応をしてください。
- 該当ステップを ❌ blocked として記録します。
- 不足している情報、または発生した問題を具体的に説明します。
- 作業を停止します(後続のステップには進みません)。
必須の出力構成
回答には、次のセクションをこの順序で含めてください。
- ステップ 0:前提条件の確認
- ステップ 0.1:移行計画チェックリスト
- ステップ 1:プロジェクトのスキャン
- ステップ 2:対象 SDK API
- ステップ 3:移行マッピング
- ステップ 4:適用したコード変更
- ステップ 5:型チェックの検証
- ステップ 6:最終的な概要
各ステップのセクションは、次のステータス行で終えてください。
Status: ✅ completeまたはStatus: ❌ blocked
根拠の要件
- ステップ 0:検出した React(依存関係とバージョン)、Metabase インスタンスのバージョン、対象 SDK のバージョン、パッケージマネージャー。
- ステップ 1:Modular embedding の使用箇所があるすべてのファイル(Web コンポーネント、metabaseConfig、embed.js の script タグ)と、一致する grep の出力行。
- ステップ 2:d.ts がコンテキスト内で読み込まれていることの確認。エクスポートされたコンポーネント、その props、MetabaseProvider の config 型を列挙します。
- ステップ 3:構造化された移行マッピング。すべての Web コンポーネントから React コンポーネントへの対応と prop の変換、認証設定のマッピング、embed.js の削除計画を含めます。
- ステップ 4:ファイルごとに、変更内容と適用した正確な diff。
- ステップ 5:実行した正確な型チェックコマンドと、残っているエラーがある場合はその概要。
認証情報の安全性
この移行では、API キー、JWT、認証設定値(例:window.metabaseConfig)を含むコードを扱うことがあります。次のルールに従ってください。
- 認証情報の値そのものは絶対に出力しないでください。コード内にハードコードされた API キー、トークン、シークレットが見つかった場合は、値を表示せず、変数名またはファイルの場所を参照してください(例:「
config.js:12のキー」)。 - コードの diff と概要では、解決後の値ではなく変数参照を使用してください。
- ハードコードされたシークレットが見つかった場合は、ユーザーに知らせ、移行の一環として環境変数への移動を推奨してください。
パフォーマンス
このワークフローはパイプラインとして設計されています。
Round 1 (grep+glob+pkg) ──► Round 2 (prepare.sh) ──► Round 3 (read-sources.sh) ──► Step 3 (mapping, inline)
│
Step 4 per-file:
├── Convert FileA
├── Convert FileB
└── Convert FileC
│
Step 5 (typecheck) ──► Step 6
Claude Code では、並列ツール呼び出し、またはサブエージェントに対する run_in_background: true を使用してください。
リポジトリのブランチ、コミット、PR、issue は解析しないでください。ノイズが多く、関係ありません。
ステップ 1+2 のツール呼び出しラウンド数の上限
ステップ 1+2 は3 回のツール呼び出しラウンドで完了してください。
ラウンド 1 — 情報の検出(すべて同時に、1 つのメッセージで実行):
*.{jsx,tsx,js,ts}ファイル内のmetabase-dashboard、metabase-question、metabase-browserを grep します。window.metabaseConfigを grep します。/app/embed.jsを grep します(script タグを見つけるため)。package.jsonを読み込みます(React の依存関係を確認し、パッケージマネージャーを検出します)。- ロックファイル(
yarn.lock、pnpm-lock.yaml、package-lock.json)を glob で検索します。 - ユーザーが対象バージョンを指定していない場合は、
npm view @metabase/embedding-sdk-react versionを実行します。
すべてのツール呼び出しを 1 つのメッセージで行います。
ラウンド 2 — prepare.sh の実行とドキュメントの取得(並行して実行):
bash <skill-path>/scripts/prepare.sh {TARGET_VERSION}
対象の SDK npm パッケージをダウンロードして展開します。SDK_TMPDIR と d.ts の有無を出力します。
同じメッセージ内で、「許可されているドキュメントソース」に記載された URL 形式に従い、対象バージョンの llms-embedding-full.txt を取得します。
ラウンド 3 — read-sources.sh(Bash 呼び出しを 1 回):
bash <skill-path>/scripts/read-sources.sh {SDK_TMPDIR}
対象 SDK の d.ts 型定義を標準出力に出力します。
ラウンド 3 の後は、追加のツール呼び出しを行わずに、ステップ 1 の結果、ステップ 2 の結果、ステップ 3 の移行マッピングを出力してください。データの読み込みが完了したら、続けてステップ 3 をその場で作成してください。
対象範囲
このスキルは、React アプリ内で使用されている Modular embedding(Web コンポーネントベース)を、Modular embedding SDK(@metabase/embedding-sdk-react)に移行します。プロジェクトは、JSX/TSX ファイル内で Modular embedding の Web コンポーネントを使用している React アプリケーションである必要があります。
React ベースではないプロジェクトには、このスキルは適用されません。Web コンポーネントではなく iframe を使用しているプロジェクトでは、代わりに metabase-full-app-to-modular-embedding-upgrade スキルを使用してください。
このスキルで対応する内容
- JSX/TSX 内の
<metabase-dashboard>、<metabase-question>、<metabase-browser>Web コンポーネントを、それぞれ対応する SDK の React コンポーネントに置き換えます @metabase/embedding-sdk-reactnpm パッケージをインストールします- React コンポーネントツリーの適切な階層に
<MetabaseProvider>を追加します window.metabaseConfigをMetabaseProviderの設定 props に変換しますembed.jsの<script>タグを削除します(通常はindex.htmlまたは HTML エントリポイントにあります)window.metabaseConfigの代入を削除します- HTML 属性名(ケバブケース)を React の prop 名(キャメルケース)に変換します
このスキルで対応しない内容
- 通常の HTML/テンプレートで Modular embedding の Web コンポーネントを使用している、React 以外のプロジェクト
使用可能なドキュメントソース
次の URL を使用して、バージョン固有の llms-embedding-full.txt を取得してください。
https://www.metabase.com/docs/v0.{VERSION}/llms-embedding-full.txt
URL 内のバージョンには v0.58 の形式を使用します(正規化:先頭の v または 0. を削除し、パッチバージョンを除きます。例:0.58.1 → 58 → URL では v0.58 を使用)。この単一ファイルには、そのバージョンの埋め込みに関するドキュメントがすべて LLM での利用に適した形式で含まれています。
その他の制約:
- GitHub の PR/issue や npm のページは使用しないでください
- changelog のリンクから GitHub に移動したり、URL を推測したりしないでください
バージョンの検出
バージョンの検出はすべて Round 1 で行ってください。
- Metabase インスタンスのバージョン:Docker イメージタグ(
metabase/metabase:v、metabase/metabase-enterprise:v)、METABASE_VERSION、または env ファイル内のバージョン参照を検索します。検出できない場合は、AskUserQuestion を使用してください。 - 対象 SDK バージョン:
- ユーザーが指定している場合は、そのバージョンを使用します。
- それ以外の場合は、Metabase インスタンスのバージョンに基づいて対応する SDK バージョンを特定します(同じバージョン体系を使用します。Metabase v0.58 → SDK 0.58.x)。
npm view @metabase/embedding-sdk-react versionを実行し、対応する最新バージョンを確認してください。
- パッケージマネージャー:ロックファイルから検出します。例:
yarn.lock→ yarn、pnpm-lock.yaml→ pnpm、package-lock.json→ npm。
ワークフロー開始前の手順
移行計画チェックリスト
進捗を追跡するためのチェックリストを作成してください。Claude Code では、TaskCreate/TaskUpdate ツールを使用します。
- Step 0:前提条件の確認
- Step 1:Modular embedding の使用状況をスキャン
- Step 2:対象 SDK の API を取得
- Step 3:移行マッピングを作成
- Step 4:コードを変更(ファイルごとにサブタスクを 1 つ作成)
- Step 5:型チェックと修正
- Step 6:最終要約
ワークフロー
Step 0:前提条件の確認
開始前に、以下を確認してください。
- React 依存関係:
package.jsonのdependenciesまたはdevDependenciesにreactがあるか確認します。ない場合は、このスキルは React プロジェクトにのみ適用されるため、❌ 対応不可として記録します。 - JSX/TSX 内の Web コンポーネント:Round 1 の grep 結果で、
.jsx、.tsx、.js、.tsファイル内に<metabase-*の使用があることを確認します(通常の HTML ファイルのみでの使用は対象外です)。Web コンポーネントが通常の HTML ファイル内でのみ使われている場合、このスキルでは React 内ですでに Web コンポーネントが使われている必要があるため、❌ 対応不可として記録します。 - Metabase インスタンスのバージョン:「バージョンの検出」セクションを参照して、検出するかユーザーに確認します。
- 対象 SDK バージョン:「バージョンの検出」の説明に従って特定します。
- パッケージマネージャー:ロックファイルから検出します。
ステップ 1:Modular の埋め込みの使用状況をスキャンする
ステップ 1 は Round 1 で実行します。grep のみを行い、ファイルは読み込みません。
次のパターンを(すべて並列で)grep します。
*.{jsx,tsx,js,ts}ファイル内の<metabase-dashboard— ダッシュボードの Web コンポーネント*.{jsx,tsx,js,ts}ファイル内の<metabase-question— 質問の Web コンポーネント*.{jsx,tsx,js,ts}ファイル内の<metabase-browser— コレクションブラウザーの Web コンポーネントwindow.metabaseConfig— グローバル設定の割り当て(index.htmlまたは JS/TS ファイルにある場合があります)/app/embed.js— embed.js の script タグ(通常はindex.htmlにあります)
これにより、ファイルパスと一致する行が返されます。まだプロジェクトファイルは読み込まないでください。読み込みはステップ 4 で行います。
出力:カテゴリ別にまとめたファイル一覧:
Web components (JSX/TSX):
- src/pages/Dashboard.tsx:15 — <metabase-dashboard dashboard-id="123">
- src/pages/Analytics.tsx:22 — <metabase-question question-id="456">
Config:
- public/index.html:8 — window.metabaseConfig = { ... }
Script tag:
- public/index.html:12 — <script defer src="...embed.js"></script>
ステップ 2:対象 SDK の API を取得する
Round 2 で prepare.sh を実行します(ラウンドの予算を参照)。続いて Round 3 で read-sources.sh を実行し、d.ts をコンテキストに読み込みます。
d.ts が利用可能な場合は、次の情報を抽出します。
- エクスポートされているすべての React コンポーネント(例:
MetabaseProvider、ダッシュボード/質問/コレクションのコンポーネント) - 各コンポーネントの prop 型(エイリアス名だけでなく、具体的な型まで解決する)
MetabaseProviderの設定型(受け付けるフィールド)- 認証設定型
Round 2 で取得する埋め込みドキュメント(llms-embedding-full.txt)は、コンポーネントの使用方法、設定オプション、移行ガイダンスの補足資料です。完全に把握するため、d.ts と併せて使用してください。
d.ts が利用できない場合(SDK バージョン 0.52.0 より前では、単一の index.d.ts が同梱されていません)は、埋め込みドキュメントを主な API リファレンスとして使用します。d.ts もドキュメントも利用できない場合は、ステップ 2 を ❌ ブロックとして記録します。
ステップ 3:移行マッピングを作成する(ステップ 1~2 が完了し、✅ になった後)
対象範囲:ステップ 1 のスキャンで実際に見つかったコンポーネントと設定のみをマッピングします。
次の内容を網羅するマッピングを作成します。
コンポーネントのマッピング
ステップ 1 で見つかった各 Web コンポーネントについて、d.ts から対応する SDK の React コンポーネントを特定します。属性を prop にマッピングします。
## Migration Mapping
### <metabase-dashboard> → {SDK dashboard component from d.ts}
- `dashboard-id` → `dashboardId` (camelCase)
- `with-title` → `withTitle` (boolean prop)
- `drills` → check d.ts for equivalent prop name
- Other attributes → map to corresponding React props from d.ts
### <metabase-question> → {SDK question component from d.ts}
- `question-id` → `questionId` (camelCase)
- Other attributes → map from d.ts
### <metabase-browser> → {SDK collection component from d.ts}
- `initial-collection` → check d.ts for prop name
- Other attributes → map from d.ts
各マッピングについて、対象 prop の型を具体的な型まで解決します。属性に対応する SDK の prop がない場合は、「削除(SDK では非対応)」または「代替方法が必要」と記載します。
認証設定のマッピング
window.metabaseConfig のフィールドを MetabaseProvider の設定にマッピングします。
### Auth & Config
- window.metabaseConfig.instanceUrl → config.metabaseInstanceUrl (check d.ts for exact field name)
- window.metabaseConfig.jwtProviderUri → authConfig.jwtProviderUri or authConfig.authProviderUri or config.authProviderUri (check d.ts — the field was renamed from `jwtProviderUri` to `authProviderUri` in some versions)
- window.metabaseConfig.locale → locale prop or config field (check d.ts)
フィールド名の正確な情報源は d.ts です。推測しないでください。window.metabaseConfig のフィールドに SDK の設定型で対応するものがない場合は、その旨を記載します。
MetabaseProvider の配置
<MetabaseProvider> を追加する場所を特定します。
- Modular の埋め込み Web コンポーネントをすべて含む、最も階層が上の共通祖先コンポーネントを見つけます。
- 通常はアプリのルート(
App.tsx、App.jsx、または同等のコンポーネント)です。 - プロバイダーはすべての SDK コンポーネントをラップする必要があります。ただし、コンポーネントがサブツリーにのみ存在する場合は、アプリ全体を不必要にラップしないでください。
削除計画
- embed.js の
<script>タグ:削除するファイルと正確なコードを特定します。 window.metabaseConfigの割り当て:削除するファイルと正確なコードを特定します。
ステップ 4:コードを変更する
ファイルごとの作業を始める前に:
- SDK パッケージをインストールします。
{package-manager} add @metabase/embedding-sdk-react@{TARGET_VERSION} - embed.js の
<script>タグを削除します。 window.metabaseConfigの割り当てを削除します。- 移行した設定を指定して、決定した場所に
<MetabaseProvider>のラッパーを追加します。
ファイルごとのタスク(Web コンポーネントを含む各ファイルについて):
- ファイルを読む — ファイルの内容を初めて読み込みます。
- マッピング項目を照合する — このファイルに含まれる Web コンポーネントと、現在の属性を確認します。
- 各 Web コンポーネントを変換する:
- Web コンポーネントのタグを SDK の React コンポーネントに置き換えます。
- HTML 属性(ケバブケース)を React prop(キャメルケース)に変換します。
- 文字列の属性値を適切な JS 型に変換します(例:
"false"→{false}、"123"→{123})。 - SDK コンポーネントの import 文を追加します。
- 報告する — 変更内容を出力します。
並列化の方針:
- ファイル数が 10 以下:すべてメインエージェントで処理します。
- ファイル数が 10 を超える場合:3~5 個のサブエージェントに分割します。それぞれにファイルパスと移行マッピング全体を渡します。
型変換ルール
HTML 属性値を React の props に変換する場合:
- 文字列
"true"/"false"→ ブール値{true}/{false} - 数値文字列
"123"→ 数値{123} - JSX 内にすでにあるテンプレート式(例:
{dashboardId})→ そのまま維持 - 静的な文字列 ID → d.ts の prop 型が文字列を受け付ける場合は文字列のまま維持し、それ以外の場合は変換
Step 5: 型チェックによる検証
- 型チェックを実行 —
npm run typecheck、tsc --noEmit、またはプロジェクトで同等のコマンドを実行します。 - エラーを分析 — SDK 関連のエラーを根本原因ごとに分類します。
- 期待される型を調べる — インストール済みの
node_modules/@metabase/embedding-sdk-react/dist/index.d.tsで、失敗した各シンボルを検索します。 - まとめて修正 — 型チェックを再実行する前に、すべての修正を適用します。
- 検証 — 型チェックを再実行します。3 回試行してもエラーが残る場合は、❌ ブロックとします。
プロジェクトで TypeScript を使用していない場合は、d.ts と照らし合わせて変更内容を手動で確認し、prop 名と型が一致することを検証します。手動で検証した旨を添えて、Step 5 を ✅ とします。
Step 6: 出力の概要
次のセクションに整理します。
1. 適用した変更 — 変更したファイルをすべて列挙し、それぞれの変更内容を 1 行で説明します。
2. コンポーネントの対応表 — 各旧 Web コンポーネントと新しい React コンポーネントの対応表:
| File | Old | New | Props Changed |
|---|---|---|---|
| src/Dashboard.tsx | <metabase-dashboard dashboard-id="1"> | <InteractiveDashboard dashboardId={1} /> | dashboard-id → dashboardId |
3. 認証の移行 — window.metabaseConfig を MetabaseProvider の設定にどのように変換したか。
4. 削除した成果物 — embed.js の script タグ、window.metabaseConfig、使用されなくなったコード。
5. 新機能 — Modular embedding では利用できなかった、現在利用可能な SDK 機能(例:React フック、型付きコールバック、InteractiveQuestion.FilterBar などのサブコンポーネント)。簡潔にまとめます。
6. インスタンス要件 — 必要な Metabase インスタンスの最低バージョン。Metabase インスタンスのバージョンは SDK のバージョンと一致している必要があります(例:SDK 0.58.x には Metabase v0.58 以降が必要です)。
再試行ポリシー
ドキュメントの取得:
llms-embedding-full.txtの取得時に 404 が返された場合は、Metabase のバージョン番号を確認して再試行します。それでも失敗する場合は、ドキュメントを参照せずに進めます(主な情報源は d.ts です)。
npm pack:
- 対象のバージョンで
npm packが失敗する場合、そのバージョンは npm に存在しない可能性があります。❌ ブロックとし、その旨をユーザーに伝えます。
npm install:
- peer dependency の競合でパッケージのインストールに失敗した場合は、
--legacy-peer-deps(npm)または同等のオプションを試します。競合についてユーザーに報告します。