【コピペOK】GASでスプレッドシートの内容をSlackに毎朝自動送信する方法

GAS・自動化

この記事でわかること

  • 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)
  });
}

毎朝自動送信のタイマーを設定する

コードを保存したら、決まった時間に自動実行するトリガーを設定します。

  1. スクリプトエディタ左側の時計アイコン(トリガー)をクリック
  2. 右下の「トリガーを追加」
  3. 以下のように設定する
項目設定値
実行する関数sendDailyReport
イベントのソース時間主導型
時間ベースのトリガーの種類日付ベースのタイマー
時刻午前8時〜9時(など好みで)
  1. 保存して完了

動作確認

設定後、スクリプトエディタの「実行」ボタンで手動実行してみてください。Slackに通知が届けば成功です。


まとめ

  • GASとSlack Webhookを組み合わせれば毎朝の報告が完全自動化できる
  • 最新行だけ送る・全行送るなど用途に合わせてカスタマイズ可能
  • タイマートリガーで指定した時刻に自動実行される

「毎朝手動でSlackに貼る」作業がなくなるだけで、地味にストレスが減ります。ぜひ試してみてください。


GASや業務自動化のご相談はお問い合わせフォームからどうぞ。

コメント

タイトルとURLをコピーしました