Gmailの件名(getSubject)を活用したデータ分析とレポート作成

Gmailの件名(getSubject)を活用したデータ分析とレポート作成

GmailのGmailMessage.getSubject()メソッドを利用して、受信メールの件名から必要な情報を抽出し、データ分析やレポート作成を自動化する方法を解説します。本記事では、特にデータ分析の現場で頻繁に発生する「メール件名に含まれる情報を集計・分析したい」というニーズに応えるための具体的なコード例と、そのカスタマイズ方法を紹介します。

GmailMessage.getSubject()とは

GmailMessage.getSubject()は、Google Apps Script(GAS)でGmailのメールを操作する際に、メールの件名を取得するためのメソッドです。取得した件名は文字列として扱えるため、文字列操作関数と組み合わせることで、様々なデータ抽出や分析に活用できます。

基本的な使い方

基本的な使い方は非常に簡単です。まず、GmailAppサービスを使ってメールを取得し、そのメールオブジェクトに対してgetSubject()メソッドを呼び出すだけです。

// Gmailの件名を取得する例
function getEmailSubject() {
const threads = GmailApp.search('件名:レポート', 0, 1); // 「レポート」という件名のメールを検索
const messages = threads[0].getMessages();
const subject = messages[0].getSubject();
Logger.log(subject); // ログに件名を出力
}

データ分析におけるGmail件名活用のシチュエーション

例えば、毎日の業務報告メールの件名に「【日付】 報告者名:〇〇」のような形式で情報が含まれている場合、この情報を自動的にスプレッドシートに集計し、日々の業務状況を可視化することができます。また、エラー通知メールの件名からエラーの種類を判別し、エラー発生件数を集計することも可能です。

実装方法:業務報告レポートの自動作成

ここでは、業務報告メールの件名から日付と報告者名を抽出し、スプレッドシートに記録する例を紹介します。メールの件名形式は「【2024-07-26】報告者名:山田太郎」とします。

// 業務報告メールの件名から情報を抽出してスプレッドシートに書き込む
function recordDailyReport() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('業務報告');
const threads = GmailApp.search('件名:報告者名', 0, 10); // 「報告者名」を含むメールを10件検索

for (let i = 0; i < threads.length; i++) {
const messages = threads[i].getMessages();
const subject = messages[0].getSubject();

// 件名から日付と報告者名を抽出
const date = subject.match(/【(.*?)】/)[1];
const reporter = subject.match(/報告者名:(.*?)$/)[1];

// スプレッドシートに書き込む
sheet.appendRow([date, reporter]);
}
}

コード解説

  • GmailApp.search()で、特定のキーワード(ここでは「報告者名」)を含むメールを検索します。
  • subject.match(/【(.*?)】/)で、件名から日付を抽出します。正規表現/【(.*?)】/は、「【」と「】」で囲まれた文字列を抽出する意味です。
  • subject.match(/報告者名:(.*?)$/)で、件名から報告者名を抽出します。正規表現/報告者名:(.*?)$/は、「報告者名:」から行末までの文字列を抽出する意味です。
  • sheet.appendRow([date, reporter])で、抽出した日付と報告者名をスプレッドシートの新しい行に書き込みます。

実装方法:エラー通知メールの集計

次に、エラー通知メールの件名からエラーの種類を判別し、その件数を集計する例を紹介します。メールの件名形式は「【エラー】〇〇エラーが発生しました」とします。

// エラー通知メールの件名からエラーの種類を判別して集計する
function countErrorTypes() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('エラー集計');
const threads = GmailApp.search('件名:【エラー】', 0, 100); // 「【エラー】」を含むメールを100件検索
const errorCounts = {};

for (let i = 0; i < threads.length; i++) {
const messages = threads[i].getMessages();
const subject = messages[0].getSubject();

// 件名からエラーの種類を抽出
const errorType = subject.match(/【エラー】(.*?)(エラーが発生しました)/)[1];

// エラーの種類を集計
if (errorCounts[errorType]) {
errorCounts[errorType]++;
} else {
errorCounts[errorType] = 1;
}
}

// スプレッドシートに書き込む
for (const errorType in errorCounts) {
sheet.appendRow([errorType, errorCounts[errorType]]);
}
}

コード解説

  • GmailApp.search()で、特定のキーワード(ここでは「【エラー】」)を含むメールを検索します。
  • subject.match(/【エラー】(.*?)(エラーが発生しました)/)で、件名からエラーの種類を抽出します。正規表現/【エラー】(.*?)(エラーが発生しました)/は、「【エラー】」と「エラーが発生しました」で囲まれた文字列を抽出する意味です。
  • エラーの種類を集計するために、オブジェクトerrorCountsを使用します。
  • 集計結果をスプレッドシートに書き込みます。

よくある問題とトラブルシューティング

  • 件名の形式が一定でない場合:正規表現を工夫して、様々な形式に対応できるようにする必要があります。
  • メールの取得件数が多すぎる場合:GmailApp.search()maxResultsパラメータを調整して、取得件数を制限します。
  • タイムゾーンの問題:GASのタイムゾーン設定を確認し、必要に応じてUtilities.formatDate()などで日付を調整します。

カスタマイズ方法と応用例

  • 抽出した情報をGoogle Chart APIでグラフ化する:集計したデータを元に、Google Chart APIを使ってグラフを生成し、レポートに組み込むことができます。
  • 特定の条件に合致するメールをSlackに通知する:エラー通知メールを受信した場合、Slackに通知することで、迅速な対応を促すことができます。
  • 抽出した情報を元に、Googleドキュメントを自動生成する:業務報告メールから抽出した情報を元に、Googleドキュメントを自動生成し、上長に共有することができます。

まとめ

GmailMessage.getSubject()メソッドとGASを活用することで、Gmailの件名に含まれる情報を効率的に抽出し、データ分析やレポート作成を自動化することができます。本記事で紹介したコード例を参考に、ぜひ業務効率化に役立ててください。