onboardingV2 について
onboardingV2は、アプリにLaunchDarkly SDKを組み込み、最初のフィーチャーフラグを作成するためのスキルです。プロジェクトの技術スタックや既存の設定に合わせて進め、フラグの動作確認後にMCP設定を任意で案内します。
主な機能
- 01プロジェクト構成とLaunchDarkly利用状況を調査
- 02検出した技術スタックに応じたSDK設定
- 03ファイル変更前にブランチを作成
- 04SDKを導入して初期化を検証
- 05最初のフィーチャーフラグを作成して組み込み
- 06完了後に任意のMCP設定を案内
活用シーン
- 01既存アプリへのLaunchDarkly導入
- 02デモアプリで最初のフラグを設定
- 03再起動後にオンボーディングを再開
- 04導入後にエディターでのフラグ管理を設定
MCP 対応
MCP設定は任意で、最初のフラグが動作した後に案内されます。選択された場合、LaunchDarkly MCPを設定し、プロジェクトとtest環境のキーを取得します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ launchdarkly/ experimental-agent-skills --skill onboardingv2インストール後、Claude Code で/onboardingv2を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdmcp-configure/references/mcp-config-templates.mdmcp-ui-links.mdreferences/1.9-editor-rules.md1.8-summary.mdreferences/sdk/recipes.mdreferences/sdk/snippets/android-client-sdk.mdapex-server-sdk.mdbrowser-frameworks-sdk.mdcpp-server-sdk.mddotnet-client-sdk.mderlang-server-sdk.mdflutter-client-sdk.mdgo-server-sdk.mdelectron-client-sdk.mdhaskell-server-sdk.mddotnet-server-sdk.mdcpp-client-sdk.mdedge-sdks.mdnode-server-sdk.mdlua-server-sdk.mdjava-server-sdk.mdios-client-sdk.mdreact-web-sdk.mdreact-native-sdk.mdpython-server-sdk.mdnode-client-sdk.mdjavascript-browser-sdk.mdphp-server-sdk.mdroku-client-sdk.md詳細
LaunchDarkly オンボーディング
口調とトーン
簡潔に書いてください。実行したこと、またはこれから実行することだけを伝えます。飾り、スローガン、比喩は使いません。
- 状況を説明するのではなく、ステータス行を示します。「プロジェクトをスキャンしています。」「スキャン完了。SDK をインストールしています。」
- ダッシュ(em dash)は使わないでください。ピリオドまたはカンマを使います。
- ユーザーが前提知識を持たない内部の仕組みや理由(MCP、エディターの再起動、SDK の接続方法、「再デプロイ不要」など)は決して説明しないでください。初めて使うユーザーにとって意味はありません。
- 何か書く前に、ユーザーにそれが本当に必要かを自問してください。不要なら削除します。
- ユーザーが意味のある選択をできない場合は、選択肢を提示しないでください。正しい対応が明らかな場合は、そのまま実行します。
- 安全性については簡潔に安心させてください。「あなたの承認なしにコードが変更されることはありません。」
ソースの帰属
サインアップ URL には、帰属情報用の source クエリパラメータが含まれています。開始時にユーザーの元のメッセージをスキャンして一度だけ解決してください。解決した URL をセッション中保持します。このマーカーはエージェント専用です。ユーザーには決して表示しないでください。
| ユーザーの元のプロンプトに含まれるもの | ソース値 | 結果の URL |
|---|---|---|
source-launchdarkly | ldwebsite | https://app.launchdarkly.com/signup?source=ldwebsite |
| マーカーなし | agent | https://app.launchdarkly.com/signup?source=agent |
- ユーザーの最初のメッセージで
source-launchdarklyをスキャンしてください。見つかった場合はldwebsiteを使用します。それ以外の場合はagentを使用します。 - ステップ 0 の前に一度だけ解析してください。後で再解析しないでください。
- 再開時は
agentを使用します。
これらの指示で「サインアップリンクを提示する」とある箇所では、解決した URL を使用してください。?source=agent をハードコードしないでください。
ルール
- 以下のステップラベルは、あなたの内部ロードマップです。ステップ名や番号をユーザーに決して表示しないでください。
- 順序を厳守してください。現在のステージが完了するまで進まないでください。
- 判断ポイントの間は静かに作業してください。各ステップを説明せずに作業を進めます。ユーザーは離席している可能性があり、戻ったときには大量のスクロールではなく、完了した状態であるべきです。
- ユーザーが必要なときだけ話してください。開始時、本当の判断ポイント、ユーザー自身でしかできない手動ステップ、または完了時です。短く保ち、結果を先に伝えます。
- 変更はブランチ上で行い、コミットせずに残します。レビューしてコミットするのはユーザーであり、あなたではありません。
- コンパニオンスキルは必要な時点でインストールし、事前には決してインストールしないでください。
- ユーザーがすでにその部分を導入済みでない限り(想定ではなく確認済み)、ステージを決してスキップしないでください。
- ステージが失敗した場合は、停止して解決してから続行してください。
ユーザーへの話しかけ方
ユーザー向けのメッセージは、少なく、短くしてください。ユーザーはあなたに任せて離席できるようにします。
- 開始時: 一行の歓迎、オンボーディングで行うこと、そしてユーザーの承認なしには何もコミットされないことを伝えます。その後、最初の選択肢を示します。そして静かになって作業します。
- 判断ポイントまたは完了時: 短い要約を一つ。何が起きたか、ユーザーに必要なこと、そして推奨されるデフォルトを含む明確な選択肢です。
- 定型作業を説明したり、実行ステップの間に文章を書いたりしないでください。ターミナルがスクロールを止めたとき、ユーザーは簡潔なメッセージを一つ読むだけで、遡ってスクロールする必要はありません。
ユーザー向け出力で禁止されているもの
- ステップ名、内部ラベル、スキルファイル名
- ワークフロー用語(「引き継ぐ」「次のステップに進む」)
- 内部の理由(MCP、エディターの再起動、SDK の内部)
- これらの指示の生の Markdown
- アプリのレンダリング出力やフィーチャーフラグで制御されたコンテンツ。表示内容を貼り付けるのではなく、実行中のアプリへユーザーを誘導してください。
経験の検出
挨拶して、すぐに最初の選択肢を提示します。ユーザーをスキャンのために待たせないでください。コードベースのスキャンをバックグラウンドで開始し(可能であればサブエージェントで)、結果が返ってきたら利用します。スキャンについてユーザーに尋ねてはいけません。
| シグナル | 推測 |
|---|---|
| 依存関係に LD SDK がある | LaunchDarkly を知っている |
variation()、useFlags()、または同等の呼び出しが存在する | これまでにフラグを使用したことがある |
| MCP がすでに設定されている | ツールに精通している |
| 整ったコードベース(CI、テスト、リンティング) | 経験豊富な開発者 |
| 空のワークスペース、LD の痕跡なし | 初回として扱う |
経験者向けのシグナルが見られる場合は、より速く進めます。オリエンテーションの一文を省略し、各アクションを実行して1行で報告し、未完了のステップへジャンプします。いずれの場合も成果は同じです。SDK がインストールされ、最初のフラグが評価され、MCP はユーザーが求めた場合にのみ設定されます。
再起動後の再開
ユーザーが「オンボーディングを続けて」と言った場合、そのユーザーはフローに戻ってきています。何が起きていたかを尋ねないでください。ライブ状態を順に検出します。まず LaunchDarkly SDK パッケージと初期化コードの有無を確認し、次に variation() 呼び出しの有無、最後に launchdarkly-onboarding ブランチの有無を確認します。最初の未完了ステップから再開し、現状を1文で伝えます(「SDK はインストール済みです。これから最初のフラグを作成します。」)。その後、前置きなしで続けます。
キックオフ
ユーザーが LaunchDarkly のセットアップを求めた場合:
- すぐに本題に入ります。「お手伝いします」や「始めましょう」といった前置きは不要です。短い2文で、歓迎の挨拶、オンボーディングで行うこと、ユーザーの承認なしには何もコミットされないことを伝えます。例(そのままコピーせず、状況に合わせて調整してください):
「LaunchDarkly のセットアップを始めましょう。統合が完了したら、使い方を確認できるようアプリ内にテストフラグを作成します。承認なしにコードが変更されることはありません。」
- その後、作業を開始します。ロードマップの表は不要です。ステータスを1行伝えるのは構いません(「現在プロジェクトをスキャンしています。」)。その後は静かに進めます。
- ユーザーがアカウントを持っているかどうかを尋ねないでください。後で推測します。SDK キーのステップを完了すればアカウントを持っていると判断でき、キーを取得できない場合はその時点でサインアップリンクを共有します。
ステップ 0:安全なワークスペース
これが git リポジトリの場合、ファイルを変更する前に launchdarkly-onboarding という名前の新しいブランチを作成して切り替え、すべてを分離して元に戻せるようにします。そのブランチがすでに存在する場合は、短い接尾辞を付け加えます。git リポジトリでない場合は、何も表示せずスキップします。
オンボーディングログや要約ファイルは書き込まないでください。状態はこのセッションのメモリ内で追跡します。
ステップ 1:調査
スキャンはバックグラウンドで実行されます(エクスペリエンス検出を参照)。ステータスを示す一行を除き、スキャンについて知らせないでください。結果が届いたら、それを使用してください。
先に進む前に、ワークスペースを分類してください:
| 状態 | 条件 | 対応 |
|---|---|---|
| アプリが明確 | 1 つの言語、実際のエントリーポイント、明らかな場所に 1 つの依存関係マニフェスト | 続行 |
| 不明確 | 判断材料がほとんどない、または判断材料が矛盾している場合。あるいは、LaunchDarkly を組み込めるパッケージが複数あるマルチパッケージのワークスペース(yarn/pnpm/npm workspaces、lerna、nx、turborepo、gradle、cargo、go) | 質問する(以下の不明確な場合の形式を使用) |
| アプリが見つからない | マニフェストもエントリーポイントもなく、ワークスペースが空 | 質問する(以下のアプリが見つからない場合の形式を使用) |
候補パッケージが 2 つ以上あるワークスペースは、必ず「不明確」とします。どのパッケージに統合するか、決めつけないでください。
質問形式、不明確なワークスペース(候補パッケージごとに 1 つの選択肢を提示し、パスをラベルにします):
{
"questions": [
{
"id": "app_location",
"prompt": "I found multiple packages. Which one do you want to set up first?",
"options": [
{ "id": "candidate_1", "label": "<detected path, e.g. packages/api>" },
{ "id": "candidate_2", "label": "<detected path, e.g. packages/web>" },
{ "id": "demo", "label": "None of these. Scaffold a demo." },
{ "id": "other", "label": "Somewhere else. I'll tell you where." }
]
}
]
}
質問形式、アプリが見つからない場合:
{
"questions": [
{
"id": "app_choice",
"prompt": "I didn't find a runnable app. How do you want to proceed?",
"options": [
{ "id": "demo_node", "label": "Scaffold a minimal Node.js demo" },
{ "id": "demo_react", "label": "Scaffold a minimal React demo" },
{ "id": "demo_python", "label": "Scaffold a minimal Python demo" },
{ "id": "elsewhere", "label": "My app is somewhere else. I'll point you to it." }
]
}
]
}
デモが選択された場合は、新しいサブフォルダー(例:launchdarkly-demo/)に最小限のアプリをスキャフォールドします。
依存関係ファイル(package.json、go.mod、requirements.txt/pyproject.toml、pom.xml/build.gradle、Gemfile、*.csproj、Cargo.toml)から言語、フレームワーク、環境の種類を特定します。既存の LaunchDarkly の使用箇所(launchdarkly、ldclient、LDClient、@launchdarkly)を検索します。サーバーサイド、クライアントサイド、モバイルのいずれかを判定し、SDK の選択に反映します。すでに LD が統合されている場合は、インストールを省略できるよう SDK のバージョンを記録します。
--agent フラグで使用するコーディングエージェントを検出します:Cursor(.cursor/、.cursorrules)、Claude Code(~/.claude/、CLAUDE.md)、Windsurf(.windsurfrules)、GitHub Copilot(.github/copilot/)、Codex(~/.codex/、AGENTS.md)。判断できない場合は、質問します。
ステップ 2:MCP(フラグの設定後に任意で実施)
最初のフラグが設定されるまでの間に MCP をセットアップしないでください。また、セットアップ中に MCP について尋ねないでください。MCP なしで最初のフラグに到達してください(ステップ 4 ではダッシュボードへのリンクを使用します)。フラグが機能した後にのみ、短い選択肢を 1 つ提示します:
「次回からエディターでフラグを管理しますか?セットアップできます。[セットアップする] [スキップ]」
セットアップするを選択した場合:インストール前に、ローカルに mcp-configure スキルがあるか確認します。ない場合は、インストールします:
npx skills add launchdarkly/experimental-agent-skills --skill mcp-configure -y --agent <detected-agent>
失敗した場合は、~/.agents/skills/ と ~/.cursor/skills/ にキャッシュ済みのコピーがないか確認するか、MCP Config Templates に従って mcp-configure をインラインで実行します。成功した後、get-project を 1 回呼び出し(projectKey: "default")、projectKey と envKey(test)を保存します。
ステップ 3:SDK をインストールする
SDK をインストールし、初期化を自動で設定します。方法を尋ねたり、SDK とは何かを説明したりしないでください。ユーザーには一行で伝えます:「スキャンが完了しました。SDK をインストールしています。」その後、作業を続けます。
npx skills add launchdarkly/experimental-agent-skills --skill sdk-install -y --agent <detected-agent>
ステップ 1 のスタック情報を使って、sdk-install に引き継ぎます。スタックに合ったパッケージを選択してインストールし、コードベースに合わせて初期化を設定します。
ステップ 1 でエージェントがアプリをスキャフォールドした場合は、ネストされたスキルを省略して、ファストパスを直接使用します(スタックは判明しているため、npm run build は省略します):
| スキャフォールド | パッケージ | インストール | 環境変数 | エントリーポイント | 初期化 |
|---|---|---|---|---|---|
| React(Vite) | launchdarkly-react-client-sdk | npm install launchdarkly-react-client-sdk | VITE_LAUNCHDARKLY_CLIENT_SIDE_ID | src/main.jsx/.tsx | ルートのレンダリングを asyncWithLDProvider で囲む |
| Node.js | @launchdarkly/node-server-sdk | npm install @launchdarkly/node-server-sdk | LAUNCHDARKLY_SDK_KEY | src/index.js/server.js | init(sdkKey) の後に waitForInitialization() を呼び出す |
| Python | launchdarkly-server-sdk | pip install launchdarkly-server-sdk | LAUNCHDARKLY_SDK_KEY | app.py/main.py | ldclient.set_config(Config(sdk_key)) の後に ldclient.get() を呼び出す |
ルール:SDK キーは環境変数に格納し、ハードコードしないでください。クライアントインスタンスは 1 つだけ作成して共有します。フラグを評価する前に、初期化の完了を待ちます。
SDK キー
SDK にはキーが必要です。MCP が接続されている場合は、デフォルトでキーを取得してください。それ以外の場合は、直接リンクを提示して貼り付けてもらいます。手順を特定できない場合に限り、質問してください:
{
"questions": [
{
"id": "sdk_key_setup",
"prompt": "Do you have a LaunchDarkly account?",
"options": [
{ "id": "yes", "label": "Yes" },
{ "id": "no_account", "label": "Not yet" }
]
}
]
}
- アカウントがあり、MCP が接続されている場合:
get-environmentsでキーを取得し、.envに書き込み、.envが Git の追跡対象外になっていることを確認してください。キーの値は絶対に表示しないでください。 - アカウントがあり、MCP が接続されていない場合:直接リンクを提示して、貼り付けてもらいます。
https://app.launchdarkly.com/projects/{projectKey}/settings/environments/{envKey}/keys - アカウントがない場合:解決済みの登録リンクを共有してください。コードがコンパイルできるようにプレースホルダーの環境変数を書き込み、作業を続けてください。
初期化が確認できるまで先に進まないでください。
ステップ 4:最初のフラグ
フラグを作成してアプリに組み込み、オンになる様子をユーザーに確認してもらいます。
- フラグを作成します。 MCP が接続されている場合は、
create-flagを呼び出してください(キーの重複による競合が発生した場合は、get-flagを呼び出して既存のフラグを使います。先にlist-flagsを呼び出さないでください)。MCP が接続されていない場合は、キーが事前入力された作成フォームを開くダッシュボードリンクを提示し、ユーザーに作成してもらいます:https://app.launchdarkly.com/projects/{projectKey}/flags/new?key={flagKey} - フラグで制御するバナーを追加します。 アプリのメインページの上部に、フラグで制御される、小さくシンプルなバナーを挿入してください。オフの状態:LaunchDarkly でフラグを確認するリンクを添えた、目立たない「LaunchDarkly test banner (flag is off)」というバナー。オンの状態:バナーの見た目を明確に変え(たとえば緑色の背景)、「LaunchDarkly test banner (flag is on)」と表示します。デバッグ出力のように見えないよう、自然なデザインにしてください。既存のアプリに追加し、書き換えないでください。ページをレンダリングしないアプリの場合は、同等の可視出力(エンドポイントや起動時の表示など)を追加し、フラグによって変化するようにしてください。
- 開発サーバーを空いているポートで起動します(最初に
lsof -ti :3000,4000,5173を確認してください)。ユーザーがフラグがオンになるのを確認するまで、サーバーを起動したままにしてください。それまではサーバーを停止しないでください。 - フラグをオンにする操作をユーザーに引き継ぎます。 ローカル URL と、オンにする方法を 1 つ提示してください:
{
"questions": [
{
"id": "flip_method",
"prompt": "Your app is running at <url> and the flagged element is off. Turn the flag on to watch it change. How do you want to flip it?",
"options": [
{ "id": "ld_ui", "label": "I'll flip it in LaunchDarkly" },
{ "id": "agent", "label": "Flip it for me" }
]
}
]
}
- 「I'll flip it in LaunchDarkly」 の場合:フラグへの直接リンクを提示して待ちます。
https://app.launchdarkly.com/projects/{projectKey}/flags/{flagKey}/targeting?env={envKey} - 「Flip it for me」 の場合:設定済みの方法に応じて、MCP の
toggle-flagまたは REST API でオンにします。どちらも設定されていない場合は、ダッシュボードリンクを提示してください。 - MCP または API トークンが実際に設定されている場合に限り、「Flip it for me」 を提示してください。それ以外の場合は、LaunchDarkly の選択肢だけを表示してください。
チャットにページやバナーのテキストを表示しないでください。ブラウザーを開くよう案内してください。サーバーを起動したまま、<url> のバナーがリアルタイムで切り替わります。これでフラグが動作していることを確認できます。
まとめ
数行に収めてください:
- フラグは有効です。LaunchDarkly で確認できます:
https://app.launchdarkly.com/projects/{projectKey}/flags/{flagKey}/targeting?env={envKey} - 変更はコミットされていません。変更は
launchdarkly-onboardingブランチにあるため、自由に確認、保持、破棄できます。 - 次に行うことを 1 つ選んでください:
{
"questions": [
{
"id": "explore_next",
"prompt": "Want to explore more of LaunchDarkly?",
"options": [
{ "id": "experimentation", "label": "Experimentation: test changes and measure impact" },
{ "id": "observability", "label": "Observability: monitor flags and errors in production" },
{ "id": "ai_configs", "label": "AI Configs: manage AI models and prompts" },
{ "id": "done", "label": "Not now" }
]
}
]
}
進行の脱線への対応
ユーザーが手順を省略したり、途中で先に進むよう求めたりした場合は、コードを書いたり手順を省略したりする前に、最初の返答で必ず次の 3 点を順番に行ってください:
- ユーザーの言葉で、依頼内容を確認します。
- 手順を省略した場合の具体的な結果を 1 文で述べます。何が動かなくなるのかを明確にしてください(例:「SDK をインストールしないと、フラグの呼び出しが実行されません」)。曖昧にほのめかすのではなく、実際に起きる問題を伝えてください。
- 選択肢を提示します。先に簡単な手順を終えるか、希望どおりに進めるかを尋ねてください。
「わかりました。今すぐフラグのコードが必要なのですね。SDK をインストールしないと、これらの呼び出しは実行されません。セットアップは 2 分ほどで終わります。先にセットアップを済ませますか?それとも、あとで組み込めるようにコードをお渡ししましょうか?」
トレードオフを伝えずに、いきなりコードを提示してはいけません。また、かたくなに拒否してもいけません。ユーザーが希望を変えない場合はそれを尊重し、省略した手順を伝え、リスクを 1 文であらためて説明してから作業を続けてください。
スキルリポジトリ
| リポジトリ | スキル | 目的 |
|---|---|---|
launchdarkly/experimental-agent-skills | onboardingV2、sdk-install、mcp-configure | セットアップ |
launchdarkly/agent-skills | launchdarkly-flag-create など | フラグ管理 |
エッジケース
- SDK がすでにインストールされている場合: ステップ 3 をスキップします。検出したものとその場所を明記して、1 行で伝えてからステップ 4 に進みます。SDK の説明を繰り返したり、インストールコマンドを実行したりしないでください。
- MCP がすでに設定されている場合: その設定を使用します。ステップ 2 の案内はスキップします。
get-projectを呼び出してキーを保存し、続行します。 - 非推奨の mcp/aiconfigs または mcp/fm が見つかった場合: どちらも非推奨です。統合された
mcp/launchdarklyサーバーへの移行前に確認してください。自動で移行しないでください。 - 対応しているエージェントが検出されない場合: その旨を直接尋ねてください。必要に応じて手動設定を提示してください。
- npx を利用できない場合: スキルを手動でインストールする方法を提示してください(リポジトリをクローンし、スキルのディレクトリをコピーします)。
- ユーザーがセットアップの一部だけを希望する場合: その希望を尊重してください。不足しているものと、それによる制限を伝えてください。