CMS Content Sync
集中型Sync Coreサービスを介して複数のDrupalサイト間で双方向コンテンツ共有を実現する、エンタープライズグレードのコンテンツ同期モジュールです。
cms_content_sync
インストール
composer require 'drupal/cms_content_sync:^3.0'
概要
CMS Content Syncは、複数のDrupalインストール間で高度なコンテンツ同期機能を提供する包括的なDrupal 10/11モジュールです。集中型Sync Coreサービスを使用してコンテンツの配信を管理・オーケストレーションし、マルチサイトインフラストラクチャ全体で一貫したコンテンツを維持できます。
このモジュールは双方向のプッシュ・プル操作をサポートし、サイトは中央リポジトリにコンテンツを公開したり、中央リポジトリからコンテンツを受信したりできます。コンテンツは自動、手動、または関連コンテンツがプッシュされたときに依存関係として同期できます。システムはサイト間のエンティティステータスを追跡し、コンテンツの競合を処理し、翻訳ワークフローをサポートします。
主な機能には、20以上のエンティティタイプ(Node、Media、Taxonomy Term、Menu Link、Paragraphs、Blockなど)のサポート、異なるフィールドタイプ用の19以上のフィールドハンドラー、リモート操作用のREST API統合、大規模同期用のバッチ処理、設定と監視のための包括的な管理インターフェースが含まれます。
Features
- 集中型Sync Coreサービスを使用した複数Drupalサイト間の双方向コンテンツ同期(プッシュ/プル)
- 同期するコンテンツタイプ、バンドル、フィールドをきめ細かく制御できるFlow管理システム
- サイト間でのコンテンツのグループ化とアクセス制御を可能にするPoolベースのコンテンツ構成
- Node、Media、Taxonomy Term、Menu Link、Paragraphs、Block、File、Config Pages、Entity Queue、Group Contentを含む10以上のエンティティタイプのサポート
- テキストフィールド、エンティティ参照、Paragraphs、ファイル、画像、Layout Builder、Moderation State、リンク、パス、Webformなどをサポートする19種類のフィールドハンドラー
- 同期履歴、タイムスタンプ、障害検出を含むリアルタイムエンティティステータス追跡
- リモートサイト通信とSync Core統合用のREST APIエンドポイント
- タイムアウトを防ぐ大規模プッシュ/プル操作用のバッチ処理
- 言語対応の同期と独立した翻訳処理による翻訳サポート
- 同期関係を維持しながらローカル変更を許可するコンテンツ上書き保護
- リモートサイトからのコンテンツ発見と選択的インポートのための手動プルダッシュボード
- 同期ステータス、障害、設定問題を追跡するヘルス監視ダッシュボード
- CLIベースの設定エクスポート、プッシュ、プル、ステータス管理用のDrushコマンド
- Acquia Content Hubからの移行ツール
- ローカル開発環境および非公開サイト用のプライベート環境サポート
- 同期されたコンテンツ順序付け用のDraggableViews統合
- サイト間で双方向にコンテンツをフローさせるクロス同期機能
Use Cases
マルチサイトコンテンツ配信
中央の編集チームがプライマリDrupalサイトでコンテンツを作成し、複数の地域またはブランド固有のサイトにプッシュします。各地域サイトは、上書き機能を通じてローカルカスタマイズを維持しながら、新しいコンテンツ、更新、削除を自動的に受信します。
コンテンツステージングワークフロー
ステージング環境でコンテンツを作成・編集し、承認後に本番環境にプッシュします。ステージングサイトがコンテンツをプッシュし、本番サイトがプルすることで、完全な翻訳サポートを備えた制御されたコンテンツデプロイメントを実現します。
デカップルドコンテンツリポジトリ
複数のフロントエンドアプリケーション(Web、モバイル、キオスク)が中央のDrupalリポジトリからコンテンツをプルします。リポジトリがSync Coreにコンテンツをプッシュし、消費アプリケーションに配信することで、真のヘッドレスアーキテクチャを実現します。
フランチャイズ/ディーラーネットワーク
企業サイトがコアコンテンツ(製品、ポリシー、ブランドアセット)を維持し、数百のフランチャイズサイトに自動配信します。ローカルサイトはPoolベースのアクセス制御により、企業更新を受信しながら独自のコンテンツを追加できます。
サイト間の編集コラボレーション
異なるサイトの複数の編集チームが共有Poolにコンテンツをプッシュでき、サイト間でのコンテンツ再利用が可能です。各サイトはFlow設定を通じて受信するコンテンツを制御できます。
コンテンツ移行と統合
複数の古いDrupalサイトからのレガシーコンテンツを新しい中央プラットフォームにプルします。移行サブモジュールはAcquia Content Hubからの移行を支援し、エンティティマッピングによりコンテンツ関係が保持されます。
Tips
- Flow変更後は常にUIまたは「drush cse」コマンドを使用して設定をエクスポートしてください
- 同期ステータスを監視し、失敗を特定するためにHealthダッシュボード(cms_content_sync_healthサブモジュール)を使用してください
- ファイアウォール背後の開発環境では、リクエストポーリングを使用するためにprivate_environmentサブモジュールを有効にしてください
- リモートサイトからFlowをコピーする際は、サイトの役割に合わせてプッシュ/プル設定を調整する変換オプションを使用してください
- エンティティタイプバージョンは自動的に計算されます - バージョン不一致が表示される場合は、developerサブモジュールを使用してフィールドの差異を特定してください
- どのサイトがどのコンテンツタイプを受信するかを制御するためにPoolベースの構成を使用してください
- コンテンツの「上書き」チェックボックスにより、同期関係を追跡しながらローカル変更が可能です
- 大規模な初期同期には、--typeオプション付きのDrushコマンドを使用してバッチ処理してください
- プルダッシュボードのプレビュー機能は設定で有効にしてFlowを再エクスポートする必要があります
- 削除設定は慎重に構成してください - プッシュされた削除は受信サイトのコンテンツを削除します
Technical Details
Admin Pages 10
/admin/config/services/cms_content_sync/site
Sync Coreサービスにサイトを登録・設定します。サイトステータス、UUID、接続詳細を表示します。
/admin/config/services/cms_content_sync/syndication
リアルタイムのシンジケーション進行状況、サイト間のコンテンツステータス、同期操作を表示する埋め込みReactダッシュボード。
/admin/config/services/cms_content_sync/pool
コンテンツPool(同期範囲とアクセスを制御するコンテンツの論理的グループ)を管理します。
/admin/config/services/cms_content_sync/pool/add
同期コンテンツを整理するための新しいコンテンツPoolを作成します。
/admin/config/services/cms_content_sync/flow
同期するコンテンツタイプとフィールド、およびその方法を定義する同期Flowを管理します。
/admin/config/services/cms_content_sync/flow/add
同期するコンテンツとその方法を定義する新しい同期Flowを作成します。
/admin/config/services/cms_content_sync/settings
認証、ベースURL、ロギングを含むコンテンツ同期のグローバル設定を構成します。
/admin/config/services/cms_content_sync/compatibility
同期可能なタイプを示すエンティティタイプとフィールドタイプのサポートマトリクスを表示します。
/admin/config/services/cms_content_sync/flow/copy/remote
別の接続サイトからFlow設定をコピーするマルチステップウィザード。
/admin/cms-content-sync/publish-multiple-changes/confirm/{entities}
翻訳と優先度オプションを含む、選択したエンティティを他のサイトにプッシュするための確認ダイアログ。
権限 9
Hooks 6
hook_cms_content_sync_entity_handler_info_alter
エンティティハンドラープラグイン定義を変更
hook_cms_content_sync_field_handler_info_alter
フィールドハンドラープラグイン定義を変更
hook_cms_content_sync_before_entity_push
エンティティがプッシュされる前に呼び出され、変更またはキャンセルを許可
hook_cms_content_sync_after_entity_push
エンティティが正常にプッシュされた後に呼び出される
hook_cms_content_sync_before_entity_pull
エンティティがプルされる前に呼び出され、変更または拒否を許可
hook_cms_content_sync_after_entity_pull
エンティティが正常にプルされた後に呼び出される
Drush Commands 6
drush cms_content_sync:configuration-export
すべてのPoolとFlow設定をSync Coreサービスにエクスポート
drush cms_content_sync:pull
特定のFlowのSync Coreからエンティティをプル
drush cms_content_sync:push
特定のFlowのエンティティをSync Coreにプッシュ
drush cms_content_sync:reset-status-entities
Pool内のすべてのエンティティの同期ステータスをリセットし、プッシュ/プルタイムスタンプをクリア
drush cms_content_sync:check-entity-flags
UUIDで特定のエンティティの同期フラグを確認
drush cms_content_sync:register
Content Syncバックエンドサービスにこのサイトを登録
Troubleshooting 7
1. Flowがアクティブでエクスポート済みであることを確認(「エクスポートが必要」警告を確認)。2. エンティティタイプ/バンドルがFlowでプッシュ用に設定されていることを確認。3. 少なくとも1つのPoolが「強制」または「許可」に設定されていることを確認。4. サイトがSync Coreに登録されていることを確認。5. 「drush cse」を実行して設定をエクスポート。6. watchdogログでエラーを確認。
1. Flowにエンティティタイプのプル設定があることを確認。2. Pool設定がソースPoolからのプルを許可していることを確認。3. プル先サイトのエンティティタイプバージョンがソースと一致していることを確認。4. 不足している可能性のある必須フィールドを確認。5. Healthダッシュボードでプル失敗を確認。
エンティティタイプバージョンはフィールド設定から計算されます。サイト間でフィールドが異なるとバージョンが一致しません。developerサブモジュールを有効にして具体的な差異を確認。両方のサイトに不足フィールドを追加するか、不一致フィールドを無視するようFlowを設定してください。
1. FileエンティティがFlowで設定されていることを確認(直接または依存関係として)。2. ファイル/画像フィールドにファイルハンドラーが選択されていることを確認。3. 送信先サイトがファイルディレクトリに書き込めることを確認。4. プライベートファイルの場合、認証が正しく設定されていることを確認。
1. 両方のサイトで同じ言語が有効になっていることを確認。2. 翻訳処理のFlow設定を確認。3. 独立した翻訳処理の場合、各翻訳は個別にプッシュされます。4. デフォルト言語が両方のサイトに存在することを確認。
新しい埋め込みエンティティを含む未翻訳の参照フィールドを持つコンテンツをプッシュすると、すべての翻訳がプッシュされる場合があります。これにより、埋め込みコンテンツがすべての言語で利用可能になります。確認ダイアログでこの動作が説明されます。
1. 一括操作にはUIの代わりにDrushコマンド(cs-push、cs-pull)を使用。2. バッチ処理を有効化。3. エンティティタイプまたはバンドルでフィルタリングを検討。4. Sync Coreのキューバックログステータスを確認。5. ボトルネックを特定するために一時的に拡張ロギングを有効化。
Security Notes 8
- CMS Content Syncは認証資格情報に暗号化ストレージ(Real AES)を使用します - 暗号化キーが適切に設定・保護されていることを確認してください
- RESTエンドポイントはDrupalの権限システムで保護されています - REST権限のロール割り当てを慎重に確認してください
- 専用の「cms_content_sync」ユーザーロールはシステムユーザーにのみ割り当て、人間のユーザーには割り当てないでください
- Basic Auth認証タイプはHTTPSを使用しない場合、資格情報が露出する可能性があります - 本番環境では常にHTTPSを使用してください
- リクエストポーリングを使用するプライベート環境では、リクエストがSync Coreサービスから発信されることに注意してください
- 「インポートのローカル削除を許可」設定は慎重に検討してください - 有効にすると、他のサイトからのコンテンツをユーザーが削除できます
- 拡張ロギングオプションはwatchdogに完全なエンティティデータをキャプチャします - 機密コンテンツがログに保存されないよう、デバッグ後は無効にしてください
- サイト登録トークンは5分後に期限切れになります - 保存や共有はしないでください