dev-toolbar-review について
dev toolbar やその統合箇所を変更するプルリクエスト向けのレビューチェックリストです。環境ガード、機能フラグの上書き、テレメトリー購読、SSE 処理、アプリへのマウントを確認できます。
主な機能
- 01local と staging の環境ガードを確認
- 02機能フラグ上書き Cookie のレビュー
- 03テレメトリーイベント購読の検証
- 04SSE ストリームと再接続処理の確認
- 05各アプリでの toolbar マウントをレビュー
活用シーン
- 01dev toolbar パッケージの変更をレビュー
- 02機能フラグ上書き動作を確認
- 03テレメトリーや SSE の変更を評価
- 04アプリへの toolbar 統合を検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ supabase/ supabase --skill dev-toolbar-reviewインストール後、Claude Code で/dev-toolbar-reviewを入力して読み込まれたか確認します。
詳細
開発用ツールバーのレビューガイド
開発用ツールバー(packages/dev-tools/)と、packages/common/ の統合箇所に変更を加える PR のレビューチェックリストです。ツールバーはテレメトリーイベントを表示し、ローカル環境とステージング環境でのみフィーチャーフラグをオーバーライドできます。
該当する場合
以下のパスを変更する PR には、growth eng のレビューが必要です。
packages/dev-tools/**(CODEOWNERS で@supabase/growth-engが所有)packages/common/posthog-client.ts(フラグのオーバーライド読み込み、イベントのサブスクリプション)packages/common/feature-flags.tsx(フラグのオーバーライドのマージロジック)- アプリレベルのマウント:
apps/studio/、apps/www/、apps/docs/にあるDevToolbarProvider/DevToolbar/DevToolbarTrigger
注:posthog-client.ts と feature-flags.tsx は growth-eng の CODEOWNERS に含まれていないため、これらのファイルのみを変更する PR ではレビューが自動でリクエストされません。PR フィードでこれらの変更を確認してください。
レビューチェックリスト
1. 環境ガード
ファイル: packages/dev-tools/index.ts、DevToolbar.tsx、DevToolbarTrigger.tsx、DevToolbarContext.tsx
ツールバーは、次の 2 層の保護を使用します。
- ビルド時のツリーシェイキング(
index.ts):バンドラーはprocess.env.NEXT_PUBLIC_ENVIRONMENTをインライン化するため、isToolbarEnabled = env === 'local' || env === 'staging'によってエクスポートの三項演算子が静的になります。これら 2 つの環境以外では、すべてのエクスポートがスタブになります(DevToolbarとDevToolbarTriggerはnullをレンダリングし、DevToolbarProviderは子要素をそのまま渡し、useDevToolbarは何もしないコンテキストを返します)。また、実装モジュールはバンドルから除外されます。同じリテラルのprocess.envチェックがDevToolbarContext.tsx、DevToolbar.tsx、DevToolbarTrigger.tsx、feature-flags.tsxにも重複して記述されています。バンドラーがチェックを直接確認できる必要があるため、これらの内容を一致させてください。 - 実装内のランタイムガード:
IS_LOCAL_DEV = env === 'local'により、ローカル環境限定の部分(DevToolbarContext.tsxの SSE イベントストリームと、DevToolbar.tsxのローカル環境限定 UI)が制限されます。そのため、ステージング環境ではこれらを使わずにツールバーを利用できます。
確認事項:
- ガードが削除または拡大されていないこと。ツールバーが有効なのは
localとstagingのみです。プレビュー環境と本番環境のビルドでは、引き続きスタブが使われる必要があります。 index.tsのツリーシェイキング用の三項演算子が維持されていること。これらは本番環境での主要な安全策です。- 既存のガードパターンを回避する新しいコンポーネントやエクスポートがないこと。
2. フラグのオーバーライド用 Cookie
ファイル: packages/dev-tools/DevToolbar.tsx、packages/common/posthog-client.ts、packages/common/feature-flags.tsx
ツールバーは、ローカルでフィーチャーフラグをオーバーライドする 2 つの Cookie を書き込みます。
x-ph-flag-overrides— PostHog のフラグオーバーライドx-cc-flag-overrides— ConfigCat のフラグオーバーライド
これらは、次の箇所で読み取られます。
posthog-client.ts:getFeatureFlag()— SDK に問い合わせる前に、PostHog のオーバーライド Cookie を確認します。feature-flags.tsx— 初期化中に両方のオーバーライド Cookie をフラグストアにマージします。
確認事項:
- Cookie 名が変更されていないこと(書き込み側とすべての読み取り側で一致している必要があります)。
feature-flags.tsxのマージ/優先順位ロジックに変更がないこと(現在はvercel-flag-overridesが最初に適用され、ローカル開発ではx-cc-flag-overridesが優先されます)。- オーバーライド Cookie が
IS_LOCAL_DEV/isLocalDevガードの外で読み取られていないこと。オーバーライドが本番環境のフラグ評価に影響してはなりません。 - 型強制のバグにつながる可能性がある、
packages/dev-tools/utils.tsのparseOverrideValueまたはvaluesAreEqualの変更がないこと。
3. テレメトリーイベントの購読
ファイル: packages/common/posthog-client.ts、packages/dev-tools/DevToolbarContext.tsx
ツールバーは、posthogClient.subscribeToEvents() を介してクライアント側の PostHog イベントを購読します。
PostHog クライアントは、capturePageView、capturePageLeave、
および identify の後に emitToDevListeners() を呼び出します。注:captureExperimentExposure は
開発用リスナーへのイベント送信を行わずに、posthog.capture() を直接呼び出します。そのため、実験の露出イベントはツールバーに表示されません。
確認項目:
emitToDevListenersまたはsubscribeToEventsの変更により、実際のイベント送信経路に副作用が生じる可能性(例:エラーの発生、ブロッキング、イベントデータの変更)- リスナーセット(
devListeners)が同期的に反復され、イベントのディスパッチが遅延する可能性 - イベントを送信する新しい PostHog クライアントメソッドが
emitToDevListenersを呼び出していないこと(ツールバーの表示に漏れが生じます)
4. SSE サーバーテレメトリーストリーム
ファイル: packages/dev-tools/DevToolbarContext.tsx
ツールバーは、Server-Sent Events を介して ${apiUrl}/telemetry/stream に接続し、
サーバー側のテレメトリーを表示します。接続エラー時には指数バックオフを使用します。
確認項目:
- SSE エンドポイントの URL または
session_idCookie 処理の変更 - 過剰な再試行や接続リークにつながる可能性がある再接続ロジックの変更
- 注:ストリームエンドポイントはプラットフォームリポジトリにあります。リポジトリをまたぐ変更には、連携したレビューが必要です
5. アプリへのマウント
プロバイダーとツールバーパネル(DevToolbarProvider、DevToolbar):
apps/studio/pages/_app.tsxapps/www/pages/_app.tsx、apps/www/app/providers.tsxapps/docs/features/app.providers.tsx
トリガーボタン(DevToolbarTrigger)— ナビゲーション/ヘッダーコンポーネント内に個別にレンダリングされます:
apps/studio/components/layouts/Navigation/LayoutHeader/LayoutHeader.tsxapps/www/components/Nav/index.tsxapps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx
確認項目:
- プロバイダーがアプリに追加または削除されていること
apiUrlプロパティの変更(正しいプラットフォーム API を指している必要があります)- ツールバーが PostHog コンテキストにアクセスする際に影響する可能性がある、レンダリング順序の変更
グロースレビューが不要な変更
ツールバーパネル内の UI/UX のみを変更する場合(スタイル、レイアウト、文言、 ドラッグ動作、ポップオーバーの位置など)、上記の統合箇所にも変更が及ばない限り、 グロースエンジニアリングのレビューは不要です。