インストール
composer require 'drupal/diff:8.x-1.9'
composer require 'drupal/diff:8.x-1.6'
概要
Diff モジュールは、Drupal コンテンツエンティティ向けの高度なリビジョン比較システムを提供します。標準のリビジョンタブを拡張インターフェースに置き換え、コンテンツエンティティの任意の2つのリビジョンを選択して比較できます。
リビジョン比較には複数の表示レイアウトが用意されています:Split Fields(左右並列表示)、Unified Fields(行単位表示)、Visual Inline(エンティティの表示モードを使用したレンダリングHTML比較)。各レイアウトは、リビジョン間でコンテンツがどのように変更されたかを異なる視点で確認できます。
Diff は柔軟なプラグインシステムを使用して、さまざまなフィールドタイプを処理します。Field diff builder プラグインはフィールド値を比較可能な文字列に変換し、レイアウトプラグインは比較の表示方法を決定します。このアーキテクチャにより、さまざまなコンテンツタイプやユースケースに対応した拡張とカスタマイズが可能です。
このモジュールは Content Moderation と統合してリビジョン説明にワークフロー状態の変更を表示し、カスタムリビジョン比較インターフェースを構築するための Views フィールドプラグインも提供します。
Features
- ラジオボタンを使用した左右リビジョン選択が可能な拡張リビジョン概要ページ
- 複数の比較レイアウトオプション:Split Fields(左右並列)、Unified Fields(行単位)、Visual Inline(レンダリングHTML差分)
- フィールドタイプごとに設定可能な field diff builder プラグインによるフィールド単位の比較
- テキストフィールド、エンティティ参照、画像、ファイル、リンク、リストフィールド、コメントフィールドの比較に対応
- 前後の変更へのナビゲーションリンク
- 生コンテンツまたは Markdown 処理済みコンテンツを表示するフィルターオプション
- 設定可能な表示モードでレンダリングされたエンティティ比較のための HtmlDiffAdvanced ライブラリを使用した Visual Inline レイアウト
- リビジョン説明にワークフロー状態を表示する Content Moderation 統合
- カスタムリビジョン比較ビュー用の diff__from および diff__to フィールドプラグインによる Views 統合
- カスタム field diff builder およびレイアウトプラグインを追加可能な拡張性のあるプラグインアーキテクチャ
- リビジョン選択用ラジオボタンの動作設定(Simple exclusion または Linear restrictions)
- フィールドタイトルの表示や Markdown コールバックオプションを含むフィールドごとの差分表示設定
- 差分サポート付きリビジョン可能エンティティタイプの自動ルート生成
Use Cases
編集ワークフローのレビュー
コンテンツ編集者は Diff を使用して、公開前に他のチームメンバーが行った変更をレビューできます。現在の下書きと公開バージョンを比較することで、どのテキストが追加、削除、変更されたかを正確に確認でき、レビュープロセスがより効率的かつ正確になります。
コンテンツ監査と履歴追跡
管理者は重要なコンテンツの時間経過に伴う変遷を追跡できます。任意の2つの過去のリビジョンを比較することで、コンテンツがどのように変更されたか、誰が変更したか(リビジョンログメッセージ経由)を理解し、変更がコンテンツ戦略に沿っているか確認できます。
翻訳比較
多言語サイトでは、Diff は翻訳者が翻訳更新間でソースコンテンツの変更点を理解するのに役立ちます。ソース言語のリビジョンを比較することで、翻訳者は変更された部分のみの更新に集中できます。
ビジュアルコンテンツプレビュー
Visual Inline レイアウトを使用すると、コンテンツ作成者は変更がコンテンツのレンダリング外観にどのように影響するかを確認できます。複数のフィールドとフォーマットオプションを持つ複雑なコンテンツタイプに特に便利です。
カスタムリビジョンビュー
サイトビルダーは比較機能付きのリビジョン一覧を表示するカスタム Views を作成できます。diff__from および diff__to フィールドプラグインを使用して、ユーザーはリストから任意の2つのリビジョンを選択して直接比較できます。
Tips
- コンテンツ編集者向けのユーザーインターフェースを簡素化するため、必要なレイアウトプラグインのみを有効にしてください
- 「Linear restrictions」ラジオボタン動作を使用して、ユーザーを時系列で隣接するリビジョンの比較に導いてください
- コンテンツの変更に焦点を当てたクリーンな比較のために、Visual Inline レイアウトを「Diff」表示モードで使用するよう設定してください
- 画像フィールドでは、field diff プラグイン設定でサムネイル表示を有効にして画像の変更を視覚化してください
- テキストフィールドで Markdown コールバックを使用して HTML を除去し、よりクリーンなテキストのみの比較を行ってください
- コンテンツの長さに応じて適切なコンテキスト行数(先頭/末尾)を設定してください - 短いコンテンツには少なく、長い記事には多く設定します
Technical Details
Admin Pages 2
/admin/config/content/diff/general
レイアウトプラグイン、ラジオボタンの動作、フィールドベースレイアウトのコンテキスト行数など、リビジョン比較機能のグローバル設定を構成します。
/admin/config/content/diff/fields
システム内の各フィールドタイプに対する diff builder プラグインを設定します。各フィールドの比較を処理するプラグインを選択し、フィールド固有の設定を構成します。
Hooks 2
hook_field_diff_builder_info_alter
field diff builder プラグイン定義を変更します。モジュールがプラグインのラベル、ウェイト、その他のプロパティを変更できます。
hook_diff_layout_builder_info_alter
diff レイアウト builder プラグイン定義を変更します。モジュールがレイアウトプラグインのラベル、説明、その他のプロパティを変更できます。
Troubleshooting 4
Visual Inline レイアウトには php-htmldiff-advanced ライブラリが必要です。Composer でインストールしてください: composer require caxy/php-htmldiff。ライブラリがインストールされると、レイアウトが自動的に利用可能になります。
/admin/config/content/diff/fields のフィールド設定ページを確認してください。フィールドに差分プラグインが選択されていること(「比較しない」ではないこと)を確認してください。また、フィールドがリビジョン可能で、表示設定が構成されていることを確認してください。
リビジョンが実際に比較対象フィールドで異なる値を含んでいることを確認してください。field diff プラグインが正しく設定されていることを確認してください。エンティティ参照フィールドの場合、比較方法(ID vs ラベル)が期待通りか確認してください。
/admin/config/content/diff/general でラジオボタンの動作設定を調整してください。「Simple exclusion」は同じリビジョンの選択を防止し、「Linear restrictions」は時系列順の選択を強制します。