概要
Feeds Tamperは、Feedsモジュールと連携して動作するデータ変換モジュールです。外部ソース(CSV、XML、JSONなど)からコンテンツをインポートする際に、データを保存する前に様々な加工処理を適用することができます。
各フィードタイプに対して、マッピングで使用されるソースフィールドごとにTamperプラグインを設定できます。複数のプラグインを連鎖させることで、複雑なデータ変換パイプラインを構築できます。例えば、文字列の前後の空白を除去し、大文字に変換し、特定のパターンを別の文字列に置換するといった処理を順番に実行できます。
TamperプラグインはTamperモジュールによって提供され、テキストの操作(トリム、大文字/小文字変換、検索置換など)、配列操作(分割、結合、フィルタリングなど)、条件付きスキップなど、多様なデータ変換機能が利用可能です。
Features
- ソースフィールドごとに複数のTamperプラグインを適用可能
- ドラッグ&ドロップでプラグインの実行順序(重み)を変更可能
- Tamperモジュールが提供する豊富なプラグイン群を利用可能(トリム、大文字/小文字変換、検索置換、分割、結合、フィルタリングなど)
- 条件を満たさないアイテムをスキップする機能
- フィードタイプごとに個別のパーミッションを設定可能
- AJAXを使用したスムーズなプラグイン設定フォーム
Use Cases
CSVからインポートするデータのクリーニング
CSVファイルからコンテンツをインポートする際に、タイトルフィールドの前後の空白を除去し、大文字に変換する。Tamper一覧画面でソースフィールド「title」に対して「Trim」プラグインと「Convert case」プラグイン(uppercaseモード)を順番に追加することで実現できる。
特定のキーワードを含むアイテムのスキップ
XMLフィードからのインポート時に、特定のキーワードを含むアイテムを除外したい場合、「Keyword filter」プラグインを使用してフィルタリング条件を設定し、その後「Required」プラグインを追加することで、条件に一致しないアイテムをスキップできる。
複合フィールドの生成
複数のソースフィールドを組み合わせて新しい値を生成する。例えば、「Rewrite」プラグインを使用して「[first_name] [last_name]」のような形式でフルネームを生成できる。
区切り文字でのデータ分割と結合
カンマ区切りのタグリストを配列に分割(Explode)した後、別の区切り文字で結合(Implode)したい場合、それぞれのプラグインを順番に適用することで実現できる。
テキストの検索と置換
古いURLを新しいURLに置換したり、特定の文字列を別の文字列に変換する場合、「Find and Replace」プラグインを使用する。正規表現を使用した高度な置換も可能。
日付フォーマットの変換
ソースデータの日付形式がDrupalの想定する形式と異なる場合、Tamperプラグインを使用してフォーマットを変換できる。
Tips
- Tamperプラグインの重み(weight)を適切に設定することで、変換処理の実行順序を制御できます
- プラグインにわかりやすいラベルを付けることで、後から設定を見直す際に何を行っているか理解しやすくなります
- 「Required」プラグインと組み合わせることで、条件を満たさないアイテムをスキップできます
- フィードタイプのエクスポート時にTamperプラグインの設定も含まれるため、設定管理(CMI)を通じて本番環境への移行が可能です
- テスト環境で十分にテストした後、本番環境に設定を移行することをお勧めします
- 複雑な変換が必要な場合は、カスタムTamperプラグインを作成することも可能です(Tamperモジュールのプラグインシステムを利用)
Technical Details
Admin Pages 4
/admin/structure/feeds/manage/{feed_type_id}/tamper
フィードタイプに設定されたTamperプラグインの一覧を表示・管理する画面。マッピングで使用されているソースフィールドごとにグループ化されて表示され、各プラグインの重み(実行順序)をドラッグ&ドロップで変更できる。
/admin/structure/feeds/manage/{feed_type_id}/tamper/add/{source_field}
指定したソースフィールドに新しいTamperプラグインを追加するフォーム。利用可能なプラグインを選択し、プラグイン固有の設定を行う。
/admin/structure/feeds/manage/{feed_type_id}/tamper/{tamper_uuid}/edit
既存のTamperプラグインインスタンスの設定を編集するフォーム。プラグインタイプは変更できない。
/admin/structure/feeds/manage/{feed_type_id}/tamper/{tamper_uuid}/delete
Tamperプラグインインスタンスの削除を確認するフォーム。
権限 2
Hooks 3
hook_entity_operation
フィードタイプエンティティの操作リンクに「Tamper」リンクを追加する。ユーザーが適切なパーミッションを持っている場合のみ表示される。
hook_entity_type_alter
フィードタイプエンティティに「tamper」リンクテンプレートを追加する。
hook_ENTITY_TYPE_presave (feeds_feed_type)
フィードタイプが保存される前に、マッピングから削除されたソースフィールドに関連付けられたTamperプラグインインスタンスを自動的に削除する。
Troubleshooting 4
1. フィードタイプのマッピングでソースフィールドが正しく設定されているか確認する。2. Tamperプラグインがそのソースフィールドに対して設定されているか確認する。3. プラグインの重みが正しい順序になっているか確認する。4. キャッシュをクリアする。
これは意図した動作です。マッピングからソースフィールドを削除すると、そのソースフィールドに関連付けられたTamperプラグインは自動的に削除されます(hook_feeds_feed_type_presave()による)。
ユーザーが「administer feeds_tamper」または「tamper [feed_type_id]」パーミッションを持っているか確認してください。また、フィードタイプにマッピングが設定されていない場合は警告メッセージが表示され、Tamperプラグインを追加できません。
Tamper一覧画面でプラグインの重みを確認し、ドラッグ&ドロップで順序を調整してください。小さい重みが先に実行されます。
Security Notes 3
- 「administer feeds_tamper」パーミッションは制限付きアクセス(restrict access)として設定されており、信頼できるユーザーにのみ付与すべきです
- フィードタイプごとのパーミッション(tamper [feed_type_id])を使用して、特定のフィードタイプのみの設定変更を許可する細かいアクセス制御が可能です
- Tamperプラグインの中には任意のコードを実行できるものがある可能性があるため、Tamperプラグインの設定権限は慎重に付与してください