リモートワーク以降の Pull request の傾向を分析してみた
Posted on
3 月 2 日からリモートワークになり、早くも 5 か月が経ちました。これだけ長期間に渡ってリモートワークをするのは初めての経験ですが、個人の生産性はリモートワークになってからの方が上がっている感覚がありました。
たとえば GitHub のコントリビューショングラフからも明らかなように、コードを書く時間は確実に増えています。自分の仕事はプレイングマネージャーなのでコードを書くことがすべてではありませんが、生産性の指標のひとつとして参考にしています。
リモートワークになってからインタラプションが減って、確実にコードを書く時間が増えています。赤枠の部分がリモートワークの期間ですが、コミットしてない日は(土日を除けば)数えるほどしかないです🙌 pic.twitter.com/wT8zykAglI
— Manabu Sakai (@manabusakai) June 26, 2020
ただ、このグラフは仕事以外のコントリビューションも含まれているので、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 件までしか取得できないので、適宜 form
と to
で期間を絞ってください。
{
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 年分のデータを集めてきて、リモートワークの前後で変化があったのか調べてみました。まとめたのが次のグラフです。
クォーターによって関わっているプロジェクトが違うので一概には言えませんが、3 月を境に傾向が変わっているのがわかります。トレンドラインも緩やかな上昇傾向です。
子どもがいるのでリモートワークになると生産性は下がると思っていましたが、この結果を見る限り、むしろ生産性は上がっていることがわかりました!