今回はWindowsのファイルブラウザであるエクスプローラについてです。
エクスプローラでは、大して使うこともないツールチップや右クリックメニューの表示のために無駄なファイル読み込みが発生して動作が重くなってしまうことがよくあります。それを解決する記事です。
前提知識
レジストリの基本的な操作は既知のものとします。個人的には全然バックアップとかは取らずに操作していますが、慣れない人はバックアップをしておくとよいでしょう。
レジストリのHKEY_CURRENT_USERというのはログインしているユーザー(自分)を対象にするもので、これをHKEY_LOCAL_MACHINEにすると全てのユーザーが対象になります。前者は基本的には管理者権限がなくても変更できますが、後者は必要です。
また、HKEY_CLASSES_ROOTというのはHKEY_LOCAL_MACHINE\Software\ClassesとHKEY_CURRENT_USER\Software\Classesを合わせた内容であり、同じ値などがある場合は後者のユーザー限定設定のほうが優先されます。
HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOTはそれぞれHKCU、HKLM、HKCRと略されるので(レジストリエディタやコマンドでも使えます)、この記事でもそのように表記します。
(このくらいまでは知識として覚えておくと役に立ちます)
この記事では基本的に、HKLM\Software\ClassesまたはHKCU\Software\Classesに含まれるものはHKCRとして表記しています。それ以外については、HKCUでも効果があるものはHKCUとして記載し、HKLMが必要なもののみHKLMを使用します。
設定の反映に際してexplorer.exeの再起動が必要なものがあるのでそれは適宜記載します。
Windowsレジストリ全般についての詳しい情報はWindows レジストリ 解剖記 - Programming Fieldというサイトにあります。
動作確認
今回は、ファイルの読み込みが発生するタイミングなどを確認するために、rclone -vv serve webdavで立てたWebDAVサーバーをnet useでネットワークドライブとしてマウントしたものを使用して動作を検証しました。
C:\やD:\のようなローカルディスク(ちなみにrcloneでもrclone mountを使うとローカルディスク扱いになる)や、\\127.0.0.1:8080\DavWWWRootのように直接WebDAVサーバーとしてアクセスするのだとまた動作はちょっとずつ変わってくるのですが、それらについての詳しい検証はしていません。ただし軽く動作を見た感じだと、基本的にはこの記事の方法の多くは一定の効果があるはずです。USBメモリなどのリムーバブルメディアは基本的には今回検証したネットワークドライブと似た動作になります。
ツールチップ
ツールチップとはこういうやつです。
フォルダやファイルに1秒くらいマウスカーソルを当てていると表示されます。この表示にあたって、場合によってはファイル本体の内容(名前や更新日時のようなメタデータではなく)の読み込みが発生してしまうことがあり、クリックなどの明示的なアクセス動作がないのにいきなりExplorerの動作が重くなるので非常にストレスになります。
まず最も単純な解決法はExplorer全体のツールチップの表示をoffにすることです。これはレジストリのHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AdvancedというキーのShowInfoTipという値を1から0にするとできます。反映にはexplorerの再起動が必要です。
次に、このShowInfoTipを1にしたままでできるだけ軽くする方法を考えます(例えば特定の種類のファイルに関してだけはツールチップを頻繁に使うといった場合に有用)。
デフォルトだとツールチップの動作が最も有害なのはおそらくフォルダです。通常、ツールチップにはそのフォルダ内に含まれるフォルダ・ファイルなどの情報が表示されるため、ツールチップ表示のたびにファイル一覧の取得が発生します。これは同じくHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advancedの中のFolderContentsInfoTipを1から0にすると解決します。これは再起動しなくても反映されるようです。
これで中身の情報は出なくなるのですが、なぜか中身の取得自体はまだ発生してしまっています。これは以下のようにするととりあえず解決することがわかりました。この設定の反映には基本的にはexplorer.exeの再起動は不要と思われます。
- HKCR\AllFilesystemObjectsのQuickTip値を削除(または_QuickTipなど適当な名前に変更)
- HKCR\DirectoryのInfoTipを、prop:System.Comment;System.DateCreatedのようなデフォルト値から適当な文字列("tooltip disabled"など)に変える。QuickTip値は、もしあれば削除。
他にもやり方はあるかもしれません。QuickTipというのは(まさに今回検証で使っているような)ネットワークドライブ(や、USBのようなリムーバブルメディア)向けの設定項目で、ここに固定文字列を設定するのでも大丈夫そうなんですが、それだとなぜかダメ(ちゃんと表示はされるが、ファイルアクセスが発生してしまう)でした。InfoTipも削除したりするとツールチップは出なくなるのにアクセスは発生するようになるといった謎の挙動になります。ローカルディスクの場合のみまともなツールチップを表示してネットワークドライブでは読み込みアクセスを減らすというのが一般的には理想だと思うのですが、そのような設定は無理そうです(さすがにQuickTipの実装のバグ?)。
このへんはWindowsクオリティという感じがします。
同キーのFullDetails値(プロパティの「詳細」タブで使われている)や、HKCR\Folderキーなどはそのままで大丈夫そうです。あとは、AllFilesystemObjectsやDirectoryやFolderの中のshellexに{00021500-0000-0000-C000-000000000046}というキーがあった場合、それがツールチップ表示に関係している可能性がありますが、多分無いので気にしなくて大丈夫です。あったら削除するといいかもしれません。
(2025-10-11追記)なお、上記の設定ではQuickTipという値の削除が必要なので、HKLM側に値が設定されている場合はどうやってもHKCU側の設定で上書きすることはできません。従って管理者権限がない場合はフォルダのツールチップ生成に伴うフォルダ内容へのアクセスを防止することはできないということになります(一応HKCR/CLSID以下をいじる方法はあるかもしれないが副作用のほうが大きそう)。
では同様にフォルダ以外の各種ファイルについても説明します。まず基本的には、特別な設定が行われていないファイル(未知の拡張子など)ではデフォルト状態でもファイル内容へのアクセスは発生しません。txtなども大丈夫です。アクセスが発生するのは、画像や動画(jfif・m4a・webaなどマイナーなもの含む)、Office系(docx, xlsx, pptxなど)、フォントファイル(ttf、otfなど)などです。色々調べた結果、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers以下に登録された拡張子のファイルが該当するようです。ただしプロパティハンドラーは仕様が公開されていて自由に実装することができるため、どんなプロパティハンドラーを実装してもこのような動作になるのかは不明です(既存のもので試した限りは必ずツールチップ表示時にファイル内容へのアクセスが発生しました)。
これらを解決するには、例えばpngであれば、先ほどと同様、以下のように設定します。
- (すでにやっているはずのHKCR\AllFilesystemObjectsと)HKCR\*のQuickTip値を削除(または_QuickTipなど適当な名前に変更)
- HKCR\SystemFileAssociations\.pngのInfoTipを適当な文字列に変える。QuickTip値がもしあれば削除。
(2025-10-11追記)こちらも管理者権限がないと事実上設定が不可能です。
ネットワークドライブだとこれでうまくいくのですが、ローカルディスクで試すとこれでもファイルアクセスが発生してしまいました(ちなみにフォルダの場合はdesktop.iniが読み込まれるだけで済みます)。過去記事のLinux Mintのファイルマネージャ(nemo)で快適にネットワーク上のファイルを閲覧する方法にも書いた通り、ネットワーク上のものはネットワークドライブとして扱うようにするのがセオリーかとは思いますが、ローカルディスクの性能が低い場合には問題になるかもしれません。
あるいはPropertyHandlers側を変更する方法もあります。各拡張子のキーの名前あるいは「既定」値のGUIDを適当な文字列に変更すればよいです。あるいは各GUIDに関する具体的な設定はHKCR\CLSIDの中にあるのでこちらを適当に変えるとか、あるいはShell Extensions\Blocked(後でも出てきます)に登録すれば、そのGUIDのプロパティハンドラを使っている拡張子に対してまとめて設定できます。これだとローカルディスクにも効果がありますが、そのかわり「プロパティ」の「詳細」タブでEXIF情報などを閲覧・編集するような操作ができなくなります。
まあ実際問題として別にShowInfoTip=0でそんなに困らないのでは…と個人的には思いました。
右クリックメニュー①無駄なファイルアクセス
一部のファイル・フォルダーでは、先ほどのツールチップと同様に、右クリックメニューを表示するだけでアクセスが発生することがあります。これも、右クリックメニューの表示が遅くなったり最悪の場合一時的に応答無しになったりとストレスの原因になります。
まずフォルダについてです。デフォルト状態だと、フォルダを右クリックするだけでそのフォルダの内容の一覧取得アクセスが発生します。これは「スタート にピン留めする」メニューが原因で、レジストリ値としてはHKCR\Folder\ShellEx\ContextMenuHandlers\PintoStartScreenにある「既定」の値が{470C0EBD-5D73-4d58-9CED-E91E22E23282}となっているのを削除(あるいは_{470C0EBD-5D73-4d58-9CED-E91E22E23282}のように適当にリネーム)すれば消すことができます(HKCUにはFolderキー自体がないかもしれませんが、作成すれば機能します)。これはexplorer.exeの再起動がなくても反映されます。
これでWindows11の通常の右クリックメニューを使う限りはアクセスは発生しなくなりますが、Windows10までの仕様の右クリックメニュー(見た目が異なる。Windows11においては、「その他のオプションを確認」を押すか、Shift+右クリックをするか、レジストリでWindows11の右クリックメニューを無効にする方法がある)を使用する場合には、従来の「スタートにピン留めする」もどうにかする必要があります。これはレジストリ値としてはHKCR\AllFilesystemObjects及びHKCR\Folderにあるshellex/ContextMenuHandlersキーの中にある{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}というキーを削除またはリネームすれば消すことができます。AllFilesystemObjectsとFolderの両方やらないと効果がないので注意してください。これはexplorer.exeを再起動しないと反映されないと思います(一般にContextMenuHandlersの中身は右クリックメニューで最初に呼び出されたときに読み込まれてずっとそのままになるものと記憶しています)。
(2025-10-11追記)これもキー自体の削除が必要なので管理者権限がないと設定できません。ただし回避策として、CLSID側で無理やり上書きして{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}自体を機能不全に追い込むことは可能です。具体的にはHKCU\Software\Classes\CLSID\{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}の既定値、ImplementsVerbs値、サブキーであるInProcServer32の既定値、あたりに適当な値を設定すればいいです。
次にフォルダ以外のファイルについてです。ファイルに関してはPintoStartScreenキーは用意されていないようで、デフォルト状態でWindows11の右クリックメニューを使う限りは一般にはファイル内容へのアクセスは発生しません。
Windows10の右クリックメニューを使う場合でも、一般のファイル(不明な拡張子など)では特にファイルアクセスは発生しません。しかし、ツールチップと同様、プロパティハンドラが設定されている拡張子だと発生してしまいます。これもやはり「スタートにピン留めする」が原因のようで、既に設定したHKCR\AllFilesystemObjectsに加えてHKCR\*においてもshellex/ContextMenuHandlersキーの中にある{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}(先ほどと同じ)というキーを削除またはリネームすると解決します。プロパティハンドラ側で設定してももちろん構いませんが、あまりそうするメリットはないように思います。
なお、この{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}による「スタートにピン留め」は試した限り実際に右クリックメニューとして表示されることはありませんでした(.exeに表示されているものは{470C0EBD-5D73-4d58-9CED-E91E22E23282}のほうに由来)。つまり、ファイルのプロパティに関する何らかの情報を読む(プロパティハンドラが設定されている場合はここでファイル内容へのアクセスが発生)→その内容に従ってメニューを表示するかどうかを決める(結果として大抵は表示されない)というような動作になっているのではないかと推測されます。(未確認ですが、Windows 10からのアップグレード機にしか存在しないキーである可能性もあるかもしれません)
結果的にほとんどの場合に表示されないようなメニューがファイル内容データへのアクセス発生の単独犯になっているとはとんでもない不合理です。
右クリックメニュー②その他の重いメニュー
ファイル・フォルダ内容へのアクセスが発生する原因は結局「スタートにピン留め」だけでしたが、それ以外にもエクスプローラが重くなる原因となるメニューはあります。特に「スタートにピン留め」のようなxxxx\shellex\ContextMenuHandlersというキーの中にあるものは、IContextMenuというインターフェイスを使って提供されていて、メニューの表示の際に呼び出される関数の中で任意の動作を実行することができてしまうので、重くなりやすいです。呼び出されているにもかかわらず結果的に表示されないこともあるという点も厄介です。
一方で、xxxx\shellの中にあるようなキーで設定されている右クリックメニューもありますが、これらはそのような外部関数を使った動作はせず、単に設定した文字列をエクスプローラ側が読み取って表示するだけで、クリック時に初めて個別の内容が呼び出されるので、大幅に重くなることはありません。設定が存在するのに表示されないということもありません。ただし、メニューにアイコンが設定されていたり表示名の多言語化のためにdllが使われていたりする場合、ファイルの読み出しが必要になるので、特に久々に右クリックをしたときは(キャッシュされていないので)重いかもしれません。
デフォルトで表示されるものだと、「フォトで開く」とかそのへんのメニューは結構重そうで、色々なサイトでこれらを無効にするための設定は紹介されています。
このときに使うのがHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blockedというキーです。ここに該当のGUIDの名前で文字列値(値の中身はなんでもいい)を作成すればメニューは表示されなくなります。反映にはexplorer.exeの再起動が必要です。
代表的なものは以下の通りです。
- ターミナルで開く…{9F156763-7844-4DC4-B2B1-901F640F5155}
- Clipchampで編集…{8AB635F8-9A67-4698-AB99-784AD929F3B4}
- Copilotに質問…{CB3B0003-8088-4EDE-8769-8B354AB2FF8C}
- フォトで編集…{BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4}
- Designerで作成…{7A53B94A-4E6E-4826-B48E-535020B264E5}(ただし「フォトで編集」のほうをやっていればこれも出なくなる)
- ペイントで編集…{2430F218-B743-4FD6-97BF-5C76541B4AE9}
- メモ帳で編集…{CA6CC9F1-867A-481E-951E-A28C5E4F01EA}
これらはHKCR以下の通常のメニュー設定キーには存在しないと思われるため、Blockedを使用するしかありません。(基本的に、Windows11形式の右クリックメニューにも出るようなものはこのタイプが多そうです)
一方、以下のものは通常のメニュー設定キーのshellex\ContextMenuHandlersに存在するため、そちらから無効にすることもできます。
- Microsoft Defender(またはMicrosoft Security Essentials)でスキャン…{09A47860-11B0-4DA5-AFA5-26D86198A780}
- キーはHKCR/*とHKCR/DirectoryとHKCR/Drive以下、キー名はEPP
- 以前のバージョンの復元…{596AB062-B4D2-4215-9F74-E9109B0A8153}
- キーはHKCR\AllFilesystemObjects。GUID自体がキー名になっている
- デバイスキャスト…{7AD84985-87B4-4a16-BE58-8B72A5B390F7}
- キーは各種メディアファイルごとに別だが、SystemFileAssociations以下が多い。HKCR\SystemFileAssociations\.mp4など。キー名はPlayTo。
- タスクバーにピン留め…{90AA3A4E-1CBA-4233-B8BB-535773D48449}
- キーはHKCR\*。GUID自体がキー名になっている
- こちらは同じ「ピン留め」であるにもかかわらず、「スタートにピン留め」と違ってファイルアクセスは発生しない。
- 共有…{e2bf9676-5f8f-435c-97eb-11607a5bedf7}
- キーはHKCR\AllFilesystemObjects、キー名はModernSharing
- これはエクスプローラのリボンの機能も兼ねているのでBlockedを使うとその部分も変わってしまうので注意
- 画像の「右に回転」「左に回転」…{FFE2A43C-56B9-4BF5-9A79-CC6D4285608A}
- キーはデバイスキャストと似たような感じで、拡張子に応じてHKCR\SystemFileAssociations\.jpg以下など。キー名はShellImagePreview。
- Blockedでも非表示にできるがフォトアプリが使えなくなる。ShellCompatibility\Objectsというような名前のキーを使う方法もあるが、こちらはHKLMでないと効果なしとのこと→右に回転・左に回転メニューを削除する 【Windows 10】 | Nonsubject。
他にもいくつかありますが、他記事に載っていると思います。なんなら「プログラムから開く」なども無効化できますが、そこまでするとさすがに不便ですしこれらはアイコンなどもなくてそこまで重くないような気がするのでやらなくてもいいでしょう。
また「お気に入りに追加」「デスクトップの背景として設定」「メディア プレーヤーで再生」「メディア プレーヤーの再生キューに追加」などはshellexではなくshellを使うものなので、Blockedは効果がなく(メニューは表示されたままで、クリックしてはじめてエラーになる)、LegacyDisable値で非表示にするのが適切です(詳しくは調べて下さい)。あるいはExtended指定でShift+右クリック時のみ表示させるという手もあります。
なお、ここで挙げたものに関してはメニュー表示の際にファイルへのアクセスは発生しないことを確認しています。
サードパーティーのソフトウェア
ここまではWindowsのデフォルトでの動作の話をしていましたが、サードパーティーのソフトウェアでもこのような動作をするメニューが追加される可能性はもちろんあります。これまでの内容に従って、PropertyHandlersやContextMenuHandlers、あるいはアイコンが指定されたメニューなどに目を付けて適宜無効化しましょう。
手元でHKCR\*\のContextMenuHandlersに含まれているのは7-Zip、Googleドライブ(キー名は"DriveFS 28 or later")、MEGA、PDF XChange Editor(ちなみにこれのアンインストール前後でpdfの挙動が変わったおかげでPropertyHandlersが原因であることが判明した)などがありますが、これらはファイル内容へのアクセスを発生させることはありませんでした。
まあ、どんなファイルにでも表示されるようなメニューにはファイルアクセスは必要ないわけなので、表示されていないものが一番怪しいんですよね…。
ちなみにMEGAのメニューは、HKCR\以下の通常のキーに指定されているのですが、そこから一掃してもMEGA同期ソフト起動中だと相変わらず表示されてしまっていて、結局"C:\ProgramData\MEGAsync\ShellExtX64.dll"(Windows 11のメニューならおそらくmsixのほう)をリネームしないと消せませんでした。
サムネイル
記事では扱いませんでしたが、サムネイルも当然ファイルアクセスを伴うのでエクスプローラが重くなる原因になります。ただ、バックグラウンドで動作するため右クリックメニューと違って操作のたびに重くなるようなことにはなりづらく、動作が目に見えるので、それほどストレス要因にはならないように感じます。そもそもサムネイルは無いと困る場面が結構あるというのもあります。
サムネイルも同じようにレジストリで管理されており、無効にする方法自体は色々あるので調べてみてください。
その他動作
詳しくは分かっていませんが、適当にファイルをクリック(選択)する動作を繰り返しているだけでも何度かに一回はその(閲覧している)ディレクトリ内部のファイル一覧要求が行われて若干重くなることがあります。これを防ぐ方法はわかっていません。まあまさに今閲覧しているフォルダに一覧要求が来るくらいはしょうがないでしょう。
そもそも右クリックメニューを使わない
動作を軽くする方法ではないので本題とはあまり関係ないのですが、必要のない場面では右クリックメニューをそもそも使わないというのも快適に使用するための重要な手段です。コピー・貼り付け・切り取り(Ctrl+C/V/X)とプロパティ(Alt+Enter)は必須でしょう。
また、これとは別に、右クリックメニュー自体にショートカットキーを割り当てることもできます。これはshell系ではアンド(&)の文字を使うことで設定が可能です(詳しくは右クリックメニューのショートカットキーをレジストリで変更設定する方法 | よぼろぐ よの冒険記など)(shellex系だとレジストリで変えるのは無理)。これを使うと、右クリックしてからメニューが表示されるまでのわずかタイムラグの間にキーを打つことでメニューが表示された瞬間にコマンドが発動するようになるため結構早く呼び出せるようになります。右クリックキー(右Ctrlの一つ内側にあることが多い)を使うと操作もキーボードだけで完結します。個人的に「編集(E)」などで特によく使っていて便利に感じています。
まとめ
画像ファイルやネットワークの遅延・帯域など状況によりますが、書いたことを全部やれば体感でも結構軽くなるのではないかと思います。
細かい設定方法がわからなければコメントで質問してください。
