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つで、取得した値もあってそう。
- The default collation should not be change by kamipo · Pull Request #20000 · rails/rails · GitHub
- Add default Dockerfiles by dhh · Pull Request #46762 · rails/rails · GitHub
参考ページ
GraphQLのドキュメント docs.github.com