Windowsのレジストリエディタ(regedit.exe)を開くと、一番上に表示されるのが「HKEY_CLASSES_ROOT」です。
ファイルをダブルクリックしたときに正しいアプリが起動する仕組み、右クリックメニューに「開く」「印刷」が表示される仕組み——これらはすべてこのキーの情報に基づいています。
この記事では HKEY_CLASSES_ROOT が何者で、どんな構造を持ち、どう活用すべきかを体系的に解説します。
HKEY_CLASSES_ROOT(HKCR)とは

HKEY_CLASSES_ROOT(略称:HKCR)は、Windowsレジストリの5つのルートキーの1つで、主に次の2種類の情報を格納します(Microsoft Learn「HKEY_CLASSES_ROOT キー」)。
- ファイル拡張子の関連付け情報:
.txt.jpg.pdfなどの拡張子と、それを開くアプリケーションの紐付け - COMクラス登録情報:ProgID・CLSID・IIDなど、アプリケーション間連携(OLE/COM/ActiveX)に必要な識別子と設定
日常的な操作で最も身近なのは拡張子の関連付けで、「.txt ファイルをダブルクリックするとメモ帳が開く」という動作はこのキーを参照して実現しています。
実は「仮想的なビュー」
ここで押さえておきたい重要なポイントがあります。
HKCR はレジストリエディタ上でルートキーのように見えますが、独立したデータを持つキーではありません。
Windowsが次の2つのキーの内容を動的に合成して表示している仮想的なビュー(マージドビュー)です(Microsoft Learn「HKEY_CLASSES_ROOT キー」)。
| 合成元 | 内容 |
|---|---|
HKEY_LOCAL_MACHINE\SOFTWARE\Classes | 全ユーザー共通の既定設定(インストーラーが書き込む) |
HKEY_CURRENT_USER\Software\Classes | 現在のユーザー固有の設定(ユーザーが変更した設定) |
同じキーが両方に存在する場合は、ユーザー側(HKCU)の設定が優先されます。
つまり「HKCR で見える内容」は、システム共通の設定にユーザー個別の設定を上書きした結果を表示しているものです。
マージドビューの詳細な仕組み
HKCR の合成ルールは、単純な上書きではなく階層ごとに細かく定義されています(Microsoft Learn「HKEY_CLASSES_ROOT の結合ビュー」)。
合成の基本ルール:
- HKCU\Software\Classes のサブキーはすべて HKCR に含まれる
- HKLM\SOFTWARE\Classes のサブキーのうち、HKCU 側に同名サブキーが存在しないものが HKCR に含まれる
- 両方に同じ直下サブキーが存在する場合、その直下サブキーの内容は HKCU 側のみが採用される(HKLM 側の内容は無視される)
この「直下サブキー単位での置き換え」という挙動が重要で、例えば HKCR\CLSID\{xxxx} というキーが両方に存在する場合、HKCU 側の {xxxx} 以下の内容がすべて優先され、HKLM 側の {xxxx} 以下の内容(追加のサブキーを含む)はマージビューには反映されません。
HKCRへの書き込みはどこに保存される?
HKCR に対して値やキーを書き込むと、システムは書き込み先を自動的に振り分けます(Microsoft Learn「HKEY_CLASSES_ROOT キー」)。
| 状況 | 実際の書き込み先 |
|---|---|
| 書き込み対象キーが HKCU\Software\Classes に存在しない | HKLM\SOFTWARE\Classes |
| 書き込み対象キーが HKCU\Software\Classes にすでに存在する | HKCU\Software\Classes |
この自動振り分けのため、「HKCR に書き込んだはずが HKLM に保存された」「期待と異なるキーが更新された」という混乱が起きやすいのが HKCR の落とし穴です。
意図が明確な場合は、HKCR ではなく書き込み先を直接指定することが推奨されています。
主なサブキーの種類と構造
HKCR の直下には、大きく3種類のサブキーが並んでいます。
① 拡張子キー(.txt・.jpg など)
先頭がドット(.)で始まるキーで、ファイル拡張子と ProgID を紐付けるエントリです。
「この拡張子のファイルは、どの ProgID が処理するか」を定義します。
HKCR\.txt
└─ (既定) = "txtfile"
└─ Content Type = "text/plain"
└─ PerceivedType = "text"
(既定) の値に設定されている文字列(例:txtfile)が、後述する ProgID キーの名前に対応します。PerceivedType はWindowsがファイルを大まかに分類するための値で、"text" "image" "audio" "video" などが設定されています。
② ProgID キー(txtfile・Word.Document など)
ProgID(Programmatic Identifier:プログラム識別子)は、拡張子に対応するアプリケーションの動作一式を定義するキーです(Microsoft Learn「ProgID キー」)。
ファイルのアイコン、ダブルクリック時の起動コマンド、右クリックメニューの項目などが格納されています。
HKCR\txtfile
├─ (既定) = "テキスト ドキュメント"
├─ DefaultIcon\
│ └─ (既定) = "%SystemRoot%\system32\imageres.dll,-102"
└─ shell\
├─ open\
│ └─ command\
│ └─ (既定) = "%SystemRoot%\system32\NOTEPAD.EXE %1"
└─ print\
└─ command\
└─ (既定) = "%SystemRoot%\system32\NOTEPAD.EXE /p %1"
shell サブキーの下には 「動詞(verb)」 と呼ばれるキーが並びます。open(開く)・edit(編集)・print(印刷)などが代表的で、エクスプローラーの右クリックメニューに表示されるコマンドはここから生成されます。
ファイルをダブルクリックしたとき、Windowsエクスプローラーは次の順番でキーを辿ります。
- クリックされたファイルの拡張子キー(例:
.txt)で ProgID を取得 - 取得した ProgID キー(例:
txtfile)のshell\open\commandを参照して実行ファイルのパスを取得 - 実行ファイルを起動してファイルを開く
ProgID とバージョン管理
ProgID の命名規則は <プログラム>.<コンポーネント>.<バージョン> の形式です(例:Word.Document.12)。
バージョンに依存しない ProgID(例:Word.Document)には CurVer サブキーが設定されており、インストールされている最新バージョンの ProgID が格納されています(Microsoft Learn「バージョンに依存しない ProgID キー」)。
③ COMクラス関連キー
COM(Component Object Model)に関連する情報を格納するキー群です。
主なキーの役割は次のとおりです。
| キー名 | 役割 |
|---|---|
| CLSID | COMクラスオブジェクトのグローバル一意識別子(128ビット)を登録。{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 形式のサブキーが並ぶ(Microsoft Learn「CLSID キー」) |
| AppID | DCOMアプリケーションの実行ユーザーやリモート接続の設定 |
| Interface | COMインターフェースIDと名称・プロキシDLLの対応 |
| TypeLib | タイプライブラリ(データ型・インターフェース定義ファイル)の場所と情報 |
CLSID キーの構造例を示すと次のとおりです。InprocServer32 サブキーにその COM クラスを実装する DLL のパスが格納されており、Windows はこれを読み取ってDLLを読み込みます。
HKCR\CLSID\{0069c1ec-3242-4e30-b7c2-0f5cc3a19453}
├─ (既定) = "サンプルコンポーネント"
├─ InprocServer32\
│ ├─ (既定) = "C:\Windows\System32\example.dll"
│ └─ ThreadingModel = "Apartment"
└─ ProgID\
└─ (既定) = "Example.Component.1"
assoc・ftype コマンドとの関係
コマンドプロンプトで使える assoc・ftype コマンドは、HKCR ではなく HKLM\SOFTWARE\Classes に対して直接動作します。
そのため HKCR を直接編集した変更は assoc・ftype コマンドでは表示されないので注意が必要です(ASCII.jp「最新のWindowsにおけるファイルの関連づけを分析する」)。
| コマンド | 操作対象 |
|---|---|
assoc .txt | HKLM\SOFTWARE\Classes.txt の ProgID を表示 |
assoc .txt=txtfile | HKLM\SOFTWARE\Classes.txt に ProgID を書き込み |
ftype txtfile | HKLM\SOFTWARE\Classes\txtfile\shell\open\command を表示 |
サービスプロセスでの注意点
ログオン中のユーザーとは異なるセキュリティコンテキストで動作するプロセス(Windowsサービスなど)は、HKEY_CLASSES_ROOT を直接使用すべきではありません。
HKCR はインタラクティブユーザーのセッション情報を前提に合成されるため、サービスプロセスから参照すると意図しないユーザー設定が混入する可能性があります。
推奨される代替手段は次のとおりです(Microsoft Learn「HKEY_CLASSES_ROOT キー」)。
- 全ユーザー共通の既定設定のみ参照する場合:
HKLM\SOFTWARE\Classesを明示的に開く - 特定ユーザーの設定と既定設定のマージ結果を参照する場合:
RegOpenUserClassesRoot関数を使用する
Windows 10・11での関連付け変更の制限
Windows 10 以降、ファイルの関連付けをレジストリの直接変更で書き換えることが制限されています。
ユーザー別の既定アプリ選択(UserChoice キー)には特殊な権限設定が施されており、外部から直接書き換えることができません。
これはブラウザやファイルオープンアプリをユーザーの意図しない形で変更する悪意あるソフトを防ぐための仕様変更です。
プログラムから正規にファイルの関連付けを登録するには、HKLM\SOFTWARE\RegisteredApplications を使った手順が必要です。
まとめ
HKEY_CLASSES_ROOT(HKCR)は、ファイル拡張子の関連付けとCOMクラス登録情報を管理するレジストリの仮想ビューです。
実体は HKLM\SOFTWARE\Classes(全ユーザー共通設定)と HKCU\Software\Classes(ユーザー固有設定)を合成したもので、同じキーが両方に存在する場合はユーザー側(HKCU)の設定が優先されます。
直接編集する際は自動振り分けのルールを把握したうえで、目的に応じて HKLM\SOFTWARE\Classes か HKCU\Software\Classes を明示的に指定するのが確実です。
なお、変更前には必ずバックアップを取ることを忘れずに。
参考情報源:

コメント