Revision Log Default
ユーザーがリビジョンログメッセージを入力しなかった場合に、コンテンツEntityに対して適切なデフォルトのリビジョンログメッセージを自動生成します。
revision_log_default
インストール
composer require 'drupal/revision_log_default:8.x-1.4'
概要
Revision Log Defaultは、リビジョンログをサポートするあらゆるDrupalコンテンツEntityに対して、リビジョンログメッセージを自動的に入力するユーティリティモジュールです。ユーザーがリビジョンログメッセージを入力せずにコンテンツを保存すると、このモジュールが変更内容を説明する意味のある人間が読みやすいメッセージを生成します。
このモジュールは設定不要でバックグラウンドで透過的に動作します。CoreのContent ModerationワークフローやサードパーティモジュールのWorkbench Moderationとシームレスに統合され、下書きリビジョンで作業している場合でもリビジョンログが最新の変更を正確に反映することを保証します。
このモジュールは、すべてのコンテンツ変更が記録されることを保証することで、空のリビジョン履歴という一般的な問題を解決し、時間の経過とともにコンテンツの変更履歴を追跡しやすくします。
Features
- ユーザーがリビジョンログメッセージを入力しなかった場合に自動生成
- 変更の種類に応じたコンテキストに即したメッセージを作成:新規コンテンツ作成、翻訳作成、またはFieldの更新
- 既存コンテンツの更新時に変更されたField名を具体的にリスト表示(例:「TitleとBodyのFieldを更新しました」)
- 変更されたFieldの数に応じて文法的に正しいメッセージを処理(単数形、二項形、複数形)
- リビジョン作成タイムスタンプがオリジナルと一致する場合に適切に設定(REST API、Quick Edit、カスタムコードでよく発生)
- リビジョンユーザーIDを自動設定し、現在のユーザーが匿名の場合はEntityの所有者にフォールバック(CLIやマイグレーションに便利)
- Content Moderationモジュールと統合し、デフォルトリビジョンではなく最新リビジョンと比較
- Workbench Moderationモジュールと統合し、レガシーのモデレーションワークフローに対応
- パスFieldやコメントFieldを含む特殊なField型をインテリジェントに処理
- 変更されたFieldを判定する際に、リビジョン関連のFieldと「changed」タイムスタンプを無視
- RevisionLogInterfaceを実装するあらゆるコンテンツEntity型で動作(Node、Media、カスタムEntityなど)
Use Cases
編集ワークフローの監査証跡
ニュースサイトで働くコンテンツ編集者は頻繁に記事を更新しますが、リビジョンログメッセージを入力することはほとんどありません。Revision Log Defaultを有効にすると、すべての保存が自動的に記録されます。編集者が見出しとアイキャッチ画像を更新すると、リビジョンログには「TitleとImageのFieldを更新しました」と表示され、手動入力なしで完全な監査証跡が作成されます。
多言語コンテンツ管理
翻訳チームが既存の英語コンテンツにフランス語とドイツ語の翻訳を追加します。新しい翻訳を作成すると、モジュールは自動的に「フランス語の翻訳を作成しました」「ドイツ語の翻訳を作成しました」とログに記録し、どの翻訳がいつ追加されたかを簡単に追跡できます。
REST APIとヘッドレスDrupal
デカップルドアプリケーションがDrupalのREST API経由でコンテンツを更新します。APIクライアントはリビジョンログメッセージを提供することはほとんどないため、Revision Log DefaultはすべてのAPI駆動の変更が記録されることを保証します。モジュールはAPIがタイムスタンプを提供しない場合でもリビジョンタイムスタンプを正しく設定します。
コンテンツマイグレーション
レガシーCMSからのマイグレーション中に、コンテンツはDrushまたはマイグレーションスクリプト経由でインポートされます。モジュールは適切なリビジョンユーザーIDを設定し(匿名として実行する場合はコンテンツ所有者にフォールバック)、すべてのマイグレーションされたコンテンツに対して「新しいArticleを作成しました」というメッセージを生成します。
Quick Editでの変更
Quick Editモジュールでインライン編集を行うユーザーは、リビジョンログFieldにアクセスできないことがよくあります。Revision Log Defaultはこれらのクイック変更(例:「BodyのFieldを更新しました」)を自動的に記録し、インライン編集がリビジョン履歴に適切に追跡されることを保証します。
Tips
- モジュールは有効化すると自動的に動作します - 設定は不要です
- ユーザーが入力したリビジョンログメッセージが常に優先されます。モジュールは空のログのみを埋めます
- 編集ワークフローを持つサイトで特に便利で、すべてのコンテンツ変更が記録されることを保証します
- RevisionLogInterfaceを実装していれば、あらゆるカスタムコンテンツEntity型で動作します
- プロジェクトの早い段階でこのモジュールを有効にして、最初から完全なリビジョン履歴を構築することを検討してください
Technical Details
Hooks 1
hook_entity_presave
このモジュールはhook_entity_presave()を実装して、コンテンツEntityの保存をインターセプトし、空の場合にリビジョンログメッセージを入力します。このhookはRevisionLogInterfaceを実装するすべてのコンテンツEntityに対して発火します。
Troubleshooting 3
コンテンツEntity型がRevisionLogInterfaceを実装していることを確認してください。カスタムEntity型は、Entityアノテーションで適切なrevision_metadata_keysが定義されたリビジョンサポートが有効になっている必要があります。
一部の複雑なField型は、Field比較ロジックで完全に動作しない場合があります。モジュールはFieldアイテムリストのequals()メソッドを使用します。カスタムField型がこれを正しく実装していない場合、変更が検出されないことがあります。
presaveのhookが実行される前に、他のhookやプロセスによって一部のFieldの値が変更される場合があります。これにより、ユーザーが直接行っていない変更がモジュールによって検出されることがあります。