WinDirStatのすゝめ。

WinDirStatのすゝめ。

2026.04.12

はじめに

皆様こんにちは、あかいけです。
突然ですが、Windowsのディスクが謎に圧迫されて困ったことはありませんか?私はあります。

自宅のWindows PCにて年に一回くらい不要なファイルを削除してお掃除をしているんですが、なぜか減らない謎の使用領域にずっと悩まされていました。
「何がこんなに容量を食っているんだろう…」と調べても、PowerShellのコマンドだけでは全容が掴めず、途方に暮れていたわけです。

そんな折に出会ったのがWinDirStatというツールです。これを使ったらすべて解決しました。
ありがとうございますありがとうございますありがとうございます。

今回はこのすばらしいツールを使ってディスクのお掃除をした体験談をご紹介します。

コマンドでの調査

まずはPowerShellを使って、どのフォルダが容量を消費しているのか調べてみます。
Cドライブ直下のフォルダごとの使用量を確認してみました。

> Get-ChildItem C:\ -Directory -Force | ForEach-Object {
>>     $size = (Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum).Sum
>>     [PSCustomObject]@{ フォルダ = $_.Name; GB = [math]::Round($size/1GB, 2) }
>> } | Sort-Object GB -Descending | Format-Table -AutoSize

フォルダ                     GB
--------                     --
Users                     55.58
Windows                   46.85
Program Files (x86)       14.99
Program Files             11.72
ProgramData                5.56
$WinREAgent                1.36
AMD                        0.18
$Recycle.Bin                  0
System Volume Information     0
Recovery                      0
Documents and Settings        0
Config.Msi                    0
.cache                        0
inetpub                       0
PerfLogs                      0
OneDriveTemp                  0
Intel                         0

Usersが55GB、Windowsが46GBということで、大まかな内訳は分かりました。
さらにWindowsフォルダの中身も深掘りしてみます。
WinSxSが23GB、System32が10GBといったところですね。

> Get-ChildItem C:\Windows -Directory -Force | ForEach-Object {
>>     $size = (Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum).Sum
>>     [PSCustomObject]@{ フォルダ = $_.Name; GB = [math]::Round($size/1GB, 2) }
>> } | Sort-Object GB -Descending | Select-Object -First 15 | Format-Table -AutoSize

フォルダ                GB
--------                --
WinSxS               23.79
System32             10.24
Installer             3.63
assembly              2.39
ServiceProfiles       2.03
SysWOW64              1.33
SystemApps            1.15
Microsoft.NET         0.77
servicing             0.65
SoftwareDistribution  0.64
Panther               0.63
Logs                  0.56
Fonts                 0.47
SystemResources       0.21
Speech                0.15

ただ、ここで問題が発生しました。
コマンドで集計した合計と、実際のディスク使用量が合わないのです。

シャドウコピーなども確認してみましたが、差分の説明がつきません。

> vssadmin list shadowstorage
vssadmin 1.1 - ボリューム シャドウ コピー サービス管理コマンド ライン ツール
(C) Copyright 2001-2013 Microsoft Corp.
シャドウ コピーの記憶域関連付け
   ボリューム: (C:)\\?\Volume{f4a181a2-01af-47e1-b845-2aaf73fdbbff}\
   シャドウ コピーの記憶域ボリューム: (C:)\\?\Volume{f4a181a2-01af-47e1-b845-2aaf73fdbbff}\
   シャドウ コピーの記憶域の使用領域: 1.65 GB (0%)
   シャドウ コピーの記憶域の割り当て領域: 2.00 GB (0%)
   シャドウ コピーの記憶域の最大領域: 8.93 GB (2%)

> Get-PSDrive C | Select-Object Used, Free | ForEach-Object {
>>     [PSCustomObject]@{
>>         使用済みGB = [math]::Round($_.Used/1GB, 2)
>>         空きGB = [math]::Round($_.Free/1GB, 2)
>>         合計GB = [math]::Round(($_.Used + $_.Free)/1GB, 2)
>>     }
>> }

使用済みGB 空きGB 合計GB
---------- ------ ------
    255.33 190.92 446.25

> Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" |
>>     Select-Object @{N="合計GB";E={[math]::Round($_.Size/1GB,2)}},
>>                   @{N="空きGB";E={[math]::Round($_.FreeSpace/1GB,2)}},
>>                   @{N="使用GB";E={[math]::Round(($_.Size-$_.FreeSpace)/1GB,2)}}
合計GB 空きGB 使用GB
------ ------ ------
446.25 190.92 255.33

コマンドだけでは使用済み255GBの内訳が全然つかめません。
というわけで、ここからが本題です。

WinDirStat での調査

WinDirStat とは

WinDirStatは、ディスクの使用量をグラフィカルに可視化してくれるツールです。
フォルダ構造をツリーマップで表示してくれるので、どこが容量を食っているのか一目で分かります。

https://github.com/windirstat/windirstat

(実はかなり歴史のあるツールで、2006年頃には窓の杜で紹介されています)

https://forest.watch.impress.co.jp/article/2006/11/06/windirstat.html

インストールはwingetでサクッとできます。

> winget install -e --id WinDirStat.WinDirStat

実際にスキャンしてみると、以下のような画面が表示されます。
ここで、コマンドでは見えなかった2つの大きな問題点を発見しました。

スクリーンショット 2026-04-05 224602

不要な領域の削除

休止状態(ハイバネーション)

1つ目の問題は、休止状態(ハイバネーション)ファイルです。
休止状態はPCの状態をディスクに保存してシャットダウンする機能ですが、普段使っていない方がほとんどではないでしょうか。

私も使っていないので、無効化して容量を解放します。

> powercfg /hibernate off

たった1行のコマンドで約12GBが解放されました。

> Get-PSDrive C | Select-Object Used, Free | ForEach-Object {
>>     [PSCustomObject]@{
>>         使用済みGB = [math]::Round($_.Used/1GB, 2)
>>         空きGB = [math]::Round($_.Free/1GB, 2)
>>         合計GB = [math]::Round(($_.Used + $_.Free)/1GB, 2)
>>     }
>> }

使用済みGB 空きGB 合計GB
---------- ------ ------
    242.67 203.58 446.25

仮想メモリ

2つ目の問題は、仮想メモリ(ページファイル)です。
確認してみたところ、なぜか80GBも割り当てられていました。
物理メモリが32GBなので、約2.5倍の設定です。

スクリーンショット 2026-04-05 225549

一般的には物理メモリの1.5〜3倍が推奨とされていますが、そもそも32GBの物理メモリがあれば仮想メモリをそこまで確保する必要はないはずです。
過去の自分が何を考えてこの設定にしたのか、まったく思い出せません…。

というわけで、ここはWindowsを信じて自動管理に切り替えてみます。

スクリーンショット 2026-04-05 225923

設定変更後、反映のためにPCを再起動しました。
再起動後に確認してみると、自動管理により約2GBが割り振られたようです。
とりあえず問題なく動作しているので、これでいきましょう。

スクリーンショット 2026-04-05 230401

Multipass

最後に、WinDirStatの画面で目立っていたMultipassの領域を整理します。
Multipassは、Canonicalが提供するUbuntu仮想マシンを手軽に作成できるツールです。

https://canonical.com/multipass

調べてみたところ過去にブログ検証の際に使っていたようで、31GBも占有しているのにずっと放置していました…。ずぼらすぎますね。

https://dev.classmethod.jp/articles/aws-at-home-eks-anywhere/

Pasted image 20260405230611

サービスも停止しており、確実に使っていないのでアンインストールします。

> multipass list
list failed: cannot connect to the multipass socket
> Get-Service -Name Multipass* | Select-Object Name, Status, StartType

Name       Status StartType
----       ------ ---------
Multipass Stopped Automatic
> winget uninstall Canonical.Multipass
見つかりました Multipass [Canonical.Multipass]
パッケージのアンインストールを開始しています...
正常にアンインストールされました

> Remove-Item "C:\ProgramData\Multipass" -Recurse -Force
Remove-Item : パス 'C:\ProgramData\Multipass' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Remove-Item "C:\ProgramData\Multipass" -Recurse -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\ProgramData\Multipass:String) [Remove-Item], ItemN
   otFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

スクリーンショット 2026-04-05 231023

最終的な状態

すべてのクリーンアップが完了しました、最終的なディスクの状態はこちらです。

WinDirStatのおかげで、100GB以上の容量を削減することができました。
コマンドだけでは見つけられなかった原因を一瞬で特定できたので、本当にすばらしいツールだと思います。

Pasted image 20260405231120

さいごに

以上、WinDirStatを使ったディスクお掃除の体験談でした。
今回の作業をまとめると、以下の3つで100GB以上を削減できました。

  • 休止状態(ハイバネーション)の無効化:約12GB削減
  • 仮想メモリの自動管理への切り替え:約78GB削減
  • Multipassのアンインストール:約31GB削減

PowerShellのコマンドだけではディスクの全容を把握するのは難しく、特にシステムファイルや隠しファイルが原因の場合は手詰まりになりがちです。
しかしWinDirStatを使えば、ディスク全体で「何が容量を食っているのか」が分かるので、効率的にお掃除ができます。

ディスク容量に悩んでいる方は、ぜひ一度試してみてください。
この記事が誰かのお役に立てば幸いです。

この記事をシェアする

関連記事