apps-script-slack-notifier

March 14, 2026 · View on GitHub

CI License: MIT Node.js >=24 TypeScript strict Google Apps Script

English

Google スプレッドシートに追加された新しい行を検知し、Bot Token 経由で Slack の chat.postMessage API に通知する Google Apps Script プロジェクト。apps-script-fleet テンプレートから生成。

動作の仕組み

  1. 時間駆動トリガー — Google Apps Script のタイムトリガーが checkNewRows を定期実行(例: 5 分ごと)
  2. 新規行の検出 — スプレッドシート全行を取得し、前回処理した行インデックス(LAST_PROCESSED_ROW)以降の行を抽出
  3. Slack 通知UrlFetchApp.fetchhttps://slack.com/api/chat.postMessage を呼び出し、新規行の内容を通知
  4. 状態の更新PropertiesService に最終処理行インデックスを保存し、次回実行時の重複通知を防止

セットアップ

1. Slack App の作成

  1. api.slack.com/apps にアクセスし、新しい App を作成
  2. OAuth & PermissionsBot Token Scopeschat:write を追加
  3. App をワークスペースにインストールし、Bot User OAuth Tokenxoxb-...)を取得
  4. 通知先チャンネルの Channel ID を確認(チャンネルを右クリック → "チャンネル詳細を表示" → ID をコピー)
  5. Slack App をそのチャンネルに招待: /invite @your-app-name

2. Google Apps Script へのデプロイ

# clasp 認証(初回のみ)
pnpm exec clasp login

# .clasp-dev.json を作成してスクリプト ID を設定
echo '{"scriptId":"YOUR_SCRIPT_ID","rootDir":"dist"}' > .clasp-dev.json

# チェック → ビルド → デプロイ
pnpm run deploy

3. Script Properties の設定

Apps Script エディタ: プロジェクトの設定(歯車アイコン)→ スクリプト プロパティ → 以下を追加:

プロパティ説明
SLACK_BOT_TOKENSlack Bot User OAuth Token (xoxb-...)
SLACK_CHANNEL_ID通知先チャンネル ID(C01234567 形式)

LAST_PROCESSED_ROW は初回の checkNewRows 実行時に自動設定されます(デフォルト: 1 でヘッダー行をスキップ)。

4. トリガーの設定

Script Properties でスケジュールを設定(任意):

プロパティデフォルト
TRIGGER_INTERVAL1min, 5min, 10min, hourly, daily5min
TRIGGER_HOUR023daily 時のみ使用)9

Apps Script エディタで setupTrigger を選択して ▶ 実行。初回は script.scriptapp スコープの承認が必要。

開発コマンド

コマンド説明
pnpm run checklint + typecheck + test(全チェック)
pnpm run testJest(カバレッジ付き)
pnpm run test -- --watchJest ウォッチモード
pnpm run buildTypeScript をバンドルして dist/ に出力
pnpm run deploycheck → build → dev 環境へ clasp push
pnpm run deploy:prodcheck → build → 本番環境へ clasp push

プロジェクト構成

src/
├── index.ts          # GAS エントリポイント(checkNewRows, setupTrigger)
├── sheet-reader.ts   # スプレッドシート行抽出ロジック
└── slack-message.ts  # Slack メッセージペイロード構築ロジック
test/
├── sheet-reader.test.ts
└── slack-message.test.ts

注意事項

  • src/index.ts の関数に export キーワードは付けない(GAS ランタイムは ES モジュール構文を認識できない)
  • src/index.ts はテストカバレッジ対象外(GAS グローバル SpreadsheetApp 等が Node.js 環境で実行不可のため)
  • カバレッジ閾値: 全メトリクス 80%(jest.config.json で変更可)
  • LAST_PROCESSED_ROW は初回実行時にデフォルト値 1 が設定され、ヘッダー行をスキップします

Apps Script プロジェクト

これらのプロジェクトは閲覧可能です:

環境リンク
DevelopmentApps Script で開く
ProductionApps Script で開く

ライセンス

MIT