新しくプロジェクトに入った人がリポジトリの現状を素早く把握するためのGitコマンド5選

ITエンジニアのアリー・ピエホフスキー氏が、「全然知らないプロジェクトの現状を素早く把握できるGitコマンド」を5つ紹介しています。
The Git Commands I Run Before Reading Any Code
https://piechowski.io/post/git-commands-before-reading-code/

◆過去1年間で最も変更されたファイル20個
以下はファイル名を過去1年間の変更数の多い方から20個並べるコマンド。
git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20
変更頻度の高いファイルを確認することで「活発に開発されている部分」や「予測不可能な影響を広い範囲に与えてしまっている部分」を知ることができます。ピエホフスキー氏は「誰も責任を負いたがらないようなファイルの変更頻度が高い場合、コードベースの停滞を示す最も明確な兆候」と述べています。
◆誰がコードを構築していったのか
以下はコミットを行った人をコミット数でランク付けするコマンド。
git shortlog -sn --no-merges
ソフトウェア開発プロジェクトの現場には、「バスファクター」という言葉が存在しています。バスファクターは「あの人がバスにひかれて居なくなったら」という仮定において、プロジェクトの頓挫する確率を示す数値として使用されています。
リポジトリのコミット数のうち、1人が60%以上など多くを占めている場合、バスファクターがかなり高い状態です。そうした主要人物が退職していた場合は危機的状況に陥っていると言えます。
ピエホフスキー氏は「--since="6 months ago"」を使用した6カ月以内のコミット数ランキングも併用し、実際にコードを構築している人の活動状況をチェックしているとのこと。
なお、複数のプルリクエストを単一のコミットにまとめるワークフローを採用している場合では今回のコマンドは参考にできない点に注意が必要です。

◆バグはどこに集まっているのか
以下は「fix」「bug」「broken」などバグ修正に関連したコミットメッセージが含まれているコミットで変更された回数が多いファイルを並べるコマンド。
git log -i -E --grep="fix|bug|broken" --name-only --format='' | sort | uniq -c | sort -nr | head -20
コミットごとにきちんと内容が分かるコミットメッセージを残している場合、上記のようにコミットメッセージの内容で抽出して分析することが可能です。
バグ修正で何度も登場するようなファイルは、「何度も壊れてパッチが適用されているものの適切に修正できていない」という傾向を見いだすことができます。
◆プロジェクトは加速しているのか、停滞しているのか
以下のコマンドは月ごとのコミット数を並べるコマンド。
git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c
毎月のコミット数が安定していれば健全な状態にあると考えて良さそうです。どこかでコミット数が半減している場合、一般的にはそのタイミングで誰かがチームを離れたことを意味しています。6カ月以上にわたって減少傾向にある場合、チームが勢いを失っていると考えられます。
また、しばらく少ない月が続いてから定期的に急増するパターンがある場合、チームは一定期間ごとに作業をまとめてリリースしていることを読み取れます。

◆どれくらいの頻度で炎上しているか
以下はコードを巻き戻したり、緊急パッチを当てた頻度を確認するコマンド。
git log --oneline --since="1 year ago" | grep -iE 'revert|hotfix|emergency|rollback'
1年に数回程度であれば問題ありませんが、数週間ごとに巻き戻しコミットを行っている場合、深刻な問題が隠れている可能性が高いとのこと。ピエホフスキー氏は「テストの信頼性が低いか、ステージング環境が欠如しているか、デプロイパイプラインの構成がロールバックを行いにくくなっているなどの可能性がある」と分析。
また、巻き戻したり緊急パッチを当てたりするコミットが全くヒットしない場合、チームが安定している可能性のほかに「誰も分かりやすいコミットメッセージを書いていない」という可能性もあるとのこと。
ピエホフスキー氏はコードベースの監査を仕事にしており、監査の最初の1時間で上述した5つのコマンドを使用してリポジトリの現状を把握するとのこと。その後の1週間でどんな作業をするのかについてもブログに投稿しているので、気になる人は確認してみて下さい。
・関連記事
OS「UNIX」の生みの親が残した「ソースを調べても発見できないトロイの木馬の可能性」の証拠が40年越しに再発見される - GIGAZINE
Googleが開発した「改ざん不可能なログシステム」を構築できる「Trillian」とは? - GIGAZINE
「AIの出力をコピペする開発者」を狙って悪意あるnpmパッケージをインストールさせて情報を盗み取る攻撃手法「PhantomRaven」の存在が判明 - GIGAZINE
イーロン・マスク率いるDOGEが6000万行ものCOBOLコードを含む社会保障局のシステムをコード生成AIでわずか数カ月の内に移行させようとしており危険性が指摘されている - GIGAZINE
・関連コンテンツ
in ソフトウェア, Posted by log1d_ts
You can read the machine translated English article 5 Git commands to help new project membe….







