「最後のひと手間」も自動化に
こんな依頼、受けたことはありませんか? 「昨日取り込めなかったレコードの一覧、毎朝メールで送ってくれる?」 「月次の売上サマリ、経理にも CSV で回してほしいんだけど」 データは既にXplentyのパイプラインを通じて流れていた。しかし、受け取る側はBIツールにログインしたくないし、S3のバケットも見に行かない。結局、誰かが手でクエリを流してExcelに貼り付けてメールする。 そんな運用が残っているチームは意外と多いはずです。 Email Report デスティネーションは、この 「最後のひと手間」 をパイプラインの中に組み込むためのコンポーネントです。パイプラインの出力を、そのまま受信者のメールボックスに届けます。何ができるコンポーネントなのか
Email Reportデスティネーションは、パイプラインの終端に置くコンポーネントです。上流から流れてきたレコードを、次の3つの形でメールに載せて送信します。
「概要は本文の表で見せて、明細は CSVで渡す」といった使い分けができます。ただし、CSV 添付とテキスト添付は排他で、どちらか一方しか選べません。
要点の通知が主な目的
ここが一番大事なポイントです。Email Reportはダイジェストと通知のためのコンポーネントであり、大量データのエクスポート用ではありません。 出力にははっきりとした上限があります。
つまり「異常データ20件を担当者に知らせる」「日次KPIを1行で送る」「例外リストを300行のCSVで渡す」、こういった用途にはぴったりです。一方、「全顧客マスタ800万行を毎日送る」といった要件には向きません。データセットそのものを渡したいときは、S3やSnowflakeなどのファイル/ウェアハウス系のデスティネーション・コンポーネントを使い、Email Reportは**「処理が終わったこと」と「要点」を知らせる役割に留めるのが定石**です。
設定してみる
パッケージ画面でEmail Reportコンポーネントを配置し、上流のコンポーネント(変換や集計の出力)と接続したら、設定画面を開きます。設定は3つのセクションに分かれています。1. Recipients & Message(宛先とメッセージ)

件名と本文で変数が使える、というのがこのコンポーネントの地味に効くポイントです。変数は実行時に解決されるので、
事前定義変数の一覧はETL: System and Pre-Defined Variablesを参照してください。
Intro textには「このレポートは自動送信です」「件数が0件の場合は異常ありません」といった受信者向けの前置きを入れておくと、問い合わせがぐっと減ります。HTMLが使えるので、
<b>で強調したり、社内Wikiへのリンクを張ったりもできます。
2. Email Contents(メールの中身)
ここで先ほどの3つの出力形式を選びます。最低1つは選択 が必要です。また、選択可能な添付ファイルは1種類だけです。- Preview the rows as a table in the email body
- レコードをHTMLの表として本文に描画(最大1,000行)

- Attach the rows as a CSV file
- CSVとして添付。ファイル名を指定可能(既定
report.csv)
- CSVとして添付。ファイル名を指定可能(既定

- Attach the rows as a text file
- タブ区切りテキストとして添付。ファイル名を指定可能(既定
report.txt)
- タブ区切りテキストとして添付。ファイル名を指定可能(既定

report.csvが毎日届くとダウンロードフォルダで衝突します。daily_errors.csvのように用途が分かる名前に変えておくことをおすすめします。
3. Delivery Options(配信オプション)
- Fail the job if the report email cannot be sent
- 既定で有効で、メールを送信できなかった場合にジョブを失敗させます

- When the input is too large for one email
- Truncate and send(既定・データをサンプリングして送信)
- Fail the job(ジョブを停止)から選択します

Fail the job、「上位数百件だけ見えれば十分」であればTruncate and sendを選びます。
実践:「注文失敗を通知する」パッケージ
前日の取り込みでバリデーションに引っかかった注文レコードを、注文担当にメールする例を見てみましょう。パッケージ構成

設定内容

受け取るメールのイメージ

差出人アドレスを自社ドメインにする
既定の差出人はreports@integrate.ioです。社内向けの通知ならこのままでも実用上は困りませんが、顧客にレポートを送る用途では自社ドメインにするのが適切です。
自社ドメインは Settings > Account Settings > Email Sender で設定します。

なお、カスタムドメインの利用にはアカウントの承認が必要です。利用を予定している場合は、早めにサポートへ申請しておきましょう。あわせて、そのドメインでSPF/DKIMなどの送信ドメイン認証を設定しておくと、迷惑メール判定を避けられます。
つまずきやすいポイントと運用のコツ
1. 上流で絞る。メールで絞らない。 Email Reportには「先頭のN件だけ送る」という設定はないので、件数のコントロールは上流のフィルター(Filter)や集計(Aggregate)で行うのが前提です。「本文の表は1,000行まで」という上限は、その設計思想の表れでもあります。 2. 「0件のときも送るか」を決めておく。 エラー通知の場合、0件なら送らない方が親切に見えますが、「今日は届かなかった」が「異常なし」なのか「ジョブが動かなかった」なのか区別できなくなります。0件でも送る(Intro textに「0件=異常なしです」と明記しておく)方が、運用上は安全です。 3. 件名は必ず変数で一意にする。 毎日同じ件名のメールは、メールクライアント側で1スレッドに畳まれてしまいます。${_JOB_SUBMISSION_TIMESTAMP}を件名に入れておくだけで、この問題は避けられます。
4. 送信失敗時のジョブ失敗は、有効のままにする。
既定で有効になっている理由を尊重しましょう。「通知が届かないこと」に気づける仕組みは、通知そのものと同じくらい重要です。
5. 機微なデータを本文に載せない。
メールは転送されますし、受信者の端末にも残ります。個人情報や決済情報を扱うパイプラインでは、メールには「件数と概要」だけを載せ、明細はS3などの安全な場所に出力して、そのリンクだけをIntro textに書く、という設計を検討してください。
まとめ
Email Report Destinationは、派手な機能ではありません。けれど「データは出ているのに、見てほしい人に届いていない」という、データ基盤でよく起きる最後のギャップを埋めてくれます。- 通知・ダイジェスト向け。大量エクスポートには使わない(本文1,000行/添付500,000行・20MB)
- 件名と本文で変数が使えるので、実行ごとに文脈のあるメールを送れる
- 送信失敗をジョブ失敗として扱える(既定で有効)ので、通知の不達に気づける
- 読みやすさは上流のFilter/Selectで決まる


