入門解説

PURL(Package URL)とは
(OSS特定のキー)

PURL(Package URL)とは、ソフトウェアパッケージをエコシステム横断で、比較的一貫した形で識別するための表現です。

公式サイトでは、PURLを「さまざまなエコシステムやリポジトリにまたがってソフトウェアパッケージを識別・位置付けるための標準化された方法」と説明しており、typenamespacenameversionqualifierssubpath といった要素で構成されます。

サプライヤー実務での一言にすると、PURLは 「OSSを“何のパッケージか”で特定しやすくするキー」 です。
SBOMにPURLが入っていると、OSSの依存関係や脆弱性情報との突合がやりやすくなります。CycloneDXの公式ガイドでも、既知脆弱性の識別において OSSにはPURLを推奨 すると明記されています。

PURLで何が分かるのか

PURLの強みは、単なる“名前”ではなく、どのエコシステムの、どの名前空間の、どの版数のパッケージか を表しやすいことです。

たとえば npm、Maven、PyPI などで同じような名前のパッケージがあっても、typenamespace を含めて表現できるため、照合の精度が上がります。

例: pkg:npm/lodash@4.17.21
例: pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1

このためPURLは、SBOMそのものではありませんが、SBOMの中で使うと価値が出る識別子です。SPDX仕様でも、脆弱性情報の解決に役立つ外部参照として、CPEやSWIDなどと並んで PURLを含めることが推奨実務 とされています。

CPEとの違い

実務で混同しやすいのが CPE です。
CycloneDXの公式ガイドでは、OSSにはPURLを推奨し、プロプライエタリソフトや一部政府系/商用データベースに載る製品にはCPEが適する と整理しています。さらに、ハードウェア識別ではCPEが推奨される場面もあります。

つまり、ざっくり言うと次のような使い分けが現実的です。

PURL が得意

OSS中心(パッケージマネージャ依存)

CPE が得意

政府系DBや一部商用DBに載る製品 / ハードウェア

サプライヤー実務でどこに出てくる?

PURLは、主に次の場面で登場します。

  • SBOM作成: OSSコンポーネントを識別しやすくする
  • CVE突合: どのOSSパッケージかを精度高く照合する
  • OEM照会: 対象版数と根拠を整理する土台にする

ただし、CycloneDXも明記している通り、すべての脆弱性インテリジェンス源がすべての識別子をサポートするわけではありません。したがって、PURLだけで万能というより、SBOM・版数管理・必要に応じたCPE併用まで含めて考えるのが安全です。

よくある落とし穴

PURLは非常に便利ですが、“OSS特定のキー”であって、判断そのものを置き換えるものではない と理解しておくと運用が安定します。

  • typenamespace が抜けていて、同名パッケージを取り違える
  • version が曖昧で、対象版数が切れない
  • PURLがあれば自動で完全一致すると過信してしまう
  • 商用部品やハードウェアまでPURLだけで扱おうとして無理が出る

FAQ:PURLについて

Q1. PURLとは何ですか?

OSSなどのソフトウェアパッケージを、エコシステム横断で識別しやすくするための標準化された表現(URL形式)です。

Q2. PURLはSBOMそのものですか?

違います。PURLは“識別子”で、SBOMは“構成表”です。PURLはSBOMの中で使うと価値が出ます。

Q3. PURLとCPEはどう違いますか?

CycloneDXの整理では、OSSはPURL、プロプライエタリソフトや一部ハードウェア/政府系DB寄りの識別にはCPEが向いています。

Q4. PURLがあればCVE突合は十分ですか?

十分ではありません。版数管理、SBOM、必要に応じた他識別子との併用が必要です。すべてのソースがPURLを完全にサポートしているわけではありません。

SBOMの識別子やCVE突合に悩んでいませんか?

PURLやCPEの使い分け、Excel部品表から自動運用への移行など、SBOM整備・提出運用をどこから始めるか整理したい方はご相談ください。