3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GAS】スプシの写経リストから今日の内容をSlackに通知する

3
Last updated at Posted at 2025-11-30

日々の学習や業務の中で新しい学びを得ることは多いですが、1回触れただけではすぐ忘れてしまいますよね。

今回は、Googleスプレッドシートにあらかじめ溜めておいた「写経リスト」から、今日の内容だけを毎朝Slackに通知してくれるBotの作り方を紹介します。これで定期的に学びを振り返ることができます。

仕組み

  1. スプレッドシートに「内容」と「日付」をズラッと書いておく
  2. GAS(Google Apps Script)が毎日自動で起動
  3. 今日の日付の行を見つけて、Slackに通知する

1. スプレッドシートの準備

スプレッドシート(シート名:シート1)を以下のように用意します。

  • A列: 写経するテキスト(コードや文章)
  • B列: 通知したい日付(yyyy/MM/dd)
  • C2セル: 空けておく(ここに実行ログが出ます)

今回はスクラムガイドを写経Bot化します。

image.png

2. GASコード

事前にSlackでIncoming Webhookを作成しておいてください。

const CONFIG = {
  SHEET_NAME: 'シート1',
  LOG_CELL: 'C2',
  // ここにSlackのIncoming Webhook URLを貼る
  SLACK_WEBHOOK_URL: 'https://hooks.slack.com/services/xxxxx/yyyyy', 
  BOT_USERNAME: 'transcribot',   // Botの名前
  BOT_ICON: ':bulb:'         // Botのアイコン
};

function postToSlack() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONFIG.SHEET_NAME);
  const today = new Date();
  const logs = [`today: ${today}`];

  const lastRow = sheet.getLastRow();
  
  // データがない場合は終了
  if (lastRow < 2) {
    logs.push("Error: データが存在しません。");
    finalizeLog(sheet, logs);
    return;
  }

  // 2行目から最終行までのデータを取得 (A列:B列)
  const data = sheet.getRange(2, 1, lastRow - 1, 2).getValues();
  let messageSent = false;

  for (const [content, dateValue] of data) {
    // 日付型かつ、今日の日付と一致するか確認
    if(dateValue instanceof Date && isSameDate(dateValue, today)) {
      postMessageToSlack(content);
      logs.push(`メッセージを投稿しました: ${content}`);
      messageSent = true;
      break; // 1日1件見つけたら終了
    }
  }

  if (!messageSent) {
    logs.push("skip: 本日投稿するメッセージはありません。");
  }

  finalizeLog(sheet, logs);
}

/**
 * ログをセルに書き込むヘルパー関数
 */
function finalizeLog(sheet, logArray) {
  sheet.getRange(CONFIG.LOG_CELL).setValue(logArray.join('\n'));
}

/**
 * 日付のみ(年・月・日)を比較するヘルパー関数
 */
function isSameDate(date1, date2) {
  return date1.toDateString() === date2.toDateString();
}

/**
 * SlackへPOSTリクエストを送る関数
 */
function postMessageToSlack(message) {
  const payload = {
    "text": message, 
    "icon_emoji": CONFIG.BOT_ICON,
    "username": CONFIG.BOT_USERNAME
  };

  const options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };

  try {
    UrlFetchApp.fetch(CONFIG.SLACK_WEBHOOK_URL, options);
  } catch (e) {
    console.error("Slack投稿エラー: " + e.toString());
  }
}

このままでは動かないので「トリガー」を設定して定期実行させてください。

まとめ

これで、毎朝指定した時間になると、Slackに今日の写経内容が届きます!

image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?