Palette Proでサイト間のPaletteページを同期する(チャンネル+プル)
Palette Pro channelを使うと、あるサイトが別サイトのCanvasページをHTTP経由で読み取れます。ソース サイトが自身のページを公開し、デスティネーションがそれをリモートとして登録し、必要なページをプルします。ページごとにNew / Needs update / Syncedというステータスが付くので、どれが古くなっているかが常に分かります。これにより、ステージングと本番の間でページを同期できます。
このチュートリアルでは、ソースはステージング(stg.drupalbook.org)、デスティネーションは本番(drupalbook.org)です。ここでは、Rowコンポーネントのレイアウト構造を示すページを同期します。
ソース · チャンネル
デスティネーション · リモート+プル
同期するページ
ステージングのページには複数のRowレイアウトが積み重ねられています。均等な列、オフセットの1/3 + 2/3、4列の行、複数行のfull + 2、そしてサイドバー配置などです。各セルにラベルが付いており、構造が一目で分かります。

stg.drupalbook.org、ソース)。canvas、canvas_palette、palette_pro)と、コンポーネントプロバイダーの同じバージョンが必要です。これにより、ページが同一にレンダリングされます。また、デスティネーションはHTTP経由でソースに到達できる必要があります。ステップ1 ソースでチャンネルを公開する
ステージングで、Configuration → Web services → Palette Sync channelを開き、チャンネルの保護方法を選択します:
- 認証なし — オープン。信頼されたネットワーク/内部利用のみ。
- HTTP Basic認証 — ソース上で「Access the Palette Pro channel」権限を持つDrupalユーザー。
- アクセストークン —
X-Palette-Sync-Tokenヘッダーで送信されるシークレット(「Generate」ボタンがあります)。

/palette-pro/channel/pagesと/palette-pro/channel/page/{uuid}です。ステップ2 デスティネーションにリモートを追加する
本番で、Configuration → Web services → Palette Sync remotesを開いて「Add sync remote」を実行します:
- ラベル — 例:「Staging」。
- ソースサイトURL — ソースのベースURL、
https://stg.drupalbook.org(チャンネルパスは付けない)。 - 認証 — ソースの設定に合わせる(ここではなし)。

ステップ3 ページをプルする
リモートの「Pull pages」操作を使用します。ソースのページがページネーション付きで一覧表示され、それぞれにステータスバッジが付きます:
| バッジ | 意味 |
|---|---|
| New | このUUIDを持つページがデスティネーションにまだ存在しません。 |
| Needs update | コピーは存在しますが、最後に同期して以降ソースが変更されています。 |
| Synced | デスティネーションのコピーはソースと最新の状態です。 |
RowページはNewと表示されます。まだ本番にありません。チェックを入れて「Sync selected pages」を押します。

Palette Proはチャンネル経由でページのバンドルを取得してインポートします。メディア、ファイル、固定されたコンポーネントバージョンも含め、UUIDで照合されます。ページはSyncedに切り替わります。

ステップ4 本番で確認する
キャッシュを再構築し(drush cr)、エイリアス(/row-examples)でページを開きます。すべてのRow構造が、ステージングと同じように本番でレンダリングされます。コンポーネントツリー、固定バージョン、メディアはすべてチャンネル経由で引き継がれます。

drupalbook.org(本番)で公開されています。ソースと同一です。ステータスと再同期の仕組み
デスティネーションは、各ソースページの最終変更時刻を、そのページを最後に同期したときに記録した値と比較します。つまり:
- ページをステージングで編集する → 次の一覧では本番でNeeds updateと表示されます。
- 再度プルする → 同じページをその場で更新し(UUIDで照合、重複は作成しない)、Syncedに戻ります。
コマンドラインが好みですか? 同じバンドルはDrush経由でも利用できます。ソースでエクスポートし、デスティネーションでインポートします:
# on staging
drush palette-sync:export 5 --out=row.json
# on production
drush palette-sync:import row.jsonチャンネルは、これをHTTP経由で自動化し、上にステータス一覧を表示するだけです。
注意点と落とし穴
- バージョンを揃える。 本番がステージングと異なるバージョンのコンポーネントを実行している場合、ページはインポートされますがピクセル単位で同一に見えないことがあります。モジュールのバージョンを揃えてください。
- UUIDによる冪等性。 再プルはその場で更新し、重複を作成しません。
- 到達可能性。 デスティネーションのPHPは、HTTP(S)経由でソースのチャンネルURLに到達できる必要があります。公開チャンネルはトークンまたはBasic認証で保護してください。
- 複数のソース。 デスティネーションは複数のリモートを登録し、それぞれからプルできます。
スクリーンショットは、実際の同期中にライブのstg.drupalbook.org(ソース)とdrupalbook.org(デスティネーション)から取得したものです。