リモートワーク以降の Pull request の傾向を分析してみた

Posted on

3 月 2 日からリモートワークになり、早くも 5 か月が経ちました。これだけ長期間に渡ってリモートワークをするのは初めての経験ですが、個人の生産性はリモートワークになってからの方が上がっている感覚がありました。

たとえば GitHub のコントリビューショングラフからも明らかなように、コードを書く時間は確実に増えています。自分の仕事はプレイングマネージャーなのでコードを書くことがすべてではありませんが、生産性の指標のひとつとして参考にしています。

ただ、このグラフは仕事以外のコントリビューションも含まれているので、GitHub の GraphQL API を使って仕事に関する Pull request を分析してみました。

所属するオーガニゼーションのデータだけ取得する

GraphQL API を使えば所属するオーガニゼーションのデータだけ取得できます。今回は GitHub が提供している GraphQL API Explorer からクエリを実行します。

まず所属するオーガニゼーションの ID を取得します。この ID は Base64 でエンコードされていて、デコードすると 012:Organization0123456 のような形式になっていました。

{
  organization(login: "xxxxxx") {
    id
  }
}

次に自分の Pull request とレビューした Pull request を取得します。 organizationID は上で取得した Base64 でエンコードされたものです。一度に 100 件までしか取得できないので、適宜 formto で期間を絞ってください。

{
  viewer {
    login
    contributionsCollection(organizationID: "MDEyOk9yZ2FuaXphdGlvbjAxMjM0NTYK", from: "2020-07-01T00:00:00Z", to: "2020-07-31T23:59:59Z") {
      pullRequestContributions(first: 100) {
        totalCount
        nodes {
          pullRequest {
            title
            url
            author {
              login
            }
            createdAt
            mergedAt
            merged
          }
        }
      }
      pullRequestReviewContributions(first: 100) {
        totalCount
        nodes {
          pullRequest {
            title
            url
            author {
              login
            }
            createdAt
            mergedAt
            merged
          }
        }
      }
    }
  }
}

JSON 形式で結果を受け取れるので、あとは jq コマンドで欲しい情報に絞り込みます。

マージ済みの Pull request 数。

$ jq '.data.viewer.contributionsCollection.pullRequestContributions.nodes | map(select(.pullRequest.merged == true)) | length' pr_202007.json

レビューした Pull request 数。自分の Pull request にレビューコメントを付けた場合も含まれてしまうので、自分のものは除外しています。

$ jq '.data.viewer.contributionsCollection.pullRequestReviewContributions.nodes | map(select(.pullRequest.author.login != "manabusakai")) | length' pr_202007.json

リモートワークになって実際どうだったのか?

GraphQL API から過去 1 年分のデータを集めてきて、リモートワークの前後で変化があったのか調べてみました。まとめたのが次のグラフです。

Pull request と Review の推移

クォーターによって関わっているプロジェクトが違うので一概には言えませんが、3 月を境に傾向が変わっているのがわかります。トレンドラインも緩やかな上昇傾向です。

子どもがいるのでリモートワークになると生産性は下がると思っていましたが、この結果を見る限り、むしろ生産性は上がっていることがわかりました!