Views Data Export
Viewsの結果をCSV、JSON、XML、XLS/XLSXなどの様々なファイル形式にエクスポートします。大規模データセットのバッチ処理にも対応しています。
views_data_export
インストール
composer require 'drupal/views_data_export:8.x-1.8'
概要
Views Data Exportモジュールは、DrupalのViewsモジュールを拡張し、Viewの結果を複数のファイル形式にエクスポートする機能を提供します。既存のViewsディスプレイにアタッチできる専用の「データエクスポート」ディスプレイプラグインを提供し、ユーザーがフィルタリングおよびソートされたデータを希望の形式でダウンロードできるようにします。
このモジュールは2つのエクスポート方式をサポートしています:Standard(単一リクエスト、小規模データセット向け)とBatch(データをチャンクで処理、2000行を超える大規模エクスポートに最適)。バッチ処理により、大量のデータをエクスポートする際のメモリ不足やサーバータイムアウトを防止します。
主な機能として、Tokenサポート付きの設定可能なファイル名、エクスポート完了後の自動ファイルダウンロード、バッチ完了後の柔軟なリダイレクトオプション、FacetsおよびSearch APIモジュールとの連携があります。また、プログラムによるエクスポート用のDrushコマンドと、フックによるカスタマイズもサポートしています。
Features
- csv_serializationモジュール経由でViewsデータをCSV形式にエクスポート(区切り文字、囲み文字、エスケープ文字、HTMLストリップ、空白トリム、エンコーディング、BOMオプションが設定可能)
- Drupal組み込みのシリアライゼーションを使用してViewsデータをJSON形式にエクスポート
- Viewsデータを設定可能なエンコーディング、ルートノード名、アイテムノード名、整形出力オプション付きでXML形式にエクスポート
- オプションのxls_serializationモジュール経由でMicrosoft Excel XLS/XLSX形式にエクスポート
- 単一のHTTPリクエストで処理される小規模データセット向けのStandardエクスポート方式
- メモリ不足を防ぐため設定可能なバッチサイズでデータを処理する大規模データセット(2000行以上)向けのBatchエクスポート方式
- エクスポートする最大行数を制限する設定可能なエクスポート制限
- ユーザーが簡単にアクセスできるよう他のViewsディスプレイ(Page、Block)にデータエクスポートアイコンをアタッチ
- Viewコンテキストと日付Tokenに基づく動的なファイル命名のためのファイル名へのTokenサポート
- エクスポート完了後すぐにファイルダウンロードをトリガーする自動ダウンロードオプション
- バッチ完了後の柔軟なリダイレクト設定:カスタムパス、特定のディスプレイ、またはフロントページ
- エクスポート後のリダイレクト時にフィルターを維持するためのクエリパラメータ保持オプション
- 生成されたエクスポートファイルへのアクセスを制御するためのプライベートおよびパブリックファイルストレージオプション
- エクスポート時にSearch API Viewsでのファセット選択を尊重するFacetsモジュールとの連携
- Search APIベースのViewsを適切に処理するためのSearch APIディスプレイプラグイン連携
- コマンドラインからのプログラムによるエクスポートとスケジュールエクスポート用のDrushコマンド(vde)
- hook_views_data_export_row_alter()フックによる行レベルのカスタマイズ
- エクスポートされたデータでテーブルソート機能を維持するクリックソートサポート
Use Cases
コンプライアンス要求に対応するユーザーデータのエクスポート
関連フィールド(ユーザー名、メール、登録日、ロール)を持つユーザーアカウントのViewを作成します。バッチ処理を設定したCSV形式のData exportディスプレイを追加します。ファイル名を'user-export-[date:custom:Y-m-d].csv'に設定します。管理者は公開フィルターを使用して特定のユーザーを検索し、GDPRやコンプライアンス要求のためにデータをダウンロードできます。
スケジュールされたコンテンツ監査レポート
タイトル、作成者、作成日、ステータスなどのフィールドを持つコンテンツを表示するViewを設定します。CSV形式でバッチ処理を有効にしたData exportディスプレイを追加します。cronジョブでDrushコマンドを使用:'drush vde content_audit data_export --output-file=/var/reports/content-$(date +%Y%m%d).csv'で毎日の監査レポートを自動生成します。
Eコマース注文エクスポート連携
顧客情報、明細項目、合計を含むコマース注文のViewを作成します。ヨーロッパのExcel互換性のためにセミコロン区切りを使用するCSV形式でData exportを設定します。大規模な注文データセットでのパフォーマンス向上のために「Symfony serializer->encodeメソッドのみを使用」オプションを有効にします。スタッフはフィルタリングされた注文を会計システム用にエクスポートできます。
Facet付きSearch API結果のエクスポート
Search APIを使用した商品カタログViewに、Data exportディスプレイを追加します。アタッチされたPageディスプレイのFacetソースに一致するようにFacetソース設定を構成します。ユーザーはPageディスプレイでFacetフィルター(カテゴリ、価格帯、属性)を適用でき、エクスポートはCSV生成時に選択されたすべてのFacetを尊重します。
外部システム向けXMLフィード生成
コンテンツシンジケーション用にXML形式のData exportディスプレイを設定します。消費システムの要件に合わせてカスタムのroot_node_name('products')とitem_node_name('product')を設定します。開発中の人間が読みやすい出力のためにpretty-printを有効にします。生成されたXMLフィードは外部の在庫やカタログシステムで消費できます。
マルチフォーマットダウンロードページ
データダッシュボード用の公開フィルターを持つPageビューを作成します。複数のData exportディスプレイを追加します - CSV用、JSON用、XML用それぞれ1つずつ。3つすべてをPageディスプレイにアタッチします。ユーザーは複数のダウンロードアイコンを見て、同じフィルター条件を使用しながら好みのフォーマットを選択できます。
Tips
- 非常に大規模なエクスポート(10万行以上)の場合、XLS形式でのPhpSpreadsheet操作中のメモリ不足エラーを防ぐため、バッチサイズを500に減らし、PHPのmemory_limitを増やすことを検討してください。
- ファイル名に[date:custom:Ymd-His]などのToken置換を使用して、各エクスポートに一意のファイルを作成し、キャッシュの問題を防いでください。
- 機密データのエクスポートにはプライベートファイルストレージを設定し、Drupalのアクセス制御を通じて認可されたユーザーのみがファイルにアクセスできるようにしてください。
- バッチモードを使用する場合は、バッチイテレーション全体で一貫した結果を確保するために、必ず一意のソート条件(ノードIDの昇順など)を追加してください。
- 「Symfony serializer->encodeメソッドのみを使用」オプションはCSVエクスポートのパフォーマンスを大幅に向上させますが、フラットなデータ構造でのみ機能します - 参照エンティティや複数値フィールドでは避けてください。
- 本番データで実行する前に、まず小さなデータセットでエクスポート機能をテストして、フィールドマッピングとフォーマットオプションを確認してください。
- Drush経由のスケジュールエクスポートでは、公開ステータスに関係なくすべてのコンテンツにアクセスできるように、管理者アカウントで--uidオプションを使用してください。
Technical Details
Hooks 1
hook_views_data_export_row_alter
モジュールがエクスポート前に個々の行を変更できるようにします。View結果の各行のレンダリングプロセス中に呼び出されます。
Drush Commands 1
drush views_data_export:views-data-export
views_data_exportディスプレイを実行し、出力を標準出力またはファイルに書き込みます。StandardとBatchの両方のエクスポート方式をサポートします。
Troubleshooting 8
settings.phpでプライベートファイルシステムが有効なfile_private_pathで適切に設定されていることを確認してください。Webサーバーがpublic://とprivate://の両方のディレクトリへの書き込み権限を持っていることを確認してください。views_data_exportサブディレクトリが作成できるか確認してください。
Viewを一意の識別子フィールド(nid、uid、またはエンティティID)でソートしてください。一貫したソートがないと、バッチのページネーションで行がスキップまたは重複する可能性があります。これはイシュー#3120563に記載されています。
ブラウザが生のJSONデータを表示するのを防ぐため、JSON形式では自動ダウンロードが意図的に無効になっています。JSONエクスポートの場合、ユーザーは手動でダウンロードリンクをクリックする必要があります。
CSV区切り文字をロケールのリスト区切り文字に合わせて設定してください。ヨーロッパ版のExcelではカンマの代わりにセミコロンが期待される場合があります。特殊文字が文字化けする場合はUTF-8 BOMオプションを有効にしてください。
StandardからBatchエクスポート方式に切り替えてください。サーバーリソースに応じてバッチサイズを500〜2000行に設定してください。フラットなデータのCSVエクスポートでは「Symfony serializer->encodeメソッドのみを使用」を有効にしてください。
データエクスポートディスプレイのFacetソース設定が、アタッチされているPageディスプレイのFacetソースと一致していることを確認してください。FacetソースIDの形式は通常'search_api:views_page__VIEW_ID__DISPLAY_ID'です。
--uidオプションを使用して、適切な権限を持つユーザーとしてエクスポートを実行してください。匿名ユーザーやDrushユーザーは、エクスポートされるコンテンツへのアクセス権がない場合があります。
スタイルオプションでXML設定を構成してください。国際文字にはエンコーディングをUTF-8に設定してください。XMLスキーマ要件に合わせてroot_node_nameとitem_node_nameをカスタマイズしてください。
Security Notes 5
- エクスポートファイルには潜在的に機密性の高いデータが含まれています。ユーザー情報、注文、その他の機密コンテンツをエクスポートする場合は、パブリックではなくプライベートファイルストレージ(private://)を使用してください。
- モジュールはhook_file_access()を実装して、現在のユーザーのエクスポートセッションで生成されたファイルへのダウンロードアクセスを制限します。ただし、public://内のファイルは直接URLでアクセス可能です。
- Drushコマンドの--uidオプションは任意のユーザーとしてエクスポートを実行できます - シェルアクセスは信頼できる管理者のみに制限してください。
- データエクスポートはViewのアクセス設定を継承するため、Viewのアクセス権限を適切に設定してください。ユーザーはアタッチされたディスプレイで見ることができるデータのみをエクスポートできます。
- 共有または公共のコンピューター環境では、追加の確認なしにファイルがダウンロードされるため、自動ダウンロードオプションに注意してください。