明日のゴミ収集対象をSlackに通知する
「明日は何のゴミ収集日だっけ?」で毎回迷うのをなくしたかったので、前日の夜にSlackに通知するようにした。
- slack通知用の公式ライブラリをインストール
yarn add @slack/webhook- ゴミ収集日通知スクリプトを作成
// index.js
const slack = require('@slack/webhook')
const getGarbageTypes = (date) => {
  const garbageTypes = []
  d = new Date(date)
  nth = Math.floor((d.getDate() + 6 ) / 7)
  week = d.getDay()
  switch (week) {
    // 月曜, 木曜
    case 1:
    case 4:{
      garbageTypes.push('- 可燃ごみ');
      break;
    }
    // 土曜
    case 6: {
      garbageTypes.push('- 資源ごみ');
      break;
    }
  }
  // 第2, 第4金曜
  if ((nth === 2 || nth === 4) && (week === 5)) {
    garbageTypes.push('- 不燃ごみ')
  }
  return garbageTypes;
}
const notifySlack = async (header, text) => {
  const SLACK_WEBHOOK_URL = process.env['SLACK_WEBHOOK_URL'] || ''
  const webhook = new slack.IncomingWebhook(SLACK_WEBHOOK_URL)
  await webhook.send({
    blocks: [
      {
        type: 'header',
        text: {
          type: 'plain_text',
          text: header,
          emoji: true,
        },
      },
      {
        type: 'section',
        fields: [
          {
            type: 'mrkdwn',
            text: `\`\`\`${text}\`\`\``,
          },
        ],
      },
    ],
  })
}
(async () => {
  const date = new Date()
  date.setDate(date.getDate() + 1)
  const garbages = getGarbageTypes(date.toString())
  if (garbages.length > 0) {
    const header = '明日のゴミ収集は'
    const text = `${garbages.join('\n')}`
    await notifySlack(header, text)
  }
})()上記スクリプトでは例として大田区池上1丁目の収集曜日を設定している。
SLACK_WEBHOOK_URL 環境変数を設定し、cronで毎日定期実行するようにすればOK。
node index.jsこれでもう翌日のゴミ収集内容に迷わない。