GitHubのPull Requestでコミットメッセージの文字数を調べる

GitHubのPull Requestで各コミットメッセージの文字数や変更行数を取得する方法を調べたのでまとめておく。

GraphQL APIで取得できたので、雑にcsv形式にして出力した。

stat-commit-messages.sh

#!/bin/bash

set -eu

OWNER=${1:-rails}
NAME=${2:-rails}
NUMBER=${3:-20000}

echo 'author,subject,body,additions,deletions,changes'
gh api graphql -F owner="$OWNER" -F name="$NAME" -F number=$NUMBER -f query='
  query($name: String!, $owner: String!, $number: Int!) {
    repository(owner: $owner, name: $name) {
      pullRequest(number: $number) {
        commits(first: 100) {
          nodes {
            commit {
              author { name },
              messageHeadline,
              messageBody,
              additions,
              deletions
            }
          }
        }
      }
    }
  }
' --jq '.data.repository.pullRequest.commits.nodes[] | map("\"\(.author.name)\",\(.messageHeadline|length),\(.messageBody|length),\(.additions),\(.deletions),\(.additions + .deletions)") | join("\n")'

実行結果

$ ./stat-commit-messages.sh
author,subject,body,additions,deletions,changes
"Ryuta Kamizono",43,1714,4,4,8

$ ./stat-commit-messages.sh rails rails 46762
author,subject,body,additions,deletions,changes
"David Heinemeier Hansson",24,78,63,0,63
"David Heinemeier Hansson",47,465,105,22,127
"David Heinemeier Hansson",27,0,3,0,3
"David Heinemeier Hansson",35,0,18,4,22
"David Heinemeier Hansson",40,0,7,0,7
"David Heinemeier Hansson",41,0,2,2,4
"David Heinemeier Hansson",3,0,2,0,2
"David Heinemeier Hansson",36,0,9,4,13
"David Heinemeier Hansson",28,0,7,2,9
"David Heinemeier Hansson",9,0,0,2,2
"David Heinemeier Hansson",54,0,1,0,1
"David Heinemeier Hansson",35,0,5,0,5
"David Heinemeier Hansson",31,0,2,1,3
"David Heinemeier Hansson",9,0,18,0,18
"David Heinemeier Hansson",47,0,4,0,4
"David Heinemeier Hansson",13,0,3,0,3
"David Heinemeier Hansson",57,0,7,3,10
"David Heinemeier Hansson",29,0,2,1,3
"David Heinemeier Hansson",40,14,1,4,5
"David Heinemeier Hansson",45,0,2,1,3
"David Heinemeier Hansson",19,0,2,0,2
"David Heinemeier Hansson",13,0,28,0,28
"David Heinemeier Hansson",14,0,5,5,10

実際のGitHubのPull Requestは以下の2つで、取得した値もあってそう。

参考ページ

GraphQLのドキュメント docs.github.com