ticktakclockの日記

技術ポエムを綴ったりします。GitHub idも同じです (@ticktakclock)

プルリクのレビュー件数をグラフにしてみた

こんにちは、tkyです。

社内でプルリクをいろいろなメンバーにレビューしてもらっているのですが、

「最近特定の人ばかりにレビュー依頼してる気がする・・・負荷溜まってないかな・・・」

という一抹の不安をいだき誰にレビュー依頼するか判断する材料にしようと考え(完全に個人用で)作った感じです。

何作ったの

社内のメンバーのプルリク溜まってる件数をグラフにしてみました。

token, organization, teamを入力することでこんな感じのグラフが出るようなものです。

こうすることでレビュー溜まってない人にレビューアサインしたほうが早いかな?など検討の余地が生まれて良いですね。

f:id:ticktakclock:20200414221150p:plain:w500
screenshot

github.com

技術的なところ

せっかくだしTypescriptとVueも一緒に触ってみながら成果物残してみるかー!というモチベーションです。 私はAndroidエンジニアですが、Reactとかのフロントの経験はあるのでそんなに抵抗はないです。

chart.jsのおかげでグラフ化はかんたんでした。感謝・・・

使ったAPI

大まかな流れは /orgs/:org_id/team/:team_id/members で特定のチームに属するメンバーを抽出して

そのメンバーが持っているPRレビューの数を /search/issues で取得します。

Search | GitHub Developer Guide

Team Members | GitHub Developer Guide

/search/issues の課題

search/issues?q=is:open+is:pr+review-requested:ticktakclock こんな感じで私がレビューすべきプルリクIssueが取得できるのですが、

review-requestedが1人しか指定できないのか、例えば

Aさん・・・2件、 Bさん・・・1件、 Cさん・・・4件

あったとして

  • search/issues?q=is:open+is:pr+review-requested:a-san+review-requested:b-san ・・・3件取得
  • search/issues?q=is:open+is:pr+review-requested:a-san+review-requested:c-san ・・・0件取得

みたいなことがあってなぜか複数指定して検索できるパターンとできないパターンがあり

指定したメンバー全員を一気に検索することができなかったことです。

そのため本リポジトリでは1人1人API叩いて検索してます。

配列を一気にasync - await  するのにはPromise.all()でくくってあげる必要がある、というのは本件に関係ありませんがそこそこ重要なポイントかなと思います。

      const res = await api(
        "/orgs/" + this.organization + "/teams/" + this.team + "/members"
      );
      const results: Array<RequestedReviewer> = await Promise.all(
        res.data.flatMap(async (user: User) => {
          const res = await api(
            "search/issues?q=is:open+is:pr+org:" +
              this.organization +
              "+archived:false" +
              "+review-requested:" +
              user.login +
              "&sort=created&order=asc&page=1&per_page=10"
          );
          return { user: user, issues: res.data.items };
        })
      );

これで何が問題かというとGitHubAPIのレート制限にすぐに引っかかるということです。

普通にtoken使ってやる場合は1時間あたり最大60件なので、比較的すぐに制限に引っかかります。

GitHub API v3 | GitHub Developer Guide

まとめ

  • レビュー件数がわかって少し幸せ
  • search apiもう少し拡張してほしい
  • typescriptとVueの勉強しようと思ったのにGitHubAPIの勉強になってしまった・・・

こうすれば複数人のIssue検索できるよ、のような知見があるかたはぜひ教えていただきたいです!!