【簡易編】【API × python × GitHub Actions】GithubのCommit数を自動集計するTwitterBotを作成してみよう!

# はじめに
[Nara](https://twitter.com/besumero628)と申します。DMMWEBCAMPで勉強後、2022年1月より都内の受託会社で勤務を始めました。

この記事では、pythonをベースに、APIでgithubのcommit数の算出と、twitterの自動投稿を行い、github Actionsでそれらを自動化する方法をお伝えします。

# この記事の対象
こちらの記事は簡易版ということで、コードの詳細は触れずに「とりあえず日々のcommitをtwitterに反映したい！」という方を対象としています。
~~コードの中身を詳しく知りたい方は、詳細版を投稿予定ですのでそちらをお待ちください。~~

詳細版を投稿しました！興味がある方はこちらを参照ください。

https://qiita.com/besmero628/items/4f6d7e9c34c88c4b8e6e

# Bot作成の前に
本Botは毎日00:00にGitHubActionを定時で動かし、前日のPublicRepositoryの総commit数を算出するBotです。
Bot作成の前に以下の情報の取得をお願いします。

## Twitter 投稿について
TwitterBotの作成には、**事前に以下の情報が必要です**。
- APIKey
- APIKeySercret
- Access Token
- Access Token Secret

取得の方法は別途記事にまとめましたので、ご確認ください。
※記事は2022/04現在のものです。ここ数年で仕様が何回か変化しているので、ご注意ください。

https://qiita.com/besmero628/items/a1c2de776220223c60e8

## GitHub APIの使用について
GitHub APIを使用する場合、同一IPからのアクセスは一時間に60回までの制限があります。
今回のCommit数の集計は何回もGitHubAPIを取得する必要がありますので、何も考えずに実装を行うと上記の制限に引っかかる可能性が極めて高いです。

こちらの制限はOAuthにより
- Client ID
- Client Secret

を取得することで、5000 requests/hourまでAPIでのアクセスが緩和可能となります。
こちらも**取得をお願いします**。

取得の方法は別途記事としてまとめてありますので、参照してください。

https://qiita.com/besmero628/items/823a7630c77318d910b0

# Twitter Botの設定
以下私の作成したgit-commit-botを使用して設定していきます。
非常にシンプルで自分でコードを書く必要はほぼありません。

必要な情報は上記「Bot作成の前に」で説明した

- APIKey
- APIKeySercret
- Access Token
- Access Token Secret
- Client ID
- Client Secret

上記に加え、自分のGitHubのUserNameになります。

## リポジトリ設定
https://github.com/besumero628/git-commit-bot

![スクリーンショット 2022-04-06 23.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/a70bb2e5-6211-95dd-4967-e105ac65961c.png)


まず上記リポジトリ上段右上からリポジトリをforkしてください。（starくれると嬉しいです。。。）
forkが成功すると自分のリポジトリにforkされたコードが表示されます。

## 環境変数設定
GitHubActionsで使用する環境変数の設定を行います。
![スクリーンショット 2022-04-06 23.41.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/81887731-4d22-fcb7-edf4-2c6ac6af75a2.png)

forkしてきたリポジトリ上段の「Settings」をクリックして設定画面に遷移します。
![スクリーンショット 2022-04-06 23.45.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/463bc66c-27c9-1d7a-62f3-d71dc273600b.png)

左のNavigationからSercrets-Actionsをクリックします。

![スクリーンショット 2022-04-06 23.46.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/4b806ec9-d852-982d-b830-5c1b3e468554.png)

New repository secretを選択します。

![スクリーンショット 2022-04-06 23.48.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/6ac8a401-d324-e9f5-51e1-62175607ed3a.png)

この画面で環境変数を設定します。
登録が必要な変数名は以下になります。

- TWITTER_CONSUMER_API_KEY = "API key"
- TWITTER_CONSUMER_API_SECRET_KEY = "API Key Secret"
- TWITTER_ACCESS_TOKEN = "Access Token"
- TWITTER_ACCESS_TOKEN_SECRET = "Access Token Secret"
- GIT_USERNAME = "UserName"
- GIT_CLIENT_ID = "Client ID"
- GIT_CLIENT_SECRETS = "Client secrets"

7種類全てをこの変数名で登録してください。

![スクリーンショット 2022-04-06 23.52.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/5b9ab006-9cbf-d73b-b1e1-cea8777967b5.png)

登録が完了すると、Repository secretsに上記のような形で登録が確認できます。

## GitHub Actionsの設定
最後にGitHub Actionsを有効にします。
![スクリーンショット 2022-04-06 23.54.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/b5245276-71ff-574f-a21c-6da045c6fc94.png)

リポジトリ上段よりActionsをクリックしてください。

![スクリーンショット 2022-04-06 23.56.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/f81552d3-d1df-d7e3-b366-4d1d814030b9.png)

問題なければ「I understand my workflows, go ahead and enable them」をクリック

![スクリーンショット 2022-04-06 23.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/8173d334-c074-074b-3e6e-edba1b615e94.png)
上記の画面に遷移するので、Navigationのgit_commit_botを選択

![スクリーンショット 2022-04-06 23.59.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/b1ee5a6b-7a56-d92b-fb4a-4986942007f6.png)

Enable workfrowを選択

![スクリーンショット 2022-04-07 0.00.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005334/4f8a5f44-cbb0-8e0b-ed7a-44b164e3e823.png)

この画面になれば設定は完了です。お疲れ様でした。

# 最後に
本記事では、GithubのCommit数を自動集計するTwitterBotの設定について記載しました。
バグ等の情報は随時連絡いただければと思います。よろしくお願いします。