GitHub issues から Google スプレッドシートへの記録を最小コストで実装するには Integromat がオススメ


# はじめに
## 対象読者
* [GitHub](https://github.com/) で Organization 運用をし、かつ、 GitHub issues で issue 管理をしている人
* 複数のリポジトリに分かれている issue を一つのスプレッドシートに情報集約させたい人
  * たとえば、月間でどれくらいの issue が誰によって作られていて、誰がアサインされているのか、などの集計用途として

## 前提
* Node.js 環境を作って [Octokit](https://github.com/octokit) などで実装するのはコストがかかりすぎる
  * [Qiita - GitHub REST API から Node.js で 特定の organization の issue の一覧を取得する](https://qiita.com/Nossa/items/fe2cc4d995c7d7b570a0)
* GAS でコード書くのもつらすぎる
* よほど大規模の組織でなければ [Integromat](https://www.integromat.com/en) の Free プランでいける（月間で 500 issue を超えなければ大丈夫）
* Zapier は試してみたけれどうまくいかなかったのと Free の Tasks 実行上限が 100 で不足してしまう

## Integromat とは
* https://www.integromat.com/en
* [IFTTT](https://ifttt.com/) や [Zapier](https://zapier.com/) や [Claris Connect](https://www.claris.com/ja/connect/) のようなワークフローツール
* 特定のトリガー条件が満たされたら、特定のアクションを実行する、といったタスクの自動化ができる


# Google スプレッドシート
## 記録先の用意
* あらかじめ Google スプレッドシートを用意しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/f2ce4660-0d9f-7255-1c89-7e569e89b229.png)


# Integromat
## 前置き
* アカウント作成やログインなどは割愛

## シナリオ作成
### GitHub
* フィルタをかけて GitHub を選択してから次へ進む

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c5bbb4be-925a-cbaf-19c0-60ea5d307e2f.png)

* GitHub の設定をおこなうため、GitHub と表示されているところをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/06ab8cf8-246e-b208-7717-799f82ddd3bb.png)

* 今回は `Watch Issues` を選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/4b3fd5de-ebdb-0737-3bd9-b4f821691944.png)

* まだ一回も使ったことがなければ、以下のように表示される。名前は任意で。もし複数アカウントを関連づける予定があるのであれば、一意に識別できる名前づけにしておくのがよい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/b0ff01cd-517f-804e-f873-9b556763f97d.png)

* GitHub アカウントとの連携ウィンドウが開くので、設定
  * `Organization access` は `Grant`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c49922f3-edc9-0a57-d0fb-2b089d1287fd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/43f5c61b-037d-8fe2-b4c6-01ea33d3f813.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/f4a9d48c-ab4d-67d0-1d38-77d156304973.png)

* もし、上記の後に以下エラーが出たら、あらかじめ GitHub 側でアクセストークンを作成しておく必要がある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/2d28e86d-031d-e815-ef70-17d38fd4a5c7.png)

* アクセストークンは以下のような感じで作ればよい
  * このユーザが Organization での管理者権限を持っている必要はある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/f04519e6-a552-9f52-61e5-1bb8fe48f26d.png)

* うまくいくと以下のようになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/f70d369f-cb58-75a6-ab94-258b593ebef6.png)

* `Maximum number of returned issues` は大きな値にしないほうがよいということで、ひとまず `10` にしてみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/8ea199a5-4c23-9215-7497-06e2f765c085.png)

* `Show advanced settings` で詳細設定もできる。今回は以下の通りにして進める

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c9fa72e2-2dee-3149-a757-e8d90fc32b24.png)

* いつから？　と訊かれるので、今からにする。これにて完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/e5bb8485-4915-fb38-f18e-91c7062e7747.png)


### スプレッドシート
* カーソルをホバーすると `Add another module` が表示されるのでそれを押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/e3de470c-26bd-50fd-84bf-8f28ed0e67a0.png)

* `Add another module` から `Google Sheets` を追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/20fc4326-2978-c128-9ae0-1ce867254dcb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/42be80ab-debf-cf49-cc72-03282e9b18e4.png)

* 一行追加したいので `Add a row`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/0b4f43e1-43f0-edb8-52d3-9dfe0d91d81a.png)

* GitHub のときと同じく、初めての場合は Google とのアカウント連携をおこなう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/e77b76f5-dbb0-dcb2-36c6-915e6ea36588.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/43a5c722-4436-6274-e50c-1a2817a3f830.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/b7587712-6c95-892e-7152-0f46bfdbbb30.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/ff2342ec-1949-a40f-0e9e-230d3cbd2383.png)

* アカウント連携が成功すると次のように各項をプルダウンで選択できるようになっていくので、あらかじめ用意しておいたシートを指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/ef32b4a3-ccb3-a855-7be2-cbcf53267cb1.png)

* `Table contains headers` を `Yes` にすると、あらかじめ用意したシートの一行目をヘッダとして扱ってくれるため `Values` の指定時にラベルとして表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/a8189361-46ac-71bb-c312-ddc53ddb28fe.png)

* それぞれの `Values` を指定していく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/75136b6e-0589-c0a3-a8ee-9b5cbd7ff828.png)

* 以下のような感じに。リポジトリ名は URL からパースしてこないとならないよう。これにて設定完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c1ad79f7-ef14-43b2-e89d-800e798ef851.png)


### 動作実験
* 左下の `Run Once` で動作実験

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/f8727e7b-1d90-2740-8ec5-d09b52c5d453.png)

* 問題ない旨のダイアログが右下に表示されればヨシ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/88d0b2aa-5bc3-c7eb-a5f2-4e4d17af7d2d.png)

* 最後にスケジューリングを ON にしておく。前の画面に戻って右上に ON が点灯していればヨシ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/34ca7c8d-8a6e-3463-4ee8-eb76401c5c45.png)


## スケジューリング設定
* チェックするタイミングがデフォルトで 15 分に 1 度というスケジューリング設定になっていることを確認。必要に応じてここを変えないと Operations の消費量が激しくなりすぎる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/91eaaba1-41de-19ca-a705-4f2df661e60f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/a808ba9b-8eb1-bc83-a163-be9c9c92e74e.png)

* 一度、実験的にこのスケジューリング通りに動いているか動作確認。問題なければ、今回の用途では 1 日 2 回、 1,440 分ずつの実行に変更
  * 一度に取得できる issues の上限を 10 に設定しているので、組織内でどれくらいの頻度で issue が作られうるかというあたりから逆算して設定してみること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/dc4ec917-5131-c795-4d49-70c9f2136930.png)


# 結果確認
* このように入ってきます。リポジトリ名のところはスプレッドシートの関数など使って取るとよいかな🤔

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/bac2a30a-10f2-e203-043e-f0be3341ab0b.png)


# おわりに
## 感想
* KPI の一環として issue の月間作成数などをカウントするようにしてみようということを思い立ったはよいものの、どうやって取得するのかと GitHub API をあれこれ調べているうちに users の issues は取得しやすいけれど orgs の issues を取得するのって結構難易度高いなってことに気づいてきて、こんなことのために Node.js 環境作るのも何だし、さてどうしようか……と考えているうちに、ふと Zapier に辿り着きました
* しかし Zapier で設定を終えてみても、いっこうにトリガが走ってくれず、途方に暮れたところで Integromat を試したら、あっさり取れるように。素晴らしい
* Integromat は有料版にしても最安が月額 $9 ～ と格安だし Operations の上限が 10,000 まで伸びるので、短期スケジュールを回す用途でなければ、とても安く運用できてオススメです

## あらためて要注意
* スケジューリングによって短期間にチェックをかけるようにすると、チェック一回につき Operations が 1 消費されるので、ほんと要注意。デフォルトの 15 分に 1 度だと、夜の時間帯だけで 50 も消費することになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c89713ed-1ed1-8c61-3ac8-c94124e59a44.png)

* Zapier はチェックでは回数消費しないので、Integromat はこの点が要注意
    * ここさえ問題なければ Operations の上限は Free で 1,000 もあるので、かなり強いサービス