> For the complete documentation index, see [llms.txt](https://stablebuild.gitbook.io/ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stablebuild.gitbook.io/ja/product/sbom.md).

# ソフトウェア部品表（SBOM）

StableBuild では、どのビルドについてもソフトウェア部品表（SBOM）を生成できます。SBOM には、そのビルドが StableBuild 経由で取得した Docker イメージ、OS パッケージ、Python パッケージ、ファイルがすべて、正確なバージョンと SHA-256 ハッシュとともに記載されます。形式は [CycloneDX 1.7](https://cyclonedx.org/docs/1.7/json/) の JSON ドキュメントなので、お使いのコンプライアンスツールにそのまま読み込めます。

{% hint style="info" %}
SBOM は Enterprise プランでご利用いただけます。ご興味がある場合は、<support@stablebuild.com> までご連絡ください。
{% endhint %}

依存関係は StableBuild が配信しているため、SBOM に記録されるのは、完成したイメージからスキャナーが推測した内容ではなく、ビルドが実際にダウンロードしたものです。

### ビルドのダウンロードを記録する

ダウンロードがどのビルドのものかを StableBuild に伝えるには、ミラー URL の API キーの後ろに `--` とビルド ID（任意の文字列）を付けます。たとえば、`your-prefix.pypimirror.stablebuild.com` は `your-prefix--build-1234.pypimirror.stablebuild.com` になります。この方法はすべてのミラーで使えます。複数のミラーで同じビルド ID を使うこともできます：

{% code overflow="wrap" %}

```docker
FROM your-prefix--build-1234.dockermirror.stablebuild.com/python:3.12-slim

ARG SB_API_KEY=your-prefix--build-1234
ARG APT_PIN_DATE=2026-09-29T08:40:01Z

COPY ./sb-apt.sh /opt/sb-apt.sh
RUN bash /opt/sb-apt.sh load-apt-sources debian
RUN apt update && apt install -y curl

RUN pip install -i https://your-prefix--build-1234.pypimirror.stablebuild.com/2026-09-01/ requests==2.32.3

RUN curl -O "https://your-prefix--build-1234.httpcache.stablebuild.com/my-cache-key/https://bootstrap.pypa.io/get-pip.py"
```

{% endcode %}

それ以外のミラーの動作は変わりません。ビルド ID を付けても、ピン留め日付、キャッシュキー、キャッシュ済みのファイルはそのままです。ビルド ID を付けないダウンロードは SBOM に記録されません。

#### CI で一意のビルド ID を使う

各 SBOM がちょうど 1 つのビルドを表すように、CI の実行ごとに別のビルド ID を付けてください。Dockerfile では、ビルド引数として渡せます：

{% code overflow="wrap" %}

```docker
ARG BUILD_ID
FROM your-prefix--${BUILD_ID}.dockermirror.stablebuild.com/python:3.12-slim

ARG BUILD_ID
RUN pip install -i https://your-prefix--${BUILD_ID}.pypimirror.stablebuild.com/2026-09-01/ requests==2.32.3
```

{% endcode %}

そして、CI システムから値を設定します。GitHub Actions の例：

```yaml
- name: Build container
  run: docker build --build-arg BUILD_ID=gh-${{ github.run_id }} .
```

{% hint style="info" %}
ビルド ID はホスト名の一部になるため、使えるのは小文字の英字、数字、ハイフン（`-`）のみです。API キー、`--`、ビルド ID を合わせて 63 文字以内にしてください。
{% endhint %}

### SBOM を生成する

1. [ダッシュボード](https://dashboard.stablebuild.com)を開き、**レポート > SBOM** をクリックします。
2. 最近のビルドを選択するか、ビルド ID を入力します。
3. **SBOM を生成する** をクリックします。ブラウザが SBOM を `sbom-<ビルド ID>.cdx.json` としてダウンロードします。

<figure><img src="https://3794386053-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCnMp02imqxcXFSStjSi1%2Fuploads%2Fgit-blob-857629523077e0f1366ecf8f4449e88f7a9dd148%2Fsbom-page.png?alt=media" alt=""><figcaption><p>ビルドの SBOM を生成する</p></figcaption></figure>

### SBOM の内容

各アーティファクトは、[パッケージ URL（purl）](https://github.com/package-url/purl-spec)を持つ CycloneDX コンポーネントになります：

| ミラー           | コンポーネントタイプ  | purl の例                                                        | SHA-256 ハッシュ |
| ------------- | ----------- | -------------------------------------------------------------- | ------------ |
| Docker ミラー    | `container` | `pkg:docker/library/python@sha256:f77ac9e4…`                   | あり           |
| OS パッケージレジストリ | `library`   | `pkg:deb/ubuntu/curl@7.81.0-1?arch=amd64`、`pkg:apk/alpine/…`   | あり           |
| PyPI ミラー      | `library`   | `pkg:pypi/requests@2.32.3`                                     | あり           |
| ファイルミラー       | `file`      | `pkg:generic/get-pip.py?download_url=https%3A%2F%2Fbootstrap…` | なし           |

SBOM の抜粋の例：

{% code overflow="wrap" %}

```json
{
  "bomFormat": "CycloneDX",
  "specVersion": "1.7",
  "serialNumber": "urn:uuid:dc670615-4035-453f-8cf3-fbdbffb1328d",
  "version": 1,
  "metadata": {
    "timestamp": "2026-09-30T02:37:08.754Z",
    "properties": [
      { "name": "stablebuild:build-id", "value": "build-1234" },
      { "name": "stablebuild:coverage", "value": "Lists only the artifacts this build fetched through StableBuild." }
    ]
  },
  "components": [
    {
      "type": "container",
      "bom-ref": "pkg:docker/library/python@sha256:f77ac9e44ae96ef2c90b8053ea08c31f8be030f824196b0ae4db6d462c84e51f",
      "name": "library/python",
      "purl": "pkg:docker/library/python@sha256:f77ac9e44ae96ef2c90b8053ea08c31f8be030f824196b0ae4db6d462c84e51f",
      "hashes": [ { "alg": "SHA-256", "content": "f77ac9e44ae96ef2c90b8053ea08c31f8be030f824196b0ae4db6d462c84e51f" } ]
    },
    {
      "type": "library",
      "bom-ref": "2026-09-29T08:40:01Z/archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.81.0-1_amd64.deb",
      "name": "curl",
      "version": "7.81.0-1",
      "purl": "pkg:deb/ubuntu/curl@7.81.0-1?arch=amd64",
      "hashes": [ { "alg": "SHA-256", "content": "db4d0fbae50d3bb80754342615e242c73460dc5d59bdd41f08de19b26472d821" } ]
    },
    {
      "type": "library",
      "bom-ref": "2026-09-01/requests/requests-2.32.3-py3-none-any.whl",
      "name": "requests",
      "version": "2.32.3",
      "purl": "pkg:pypi/requests@2.32.3",
      "hashes": [ { "alg": "SHA-256", "content": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" } ]
    },
    {
      "type": "file",
      "bom-ref": "https://bootstrap.pypa.io/get-pip.py",
      "name": "get-pip.py",
      "purl": "pkg:generic/get-pip.py?download_url=https%3A%2F%2Fbootstrap.pypa.io%2Fget-pip.py"
    }
  ]
}
```

{% endcode %}
