概要
本人専用のGithub通知をSlackに投げるツールを作成しました。
https://github.com/gaishimo/github-participating-notifications
以前にも以下で同じ用途のものを作成したのですが、コードとか色々と古くなっているので、もう一度しっかり作り直してみようということで、新たに再作成しました。
Githubでmentionされた通知だけをLambdaでまとめてSlackに通知したい! - Qiita
これはどういったもの?
Lambda Functionを定期的に実行し、自分宛のParticipating通知があったら以下のような形でSlack Channelにメッセージを送ります。

自分にmentionされたコメントや、自分の関わっているIssueやPull Requestに対し変更があった場合に早く気付くことを目的としています。
自分のPull Requestに対して相手からコメントがあった場合や、相手がIssueで自分をメンションしてコメントしてきたのにすぐに気づかなくて対応が遅れたりといったケースって結構あるのではないかと思います。そういった場合にすぐに気づけば早くアクションを起こすことができ、開発もスピーディに進みます。
既存のSlackのGithubアプリやWebhookを使ったりすることで通知すること自体は出来るのですが、それらはリポジトリ単位でチーム全体に通知するものであり、個人のためのものではありません。個人専用にプロジェクト横断的にまとめてParticipating通知をコメントしてくれるものが欲しいということで作成しました。
技術
コードはES2017(Babel)で記述しています。
AWS LambdaのデプロイにはClaudia.jsを使います。
Claudia.jsはLambdaのデプロイツールです(詳しくはこちら)。
使い方
事前準備
リポジトリをCloneします。
git clone git@github.com:gaishimo/github-participating-notifications.git
AWSアカウント(IAM Profile)とAWS CLIを用意、Claudia.jsのCLIツールをインストールします。
こちらを参照: Installing and configuring Claudia.js
設定値の用意
GithubのPersonal Tokenと、SlackのWebhook URLを用意し、値をenv.json
に指定します。
cat <<-EOS > env.json
{
"GITHUB_TOKEN": "<your Github personal access token>",
"SLACK_WEBHOOK_URL": "<your Slack WebHook url>"
}
EOS
GithubのPersonal Tokenは、repo
とnotification
のscopeを持っている必要があります。
Webhookは自分専用のChannelのものを指定してください。
通知テーブル(DynamoDB)の作成
既に通知したNotificationを保存するために、DynamoDBのテーブル(github_notifications
)を作成する必要があります。
以下のAWS CLIコマンドで作成できます。
aws dynamodb create-table \
--table-name github_notifications \
--attribute-definitions AttributeName=id,AttributeType=N AttributeName=at,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH AttributeName=at,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--query TableDescription.TableArn --output text
デプロイ
デプロイは、以下のコマンドで実行できます。
npm run create
実際は以下のコマンドが実行されます。
npm run transpile && claudia create --name github-participating-notifications --handler bin/lambda.handler --region ap-northeast-1 --set-env-from-json env.json --policies policies --timeout 10
regionはap-northeast-1
になっていますが、必要に応じて変更します(package.json)。
実行テスト
以下でLambdaを直接実行できます。通知が無ければ特にSlackにメッセージはコメントされません。
npm run test-lambda
スケジューリング設定
Lambdaが定期的に実行されるようにスケジューリング設定します。以下のclaudia.js CLIのコマンドで設定できます。
claudia add-scheduled-event \
--name simple-lambda-scheduled-event \
--event event.json \
--schedule 'rate(5 minutes)'
--schedule 'rate(5 minutes)'
の部分を各自適切な時間に変更してください。
以上で自分専用の通知が走り出します!