COM とは何か - Windows COM の設計が今でも美しい理由
· 小村 豪 · COM, ActiveX, Windows開発
COMとは?
COM(Component Object Model)とは、Windows上でコンポーネント同士がやりとりするための「バイナリ契約」 です。言語やコンパイラの違いを超えて、インターフェースという厳密な契約で通信する仕組みで、「実装ではなく、契約に対してプログラミングする」という設計思想が根底にあります。
COMの3つの重要な要素
1. インターフェース中心の設計
COMでは「実装より契約が先」。オブジェクトの内部実装を知らなくても、公開されたインターフェースさえ知っていれば利用できます。
2. GUID(CLSID / IID)による識別
すべてのコンポーネントとインターフェースには世界で一意なID(GUID) が付与されるので、名前の衝突がそもそも起きません。
3. IUnknown
すべてのCOMインターフェースが継承する基本インターフェース。以下の3つの機能を提供します。
| メソッド | 役割 |
|---|---|
QueryInterface |
別のインターフェースを持っているか尋ねる |
AddRef |
参照カウントを増やす |
Release |
参照カウントを減らす(0になったら自分を破棄) |
COMの4つの強み
1. バイナリ互換性
一度ビルドしたコンポーネントは、プログラミング言語やランタイムを問わず再利用できます。C++で作ったCOMコンポーネントをC#やPythonから呼び出す、といったことが普通にできるわけです。
2. インターフェース分離
実装を完全に隠して契約だけを公開するため、内部実装を自由に変更しても呼び出し側には影響しません。
3. バージョン共存
後方互換性を保ったまま機能追加するために、新しいインターフェースを追加していく設計が基本です。古いインターフェースを変更せずに新機能を提供できます。
4. プロセス境界を越えた再利用
Out-of-proc COM(EXEサーバー)を使えば、別プロセスの機能を安全に呼び出せます。ただしサーバープロセスがクラッシュすると、呼び出し側には RPC_E_DISCONNECTED や RPC_S_SERVER_UNAVAILABLE などの失敗として返るため、再起動や再接続の復旧処理は必要です。
COMは今でも現役
「古い技術」と思われがちですが、COMはWindowsの中核で今も使われ続けている仕組みです。
COMが使われている場所
- エクスプローラー拡張(右クリックメニュー、プレビュー表示)
- Office自動化(ExcelやWordの外部制御)
- .NETとの相互運用(COM Interop)
- ActiveXを含む既存システム
- DirectX、Windows Shell API など多数のWindows API
「自分には関係ない」と思っていても、Windows開発をする限りCOMはどこかに登場します。
まとめ
COMの美しさは 「言語・プロセス・実装からの独立」 にあると思っています。言語に中立なインターフェース設計、GUIDによる一意識別とバージョン管理、IUnknownによる参照カウント、そしてプロセス間通信を透過的に扱える仕組み。どれも、最新のコンポーネント指向開発(REST APIの契約、マイクロサービスのインターフェース分離など)にそのまま通じる普遍的な考え方です。
関連する記事
同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。
Windowsアプリ 外注・受託開発を依頼する前に整理したいこと
Windowsアプリの外注・受託開発を依頼する前に、既存ソフト改修、装置連携、COM/ActiveX、配布・更新、保守の整理ポイントを解説します。
COM/OCX/ActiveX開発でハマる登録とbitnessの罠
COM、OCX、ActiveX開発でハマりやすい32bit/64bit、Visual Studio 2022、regsvr32/Regasm、管理者権限、HKCR、STA/MTAを実務目線で整理します。
COM / ActiveX / OCX とは何か - 違いと関係をまとめて解説
COMとは何か、ActiveXとは何か、OCXとは何かを、違いと関係、OLEとのつながり、どこで使われるのか、今どう捉えるべきかまで実務目線で整理します。
ActiveX / OCX を今どう扱うか - 残す・包む・置き換える判断表
ActiveX / OCX を見つけたときに、残す・包む・置き換えるのどれを選ぶべきかを、32bit / 64bit、登録、ブラウザ依存、ベンダー保守まで含めて整理します。
開発者の異常な愛情、または私は如何にして心配するのをやめてWindowsを愛するようになったか
Windowsは面倒くさい。けれど、その面倒くささは、現実の業務を背負ってきたOSだからこその面倒くささでもある。
関連トピック
このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。
Windows技術トピック
Windows 開発、不具合調査、既存資産活用の技術トピックをまとめた入口です。
ActiveX / 移行テーマ
COM / ActiveX / OCX を残すか、包むか、置き換えるかを整理するトピックです。
このテーマがつながるサービス
この記事は次のサービスページにつながります。近い入口からご覧ください。
既存資産活用・移行支援
COM の設計や互換性を理解することは、既存 Windows 資産をどう活かすかを考える入口として相性がよいです。
技術相談・設計レビュー
IUnknown、GUID、境界設計の見方を踏まえて方針整理したい場合は、技術相談・設計レビューにつながります。
著者プロフィール
記事の著者プロフィールページです。
小村 豪
合同会社小村ソフト 代表
Windows ソフト開発、技術相談、不具合調査を中心に、既存資産が残る案件や原因が見えにくい障害調査に強みがあります。
公開リンク