Scrapboxで編集があったページを1日1回Slackに通知する

PublicになっているScrapboxを利用している場合は、RSS Feedを1日1回チェックして投稿するプログラム(lambdaでも、GASでも)を書いてハイ終了、です。

今回のケースでは、Scrapboxを業務利用していて、閲覧には認証が必要という状況。インターネット側からRSS Feedを取得することができない場合です。このケースでは、Slack連携Scrapboxへの書き込み終了して90秒後に当該箇所の情報をSlackへPostする)は利用できるので、これとGASを組み合わせて解決することにしました。

以下に手順をまとめます。

Step.1 Slack連携のPostを受け取ってSpreadSheetに記録するGASを作る

  1. 新しいGoogle Spreadsheetを作成し、見出し行として1行目に「日付」「時刻」「タイトル」「URL」「data」と入力
  2. 拡張機能」→「App Script」を開く
  3. 以下のコードを貼り付ける(だいぶ雑です)
  4. 「デプロイ」→「新しいデプロイ」
    • 種類は「ウェブアプリ」、アクセスできるユーザーは「全員」を指定
    • 初回作成時はデータへのアクセス許可を求められるので承認
    • 表示されたURLを変更通知を受け取りたいSlackの「Project Settings」の「Notifycations」から「Add Slack notification」として追加

Step.2 SpreadSheetの内容から前日分の情報を抽出してSlackへPostする

  1. SlackでWebhookのエンドポイント作成
  2. Step.1で作ったGASの左側の歯車メニュー「プロジェクトの設定」から「スクリプト プロパティ」に「SLACK_WEBHOOK_URL」として先程のエンドポイントを入力して保存
  3. 左側の時計メニュー「トリガー」から「トリガーを追加」
    • 実行する関数は「postPagesEditedAtYesterday」、イベントのソースは「時間主導型」を選択して実行したいタイミングを指定して保存

これで完成。
こんな面倒なことをしなくても、RSS Feedが直接読める環境であればStep.2のトリガーによる定期実行のタイミングでFeedを取得して昨日更新分をまとめてPostすればいい。