はじめに
業務で重要なメールを見逃さず管理したい、または特定の条件に合うメールをスプレッドシートに自動で保存したいと思ったことはありませんか?さらに、その情報をChatworkでチームに通知できれば、効率的な情報共有が可能になります。
本記事では、Google App Script(以下GAS)を活用して、Gmailの情報をスプレッドシートに転記し、Chatworkに通知する方法を解説します。初学者でも実践しやすいコード例を紹介しますので、ぜひ参考にしてください!
そもそもGoogle App Script(GAS)とは
Google App Scriptは、Googleが提供するクラウドベースのスクリプト開発環境です。
JavaScriptに似た文法を使用し、Google Workspaceアプリ(例: Gmail、スプレッドシート、Googleカレンダー)と簡単に統合できます。もちろん、その他アプリともAPIを使用して連携可能です。
無料で利用可能で、スケジュール実行やWebhookの利用なども可能なため、業務の自動化に最適です。
データ量がある程度大きな規模になるまでは、様々な情報をスプレッドシートで管理して、GASで自動化できるところを自動化して、運用していくでよいと個人的に思ってます。
Google App Script(GAS)の開き方
スプレッドシートを開いて、拡張機能→Apps Scriptをクリック
正確にはスプレッドシートから開かなくてもいけるのですが、自分は大体スプシと紐づいたGoogle App Script(GAS)を使用しますね
開いたGoogle App Script(GAS)にコードを書いていきます!
①メール情報の取得
Gmailのメッセージを取得するには、GASのGmailAppクラスを使用します。
以下の例では、未読のメールを取得して1件ずつ処理を書いてます。
// 未読のメールを取得
var threads = GmailApp.search('is:unread is:inbox');
// スレッドにの集合を取得する
var threads = GmailApp.getMessagesForThreads(mailThreads);
// スレッドの集合をループ
for (let i = 0; i < threads.length; i++){
thread = threads[i];
// スレッドをループ
for (let j = 0; j < thread.length; j++){
<1つのメールに対する処理>
}
}
②スプレッドシートへの書き込み
スプレッドシート書き込み処理には、SpreadsheetAppクラスを使用します。
以下の例では、指定したスプレッドシートに“a”, “b”, “c”, “d”, “e”を書き込んでいます。
// スプレッドシート指定
const spreadsheet = SpreadsheetApp.openById(<スプレッドシートのID>);
const sheet = spreadsheet.getSheetByName(<スプレッドシートの名前>);
// 入力したい配列
list = ["a", "b", "c", "d", "e"]
// シートの指定範囲(1行目1列目から幅5列の1行分)を取得
const setRange = sheet.getRange(1, 1, 1, 5);
// 値の書き込み(二次元配列を入力)
setRange.setValues([list]);
③ChatWorkに通知
APIトークンの確認
Chatwork右上のメニューからサービス連携→APIトークンを開いて、APIトークンの確認・発行を行います。
チャットグループのルームIDを確認
メッセージを送りたいチャットグループをブラウザで開いて、URLの中にある以下のIDを確認します。
GASからChatWorkにデータを送信
ChatWorkにメッセージを送信するには、チャットにメッセージを投稿するエンドポイントを使用します。
以下の例では、テストという文字列を指定したルームIDのチャットグループに送信しています。
function sendChatworkMessage() {
var chatworkApiToken = <APIトークン>;
var roomId = <ルームID>;
var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
var options = {
method: 'POST',
headers: { 'X-ChatWorkToken': chatworkApiToken },
payload: { body: "テスト"}
};
var response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() == 200) {
Logger.log('メッセージ送信成功');
} else {
Logger.log('メッセージ送信失敗');
}
}
実用的なコード例
上記のコードを統合して、以下の処理を行う全体コードを紹介します!
- 特定のラベルを持つ未読メールから件名と本文を取得する
- 情報を管理しているスプレッドシートに情報を保存する
- チャットアプリに通知する
// 定数
const SPRED_SHEET_ID = <スプレッドシートのID>
const SPRED_SHEET_NAME = <シートの名前>
const CHATWORK_ROOM_ID = <ChatworkのルームID>
const CHATWORK_TOKEN = <ChatworkのAPIトークン>
// メイン処理関数
function main() {
// テストから始める文字列を抜き出す正規表現
targetRegexp = /テスト.*/
// 未読のメールから指定件名のメールからの情報のリストを取得
unreadTargetMailInfoList = getUnreadTargetMailInfoList(targetRegexp);
// 指定件名メールからの情報のリストがある場合
if (!(unreadTargetMailInfoList.length == 0)) {
// メールのリストから情報を取得して
writeSpreadSheet(unreadTargetMailInfoList)
// Chatworkにメッセージを送信
sendChatworkMessage("メールを検知して管理シートに書き込みを行いました。対応を進めてください。");
}
}
// 未読のメールから指定の件名のメールを返す関数
function getUnreadTargetMailInfoList(targetRegexp) {
// リターン値定義
returnTagetMailInfoList = []
// 未読のメールを取得
const unreadMails = GmailApp.search('is:unread is:inbox');
// スレッドにの集合を取得する
const threads = GmailApp.getMessagesForThreads(unreadMails);
// 時刻の古い順に並べ替え
threads.reverse();
Logger.log(`すべてのスレッド(${threads.length}件)を取得しました。`);
// スレッドの集合をループ
for (let i = 0; i < threads.length; i++){
thread = threads[i];
// スレッドをループ
for (let j = 0; j < thread.length; j++){
// メッセージを取得
message = thread[j];
// 件名を取得
const subject = message.getSubject();
// Logger.log(subject);
// 本文を取得
const body = message.getPlainBody();
// Logger.log(body);
// 件名がtargetRegexpにマッチするか
var targetSubject = subject.match(targetRegexp);
// マッチしない場合はcontinue
if (!targetSubject){
continue
}
// 件名と本文を格納した配列
targetSubject = [subject, body]
// 件名と本文を格納した配列をリターン値に格納
returnTagetMailInfoList.push(targetSubject)
// 既読にする
GmailApp.markMessageRead(message);
}
}
return returnTagetMailInfoList
}
// スプレッドシートに書き込み
function writeSpreadSheet(matrix) {
// スプレッドシート指定
const spreadsheet = SpreadsheetApp.openById(SPRED_SHEET_ID);
const sheet = spreadsheet.getSheetByName(SPRED_SHEET_NAME); //シート最終行の値を取得する
// 最終行を取得
var lastRow = sheet.getLastRow();
// シートの指定範囲を取得
const setRange = sheet.getRange(lastRow + 1, 1, Number(matrix.length), Number(matrix[0].length));
// 値の書き込み(二次元配列を入力)
setRange.setValues(matrix);
}
// Chatworkへメッセージを送信する関数
function sendChatworkMessage(message) {
var chatworkApiToken = CHATWORK_TOKEN;
var roomId = CHATWORK_ROOM_ID;
var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
var options = {
method: 'POST',
headers: { 'X-ChatWorkToken': chatworkApiToken },
payload: { body: message }
};
var response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() == 200) {
Logger.log('メッセージ送信成功');
} else {
Logger.log('メッセージ送信失敗');
}
}
まとめ
本記事では、GASを活用してGmailのメール情報をスプレッドシートに転記し、チャットアプリに通知する方法を解説しました。この仕組みを応用すれば、業務効率化が大幅に向上します。ぜひこの記事を参考に、ご自身のワークフローに組み込んでみてください。
コメント