4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

勉強会情報をpush通知するslackアプリを作った

Last updated at Posted at 2020-03-22

はじめに

勉強会の情報を定期的にpush通知してくれるslackアプリを作った。

こんな感じでpush通知したい勉強会の条件を設定すると、

study.gif

条件に合致した勉強会が、設定した時刻に定期的に通知される。

スクリーンショット 2020-03-22 21.39.24.png # モチベーション 大きめの勉強会や人気の勉強会の開催を、qiitaのトレンド記事やはてブの記事に挙げられてるのを見て、後から知ることが結構ある。そういう人気の勉強会をpush通知してくれるような仕組みがあれば「やってたの知らなかった」ってことを減らせそうだと思ったので作ってみた。

アーキテクチャは以下の理由からherokuを使うことにした。

  • サーバー代が無料
  • dockerでのデプロイに対応してる
  • スケジューラの仕組みもある

需要があるかわからないが、他の人もこの仕組みを使えるように環境構築の手順を書いていく。

構築手順

0) 事前にやっておくこと

  • herokuのアカウントの用意
  • herokuのcliをインストールしておく
$ brew tap heroku/brew && brew install heroku

1) herokuへのリリース

事前にherokuのアカウントがない人は作っておく。


# 事前にアプリケーションのルートディレクトリに移動しておく
$ heroku container:login                                 # ログイン
$ heroku create -a app_name                              # herokuアプリの作成。アプリ名は適当に決める。(heroku内で一意なアプリ名である必要あり)
$ heroku git:remote -a app_name                          # herokuリポジトリをgit登録。
$ heroku addons:create scheduler:standard                # スケジューラのアドオンを追加(事前にherokuアカウントにクレジットカード登録が必要)
$ heroku addons:add cleardb:ignite                       # mysqlのアドオンを追加
$ heroku config                                          # CLEARDB_DATABASE_URLが登録されていることを確認
$ heroku config:set DATABASE_URL="<ユーザー名>:<password>@tcp(<ホスト名>:3306)/<DB名>?parseTime=true" # CLEARDB_DATABASE_URLの値を元にgolangのsql.Open()に渡す用の文字列に整形
$ heroku config:set SLACK_TOKEN="<slackのトークン>"        # slackアプリのトークンを環境変数に設定
$ heroku config:set WEB_HOOK_URL="<slackのwebHookURL>"   # slackのwebHookURLを環境変数に設定
$ heroku stack:set container                             # heroku.ymlを使う時はこれがいるぽい
$ git push heroku master                                 # リリース

2) slackの設定

作成しておいたslackアプリの設定画面に移動しておく。

2-1) slashコマンドの設定

通知する勉強会の条件設定は、slashコマンド経由で開くダイアログから行うようにしている。
そのslashコマンドの設定をしていく。

  • コマンドを新規作成
スクリーンショット_2020-03-22_18_42_14.png
  • コマンド実行時のAPI先を設定
スクリーンショット_2020-03-22_18_42_29.png

2-2) Interactive Componentsの設定

勉強会の条件設定をするダイアログをsubmitした際に叩くAPI先の設定。

スクリーンショット_2020-03-22_18_53_12.png

3) スケジューリングの設定

herokuの画面に行って、スケジューラーのアドオンをクリック

スクリーンショット_2020-03-22_19_04_21.png

/main connpass slack を実行するジョブを作成する。実行間隔はお好みで。
スクリーンショット 2020-03-22 19.06.34.png

4) 勉強会通知の設定をする

作成したslashコマンドを実行し、開いた設定ダイアログ上で通知条件の設定をする。

スクリーンショット 2020-03-22 19.10.57.png ※注意 herokuの無料プランだと、30分たつと自動でプロセスが落とされる。 なので初回のslashコマンドはサーバー起動の時間が掛かるのでタイムアウトで失敗する。その後あまり間を空けずに再度slashコマンドを実行すればダイアログが開く。

5) 設定完了

ここまでやれば、herokuの環境変数で設定したwebHookURL宛てに、勉強会情報が定期的にポストされるようになる。

アーキテクチャ

golang、gin、docker、mysql、slack api、connpass api、herokuな感じで作っている。

一つのイメージでapiサーバーとしてもコマンド実行サーバーとしても起動させたかったため、起動時にフラグを渡すことでapiサーバー、コマンド実行サーバーが切り替わるようにしている。

また、ホットリロードのツールに air を使っている。
goでホットリロードといえば realize が使われているのをよく見かけるが、realizeはmodulesに対応していなかったり、最近メンテもされなくなったりと微妙な感じ。いいのが他にないのかなと思っていたが、最近はairが流行ってきてる?ぽい。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?