Media Duplicates
Drupalサイト内の重複メディアエンティティを識別、比較、検出し、オプションで制限するためのフレームワークを提供します。
media_duplicates
インストール
composer require 'drupal/media_duplicates:^2.0'
composer require 'drupal/media_duplicates:8.x-1.2'
概要
Media Duplicatesは、サイト管理者がDrupalインストール内の重複メディアエンティティを管理・制御するための包括的なモジュールです。このモジュールはメディアソースファイルのSHA256チェックサムを生成し、同じファイルやoEmbedリソースが複数回アップロードされた場合にこれらのチェックサムを使用して検出します。
このモジュールは、ファイル、画像、音声、動画、oEmbedコンテンツなど、様々なメディアソースタイプをサポートするプラガブルなチェックサムシステムを提供します。サイト管理者は、単に重複を報告するか、ユーザーが重複を作成することを積極的に防止するかを設定できます。段階的な適用オプションにより、既存の重複があるサイトでも、レガシーの重複アイテムの編集を許可しながら新しい重複の作成を防止できます。
専用の重複レポートページでは、同じチェックサムを共有するすべてのメディアエンティティが表示され、簡単に確認できるよう各重複アイテムへの直接リンクが提供されます。このモジュールはDrupalのバリデーションシステムとシームレスに統合され、設定時に重複の作成をブロックし、既存の重複メディアアイテムへのリンクを含む明確なエラーメッセージを表示します。
Features
- 保存時にSHA256ハッシュを使用したメディアエンティティの自動チェックサム生成
- 一致するチェックサムを持つすべてのメディアエンティティを表示する重複検出レポートページ
- メディアエンティティ保存時のバリデーション制約による設定可能な重複制限
- 既存の重複を許可しながら新規重複をブロックする段階的適用モード
- 同じメディアタイプ内でのみ重複をチェックするバンドル固有の比較オプション
- カスタムメディアソースタイプをサポートするプラガブルなチェックサムアーキテクチャ
- ファイルベースのメディア(file、image、audio_file、video_file)およびoEmbedコンテンツの組み込みサポート
- 既存のメディアエンティティのチェックサムを再構築するためのバッチ処理システム
- バンドルフィルタリング機能を備えたCLIベースのチェックサム再構築用Drushコマンド
- 重複の統合にはEntity Usageモジュールとの併用を推奨
Use Cases
新規サイトでの重複メディアアップロードの防止
プロジェクト開始時にMedia Duplicatesをインストールし、「ユーザーが重複メディアアイテムを作成することを制限する」を有効にします。ユーザーがメディアライブラリに既に存在するファイルをアップロードしようとすると、代わりに使用できる既存のメディアアイテムへの便利なリンクを含むバリデーションエラーが表示されます。
既存サイトの重複メディア監査
Media Duplicatesをインストールし、チェックサム再構築プロセスを実行します。メディア重複レポートにアクセスして、重複メディアアイテムのすべてのグループを確認します。クリーンアップを計画している間、既存のワークフローを混乱させないように重複制限は無効のままにしておきます。
レガシー重複の段階的なクリーンアップ
「ユーザーが重複メディアアイテムを作成することを制限する」と「新しいメディアアイテムでのみ重複を制限する」を有効にします。これにより、新しい重複を防止しながら、コンテンツ編集者が統合できるまで既存の重複アイテムで作業を続けることができます。
意図的な重複がある複数バンドルのメディア
サイトが「Photo Gallery」バンドルと「Document Attachment」バンドルの両方で同じ画像を意図的に使用している場合、「同じバンドル内でのみ比較する」を有効にして、各バンドル内の重複は防止しながらこのパターンを許可します。
カスタムメディアソースタイプのサポート
カスタムメディアソースプラグインがある場合、hook_media_duplicates_checksum_info_alter()を実装して既存のチェックサムプラグインに関連付けるか、MediaDuplicatesChecksumBaseを拡張して新しいチェックサムプラグインを作成し、カスタムチェックサムロジックを提供します。
Tips
- 重複メディアの蓄積を防ぐために、開発プロセスのできるだけ早い段階でこのモジュールをインストールしてください
- Entity UsageモジュールをMedia Duplicatesと併用して、統合する前に重複メディアアイテムがどこで使用されているかを特定してください
- Drushコマンドは特定のバンドルの処理をサポートしており、増分再構築やターゲットを絞ったチェックサム更新に便利です
- カスタムチェックサムプラグインは、一貫性のためにMediaDuplicatesChecksumInterfaceを実装し、MediaDuplicatesChecksumBaseを拡張する必要があります
- モジュールはチェックサムを翻訳可能でリビジョン対応のフィールドに保存するため、ソースが異なる場合は各翻訳/リビジョンが独自のチェックサムを持つことができます
Technical Details
Admin Pages 3
/admin/config/media/media-duplicates
モジュールが重複メディアの検出と制限をどのように処理するかを設定します。このページでは、管理者が重複制限を有効または無効にし、比較動作を微調整できます。
/admin/reports/media-duplicates
システム内のすべての重複メディアエンティティの包括的なレポートを表示します。複数のメディアアイテムを持つ各一意のチェックサムと、カウント、各重複エンティティへの直接リンクが表示されます。
/admin/config/media/media-duplicates/refresh
すべてまたは選択したメディアバンドルのチェックサムを再構築します。既存のメディアがあるサイトでの初期モジュールインストール後、またはチェックサムプラグインの変更後にこのフォームを使用します。
権限 1
Hooks 1
hook_media_duplicates_checksum_info_alter
チェックサムプラグインの定義を変更します。このフックを使用して、既存のチェックサムプラグインにカスタムメディアタイプのサポートを追加したり、プラグイン定義を変更したりします。
Drush Commands 1
drush media-duplicates:checksums:rebuild
メディアエンティティのすべてのチェックサムを再構築します。既存のサイトでの初期セットアップや、チェックサムアルゴリズムまたはプラグインの変更後に不可欠です。
Troubleshooting 4
既存のメディアに対してチェックサムが生成されていない可能性があります。'drush media-duplicates:checksums:rebuild all'を実行するか、チェックサムの再構築フォームを使用してすべてのメディアエンティティのチェックサムを生成してください。
このメディアソースタイプのチェックサムプラグインが存在しません。hook_media_duplicates_checksum_info_alter()を使用して既存のプラグインにマップするか、メディアソース用のカスタムチェックサムプラグインを作成してください。
一部のメディアソースタイプには一致するチェックサムプラグインがない場合があります。メディアソースプラグインIDがチェックサムプラグインで定義されている'media_types'のいずれかと一致することを確認してください。hook_media_duplicates_checksum_info_alter()を使用してサポートを追加します。
メディアアイテムが多いサイトでは、特定のバンドル引数を指定してDrushコマンドを使用し、一度に1つのバンドルを処理するか、トラフィックの少ない時間帯に実行してください。バッチ処理は大規模なデータセットを処理するように設計されていますが、メディアエンティティの数に比例した時間がかかります。
Security Notes 2
- 「administer media duplicates」権限は制限付きアクセスとしてマークされており、信頼できる管理者にのみ付与する必要があります
- チェックサムの再構築は、現在のユーザーの権限に関係なくすべてのメディアエンティティが処理されるように、アクセスチェックをバイパスします