この記事でわかること
- GASでスプレッドシートの内容をSlackに送る方法
- 毎朝決まった時間に自動送信するタイマー設定
- コピペで使えるコード全文
こんな用途に使える
- 毎朝の売上・KPIをチームに共有
- 当日のタスク・スケジュールをSlackに投稿
- 週次レポートの自動配信
- 経費・申請状況の定期通知
一度設定すれば完全自動で動くので、「毎朝コピペしてSlackに貼る」という作業が消えます。
事前準備
1. Slack Incoming Webhook URLを取得
前回の記事と同じ手順でWebhook URLを取得してください。
2. スプレッドシートを用意
通知したいデータが入ったGoogleスプレッドシートを開いておきます。
コードの全文
スプレッドシートの「拡張機能」→「Apps Script」でスクリプトエディタを開き、以下を貼り付けてください。
// ===== 設定 =====
const SLACK_WEBHOOK_URL = "ここにWebhook URLを貼る";
const SHEET_NAME = "Sheet1"; // 読み込むシート名
const HEADER_ROW = 1; // ヘッダー行の番号
const DATA_START_ROW = 2; // データ開始行の番号
const NOTIFY_TITLE = "📊 本日のレポート"; // Slackに表示するタイトル
// ================
function sendDailyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
// ヘッダーを取得
const headers = sheet.getRange(HEADER_ROW, 1, 1, sheet.getLastColumn()).getValues()[0];
// 最新行のデータを取得(最終行)
const lastRow = sheet.getLastRow();
if (lastRow < DATA_START_ROW) {
console.log("データがありません");
return;
}
const data = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
// メッセージを整形
let fields = [];
headers.forEach(function(header, index) {
if (header && data[index] !== "") {
fields.push({
title: header,
value: String(data[index]),
short: true
});
}
});
// 今日の日付
const today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy年MM月dd日(E)");
// Slackに送るメッセージ
const message = {
username: "定期レポートBot",
icon_emoji: ":bar_chart:",
text: `${NOTIFY_TITLE} ${today}`,
attachments: [
{
color: "#2196F3",
fields: fields,
footer: "Google Sheets × GAS"
}
]
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
console.log("Slack通知を送信しました");
}
カスタマイズ:全行を送りたい場合
最新行だけでなく、全データを送りたい場合はこのように変更します。
function sendDailyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
if (lastRow < DATA_START_ROW) return;
// 全データを取得
const allData = sheet.getRange(DATA_START_ROW, 1, lastRow - DATA_START_ROW + 1, sheet.getLastColumn()).getValues();
const headers = sheet.getRange(HEADER_ROW, 1, 1, sheet.getLastColumn()).getValues()[0];
let text = "";
allData.forEach(function(row) {
let line = headers.map((h, i) => `${h}:${row[i]}`).join(" | ");
text += line + "\n";
});
const message = {
username: "定期レポートBot",
icon_emoji: ":bar_chart:",
text: `${NOTIFY_TITLE}\n\`\`\`${text}\`\`\``
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(message)
});
}
毎朝自動送信のタイマーを設定する
コードを保存したら、決まった時間に自動実行するトリガーを設定します。
- スクリプトエディタ左側の時計アイコン(トリガー)をクリック
- 右下の「トリガーを追加」
- 以下のように設定する
| 項目 | 設定値 |
|---|---|
| 実行する関数 | sendDailyReport |
| イベントのソース | 時間主導型 |
| 時間ベースのトリガーの種類 | 日付ベースのタイマー |
| 時刻 | 午前8時〜9時(など好みで) |
- 保存して完了
動作確認
設定後、スクリプトエディタの「実行」ボタンで手動実行してみてください。Slackに通知が届けば成功です。
まとめ
- GASとSlack Webhookを組み合わせれば毎朝の報告が完全自動化できる
- 最新行だけ送る・全行送るなど用途に合わせてカスタマイズ可能
- タイマートリガーで指定した時刻に自動実行される
「毎朝手動でSlackに貼る」作業がなくなるだけで、地味にストレスが減ります。ぜひ試してみてください。
GASや業務自動化のご相談はお問い合わせフォームからどうぞ。


コメント