「毎日の日報、手で書くのめんどくさい」「Slackと共有したい」がGAS 80行で解決します。

やりたいこと

  1. スプレッドシートのテンプレート行から、当日分のタスクを取得
  2. Slack Webhook に投稿
  3. 毎日 18:00 に自動実行

スクリプト全体

const SPREADSHEET_ID = "xxxxxxxxxxxxxxxxxxxx";
const SHEET_NAME = "日報";
const SLACK_WEBHOOK = PropertiesService.getScriptProperties().getProperty("SLACK_WEBHOOK");

function postDailyReport() {
	const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
	const today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd");
	const rows = sheet.getDataRange().getValues();

	const todayRows = rows.filter((r) => Utilities.formatDate(r[0], "Asia/Tokyo", "yyyy-MM-dd") === today);
	if (todayRows.length === 0) {
		Logger.log("本日のタスクがありません");
		return;
	}

	const tasks = todayRows
		.map((r) => `• ${r[1]}(${r[2]})`)
		.join("\n");

	const message = {
		text: `*${today} の日報*\n${tasks}`,
	};

	UrlFetchApp.fetch(SLACK_WEBHOOK, {
		method: "post",
		contentType: "application/json",
		payload: JSON.stringify(message),
	});

	Logger.log("Slackに投稿しました");
}

セットアップ手順

1. Slack Webhook URL を取得

Slackアプリ → Incoming Webhooks → 投稿先チャンネル選択 → URLコピー

2. スクリプトプロパティに保存

GASエディタ:プロジェクト設定 → スクリプトプロパティ → SLACK_WEBHOOK を追加

3. トリガー設定

GASエディタ:トリガー → 新規 → postDailyReport を 毎日 18:00 に実行

応用ポイント

  • 複数チャンネル投稿:Webhook URLを配列で持って forEach でループ
  • 画像添付blocks に image type を追加
  • GitHub Issues 連携:Issue タイトルを取得して日報に追加
  • AI要約:Claude APIで1日のSlack履歴を要約してから投稿

「自分で組むのは面倒」な方へ

  • 業務固有のタスクテンプレ設計
  • 複数システム(GitHub / Notion / Backlog)との連携
  • 失敗時の通知とリトライ

このあたりまでパッケージ化して請け負っています。 お問い合わせ →