はじめに
日々の業務で「BigQuery に溜まったデータを毎朝チェックして報告したい」「特定条件に該当した情報だけを Slack に自動通知したい」というニーズはよくあります。
しかしこれを人手で行うと、
- やり忘れ
- 調べ忘れ
- 報告漏れ
といったミスにつながります。
そこで本記事では、Google Apps Script (GAS) × BigQuery × Slack を使用し、毎朝決まった時間に自動でデータ取得・通知する仕組みを紹介します。
できること
この仕組みを導入すると、次のような処理を自動化できます。
- 平日の朝 9:00 にのみ処理を実行
- BigQuery から指定条件に合致するデータを抽出
- 「進行中」「今後開始予定」など分類して Slack に通知
- 毎日の手動確認をゼロに
利用例:
- 今日の〆切タスク一覧通知
- 来週期限のプロジェクトアラート
- 稼働中ジョブのステータス通知
- 異常値検知のアラート
さまざまな業務に応用できます。
全体構成
処理の全体像は以下の通りです。
- 毎朝 9:00(平日のみ)スクリプト起動
- BigQuery から「一定期間 or 条件」のデータを取得
- 通知用メッセージを整形
- Slack Webhook に送信
実装のポイント
1. 平日だけ実行する
const today = new Date(Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd') + 'T00:00:00+09:00');
const day = today.getDay();
if (day === 0 || day === 6) return; // 日曜 or 土曜
GAS は UTC の影響を受けるため、日本時間での曜日判定は Asia/Tokyo を指定する必要があります。
2. BigQuery からデータを取得する
用途に応じて SQL は変えられますが、例えば「期間内のデータを取りたい」場合は次のような構成が便利です。
SELECT
ID,
DataID,
StartsAt,
EndsAt
FROM `project.dataset.table`
WHERE
EndsAt > @now
AND StartsAt < @one_week_later
ORDER BY StartsAt ASC;
GAS 側では BigQuery.Jobs.query() を使って実行します。
3. Slack 通知文を整形する
Slack は軽い Markdown を解釈するため、見出しや箇条書きを使うと読みやすくなります。
const lines = [];
lines.push(`【データ通知(${today} 時点)】`);
lines.push('');
lines.push('◆ 現在対象のデータ');
// ...
4. Slack Webhook に送信
UrlFetchApp.fetch(webhookUrl, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ text: message }),
});
Webhook URL は Script Properties に保存しておくと安全です。
まとめ
GAS × BigQuery × Slack を組み合わせることで、
- 毎日の業務チェックの自動化
- 確認漏れの防止
- 運用コスト削減
といった大きな効果を得られます。
特に BigQuery の柔軟なデータ抽出 と Slack の視認性の高い通知 を組み合わせれば、さまざまな業務に応用できる“汎用型の自動通知システム”として機能します。
もし「毎朝なんとなく確認している作業」が思い浮かぶなら、それは自動化できるサインです。ぜひ本記事の仕組みを活用し、日々のルーチンをより効率的なものへ進化させてみてください。