こんにちは。現場の最前線でコードと格闘している皆さん、お疲れ様です。
日々何十回と叩く `git fetch` や `git gc`。大規模なモノレポや、数千のブランチが乱立するリポジトリを扱っていると、「Git、遅いな……」と感じる瞬間がありますよね。
実は、Gitのデフォルト設定は「どんな環境でも壊れない」ことを優先した控えめな設定です。しかし、現代のマルチコアCPUを搭載した開発マシンであれば、そのポテンシャルを解放してやれば、Gitは驚くほど速くなります。
今日は、Gitの並列処理を極限まで最適化し、あなたの待ち時間を「ゼロ」に近づけるチューニングを伝授します。これを設定すれば、日々の開発体験が劇的に変わりますよ。
—
1. なぜGitの「並列化」が重要なのか?
Gitは本来、シングルスレッドで動作することを基本設計としています。しかし、近年のプロジェクトは巨大化しており、以下の処理がボトルネックになりがちです。
- fetch: ネットワーク越しの通信と、受信データの展開(デルタ圧縮の解凍)。
- gc (Garbage Collection): 不要なオブジェクトの削除や、パックファイルの再構成(再圧縮)。
これらをCPUの物理コア数に合わせて最適化することで、処理時間を数分の1にまで短縮可能です。
—
2. 極限の高速化設定(git-config)
以下の設定をターミナルで実行、あるいは `~/.gitconfig` に直接記述してください。
① フェッチの並列化
並列でフェッチを行うことで、通信と同時にデータの展開を並行処理させます。
フェッチ時に並列処理を行う最大数を指定(CPUコア数に合わせて調整)
8コアなら 8〜16 程度が目安です
git config –global fetch.parallel 8
② ガベージコレクション(gc)の最適化
`git gc` や `git repack` はCPU負荷が高い処理です。ここをマルチスレッド化します。
デルタ圧縮の際のスレッド数を指定(0は全コア使用を意味します)
git config –global pack.threads 0
パックファイルの書き込みを高速化
git config –global pack.windowMemory “100m”
git config –global pack.packSizeLimit “1g”
- `pack.threads 0`: 自動的にCPUの全コアを使い切ります。これが最もパワフルです。
- `pack.windowMemory`: デルタ計算時にメモリをどれだけ使うか。メモリに余裕があるなら `256m` 以上に引き上げると、巨大なリポジトリでも爆速になります。
—
3. 【検証】本当に速くなったのか?
設定が正しく効いているか確認しましょう。ただ体感で「速いかも?」と思うだけでなく、ベンチマークをとるのがエンジニアの流儀です。
以下のコマンドで、測定したい処理の時間を計測してみてください。
timeコマンドで処理時間を計測する
time git fetch –all
ベンチマークのコツ:
1. キャッシュの影響を排除: 最初の1回はディスクI/Oが走るため、2回目以降の「メモリに載った状態」で計測してください。
2. 比較: 設定前と設定後で `time` の結果を比較しましょう。特に `real` の値が小さくなっていれば成功です。
—
4. 初心者の方へ:これが「Git」の基本セットアップ
まだ Git の設定を最適化していないという方は、まずここから始めてください。これが全ての高速化・効率化の土台になります。
ステップ1:ユーザー情報を設定する
git config –global user.name “Your Name”
git config –global user.email “your.email@example.com”
ステップ2:デフォルトブランチを main にする
git config –global init.defaultBranch main
ステップ3:HelloWorld的な動作確認
まずは適当なディレクトリで動作確認です。
mkdir test-repo && cd test-repo
git init
echo “Hello, Git Optimization” > hello.txt
git add hello.txt
git commit -m “Initial commit”
ログが出れば成功です!
git log
—
最後に:先輩からのアドバイス
今回紹介したチューニングは、「自分のマシンのスペックをGitに教え込む」作業です。
Gitは非常に賢いツールですが、デフォルト設定という「箱」に閉じ込められています。あなたの開発環境が強ければ強いほど、そのポテンシャルを引き出すことで、開発効率は跳ね上がります。
もし設定後に「なんかPCが重いな」と感じたら、`pack.threads` を少し減らしてみてください。自分の開発環境に合わせて、自分だけのベストな設定値を見つけること。それが、一流のエンジニアへの第一歩です。
明日からのGit操作が、ほんの少しでも快適になれば幸いです。また何かあれば、いつでも聞きに来てくださいね!