2
0

More than 3 years have passed since last update.

Gitでコミットの多いファイルを調べてプロジェクトのホットスポットを知る ruby スクリプト

Posted at

新しいプロジェクトにアサインされたとき、プロジェクトのどこがホットスポットか知ることができるとプロジェクトを早く理解できます。最も 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 とかを除いたファイルがホットスポットに当たりそう、と考えられますね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0