毎月雑談会の調整さんをSlack通知するリマインダーを作りました

同期メンバーで月に1回、ランチ雑談会(オンライン)を開催しています。

この日程調整に調整さんが大活躍なのですが、次の課題があります。

  • 月1日なので、次の幹事を忘れがち(本人&他の人)
  • 候補日(平日5-10日間)を手動で作るのがめんどくさい

これらを解決するため、Slackに通知する仕組みを作りました!

なお、本記事はAWS LambdaとServerless #1 Advent Calendar 2019の6日目です。

作りたいものを整理

ランチ雑談会

おおよそ次のように開催日を決めています。

  • 毎月、第一週ぐらいに調整さんを作って日程調整する
  • 候補日は、第二週と第三週ぐらい

やりたいこと

12/9(月) 12:00-13:00という候補日を人間がたくさん作るのはめんどくさいので、コピペできるようにしたかったのです。

  • 毎月最初の平日にSlackへ通知する
    • 通知時に「イベント名」と「候補日の一覧」を含める(コピペ出来るように)
  • 候補日
    • 8日〜24日を対象とする
    • 土日祝を除く

人間がふんわり判断していること(下記)を実現するのは大変なので、シンプルな動作にしました。

  • 1日が木曜だから、募集は9日の金曜までにしとこ
  • 1日が土曜だから、募集は7日の金曜までやな
  • 今月はre:Inventあるし、10日で締め切って、11日から候補日にしとこ
  • など……

実際に登録する候補日は人間が判断して編集しますが、コピペできるので楽になるはずです。

サーバーレスアプリの作成

AWS SAMプロジェクトの作成

まずは、AWS SAMプロジェクトを作成します。

sam init --runtime python3.7 --name Chouseisan-reminder

ライブラリの追加

日本の祝日をjpholidayで判定したいので、requirements.txtにライブラリ名を追記します。

requests
jpholiday

テンプレートの作成

次のAWS SAMテンプレートを作成します。SlackのIncomingWebHookUrlは、SSMパラメータ名を参照して実際の値がLambdaの環境変数にセットされます。

Lambdaの作成

次のLambdaを作成します。

デプロイ準備

デプロイ用のS3バケットを作成する

すでにある場合はSkipします。

aws s3 mb s3://cm-fujii.genki-chouseisan-reminder-deploy-bucket

SlackのIncomingWebHookUrlを作成する

下記を参考に作成します。作成したIncomingWebHookUrlはメモしておきます。

SSMのパラメータストアにSlackの通知先URLを追加する

次のコマンドで追加します。URLの先頭にhttps://があると、このコマンド実行が失敗するため、取り除いています。

aws ssm put-parameter \
    --type 'String' \
    --name '/Slack/INCOMING_WEBHOOK_URL/channel_name/choseisan_reminder' \
    --value 'hooks.slack.com/services/xxxxx/yyyyy/zzzzz'

デプロイ

ビルド

まずはビルドします。

sam build

package

次にLambdaコードをS3バケットにアップロードします。

sam package \
    --output-template-file packaged.yaml \
    --s3-bucket cm-fujii.genki-chouseisan-reminder-deploy-bucket

deploy

最後にデプロイします。--parameter-overridesでSSMパラメータのKey名を指定しています。これにより、Lambdaの環境変数にSlackのIncomingWebHookUrlが設定されます。

sam deploy \
    --template-file packaged.yaml \
    --stack-name Chouseisan-Reminder-Stack \
    --capabilities CAPABILITY_NAMED_IAM \
    --no-fail-on-empty-changeset \
    --parameter-overrides ChouseisanNotifySlackUrl=/Slack/INCOMING_WEBHOOK_URL/channel_name/choseisan_reminder

動作確認

テスト動作として、Lambdaをコンソール上からテスト実行させてみました(最初の通知判定は外しておく)。すると……。

無事に通知が来ました!!!

これで、調整さんの登録を忘れない & 候補日の入力が楽になりました!

さいごに

ユーザーの使ってみた感想を聞けるのは1ヶ月後ですが、楽しみに待ちたいと思います!!