LoginSignup
7
10

More than 5 years have passed since last update.

Githubでmentionされた通知だけをLambdaでまとめてSlackに通知したい! (改)

Last updated at Posted at 2017-03-16

概要

本人専用のGithub通知をSlackに投げるツールを作成しました。
https://github.com/gaishimo/github-participating-notifications

以前にも以下で同じ用途のものを作成したのですが、コードとか色々と古くなっているので、もう一度しっかり作り直してみようということで、新たに再作成しました。
Githubでmentionされた通知だけをLambdaでまとめてSlackに通知したい! - Qiita

これはどういったもの?

Lambda Functionを定期的に実行し、自分宛のParticipating通知があったら以下のような形でSlack Channelにメッセージを送ります。

slack_message_format.png

自分に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は、reponotificationの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)'の部分を各自適切な時間に変更してください。

以上で自分専用の通知が走り出します!

7
10
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
7
10