フリーランスエンジニアをしております。 @taiyop です。
本日、どこまでテストコードを書くのかを復習する目的で以下の記事を読んでたところ、ちょっと良いんじゃないかなっていうワンライナーを思いついたので久々にqiita投稿することにしました。
使う目的
バグ修正の多いファイルを見つけて、設計のリファクタリングやテストコードの充実を行い、品質を向上させることです。
ossのソースコードを見ていると、commitメッセージにfeat/fix/refactor/choreなどをprefixにしていることがあると思います。現在の開発でも似たようなことをしているのですが、
feat: xxxx
fix: xxxx
refactor: xxxx
chore: xxx
のようなcommitメッセージから、
「このファイルはfixが多いぞ」
というのを見つけて、テストの充実やより品質の高いプログラムに書きかえていきます。
本題のワンライナー
git log -c --grep fix: --name-only | grep app/models | sort | uniq -c | sort
fix:
の部分をfeat:
に変えれば、機能追加数が把握できますし、
app/models
の部分を変えれば、対象ファイルを変更できます。
実用例
例えば、vue の fix数で分析したいときは、以下のようにします。
git log -c --grep fix: --name-only | grep src | sort | uniq -c | sort
↓
5 src/core/instance/render.js
5 src/core/util/error.js
5 src/core/vdom/create-component.js
5 src/core/vdom/vnode.js
5 src/platforms/web/compiler/directives/model.js
6 src/core/vdom/create-functional-component.js
6 src/platforms/web/runtime/modules/attrs.js
6 src/platforms/web/runtime/modules/dom-props.js
6 src/shared/util.js
7 src/core/vdom/patch.js
8 src/compiler/codegen/events.js
8 src/core/instance/lifecycle.js
9 src/compiler/parser/index.js
9 src/core/util/env.js
10 src/platforms/web/runtime/modules/events.js
11 src/compiler/codegen/index.js
12 src/core/vdom/helpers/normalize-scoped-slots.js
ちなみにfeat:
で分析したところ、以下のようになりました。
2 src/server/render.js
2 src/shared/util.js
3 src/compiler/codegen/events.js
3 src/core/instance/render.js
3 src/core/instance/state.js
4 src/core/instance/render-helpers/index.js
6 src/compiler/codegen/index.js
17 src/compiler/parser/index.js
parser/index.jsは機能追加が多いみたいですね。
その他の活用方法
feat:
のついたコミットメッセージで検索すれば、機能の多いファイルも把握できるかと思います。
また、feat/fix/refactor/chore/testのどれが多いのかなどを調べれば、「最近featが少ないなー」等という問題点も数字として見える化できるかと思います。
バグバッシュ大会をする際にも、どのファイルからチェックしていくかの指標にもなるのではないでしょうか。
とはいえ、rubocop、ファイルごとの行数、コードカバレッジチェックなども使うと思うので、今回の手法を使った方が良いかどうかはケースバイケースだと思います。
ただ、この手法はワンライナーでコマンドを叩くだけなのでちょっと試してみるくらいのノリで使ってみてもらえると良いのかなと思います。
最後まで読んでいただきありがとうございました。