新しいプロジェクトにアサインされたとき、プロジェクトのどこがホットスポットか知ることができるとプロジェクトを早く理解できます。最も Git コミットが多いファイルをホットスポットと仮定して、ファイルごとのコミット数のランキングを調査するスクリプトを ruby で作ってみました。
環境は mac os + ruby 2.6.3 です。
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
プログレスバーを表示するため、 ruby-progressbar gem を使います。事前にインストールしておいてください。
gem install ruby-progressbar
ソースコード
git-logs-ranking.rb
require 'ostruct'
require 'ruby-progressbar'
Dir.chdir(ARGV[0])
RANKING_LENGTH = 20
result = []
paths = `git ls-files`.lines
pb = ProgressBar.create(total: paths.count)
paths.each do |path|
path.chop!
logs_count = `git log --oneline #{path} | wc -l`.to_i
result << OpenStruct.new(path: path, logs_count: logs_count)
pb.increment
end
result
.sort_by { |row| row.logs_count }.reverse.take(RANKING_LENGTH)
.each { |row| puts "#{"% 4d" % row.logs_count} #{row.path}"}
全ファイルについて git log --oneline
を実行するので、大きなプロジェクトでは数分程度の時間がかかります。
使い方
下のように実行すると
ruby git-logs-ranking.rb リポジトリルートへのパス
Progress: |==================================== |
全ファイル調査する間プログレスバーが進んでいき、上位20位までのファイルが表示されます。
Progress: |===================================================================|
13 Gemfile
13 Gemfile.lock
12 config/routes.rb
10 app/controllers/repositories_controller.rb
8 app/views/repositories/show.html.haml
7 app/views/layouts/application.html.haml
6 db/schema.rb
5 app/models/user.rb
5 app/views/repositories/index.html.haml
5 app/javascript/packs/application.js
4 app/models/learn.rb
4 app/controllers/application_controller.rb
3 package.json
3 app/views/learns/_form.html.haml
3 yarn.lock
3 app/javascript/stylesheets/application.sass
3 app/controllers/learns_controller.rb
2 spec/models/user_spec.rb
2 app/views/signins/new.html.haml
2 app/views/layouts/_navbar.html.haml
ここから Gemfile とか routes.rb とかを除いたファイルがホットスポットに当たりそう、と考えられますね。