明日のゴミ収集対象を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

これでもう翌日のゴミ収集内容に迷わない。

参考


Related #js

Next.js 11

手軽にアップグレードできた

仕事ですぐに使えるTypeScript

奥が深い

prismのモックサーバはexamples定義からレスポンスを返してくれる

仕様書を作る際はexamplesも定義するようにしておきたい