Craft Cross CMSで公開したコンテンツをアクションテーブルに同期する
- solution
- 2025年11月28日
こんにちは、Customer Engineerのichiです!最近はメスカルバーに入り浸っています!100%アガベ!
さて、今回はCraft Cross CMSで管理しているコンテンツを、KARTEのアクションテーブルにリアルタイムで自動同期する仕組みについてご紹介します。
ECサイトの運用において、コンテンツ管理担当者がCMSで記事やバナーを公開したのに、マーケティング担当者がそれを使ってKARTEで接客サービスを配信できるのは翌日以降のデータ連携後になってしまうといったタイムラグや、都度エンジニアにマスターの更新を依頼する部門間の連携コストに悩まされていませんか?
今回の仕組みを使えば、Craft Cross CMSの公開ボタンを押すだけで、即座にアクションテーブルに情報が同期され、こうした一連の課題を解決できます。
アクションテーブルにデータが同期されるメリットが特に活きる例として、ECサイトにおける「セール対象商品」や「期間限定商品」などの情報を扱うシーンが挙げられます。CMS側で公開・非公開を切り替えるだけで、接客サービスの表示内容も即座に同期されるため、「終了後なのにバナーが出続けている」といった事故を防ぎ、常に鮮度の高い情報だけをユーザーに届ける運用が実現できます。
上記の実現にあたり、すでにアクションテーブルで運用している施策のデータ入稿フロー(CSV等)をそのままCMSに置き換えたり、KARTE Blocksのダイナミックブロック機能と連携させたりと、既存の仕組みや他機能を最大限に活用できる点も大きな強みです。
アウトプットイメージ
今回の記事では、Craft Cross CMSで「商品情報」を入稿し、それをアクションテーブルに自動連携するシーンを想定します。
「商品情報をいち早く正確にユーザーに知らせたい」というニーズは、ECサイトの運営において最もポピュラーかつ、情報の鮮度が求められるものだからです。Craft Cross CMSの手軽な入稿体験と、接客サービスでの即時活用を両立させる理想的なケーススタディとして、今回はこの構成で解説します。
最終的なアウトプットイメージは次の通りです。CMSでコンテンツを作成・公開します。
すると、アクションテーブルに対象のデータが自動的に追加・更新されます。
また、CMS側でコンテンツを下書き(非公開)にすると、アクションテーブルからも対象のデータが自動的に削除されます。これにより、常に「現在公開中のコンテンツ」だけがアクションテーブル上に存在する状態となります。
構成図は次の通りです。
Craft Cross CMS側の対象モデルでコンテンツが公開されると、Hookの仕組みでCraft Functionsが実行されます。そのファンクション内で、次のような処理が実行されます。
- CMSからコンテンツの中身を取得
- アクションテーブルのカラム定義に合わせてデータを成形
- アクションテーブルにレコードを作成・更新
この一連の処理には、次のAPI群が使われています。
- Get a content
- Craft Cross CMSからコンテンツの中身を取得
- Upsert records
- アクションテーブルへのレコード追加・更新
- Delete records
- アクションテーブル上のレコードを削除
注意点
前提として、次の点に注意をしてください。
- API v2、Craft Functions、Craft Cross CMSが利用できるKARTEプロジェクトが必要です
設定手順
設定の手順は次の通りです。
- API v2 アプリを作成する
- API v2 アプリの アクセストークンを Craft Secret Manager に登録する
- Craft Cross CMSのモデルを作成する
- アクションテーブルを作成する
- Craft Functionsを作成する
- CMS更新時のHookを設定する
1. API v2 アプリを作成する
Craft Functionsから各機能にアクセスするためのAPI v2アプリを作成します。
-
[ストア > API v2設定] からアプリを新規作成します
-
[アプリタイプ] を
tokenに設定します -
必要なscopeを追加してください
beta.cms.content.getbeta.action.actionTable.records.upsertbeta.action.actionTable.records.delete
-
アプリを保存し、一度だけ表示されるアクセストークンをメモしておきましょう
2. API v2 アプリの アクセストークンを Craft Secret Manager に登録する
API v2 アプリのアクセストークンをCraft Functionsから安全に利用するために、Craft Secret Manager に登録します。
-
[Craft > シークレット] からシークレットを新規作成します
-
[名前] に、わかりやすい名前を入力します
-
メモしておいたAPI v2 アプリのアクセストークンを [シークレットの値] に入力し、作成してください
-
シークレット名は、Craft Functions作成時に必要なのでメモしておきましょう
3. Craft Cross CMSのモデルを作成する
アクションテーブルに同期するコンテンツの構造を定義するため、Craft Cross CMSでモデルを作成します。
- [Craft > CMS > コンテンツ設定] の [モデルを追加]から、モデル作成画面を開きます
itemsなど適当なモデル名で、次の例のようなフィールドをもつモデルを作成してください- 「フィールドID」が、そのままアクションテーブルのカラム名として扱われます。後ほど作成するアクションテーブルのカラム名と一致させてください
| 表示名 | フィールドID | タイプ |
|---|---|---|
| タイトル | title | テキスト |
| 詳細文 | description | テキスト |
| 画像 | image | 画像 |
| リンクURL | link_url | テキスト |
- JSONプレビューの中にある
modelIdの値をコピーしておきます- 例:
a1234567890b2345678901c3
- 例:
4. アクションテーブルを作成する
CMSのコンテンツデータをレコードとして同期するためのアクションテーブルを作成します。手順は以下の通りです。
-
[Action > アクションテーブル > 作成 > 空のテーブルを作成]からアクションテーブルを新規作成します
- アクションテーブルID: 任意の文字列を指定します
- 主キー:
content_id(文字列) を指定します
-
[テーブル情報 > スキーマの管理]から以下のようにカラムを追加します
content_id以外のカラム名は、手順3で作成したCMSの「フィールドID」と完全に一致させてください
今回使用するフィールドの例は次の通りです。
| フィールド名 | フィールドの種類 | 説明 |
|---|---|---|
content_id | 文字列 | コンテンツID(主キー) |
title | 文字列 | タイトル |
description | 文字列 | 詳細文 |
image | 文字列 | 画像URL |
link_url | 文字列 | リンクURL |
5. Craft Functionsを作成する
CMS更新を検知してコンテンツをアクションテーブルに同期するためのファンクションを作成します。
-
[Craft > ファンクション > 新規作成 > テンプレートから作成] を選択します
-
「 Craft Cross CMSのコンテンツをアクションテーブルに連携する 」というテンプレートを検索し[取得]ボタンをクリックします
-
[反映] ボタンをクリックします
-
[設定 > ファンクションのタイプ] で「イベント駆動タイプ」を選択します
-
[変数] タブで次の変数の値を設定してください
| 変数名 | 設定例 | 説明 |
|---|---|---|
LOG_LEVEL | WARN | 出力するログのレベルです。ERROR/WARN/INFO/DEBUGから指定します |
TARGET_MODEL_ID | a1234567890b2345678901c3 | 同期対象となるCraft Cross CMSのモデルIDです(手順3でメモした値) |
ACTION_TABLE_ID | item_table | 同期先のアクションテーブルIDです(手順4で作成したID) |
KARTE_APP_TOKEN_SECRET | KARTE_APP_TOKEN | API v2アプリのtokenを登録したシークレット名です(手順2でメモした値) |
TARGET_CMS_FIELDS | title,description,image,link_url | アクションテーブルに同期する対象のCMS側フィールド名をカンマ区切りで指定します |
- 適当なファンクション名をつけて [デプロイ] します
補足
対応しているCMSのフィールド種類について
今回のCraft Functionsのテンプレートは、以下のフィールドタイプに対応しています。
- フィールドの値がそのまま同期されるフィールド
- テキスト、数字、日付、選択、チェックボックス、選択、参照
- 自動的にURLが抽出されて同期されるフィールド
- 画像、ファイル
上記以外の種類のフィールドは、同期対象に設定することはできません。対応させる場合は、下記のテンプレートのコードを参考にカスタマイズを行ってください。
craft-codes/craft-functions/xcms-hook-to-action-table at main · plaidev/craft-codes
6. CMS更新時のHookを設定する
CMSのコンテンツが公開・非公開された際に自動でCraft Functionsを起動するため、作成したAPI v2アプリの設定でHook v2を設定します。
- [ストア > API v2設定] から作成したアプリを選択します
- [hook設定 > 編集] をクリックします
- [トリガー設定] で次のトリガーを追加してください
KARTE CMS: コンテンツの公開時KARTE CMS: コンテンツの非公開時
- [チャネル設定 > Craft > hook status > 有効にする] にチェックを付け、作成したファンクションを選択します
- アプリ設定を保存します
実際に動かしてみる
実際に動作を確認してみましょう。
「コンテンツ公開時」の動作確認
-
Craft Cross CMSの対象モデルで、コンテンツを新規作成し、公開します
-
少し待って、アクションテーブルに対象のデータが追加されていることを確認します
「コンテンツ非公開時」の動作確認
- Craft Cross CMS側で、先ほど公開したコンテンツを下書き(非公開)にします
- 少し待って、アクションテーブルから対応するデータ(同じ
content_idのレコード)が削除されていることを確認します
うまく動作しない場合は、ファンクションのログにエラーが出ていないか、あるいはアクションテーブルの content_id が正しく「主キー」に設定されているかを確認してみてください。
まとめ
今回は、Craft Functionsを使ってCraft Cross CMSのコンテンツをアクションテーブルにリアルタイム同期する方法を紹介しました。
この仕組みを導入すれば、コンテンツ管理者がCMSで「公開」ボタンを押した瞬間に、その情報が接客サービスで利用可能になります。
これまでは翌日以降のデータ連携を待っていた「新商品の告知」や「緊急のキャンペーンバナー」なども、思い立ったその瞬間にユーザーへ届けることができるようになります。
情報の鮮度が命である施策実施において、このスピード感は大きな武器になるはずです。ぜひ試してみてください!