結論:「案件一覧(同期)」シートの締切列をGASで毎日チェックし、3日前・1日前・当日の3段階でSlackに自動アラートを飛ばす仕組みを作りました。締切をうっかり忘れる不安がなくなりました。
この記事でわかること
- 締切管理を誤った実際の失敗談
- アラートの設計方針(何日前に、どう知らせるか)
- GASでSlackアラートを飛ばす実装コード
- 運用してみて調整した点
前回の記事で、月次の実績を自動でレポート化しました。今回は「振り返り」ではなく「今後の締切」に目を向けて、抜け漏れを防ぐ仕組みを作ります。
締切管理を誤った実際の失敗談
案件数が増えてくると、Notion側で締切を設定していても、開いて見ない限り気づけません。実際、先月は1件、締切の2日前まで着手していないことに気づかず、慌てて対応したことがありました。見れば分かる状態と、実際に気づける状態は別だと痛感しました。
アラートの設計方針
当日にアラートが来ても手遅れなことが多いので、今回は3段階で知らせる設計にしました。
- 3日前:準備を始める合図
- 1日前:最終確認の合図
- 当日:念押し
対象は「案件一覧(同期)」シートのうち、ステータスが「完了」になっていない案件だけに絞っています。
GASでSlackアラートを飛ばす実装
function checkDeadlines() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('案件一覧(同期)');
const data = sheet.getDataRange().getValues();
const today = new Date();
today.setHours(0, 0, 0, 0);
const alerts = [];
data.slice(1).forEach(row => {
const [name, status, amount, deadline] = row;
if (!deadline || status === '完了') return;
const deadlineDate = new Date(deadline);
if (isNaN(deadlineDate.getTime())) return;
deadlineDate.setHours(0, 0, 0, 0);
const diffDays = Math.round((deadlineDate - today) / (1000 * 60 * 60 * 24));
if (diffDays === 3 || diffDays === 1 || diffDays === 0) {
alerts.push({ name, diffDays });
}
});
if (alerts.length === 0) return;
const message = alerts.map(a => {
const label = a.diffDays === 0 ? '本日締切' : `あと${a.diffDays}日`;
return `・${a.name}(${label})`;
}).join('\n');
postToSlack_(`締切アラート\n${message}`);
}
function postToSlack_(text) {
const SLACK_WEBHOOK_URL = 'ここにSlackのIncoming Webhook URLを入れる';
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ text })
});
}トリガーは「時間主導型・日タイマー・午前9時」あたりに設定しています。
つまずいたポイント:Notion側の日付フォーマットのばらつきが原因で、締切列の値が正しく日付として認識されずInvalid Dateになるケースがありました。isNaN(deadlineDate.getTime())でチェックして、不正な値はスキップするようにして解決しました。
運用してみて調整した点
最初は当日だけの通知にしていましたが、それだと結局間に合わないことがあり、3日前・1日前・当日の3段階に変更しました。まだ運用し始めたばかりですが、少なくとも「気づいたら締切が過ぎていた」という事態は防げるようになりました。
よくある質問
土日も通知されますか?
はい、現状は毎日実行しているので土日も届きます。曜日を絞りたい場合は、コード側に曜日判定を追加するか、トリガーの設定を平日のみに変更することで対応できます。
複数の締切が同じ日に重なった場合はどうなりますか?
1回のSlackメッセージにまとめて表示されるので、通知が埋もれる心配はありません。
ステータスが「完了」の案件でも通知されますか?
完了ステータスの案件は除外する処理を入れているので、通知されません。
次回は、案件管理をNotion×スプレッドシートの使い分けで運用する話をまとめます。
