Node Revision Delete
設定可能なプラグインルールに基づいて、古いノードリビジョンを自動的に追跡・削除するモジュールです。
node_revision_delete
インストール
composer require 'drupal/node_revision_delete:^2.0'
概要
Node Revision Deleteモジュールは、Drupalにおける古いノードリビジョンの管理と自動削除のための包括的なソリューションを提供します。複数の基準に基づいて削除ルールを柔軟に設定できるプラグインベースのアーキテクチャを採用しています。
新しいリビジョンが作成されると、コンテンツは自動的に処理キューに追加されます。キューワーカーは各リビジョンを有効なすべてのプラグインと照合し、削除すべきかどうかを判断します。プラグインシステムは投票メカニズムを使用しており、いずれかのプラグインがFALSEを返すとリビジョンは保持され、少なくとも1つがTRUEを返し、FALSEを返すものがなければリビジョンは削除されます。
このモジュールは、コンテンツタイプごとの設定オーバーライド、言語ごとに個別のリビジョン追跡を行う多言語コンテンツのサポート、バッチ操作用のDrushコマンドを備えています。下書きリビジョンを管理するためのDrupalのContent Moderationワークフローともシームレスに統合されます。
Features
- Amount、Created、Drafts、Only Draftsの4つの組み込みプラグインを備えた、柔軟なリビジョン削除ルールのためのプラグインベースアーキテクチャ
- 新しいリビジョン作成時のコンテンツの自動キューイング(自動キューイングを無効にするオプションあり)
- グローバルデフォルトへのフォールバック機能を持つコンテンツタイプごとの設定オーバーライド
- 言語ごとに個別のリビジョンカウントを行う多言語コンテンツのサポート
- リビジョンクリーンアップのために既存のすべてのコンテンツをキューに追加するバッチ処理UI
- cron実行時にリビジョン削除を処理するキューワーカー(5分間の処理時間枠)
- 削除されたすべてのリビジョンを追跡する詳細ログオプション
- 下書きリビジョン管理のためのContent Moderationとの統合
- リビジョン削除確認ページからの以前のリビジョンの手動一括削除
- コマンドラインでのバッチ操作と手動リビジョン削除のためのDrushコマンド
Use Cases
リビジョン数による制限
ニュースサイトでデータベース容量を節約するために記事の最新10リビジョンのみを保持したい場合。Amountプラグインを最小10リビジョンで設定します。記事がこの制限を超えると、古いリビジョンはcron処理中に自動的に削除されます。
期間ベースのリビジョンクリーンアップ
企業サイトで12ヶ月以上前のコンテンツを削除するデータ保持ポリシーへの準拠が必要な場合。Createdプラグインを12ヶ月に設定して有効にします。1年以上前のリビジョンは自動的に削除されます。
下書きリビジョンのクリーンアップ
編集チームがコンテンツレビュー中に多くの下書きリビジョンを作成する場合。データベースの肥大化を防ぐために、Draftsプラグインを3ヶ月の期限で有効にします。3ヶ月以上前の放棄された下書きリビジョンは、公開済みリビジョン履歴を保持しながら自動的に削除されます。
多言語コンテンツ管理
多言語サイトで各言語ごとに個別のリビジョン履歴を維持する場合。モジュールは言語ごとにリビジョンを自動的に追跡し、設定された最小リビジョン数が各翻訳に対して独立して維持されることを保証します。
手動一括クリーンアップ
サイト監査中に管理者が特定のリビジョンより前のすべてのリビジョンを削除する必要がある場合。Drushコマンド「drush nrd:delete-prior-revisions [nid] [vid]」を使用して履歴リビジョンをインタラクティブに削除するか、リビジョン削除時のUIオプションを使用して以前のすべてのリビジョンも削除します。
Content Moderationワークフロー統合
公開ワークフローが下書き、レビュー、公開状態でContent Moderationを使用している場合。Only Draftsプラグインを有効にして、コンプライアンス目的で公開済みコンテンツの完全な履歴を保持しながら、古い下書きリビジョンを特定的にターゲットしてクリーンアップします。
自動キューイング無効化によるスケジュールメンテナンス
高トラフィックサイトでリビジョンクリーンアップ処理のタイミングを制御したい場合。設定で自動キューイングを無効にし、スケジュールタスクを使用してオフピーク時に「drush node-revision-delete:queue」を実行し、その後「drush queue:run node_revision_delete」を実行します。
Tips
- 初期設定時に詳細ログを有効にして、どのリビジョンがどのプラグインによって削除されているかを監視してください
- Queue UIモジュールを使用してnode_revision_deleteキューを監視し、処理の問題をトラブルシューティングしてください
- 包括的なカバレッジのためにAmountとCreatedプラグインを組み合わせてください - Amountは最小リビジョンを確保し、Createdは古いリビジョンを処理します
- 本番環境にデプロイする前にステージング環境で設定をテストしてください(特に大規模なリビジョン履歴を持つサイトの場合)
- 大規模サイトでは、自動キューイングを無効にしてオフピーク時にdrush queueコマンドをスケジュールすることを検討してください
- Only DraftsプラグインはContent Moderationを必要とします。ワークフローのないサイトでは代わりに通常のDraftsプラグインを使用してください
- 一括削除操作を実行する前にデータベースをバックアップしてください(特にDrush delete-prior-revisionsコマンドを使用する場合)
Technical Details
Admin Pages 2
/admin/config/content/node_revision_delete
Node Revision Deleteモジュールのメイン設定ページ。すべてのコンテンツタイプとその現在の設定ステータス(デフォルトまたはオーバーライド)を表示するテーブルを表示し、各コンテンツタイプの設定にアクセスできます。テーブルの下には、オーバーライドのないすべてのコンテンツタイプに適用されるデフォルトのプラグイン設定を構成できます。
/admin/structure/types/manage/{node_type}
Node Revision Deleteのコンテンツタイプごとの設定。コンテンツタイプ編集フォームの垂直タブとして利用可能です。ここでの設定はグローバルデフォルトを上書きします。
権限 1
Hooks 1
hook_node_revision_delete_info_alter
ノードリビジョン削除プラグイン定義を変更します。このフックはプラグインマネージャーによって呼び出され、モジュールがプラグイン定義を変更できるようにします。
Drush Commands 2
drush node-revision-delete:queue
リビジョンを削除するためにすべてのコンテンツをキューに追加します。少なくとも1つの有効なプラグインを持つすべてのノードに対してキューアイテムを作成し、cron中に処理されます。
drush nrd:delete-prior-revisions
指定されたノードの特定のリビジョンより前のすべてのリビジョンを削除します。確認を求めるインタラクティブなコマンドで、指定されたリビジョンも削除するオプションを提供します。
Troubleshooting 5
グローバルまたは特定のコンテンツタイプで少なくとも1つのプラグインが有効になっていることを確認してください。「自動キューイングを無効にする」が有効になっていないことを確認してください。cronが定期的に実行されていることを確認してください。Queue UIモジュールまたは「drush queue:list」を使用してキューをチェックし、保留中のアイテムを確認してください。
複数のプラグインが削除を防ぐことがあります。いずれかのプラグインがリビジョンに対してFALSEを返すと、そのリビジョンは保持されます。すべての有効なプラグインとその設定を確認してください。AmountプラグインがCreatedプラグインで削除されるはずのリビジョンを保持している可能性があり、その逆もあり得ます。
キューワーカーはcron実行ごとに300秒の制限時間があります。大規模サイトでは複数回のcron実行が必要な場合があります。「drush queue:run node_revision_delete」を使用してキューを手動で処理してください。大規模バッチの場合はPHPメモリ制限の増加を検討してください。
設定変更後、プラグインマネージャーのキャッシュをクリアする必要があります。「drush cr」または管理 > 環境設定 > 開発 > パフォーマンスでキャッシュをクリアしてください。設定ページでコンテンツタイプが「Overridden」と表示されていることを確認してください。
モジュールは言語ごとにリビジョンを個別に追跡します。翻訳のリビジョンが正しく削除されていないように見える場合は、リビジョンのisRevisionTranslationAffected()をチェックしてリビジョンの言語所属を確認してください。
Security Notes 3
- 「Node Revision Deleteの管理」権限はコンテンツ保持ポリシーを制御するため、信頼できる管理者にのみ付与してください
- リビジョン削除は永続的で元に戻せません - 適切なバックアップ手順が整っていることを確認してください
- モジュールはDrupalのアクセス制御を尊重します - キューワーカーは内部操作にaccessCheck(FALSE)を使用しますが、これはcronベースのクリーンアップタスクには適切です