続々 Gitのdiffを振り返る - @ledsun blogでコミット単位でのファイルの変更行数の遷移をふりかえりました。
コミット単位では列間が詰まりすぎてグラフが見にくいです。 特に、Gitのコミット数を振り返る - @ledsun blog で見たように、2020年9月以降コミット粒度を小さくしています。
このため列間がますます詰まり、グラフから情報が読み取りにくくなっています。 そこで、ファイルの変更行数を、再び、日、週、月、年の単位で集計します。
require "Time" require "Date" duration = $*.shift.to_s.to_sym Commit = Struct.new(:at, :insertions, :deletions) # カウントしたくないファイルを除外 EXCLUDE = "':(exclude)package-lock.json' ':(exclude)*.min.js' ':(exclude)*.css' ':(exclude)dist/*' ':(exclude)dev/vender' ':(exclude)src/lib/modules' ':(exclude)*.md'" `git log --after='2019-05-22 00:00' --format=format:'---%n%ai' --shortstat #{EXCLUDE}` .split("---\n")[1..] # 1行目は空なので捨てる .map { _1.split("\n") } .filter { |time, stats| !stats.empty? } # 除外しているファイルがあるのでstatsが出ないことがある .map { |time, stats| Commit.new(Time.parse(time), stats.split(",")[1].to_i, stats.split(",")[2].to_i) } # " 1 file changed, 10 insertions(+), 9 deletions(-)" をパース .filter { _1.insertions < 1000 } # 1000行以上の変更はツールによるので除外する .sort_by { _1.at.to_i } .reduce({}) do |result, item| case duration when :day date = Date.parse item.at.to_s # 日 when :week date = Date.parse(item.at.to_s) - item.at.wday # 週 when :month date = Date.parse item.at.strftime("%Y-%m-01") # 月 when :year date = Date.parse item.at.strftime("%Y-01-01") # 年 は期間が違い過ぎるので、比較には向かない else date = item.at end if result.key? date result[date].insertions += item.insertions result[date].deletions += item.deletions else result[date] = Commit.new(date, item.insertions, item.deletions) end result end .each_value do puts "#{_1.at.strftime("%F_%T")} #{_1.insertions} #{_1.deletions}" end
引数で、day
、week
、month
、year
を受け取り、それぞれの単位で集計します。
出力データ形式は続々 Gitのdiffを振り返る - @ledsun blogと一緒です。
日
gnuplot> set xdata time gnuplot> set timefmt "%Y-%m-%d_%H:%M:%S" gnuplot> plot 'all_log_day.dat' using 1:2 w i title 'insertions' lw 2, 'all_log_day.dat' using 1:3 w i title 'deletions' lw 2
続 Gitのdiffを振り返る - @ledsun blogのグラフと比べると大分ちがいます。 変更行数の変動が少なく、現実の作業効率を反映していそうです。
どうやら、本当に一日に2000〜2500行の変更をしているようです。
今年は 「論理的思考の放棄」をパクる - @ledsun blog に書いたように 1日1000行のリファクタリング を目指してプログラミングスタイルを工夫していました。半年を経て、どうやら達成したようです。 現時点では、一回しか達成していないので、再現性がないかもしれません。 来年は、これがフロックでないことを確認したいと思います。
「1日1万行とか、絶対無理じゃん」という思いもありましたが、あと4倍なら、俄然現実味が帯びて参りました。