Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

flags-sdk

Flags SDK(`flags` npm パッケージ)および Vercel Flags を使ったフィーチャーフラグ・A/B テストの実装をガイドするスキルです。`flag()` によるフラグ宣言、`vercelAdapter()` や `vercel flags` CLI の操作、Statsig・LaunchDarkly・PostHog・GrowthBook など各種プロバイダー/アダプターの設定、Next.js(App Router・Pages Router・Middleware)や SvelteKit との統合、静的ページ向けの precompute パターン、Flags Explorer/Toolbar の連携、フラグ値の暗号化・復号など幅広いユースケースに対応します。

description の原文を見る

> Guide for feature flags and A/B tests with the Flags SDK (`flags` npm package) and Vercel Flags. Use when: declaring flags with `flag()`, using `vercelAdapter()` or `vercel flags` CLI (add, list, enable, disable, inspect, archive, rm, sdk-keys), setting up providers/adapters (Vercel, Statsig, LaunchDarkly, PostHog, GrowthBook, Hypertune, Edge Config, OpenFeature, Split, Flagsmith, Reflag, Optimizely, or custom adapters), implementing precompute patterns for static pages, setting up `identify`/`dedupe`, integrating Flags Explorer/Toolbar, working with flags in Next.js (App Router, Pages Router, Middleware) or SvelteKit, writing custom adapters, or encrypting/decrypting flag values. Triggers: feature flags, A/B testing, experimentation, flags SDK, flag adapters, precompute, Flags Explorer, feature gates, flag overrides, Vercel Flags, vercel flags CLI, vercel flags add, vercel flags list, vercel flags enable, vercel flags disable, `flags/next`, `flags/sveltekit`, `flags/react`, `@flags-sdk/*`.

SKILL.md 本文

Flags SDK

Flags SDK (flags npm パッケージ) は、Next.js と SvelteKit 向けのフィーチャーフラグツールキットです。各フィーチャーフラグを呼び出し可能な関数に変え、アダプターを通じてあらゆるフラグプロバイダーで動作し、precompute パターンを使用してページを静的に保ちます。Vercel Flags は初期プロバイダーであり、Vercel ダッシュボードまたは vercel flags CLI からフラグを管理できます。

コア概念

コードとしてのフラグ

各フラグは関数として宣言されます。呼び出し位置に文字列キーはありません:

import { flag } from 'flags/next';

export const exampleFlag = flag({
  key: 'example-flag',
  decide() { return false; },
});

const value = await exampleFlag();

サーバーサイド評価

フラグはサーバーサイドで評価されるため、レイアウトシフトを回避し、ページを静的に保ち、機密性を維持します。ルーティングミドルウェアを precompute パターンと組み合わせて、CDN から静的バリエーションを提供します。

アダプターパターン

アダプターはフラグ宣言の decideorigin を置き換え、フラグをプロバイダーに接続します。Vercel Flags (@flags-sdk/vercel) は初期プロバイダーアダプターです。サードパーティアダプターは Statsig、LaunchDarkly、PostHog などで利用できます。

import { flag } from 'flags/next';
import { vercelAdapter } from '@flags-sdk/vercel';

export const exampleFlag = flag({
  key: 'example-flag',
  adapter: vercelAdapter(),
});

エージェント ワークフロー:新しいフラグの作成

ユーザーがフィーチャーフラグの作成または追加をリクエストするとき、以下のステップを順番に実行してください。CLI ステップを「次のステップ」として残さないでください — 自分で実行してください。

始める前に

プロジェクトの状態をチェックして、コマンドを調整し、スキップできるステップを判断します:

  • どのロックファイルが存在しますか (pnpm-lock.yamlpackage-lock.jsonyarn.lockbun.lockb)? → すべてのパッケージマネージャーコマンドを適応させてください (pnpm addnpm installyarn addbun add)。
  • package.jsonflags はありますか? → インストールをスキップしてください (ステップ 1)
  • .vercel/ ディレクトリが存在しますか? → プロジェクトはリンク済み、ステップ 2 の vercel link をスキップしてください
  • .env.localFLAGS= が含まれていますか? → 環境変数は既にプル済み、ステップ 3 をスキップしてください
  • flags.ts (または lib/flags.tssrc/flags.ts) が存在しますか? → 最初から作成するのではなく、それに追加してください (ステップ 4)
  • package.json@vercel/toolbar がありますか? → ツールバーセットアップをスキップしてください (ステップ 6)
  • app/.well-known/vercel/flags/route.ts が存在しますか? → Flags Explorer はすでにセットアップ済み、ステップ 7 をスキップしてください

ステップ

  1. パッケージをインストール (package.json にまだない場合):

    pnpm i flags @flags-sdk/vercel
    
  2. フラグを Vercel に登録vercel flags add <flag-key> --kind boolean --description "<description>" を実行します。

    前提条件vercel flags コマンドには、Vercel CLI がインストールされて認証されている必要があります。Vercel CLI がインストールされていない場合は、pnpm i -g vercel を実行してください。認証またはリンクの問題については、vercel-cli スキルを読んで従ってください。インストールされていない場合は、npx skills add https://github.com/vercel/vercel --skill vercel-cli を実行してください。

    vercel flags add を実行する前に、プロジェクトが Vercel にリンクされていることを確認してください。プロジェクトルートの .vercel ディレクトリを確認してください。存在しない場合は、まず vercel link を実行してください。

  3. 環境変数をプルvercel env pull を実行して、FLAGSFLAGS_SECRET.env.local に書き込みます。これらの環境変数がないと、vercelAdapter() はフラグを評価できません。このステップはフラグ作成後に 必須 です。

  4. コードでフラグを宣言vercelAdapter() を使用して flags.ts に追加してください (ファイルが存在しない場合は作成してください):

    import { flag } from 'flags/next';
    import { vercelAdapter } from '@flags-sdk/vercel';
    
    export const myFlag = flag({
      key: 'my-flag',
      adapter: vercelAdapter(),
    });
    
  5. フラグを使用:ページまたはコンポーネントで呼び出し、結果に基づいて条件付きでレンダリングします:

    import { myFlag } from '../flags';
    
    export default async function Page() {
      const enabled = await myFlag();
      return <div>{enabled ? 'Feature on' : 'Feature off'}</div>;
    }
    
  6. Vercel Toolbar をセットアップ (まだ存在しない場合):

    • pnpm i @vercel/toolbar を実行
    • next.config.ts をツールバープラグインでラップ
    • ルートレイアウトで <VercelToolbar /> をレンダリング 完全なコードについては、references/nextjs.md — Toolbar Setup を参照してください。
  7. Flags Explorer をセットアップ (まだ存在しない場合):app/.well-known/vercel/flags/route.ts を作成してください — 以下の Flags Explorer セットアップ セクションを参照してください。

Vercel Flags

Vercel Flags は Vercel のフィーチャーフラグプラットフォームです。Vercel ダッシュボードまたは vercel flags CLI からフラグを作成して管理し、@flags-sdk/vercel アダプターで コードに接続します。Vercel でフラグを作成すると、FLAGSFLAGS_SECRET 環境変数が自動的に設定されます。

フラグをエンドツーエンドで作成するには、上記の エージェント ワークフロー に従ってください。

完全な Vercel プロバイダーリファレンス — ユーザーターゲティング、vercel flags CLI サブコマンド、カスタムアダプター設定、Flags Explorer セットアップ — については、references/providers.md を参照してください。

フラグの宣言

Vercel Flags を使用する場合、エージェント ワークフロー に示すように vercelAdapter() でフラグを宣言してください。他のプロバイダーについては、references/providers.md を参照してください。以下は一般的な flag() パターンです。

基本的なフラグ

import { flag } from 'flags/next'; // または 'flags/sveltekit'

export const showBanner = flag<boolean>({
  key: 'show-banner',
  description: 'Show promotional banner',
  defaultValue: false,
  options: [
    { value: false, label: 'Hide' },
    { value: true, label: 'Show' },
  ],
  decide() { return false; },
});

評価コンテキスト付きフラグ

identify を使用して、リクエストが誰のものかを確立します。返されたエンティティは decide に渡されます:

import { dedupe, flag } from 'flags/next';
import type { ReadonlyRequestCookies } from 'flags';

interface Entities {
  user?: { id: string };
}

const identify = dedupe(
  ({ cookies }: { cookies: ReadonlyRequestCookies }): Entities => {
    const userId = cookies.get('user-id')?.value;
    return { user: userId ? { id: userId } : undefined };
  },
);

export const dashboardFlag = flag<boolean, Entities>({
  key: 'new-dashboard',
  identify,
  decide({ entities }) {
    if (!entities?.user) return false;
    return ['user1', 'user2'].includes(entities.user.id);
  },
});

別のアダプター付きフラグ

アダプターはフラグをサードパーティプロバイダーに接続します。各アダプターは decideorigin を置き換えます:

import { flag } from 'flags/next';
import { statsigAdapter } from '@flags-sdk/statsig';

export const myGate = flag({
  key: 'my_gate',
  adapter: statsigAdapter.featureGate((gate) => gate.value),
  identify,
});

サポートされているすべてのアダプターについては、references/providers.md を参照してください。

キーパラメータ

パラメータ説明
keystring一意のフラグ識別子
decidefunctionフラグ値を解決する
defaultValueanydecide が undefined を返すか例外をスローした場合のフォールバック
descriptionstringFlags Explorer に表示
originstringプロバイダーダッシュボードでフラグを管理する URL
options{ label?: string, value: any }[]可能な値、precompute + Flags Explorer で使用
adapterAdapterdecideorigin を実装するプロバイダーアダプター
identifyfunctiondecide の評価コンテキスト (エンティティ) を返す

Dedupe

共有関数 (特に identify) を dedupe でラップして、リクエストごとに一度だけ実行します:

import { dedupe } from 'flags/next';

const identify = dedupe(({ cookies }) => {
  return { user: { id: cookies.get('uid')?.value } };
});

注:dedupe は Pages Router では利用できません。

Flags Explorer セットアップ

Next.js (App Router)

// app/.well-known/vercel/flags/route.ts
import { createFlagsDiscoveryEndpoint } from 'flags/next';
import { getProviderData } from '@flags-sdk/vercel';
import * as flags from '../../../../flags';

export const GET = createFlagsDiscoveryEndpoint(async () => {
  return getProviderData(flags);
});

外部プロバイダーデータ付き

サードパーティプロバイダーを Vercel Flags と共に使用する場合、mergeProviderData でそれらのデータを組み合わせます。各プロバイダーアダプターは独自の getProviderData をエクスポートします — references/providers.md のプロバイダー固有の例を参照してください。

SvelteKit

// src/hooks.server.ts
import { createHandle } from 'flags/sveltekit';
import { FLAGS_SECRET } from '$env/static/private';
import * as flags from '$lib/flags';

export const handle = createHandle({ secret: FLAGS_SECRET, flags });

FLAGS_SECRET

precompute と Flags Explorer に必須です。32 ランダムバイト、base64 エンコード必須:

node -e "console.log(crypto.randomBytes(32).toString('base64url'))"

各環境 (Development、Preview、Production) に別々の FLAGS_SECRET 値を使用し、Preview と Production の値を Sensitive にマークします。環境ごとに一度ジェネレーターを実行して異なる値を生成し、各値を Vercel に保存します:

vercel env add FLAGS_SECRET production --sensitive --value <production-secret>
vercel env add FLAGS_SECRET preview --sensitive --value <preview-secret>
vercel env add FLAGS_SECRET development --value <development-secret>

その後、vc env pull を実行してローカルに同期してください。

Precompute パターン

precompute を使用してフィーチャーフラグを使用しながらページを静的に保ちます。ミドルウェアはフラグを評価し、リライトを通じて URL に結果をエンコードします。ページは precompute 値を読み取り、再評価しません。

高レベルのフロー:

  1. フラグを宣言して配列にグループ化
  2. ミドルウェアで precompute(flagGroup) を呼び出し、code 文字列を取得
  3. リクエストを /${code}/original-path にリライト
  4. ページはコードからフラグ値を読み取ります:await myFlag(code, flagGroup)

完全な実装の詳細については、フレームワーク固有のリファレンスを参照してください:

  • Next.jsreferences/nextjs.md を参照 — プロキシミドルウェア、precompute セットアップ、ISR、generatePermutations、複数グループをカバー
  • SvelteKitreferences/sveltekit.md を参照 — reroute フック、ミドルウェア、precompute セットアップ、ISR、プリレンダリングをカバー

カスタムアダプター

origindecide を返すアダプターファクトリーを作成します。完全なパターン (デフォルトアダプターとシングルトンクライアントの例を含む) については、references/providers.md を参照してください。

暗号化関数

ブラウザでフラグデータを機密にしておくため (Flags Explorer で使用):

関数目的
encryptFlagValues解決されたフラグ値を暗号化
decryptFlagValuesフラグ値を復号化
encryptFlagDefinitionsフラグ定義/メタデータを暗号化
decryptFlagDefinitionsフラグ定義を復号化
encryptOverridesツールバーオーバーライドを暗号化
decryptOverridesツールバーオーバーライドを復号化

すべてデフォルトで FLAGS_SECRET を使用します。例:

import { encryptFlagValues } from 'flags';
import { FlagValues } from 'flags/react';

async function ConfidentialFlags({ values }) {
  const encrypted = await encryptFlagValues(values);
  return <FlagValues values={encrypted} />;
}

React コンポーネント

import { FlagValues, FlagDefinitions } from 'flags/react';

// Flags Explorer 用のフラグ値でスクリプトタグをレンダリング
<FlagValues values={{ myFlag: true }} />

// Flags Explorer 用のフラグ定義でスクリプトタグをレンダリング
<FlagDefinitions definitions={{ myFlag: { options: [...], description: '...' } }} />

リファレンス

詳細なフレームワークとプロバイダーガイドは、コンテキストを精簡するために別ファイルに記載されています:

  • references/nextjs.md:Next.js クイックスタート、ツールバー、App Router、Pages Router、ミドルウェア/プロキシ、precompute、dedupe、ダッシュボードページ、マーケティングページ、suspense フォールバック
  • references/sveltekit.md:SvelteKit クイックスタート、ツールバー、フック セットアップ、reroute + ミドルウェア付き precompute、ダッシュボードページ、マーケティングページ
  • references/providers.md:すべてのプロバイダーアダプター — Vercel、Edge Config、Statsig、LaunchDarkly、PostHog、GrowthBook、Hypertune、Flagsmith、Reflag、Split、Optimizely、OpenFeature、カスタムアダプター
  • references/api.mdflagsflags/reactflags/nextflags/sveltekit の完全な API リファレンス

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
vercel
リポジトリ
vercel/flags
ライセンス
MIT
最終更新
不明

Source: https://github.com/vercel/flags / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: vercel · vercel/flags · ライセンス: MIT