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の件名に含まれる情報を効率的に抽出し、データ分析やレポート作成を自動化することができます。本記事で紹介したコード例を参考に、ぜひ業務効率化に役立ててください。