Communityコーディング&開発github.com

Croct SDK 統合スキル

アプリケーションコードに Croct SDK を統合し、スロットコンテンツのレンダリング、CQL クエリの評価、ユーザーの識別を行います。JavaScript、React、Next.js、Vue、Nuxt、Shopify Hydrogen、PHP(Laravel、Symfony、Drupal)など、さまざまなスタックに対応しています。

Croct SDK 統合スキル とは?

このスキルは、Croct SDK をアプリケーションに統合するための包括的なガイドを提供します。スロットコンテンツのレンダリング、CQL クエリの評価、ユーザーの識別といった主要機能をカバーし、JavaScript、React、Next.js、Vue、Nuxt、Shopify Hydrogen、PHP(Laravel、Symfony、Drupal)など、複数のフレームワークとプラットフォームをサポートします。スキルは、スタックの検出、SDK の選択、CLI を使ったインストール、スロットの追加、サーバーサイドとクライアントサイドのレンダリングの判断、ユーザーの識別/匿名化、デバッグといった段階的なワークフローを提供します。また、スロット ID とバージョン、フォールバックコンテンツ、初期コンテンツ、コンテキスト属性、認証情報、環境変数、トラッキングなどのコアコンセプトについても説明します。よくあるエラーとその修正方法も網羅しており、開発者が自信を持って Croct SDK を統合できるよう支援します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/croct-tech/agent-skills/tree/HEAD/skills/croct-integrate-sdk

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Croct SDK の統合

Croct SDK をアプリケーションに組み込み、スロットコンテンツのレンダリング、CQL の評価、ユーザーの識別を行います。 コンテンツとオーディエンスは Croct ダッシュボードで管理され、コードは ID とバージョンでスロットを参照し、フォールバックを提供するだけです。

ワークフロー

- [ ] 1. 使用しているスタックを検出し、SDK を選択する(以下の表を参照)
- [ ] 2. CLI でインストールする(`croct init`、ユーザーが実行)。手動でのインストールは、ユーザーから依頼があった場合、または CLI が実行できない場合のみ行う
- [ ] 3. CLI でスロットを追加する(`npx croct@latest add slot home-hero@1 --example`)。タイプ定義とフォールバックが生成される
- [ ] 4. レンダリングする:フレームワークが許可する場合はサーバーサイド、それ以外はクライアントサイド
- [ ] 5. ログイン/ログアウト時にユーザーを識別/匿名化する(または初期化時にユーザー ID を渡す)
- [ ] 6. 確認する:統合ページに「過去 24 時間のトラフィックを受信しました」と表示されることを確認する。表示されない場合はデバッグモードを有効にする

1. SDK を選択する

最初に package.json / composer.json を読み込んでください。フレームワークに最も特化した SDK を選択し、React、Next.js、Vue、Nuxt、Hydrogen の内部でプレーンな JavaScript SDK を決して使用しないでください。

スタックパッケージ初期化方法サーバーレンダリングリファレンス
プレーン JS、任意のバンドラー、または <script> タグ@croct/plug(または https://cdn.croct.io/js/v1/lib/plug.js)起動時に croct.plug({appId}) を 1 回実行apiKey を使用して @croct/plug/api から fetchContent/evaluate をスタンドアロンで実行javascript.md
React(SPA、Vite、Next 以外の SSR)@croct/plug-reactルートで <CroctProvider appId="..."> を使用クライアントフックは initial が必要。低レベル API は @croct/plug-react/apireact.md
Next.js(App Router または Pages Router)@croct/plug-nextミドルウェア(15 以下)/ プロキシ(16 以上)+ @croct/plug-next/CroctProvider の <CroctProvider>はい: @croct/plug-next/servernextjs.md
Vue@croct/plug-vueapp.use(createCroct({appId}))コンポーザブル/コンポーネント。SSR では initial 値が必要vue.md
Nuxt@croct/plug-nuxtnuxt.config に modules: ['@croct/plug-nuxt'] を追加はいnuxt.md
Shopify Hydrogen(React Router 7 または Remix)@croct/plug-hydrogenVite プラグイン + @croct/plug-hydrogen/server の createCroctMiddleware / createCroctContextはいhydrogen.md
プレーン PHPcroct/plug-php(+ PSR-18 クライアント、例:guzzlehttp/guzzle nyholm/psr7)出力前に Croct::fromDotenv() を実行し、その後 Croct::emitCookies() を実行はい(サーバーファースト)php.md
Laravelcroct/plug-laravel.env に認証情報を設定はいlaravel.md
Symfonycroct/plug-symfony symfony/twig-bundleconfig/bundles.php にバンドルを登録 + .env に認証情報を設定はい(Twig)symfony.md
Drupalcroct/plug-drupalモジュールを有効化。settings.php に認証情報を設定。キャッシュを再構築はいdrupal.md
Storyblok(JS または PHP)—croct-integrate-platforms スキルを使用——
サポート外の言語または生の HTTP—croct-use-api スキルを使用——

2. インストール

すべての SDK の統合ページ(PHP、Laravel、Symfony、Drupal、Hydrogen を含む)では、CLI が推奨されています。init はインタラクティブで、ログインセッションが必要です。そのため、ユーザー自身のターミナルでプロジェクトルートから実行するよう依頼してください:

npx croct@latest init

croct init はフレームワークを検出し、ログインし、組織/ワークスペース/アプリケーションを選択し、一致する SDK をインストールし、セットアップ(プロバイダー、ミドルウェア、環境変数)を配線します。ユーザーがすでにセッションを持っており、ID を把握している場合は、非インタラクティブ形式を自分で実行することもできます: npx croct@latest --no-interaction init --sdk next --org <org> --wor <workspace> --dev-app <dev-app> --prod-app <prod-app> (--sdk は javascript、react、vue、next、nuxt のみを受け付けます。省略すると自動検出されます)。フラグ、CI での使用、croct.json については croct-use-cli スキルを参照してください。フレームワークのリファレンスファイルにある手動の手順は、ユーザーから依頼があった場合、または CLI が実行できない場合のみフォールバックとして使用してください。

3. スロットを追加する

必ずスロット ID とバージョンを渡してください。これらがない場合、CLI はスロットの入力を求めますが、あなたはそれに答えることができません:

npx croct@latest add slot home-hero@1 --example

これにより、TypeScript の型定義(useContent('home-hero@1') / fetchContent('home-hero@1') が型付けされるようになります)が生成され、スロットのデフォルトコンテンツが自動フォールバックとしてダウンロードされ、動作するサンプルコードが作成されます。ダッシュボードで変更があった後は、croct install / croct update を再実行して再同期してください(croct-use-cli を参照)。

コアコンセプト(全 SDK 共通)

スロット ID とバージョン

  • スロットを <id>@<version> として参照します。例:home-hero@1。バージョンなし(home-hero)は home-hero@latest を意味します。
  • 常にバージョンを固定してください。 固定されていないスロットは、破壊的なスキーマ変更を即座に受け取ってしまいます。ダッシュボードで新しいメジャーバージョンが作成されても、コードのバージョンが更新されるまで、アプリは古いバージョンを受け取り続けます。
  • コンテンツを SlotContent<'home-hero@1'> と ComponentContent<'card@1'> で型付けします(@croct/plug、@croct/plug-react、@croct/plug-next からエクスポートされます)。ユニオンスロットは _type で差別化されたユニオンに解決されます。

フォールバック、デフォルト、初期コンテンツ

用語説明取得元
デフォルトコンテンツ一致するエクスペリエンスがない、ロケールのコンテンツがない、静的コンテンツがリクエストされた、または取得に失敗した場合に表示されるスロットコンテンツダッシュボード
フォールバックリクエストが失敗した場合にレンダリングされる値fallback オプション(コード内)、または CLI でダウンロードされたデフォルトコンテンツ(@croct/content)
初期コンテンツ(React/Next クライアントフック)SSR/プリレンダリング中およびクライアントでの読み込み中にレンダリングされる値initial オプション。CLI が自動的に追加

SDK 内での解決順序:動的コンテンツ → 明示的な fallback → CLI デフォルトコンテンツ → エラー。フォールバックがなく、CLI コンテンツもない場合、取得に失敗するとエラーがスローされます(JS croct.fetch は拒否します)。CLI コンテンツは、@croct/content の getSlotContent(slotId, locale?) / loadSlotContent(slotId, locale?) を使用して直接読み取ります(コード分割を備えた非同期の方を推奨します)。

クライアント vs サーバーレンダリング

要件対応方法
最初の HTML に最終コンテンツを含め、ちらつきをなくし、クロール可能にするサーバーで取得する(Next の fetchContent(@croct/plug-next/server から)、Nuxt、Hydrogen、PHP ファミリー)
ページを静的ファイル / CDN / output: 'export' のままにしておく必要があるinitial 値を指定したクライアントフック/コンポーネント、または <Suspense> バウンダリを使用する
スケルトンで問題ない、スクロールしないと見えないセクションクライアントサイドで問題ない
プレーンな React / カスタム SSR でのサーバーレンダリングapiKey を使用して @croct/plug-react/api(または @croct/plug/api)から fetchContent / evaluate を実行し、コンテンツを props として渡す

サーバーサイドのリクエストは API キーで認証します(これをブラウザに送信してはいけません)。クライアントサイドのリクエストは アプリケーション ID を使用します。スタンドアロン関数に appId と apiKey の両方を渡すことはエラーです。

クエリ評価

CQL を実行時に評価するには、croct.evaluate(query, {attributes})(JS)、useEvaluation / <Personalization>(React/Next クライアント)、または evaluate / cql`...`(Next サーバー)を使用します。クエリは 500 文字に制限されています。結果は任意の JSON にできます('location' はオブジェクトを返します)。常にフォールバックを指定してください(.catch(() => false) または fallback: false)。CQL の構文については croct-cql スキルを参照してください。

評価かスロットか?ドキュメントでは、スロットはコード変更なしでコンテンツを更新する方法として提示されています。評価されたクエリはコード内に存在し、デプロイによってのみ変更されます。

要件使用するもの
マーケターが変更、スケジュール、A/B テストするコンテンツ、オーディエンス、またはロールアウトスロットとエクスペリエンス(croct-personalize-and-test を参照)
エンジニアリングによって修正されるロジック(ウィジェットの表示/非表示、条件による分岐)、編集するコンテンツがないフォールバック付きの evaluate / useEvaluation

コンテキスト属性

アプリ固有のデータ(プラン、カートの状態)を attributes(JS/React)または context.attributes(Next サーバー、スタンドアロン関数)として渡し、CQL では context's plan is "premium" として読み取ります。制限:最大 30 エントリ、5 レベルの深さ、キーは 50 文字以下、文字列値は 50 文字以下。

認証情報と環境変数

スタックアプリ IDAPI キー
Next.jsNEXT_PUBLIC_CROCT_APP_IDCROCT_API_KEY
NuxtNUXT_PUBLIC_CROCT_APP_IDNUXT_CROCT_API_KEY
HydrogenPUBLIC_CROCT_APP_IDCROCT_API_KEY
PHP、Laravel、SymfonyCROCT_APP_IDCROCT_API_KEY
Drupal$settings['croct.app_id']$settings['croct.api_key']
JavaScript、React、VueappId オプション / プロパティサーバーサイドのスタンドアロン関数のみ
  • アプリ ID はアプリケーションの統合ページで確認できます。キーは API キーページで作成します。
  • ユーザートークンを発行するサーバー SDK(Next.js)の場合、API キーには ユーザートークンの発行 権限が必要です。
  • 各環境には独自のアプリケーションがあります。ローカルホストで本番用アプリ ID を使用すると(またはその逆)、無効な認証情報で失敗します。

識別と匿名化

  • ログイン/サインアップ時に identify(userId) を、ログアウト時に anonymize() を呼び出します。ID が変わると、現在のセッションは終了し、新しいセッションが開始されます。
  • ページの読み込み時にユーザーがすでにログインしている場合は、初期化時に ID を渡します(croct.plug / <CroctProvider> の userId)。これにより、SDK が余分な匿名セッションを作成するのを防げます。
  • userId は 文字列 である必要があります。数値 ID は(できればサーバーサイドで)変換してください。ランダム ID(UUID v4)を、メールや連番よりも推奨します。
  • アプリケーション設定で 署名付きトークンを要求 がオンの場合、userId/identify(未署名トークン)は失敗します。代わりに署名付き token を渡してください。Next.js は CROCT_API_KEY を使用してトークンに自動的に署名します。
  • Next.js:ミドルウェア/プロキシで withCroct({userIdResolver}) を使用して、トークンをすべてのリクエストで認証セッションと同期させることを推奨します。

知っておくと便利なプラグオプション

appId、debug、test、track(自動トラッキング、デフォルト true)、userId / token(相互排他的)、tokenScope(global | isolated | contextual)、defaultFetchTimeout(JS/React 5000 ms、Next 2000 ms)、defaultPreferredLocale、baseEndpointUrl(モックサーバー)、cookie(クライアント ID / ユーザートークン / プレビュートークンをファーストパーティクッキーに保存)、eventMetadata、urlSanitizer、logger。完全なリストは javascript.md を参照してください。

トラッキングとデータ収集

目標を croct.track('goalCompleted', {goalId}) で追跡します。プロファイル/セッションは croct.user.edit().set(...).save() / croct.session.edit() で編集します。イベントカタログ、推奨イベント、属性ルールについては croct-track-events スキルを参照してください。

注意点

以下のことを行ってください:

  • スロットのバージョンを固定し(home-hero@1)、フォールバックを保持する(CLI デフォルトコンテンツまたは明示的)。
  • サーバー上でレンダリングされる可能性のあるすべてのクライアント useContent/useEvaluation に initial(または <Suspense>)を提供する。
  • クライアント専用の Plug メソッド(useCroct().track、identify、user.edit)は、useEffect またはイベントハンドラ内でのみ呼び出し、レンダリング中には決して呼び出さない。
  • SDK を読み込むすべてのドメインを、アプリケーションの 信頼できるオリジン に追加する。
  • 何かがおかしい場合は、まずデバッグモードをオンにし(debug: true、NEXT_PUBLIC_CROCT_DEBUG=true)、その後ネットワークタブを確認する。

以下のことを行わないでください:

  • croct.plug を 2 回呼び出す(最初に unplug() を呼び出すこと)。または plug より前にメソッドを呼び出す(「Croct is not plugged in」エラー)。
  • API キーをクライアントコードまたは NEXT_PUBLIC_* 変数に配置する。
  • アプリ ID をスクリプトタグ ?appId= と plug の両方で指定する(競合するアプリ ID エラー)。
  • 静的ファイルとして保持したいルートで Next の fetchContent を呼び出す。これによりルートが動的レンダリングに変更されます。代わりにクライアントフックを使用してください。
  • Next.js App Router の外部で cql タグを使用する。その場合は evaluate と route を使用してください。

よくあるエラー

エラー修正方法
Croct is not plugged in.他の呼び出しより前に、起動時に croct.plug を呼び出す
The app ID must be specified when it cannot be auto-detected.appId(またはスクリプトタグに ?appId=)を渡す
The request was not authorized, most likely due to invalid credentials.アプリ ID が間違っている、環境が間違っている、トークンの有効期限切れ/改ざん(クッキーとローカルストレージをクリア)、または 署名付きトークンを要求 がオンの場合の未署名トークン
CORS エラー / The origin of the request is not allowed in your application settings.ドメインを信頼できるオリジンに追加する
The user ID must be a string.ID を文字列に変換する
The request timed out.timeout / デフォルトタイムアウトを増やす。デバッグログで X-Croct-Timing / X-Croct-Region を確認する
The query is too complex.クエリが 500 文字を超えている。簡略化、分割、または属性を介してデータを渡す
The service is temporarily suspended.コードのバグではない:ワークスペースが停止されている、またはボットトラフィック(X-Suspension-Reason)。フォールバックを維持する
The application has exceeded the monthly active users (MAU) quota.プランをアップグレードするか、次のサイクルを待つ
useCroct() can only be used in the context of a <CroctProvider> component.ツリーを <CroctProvider> でラップする
The initial content/value is required for server-side rendering (SSR).initial を追加するか、サーバー上で取得する
Did you forget to configure Croct's middleware?Next ミドルウェア/プロキシを追加する
someFunction() requires specifying the route parameter outside app routes.route: context を渡す(Pages Router/API ルート)
Did you forget to set the SOME_ENV_VAR environment variable?NEXT_PUBLIC_CROCT_APP_ID / CROCT_API_KEY を設定する
公開後にコンテンツが更新されない(エラーなし)クライアントフックは結果を expiration(60 秒、レンダリングのたびに延長)キャッシュします。cacheKey を変更して強制的に再取得します。変更が公開されており、下書きではないことを確認してください。固定されたバージョン(home-hero@1)は新しいメジャーバージョンを取得しません。croct upgrade を実行してください。リクエスト失敗後にフォールバックが古くなっている場合:croct update で CLI デフォルトコンテンツを更新します

リファレンスインデックス

使用中のスタックに対応するファイルのみを読み込んでください。

  • references/javascript.md — @croct/plug:プラグオプション、fetch、evaluate、test、ID、パッチ、スタンドアロン @croct/plug/api、テスト、エラー。
  • references/react.md — @croct/plug-react:プロバイダー、useContent、<Slot>、useEvaluation、<Personalization>、useCroct、SSR 初期値、テスト。
  • references/nextjs.md — @croct/plug-next:App Router / Pages Router、ミドルウェア、プロキシ、fetchContent、cql、useEvaluation、identify、サーバークライアント、テスト、エラー。
  • references/vue.md — @croct/plug-vue:セットアップ、useContent、useEvaluation、useCroct、SSR。
  • references/nuxt.md — @croct/plug-nuxt:セットアップ、useContent、useEvaluation、SSR。
  • references/hydrogen.md — @croct/plug-hydrogen:Vite プラグイン、ミドルウェア、コンテキスト、useContent、fetchContent、useEvaluation。
  • references/php.md — croct/plug-php:セットアップ、fetchContent、evaluate、identify、認証情報。
  • references/laravel.md — croct/plug-laravel:セットアップ、ブレード、fetchContent、evaluate。
  • references/symfony.md — croct/plug-symfony:セットアップ、Twig、fetchContent、evaluate。
  • references/drupal.md — croct/plug-drupal:セットアップ、Twig、PHP 関数。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

croct-tech/agent-skills

>- Use when writing, reading, reviewing, or debugging Croct's Contextual Query Language (CQL): audience criteria, `croct.evaluate()` / `useEvaluation` / `<Personalization query>` / Next.js `cql` tag queries, Evaluation API `query` bodies (`/client/web/evaluate`, `/external/web/evaluate`), and dynamic content values (`"type": "dynamic"`, `"expression"`). Covers context variables (user, session, page, location, campaign, cart, device, browser, context, now/today), data types and conversions, accessors and selectors (`'s`, `property X of`, `[1st]`, `[*]`, `[...]`), tests (`is`, `matches`, `is like`, `contains either`, `is between`, `is defined`, `is returning`), quantifiers (`some ... satisfies`), macros, modifiers, event expressions (`user has viewed a page`, `user has abandoned a cart`, `user has completed goal`), audience estimation, and recipes. Triggers: "write an audience", "target mobile users in New York", "CQL syntax error", "audience never matches", "unavailable estimate".

croct-tech/agent-skills

>- Use when connecting Croct to a third-party platform or migrating to Croct from another personalization or experimentation tool. Covers Storyblok (Optimize by Croct app, @croct/plug-storyblok, Storyblok withCroct, resolveContent, croct/plug-storyblok, CroctStoriesApi), Sanity and Strapi (slot fallback, dynamic zones, metadata.contentSource), Shopify Hydrogen storefront events, Shopify custom pixel (croctPixel, PUBLIC_CROCT_SHOPIFY_PIXEL, checkout and order tracking), VTEX, Google Tag Manager data layer, Microsoft Clarity tags, HubSpot forms (hbspt.forms.create, hs-form-event), firmographic providers 6sense, Demandbase, Clearbit Reveal, and ZoomInfo WebSights (firmographics attributes, account-based audiences in CQL), and migrations from Mutiny and Ninetailed (Experience component, Contentful sunset). Triggers include cdn.croct.io/plug-integration scripts, "personalize Storyblok blocks", "track Shopify checkout", "send VTEX events", "ABM personalization", "replace Mutiny".

croct-tech/agent-skills

>- Use when designing or changing Croct content models: regular vs union components, what becomes a component, slot, structure, or primitive attribute; writing component schema JSON (`structure`, `union`, `reference`, `text`, `number`, `boolean`, `list`, `@croct/file`, `@croct/richText` rich text, `format`, `choices`, `optional`, `private`, `position`); writing content definition JSON (`static`/`dynamic` values, `nullable`, `default`, `{{placeholder}}` paths); slot default, localized, experience, experiment, or content group content; schema limit errors (30 attributes, 6 nesting levels, 10 union members, complexity score 50); component versioning and breaking changes (`home-hero@2`); refactoring (duplicate and modify, duplicate and replace, flatten and merge); Markdown in text attributes with `@croct/md-lite`. Phrasings: "model content for a hero", "add an attribute to the banner component", "support variations", "component is too complex", "localize the hero", "translations", `preferredLocale`.

croct-tech/agent-skills

>- Use when planning or implementing personalization or A/B testing with Croct: creating an experience (audience, slots, content, priority, scheduling, drafts), adding an experiment (A/B/n, primary goal ID, traffic allocation, variants, cross-device consistency), wiring the code it needs (slots, `croct.track('goalCompleted', {goalId})`, `orderPlaced`, `leadGenerated`, `userSignedUp`), server-side feature-flag experiments, redirect experiments, personalization recipes (UTM campaigns, ABM, search terms, location, free shipping, interests, blog readers, leads, customers, organic intent, HubSpot forms), or reading the experience, experiment, application, or workspace dashboards (probability to be best, potential loss, "Experiment in progress", "Recommended winner", "No clear winner", "Track your goal"). Phrasings: "personalize the hero for LinkedIn visitors", "A/B test this CTA", "which variant won?", "why does my experiment show no conversions?".

関連スキル