空き容量の異変に気づいたのは、自分で見に行ったからではなく、通知が来たときだった。「なんで?」と思ったし、最初は原因の見当もつかなかった。
1. 書類を疑って、外した
空き3.0GB、使用率100%(460GBのうち422GB使用)。ストレージの内訳は「書類」が大半を占めると表示していた。実際に`~/Documents`の中を覗いてみたが、これといって容量の大きいフォルダは見当たらない。念のため実測すると157MBしかなかった。
表示を信じて疑わなかった分だけ、この157MBという数字を見たときは「じゃあ何なんだ」という気味の悪さが残った。
2. 調べたのに見つからなかった
「こんなに容量を圧迫している原因は何だ」とClaude Codeに聞いた。指示を受けて、ターミナルで最初にこう打たせた。
du -sh ~/* | sort -rh
結果はホーム全体で48GB。だが実際のホームは370GB。320GBが消えた。
原因は単純で、`*`は隠しフォルダ(ドットで始まる名前)にマッチしない。正しくはこう。
du -sh ~/.[!.]* | sort -rh
`~/.git` 319GB。
正直に言うと、この数字も一発で見つけたわけではない。出力の中に紛れていて、最初は流し見で通り過ぎかけていた。それでも319GBという桁が目に止まって、二度見してようやく気づいた。調べ方を直しても、見る側が雑だったら同じことが起きる。
ここが一番の学び。「調べたのに見つからない」ときは、調べ方が対象を取りこぼしている可能性を先に疑う。数字が合わないこと自体が手がかりだった(370GB対48GB)。
原因を突き止められたのも、対処できたのも、Claude Codeを入れていたからだ。ただ皮肉なことに、当時のログをたどると、発端になった`git init`にも同じClaude Codeが関わっていた可能性がある(誰が実際にコマンドを打ったかは特定できていない。詳しくは後述)。
3. なぜ319GBまで膨らんだのか
`~/.git`の中身は、ほぼ全部が中断された一時ファイルだった(86個・289GB、1個あたり1.6〜23GB)。
仕組みはこう。
1. gitは未整理オブジェクトが6,700個を超えると自動で圧縮(GC)を始める
2. ここには33.6万個あった。しきい値の50倍
3. ホーム直下のリポジトリなので、圧縮対象に`Library`(26GB)と`Movies`(22GB)が丸ごと入る
4. gitコマンドが走るたびにこの巨大な圧縮が起動し、毎回同じところで失敗する
5. 失敗した一時ファイルをgitは自動削除しない。残骸が積み上がる
つまり使えば使うほど太る構造。3ヶ月動き続けていた。
4. なぜそこに出来たのか(分単位で追えた)
ログとファイルのタイムスタンプから、4月8日の夜が復元できた。
– 23:28 あるプロジェクトに`.gitignore`を作成
– 23:54 ホームに`.git`が誤作成(ここが事故)
– 翌0:08 正しい場所にリポジトリを作り直し
つまり、間違いには気づいていた。作り直してもいた。消し忘れただけ。
直そうとした形跡はあるのに、なぜ止めを刺さなかったのか。ここが一番ひっかかった。理解しないまま進めた結果が、3ヶ月後の通知になって返ってきた。
5. 本質:`git init`は”対象”ではなく”立ち位置”に作られる
自分は「ホームで作業していたのが悪かった」と思ったが、少し違った。
– ファイル操作は絶対パスで届く。立ち位置がどこでも`~/Downloads`は整理できる
– `git init`はパスを指定しなければ立ち位置に作る
事故は「ホームで作業したこと」ではなく、整理の”対象”とツールの”立ち位置”が同じだったことで起きた。この2つを分けておけば、同じ操作ミスをしても中身の薄いフォルダに落ちるだけで、肥大しようがなかった。
6. 自分がやったこと
作業用の立ち位置フォルダ`~/Projects/housekeeping/`を作り、ファイル整理はそこから絶対パスで対象を指定するようにした。新しくリポジトリを作るときは`git init <パス>`で場所を明示し、作り直したときは古い方を消したか確認するようにした。月1でこれを打つ。
ls -d ~/.git 2>/dev/null && echo "⚠️ 異常" || echo "正常"
結果、321GB解放。空きは3.0GBから324GBになった。
Claude Codeを入れていたから調べられたし、対処もできた。同時に、あの`git init`にも同じClaude Codeが関わっていた可能性があり、無関係だったとは言い切れない(誰が実際にコマンドを打ったかは、今も特定できていない)。便利さと危うさは、同じ道具の裏表だった。3ヶ月「消し忘れ1個」に気づかなかったのは、仕組みを理解しないまま進めていたからだ。月1の`.git`チェックは、もう今日から始めている。
コメント