GASでSlack通知を自動送信する方法

GASでSlack通知を自動送信する方法

記事
IT・テクノロジー
こんにちは、GASおじです。中小企業の経営者さんやフリーランスの皆さん、業務効率化に役立つGoogle Apps Script(以下GAS)を使ったSlack通知の自動送信、興味ありませんか?今回は「既存データを守りつつ」「コストを抑えつつ」「安全に」Slackへ通知を飛ばす方法をお伝えしますよ。

GASならGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えます。ただしApps Scriptのquotaや実行上限はあるのでご注意を。では早速、導入のポイントから解説しましょう。


■ Slack通知の初期設定と必要権限

まずはSlack側で「Incoming Webhook」を設定します。これでGASからSlackチャンネルに通知を送るためのURLを取得できます。

・Slackワークスペースの管理者画面で「アプリを追加」から「Incoming Webhooks」を検索・追加
・通知したいチャンネルを指定してWebhook URLを発行
・発行されたWebhook URLは後ほどGASのコードに使います
次にGAS側ですが、Googleスプレッドシートなどのファイルでスクリプトエディタを開き、以下の権限が必要です。

・スプレッドシートの読み書き(通知内容やログ保存のため)
・外部URLへのアクセス(SlackのWebhook送信のため)
これらは初回実行時に認証画面が表示されますので、指示に従って許可してください。

また、個人情報や機密情報を含む通知は、Slackのチャンネル設定やWebhookの管理に十分気をつけましょう。ログも適宜バックアップしておくことをおすすめします。


■ コードのポイント:既存データを守りつつ新規ファイルに書き込む

おじさんが最も大事にしているのは「既存データの全消去や削除操作をしないこと」です。clearやdelete系のAPIは使わず、通知内容や履歴は新たに日時を含むシートやファイルに追記・作成します。

また、複数件まとめて処理するバッチ処理(batch write)と、エラー発生時に備えたバックアップ・ロールバックの仕組みも組み込みます。

以下は具体的なコード例です。Slack通知内容をスプレッドシートに日時付きの新規シートとして残しつつ、Webhookに送信します。

function sendSlackNotificationBatch() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const logSheetName = 'SlackLog_' + timestamp;

// バックアップ用に新規シートを作成し通知内容を保存
const logSheet = ss.insertSheet(logSheetName);
logSheet.appendRow(['送信日時', '通知メッセージ', '送信結果']);

// 送信する通知メッセージの例(複数件)
const messages = [
'おはようございます。今日も頑張りましょう!',
'今週の売上が目標の80%に達しました。',
'緊急連絡:サーバーメンテナンスのお知らせ'
];

// Slack Incoming Webhook URL(実際にはプロパティサービスなどで管理推奨)
const webhookUrl = PropertiesService.getScriptProperties().getProperty('SLACK_WEBHOOK_URL');
if (!webhookUrl) {
throw new Error('Slack Webhook URLが設定されていません。');
}

// 通知結果を格納する配列
const results = [];

// バッチ送信処理
messages.forEach(msg => {
try {
const payload = JSON.stringify({ text: msg });
const options = {
method: 'post',
contentType: 'application/json',
payload: payload,
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(webhookUrl, options);
const code = response.getResponseCode();
const success = (code >= 200 && code < 300);

results.push([new Date(), msg, success ? '成功' : '失敗: ' + code]);
} catch (e) {
results.push([new Date(), msg, '例外エラー: ' + e.message]);
}
});

// ログシートに送信結果を一括書き込み
logSheet.getRange(2, 1, results.length, results[0].length).setValues(results);
}

このコードのポイントは、

・insertSheetで新規シートを作成し、既存データは一切触りません
・送信内容の配列をループで回し、1件ずつSlackに送信
・送信結果をまとめてバッチ書き込み
・Webhook URLはスクリプトプロパティで安全に管理
・エラー時は例外キャッチしてログに記録


■ installable triggerで定期実行と復元手順

このスクリプトは手動実行も可能ですが、定期的に通知したいなら「installable trigger」を使うのが便利です。

・スクリプトエディタの「時計アイコン」→「トリガーを追加」
・関数に sendSlackNotificationBatch を指定し、時間主導型トリガーをセット
・毎日や毎時間など好きな頻度を選択できます
トリガーの設定変更や削除は同じ画面で可能です。万が一トリガーが失敗した場合は、スクリプトエディタの「実行」→「ログ」や「エラー通知」で確認できます。

復元が必要になった際は、日時付きのログシートが残っているので、そちらから通知履歴の確認と再送信が可能です。常にバックアップを残しておくことで安心ですね。


■ コスト削減の仮定と計算式

おじさんがよく言うのは「クラウドSaaSの課金は積み重なるとバカにならない」ということ。今回のGAS+Slack連携は、

・Slackは既存のワークスペース利用
・GASはGoogleアカウントの利用枠内(無料枠)で実行
・追加の専用SaaS料金は一切かかりません
例えば、外部サービスで1通知あたり100円の課金があると仮定して、1日10通知を30日送ると、

100円 × 10通知 × 30日 = 30,000円/月

これがGASとSlackの組み合わせなら無料のGoogleアカウント枠内で実行できるので、月額約3万円のコスト削減効果が見込めます(あくまで仮定)。

ただしApps Scriptのquota(1日あたりの実行時間やURLFetchの回数制限など)はあるので大量通知には向かない点だけ念頭に置いてください。

通知自動化は業務効率アップだけでなく、人的ミスの減少や情報共有の迅速化にもつながります。ぜひ今回のコードをアレンジしながら活用してくださいね。

それではまた。GASおじでした。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す