Windowsのレジストリを調べていると、Word.Document.6 や Excel.Application.15 といった文字列を目にすることがあります。
これが「ProgID(プログラム識別子)」です。
COM(Component Object Model)やファイルの関連付けの仕組みを理解する上で欠かせない概念ですが、初めて見ると何のことか分かりにくいのが正直なところ。
この記事では、ProgIDとは何か、どこで使われているか、レジストリ上でどう確認するかを、初心者にも分かるよう丁寧に解説します。
ProgIDとは
ProgID(Program Identifier、プログラム識別子) は、WindowsのCOMコンポーネントを識別するためのレジストリエントリです。
「Programmatic Identifier(プログラマティック識別子)」の略で、日本語では「プログラム識別子」とも呼ばれます。
Windowsのレジストリ上の HKEY_CLASSES_ROOT 配下に登録され、COMクラスやファイルの種類を人間が読みやすい文字列で識別するために使います。
CLSIDとの違い
COMシステム内部では、コンポーネントを CLSID(Class ID)という世界で一意のGUID(Globally Unique Identifier)で管理しています。
CLSIDは {00000514-0000-0010-8000-00AA006D2EA4} のような長い16進数の文字列で、プログラマーが手入力したり覚えたりするのは困難です。
そこで登場するのがProgIDです。
ProgIDはCLSIDに対して「人間が読みやすいニックネーム」を提供します。ADODB.Connection や Excel.Application のように、どのコンポーネントを指しているか一目で分かる文字列が使えるようになります。
| 比較項目 | CLSID | ProgID |
|---|---|---|
| 形式 | GUIDの16進数文字列 | Program.Component.Version 形式の文字列 |
| 一意性 | グローバルに一意(衝突なし) | 一意性は保証されない |
| 例 | {00000514-0000-0010-8000-00AA006D2EA4} | ADODB.Connection |
| 用途 | COM内部での識別 | プログラミング時の人間向け識別子 |
ProgIDはグローバルに一意であることが保証されていないため、名前の競合が管理できる場面でのみ使用します(Microsoft Learn「ProgID キー」より)。
ProgIDの形式と命名ルール
ProgIDの書式は以下の通りです(Microsoft Learn「プログラム識別子」より)。
<Program>.<Component>.<Version>
ピリオドで区切られ、スペースは使いません。
バージョン番号は省略可能ですが、強く推奨されています。
命名ルール
- 39文字以内であること
- ピリオド以外の句読点(アンダースコア・スラッシュを含む)は使用不可
- 数字から始まらないこと
- OLE 1アプリケーションのクラス名と重複しないこと
具体例
| ProgID | 意味 |
|---|---|
Word.Document.6 | Microsoft Word バージョン6のドキュメント |
Excel.Application.15 | Microsoft Excel バージョン15(Office 2013)のアプリケーション |
Excel.Application | Excelアプリケーション(バージョン非依存) |
ADODB.Connection | ADO(ActiveX Data Objects)のDB接続コンポーネント |
バージョン付きと非バージョンのProgID
ProgIDには2種類あります。
バージョン付きProgID(Versioned ProgID)
Excel.Application.15
Word.Document.6
バージョンを末尾に付けた形式です。
特定のバージョンのコンポーネントを正確に指定したいときに使います。
同じPC上に複数バージョンがインストールされている場合は、バージョン付きで指定することで意図したバージョンを確実に呼び出せます。
バージョン非依存ProgID(Version-Independent ProgID)
Excel.Application
Word.Document
バージョン番号を省略した形式です。
レジストリ上の CurVer(Current Version)サブキーが、その時点でのバージョン付きProgIDを指し示す仕組みになっています。
最新バージョンを自動的に使いたいときに便利です。
ProgIDがレジストリに登録される場所
ProgIDは HKEY_CLASSES_ROOT 直下にキーとして登録されます。
レジストリエディター(regedit)での確認方法を参考に確認できます。
基本的なキー構造
HKEY_CLASSES_ROOT
└─ Excel.Application.15 ← ProgIDキー
(既定) = "Microsoft Excel Application"
└─ CLSID
(既定) = {00024500-0000-0000-C000-000000000046}
ProgIDキーの主なサブキー:
| サブキー | 内容 |
|---|---|
(既定) | 人間向けの表示名(フレンドリーネーム) |
CLSID | 対応するCLSIDのGUID |
CurVer | バージョン非依存ProgIDが参照する現在のバージョン付きProgID |
拡張子からProgIDへの参照
ファイルの関連付けでは、拡張子キーの既定値にProgIDが設定されています。
HKEY_CLASSES_ROOT
└─ .docx ← 拡張子キー
(既定) = Word.Document.12 ← ProgIDを参照
Windowsのシェルは「拡張子 → ProgID → 実行ファイル」という順でたどってファイルを開くアプリを決定します。
ファイルの「常にこのアプリで開く」設定の裏では、このProgIDとの関連付けが書き換えられています。
ProgIDの2つの主な用途
1. COMオブジェクトの作成(プログラミングでの使用)
VBAやVBScript、PowerShellなどでCOMオブジェクトを作成するとき、CLSIDの代わりにProgIDを使います。
VBA(ExcelからWordを操作する例):
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
PowerShell(ExcelのCOMオブジェクトを作成する例):
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
CLSIDの長い文字列を書く必要がなく、可読性が大きく向上します。
2. ファイルの関連付け(シェルの拡張)
Windowsエクスプローラーがファイルをダブルクリックしたときに起動するアプリを決定するために使います。
アプリのインストーラーがレジストリにProgIDを登録することで、「.xlsxファイルはExcelで開く」といった関連付けが実現されます。
Windowsレジストリの主要キー一覧では、関連付けに関するキーの構造も解説しています。
ProgIDとCLSIDを相互変換する関数
WindowsのAPIには、ProgIDとCLSIDを相互に変換する関数が用意されています。
| 関数名 | 用途 |
|---|---|
CLSIDFromProgID | ProgIDを指定してCLSIDを取得 |
ProgIDFromCLSID | CLSIDを指定してProgIDを取得 |
これらのAPIはレジストリの HKEY_CLASSES_ROOT を参照して変換を行います(Microsoft Learn「ProgIDFromCLSID function」より)。
レジストリでProgIDを確認する方法
Windowsキー + Rを押してregeditと入力し、レジストリエディターを起動するHKEY_CLASSES_ROOTを展開する- 「.(ドット)」から始まらないキーがProgIDキー
- 調べたいProgID名(例:
Excel.Application.15)を探してクリックする CLSIDサブキーを確認すると、対応するGUIDが表示される
ProgIDを編集・変更する場合は、regファイルの編集方法を参考に、必ずバックアップを取った上で行ってください。
まとめ
ProgIDは、WindowsのCOMコンポーネントを「人間が読める名前」で識別するためのレジストリエントリです。
ポイントをまとめると以下の3点です。
- 形式は
Program.Component.Version(例:Excel.Application.15)、39文字以内でピリオド以外の句読点は不可 - CLSIDへのエイリアスとして機能し、プログラムからCOMオブジェクトを作成したり、ファイルの関連付けを管理したりするために使われる
- グローバルな一意性は保証されていないため、名前の競合に注意が必要
レジストリ全体の構造についてはWindowsレジストリとは何かの解説記事もあわせてご覧ください。
参考情報源:

コメント