ServiceNowには画像を保存できる主な場所として、画像テーブル(db_image)と添付ファイル テーブル(sys_attachment)の2つが存在します。
どちらも画像ファイルを保持するという点では同じですが、様々な相違点があります。
今回はこの2つのテーブルの概要と違い、おおまかな使い分けの基準について解説します。
db_imageとsys_attachmentの概要
まずは、それぞれのテーブルの概要を解説します。
db_image(画像)テーブル
db_imageテーブルは、システム全体やアプリケーションの「静的リソース(パーツ)」として利用する画像を保存するためのテーブルです。
-
用途: ポータルのロゴ、アイコン、UI上に埋め込む固定画像など。
-
特徴:
- 画像を1レコードとして保持
- 主にUI表示用(アイコン・ロゴなど)
- 画像データはdb_imageレコード内に保存
- アップロードした画像には固有のURLが割り当てられ、HTMLやCSSから呼び出せる
- 基本的にアクセス制御がなく、公開用の画像である
- 更新セットに含まれる
sys_attachment(添付ファイル)テーブル
sys_attachmentは、特定の「レコード」に紐づく、動的な添付ファイルを保存するためのテーブルです。
-
用途: インシデントに添付されたエラー画面のキャプチャ、ナレッジ記事に挿入された図解、ユーザーのプロフィール写真など。
-
特徴:
- ファイルをレコードに紐づけて保存
- ファイルの実体データは
sys_attachment_docに保存 - UIの「添付ファイル」機能で添付されたファイルの格納先
- 紐づいている親レコードのアクセス制御(ACL)のルールに準拠して、閲覧可否を判定する
- 更新セットに含まれないため、別途xml等での移送が必要になる
db_imageとsys_attachmentの違い
上記に示した2つのテーブルの違いを表にまとめました。
| 比較項目 | db_image (画像) | sys_attachment (添付ファイル) |
| 主な目的 | UIデザイン・静的システムリソース | レコードへの添付ファイル |
| 紐づき先 | なし(独立している) | 特定のレコードに紐づく |
| 呼び出し方 | URLを指定して直接参照 | レコード経由 |
| アクセス制御 | 基本的にACLによる制御対象ではない | 紐づいているレコードに基づいて判定 |
| 更新セット | 含まれる | 含まれない |
3. 使い分けシナリオ
db_imageを使うべきケース
-
Service Portalのカスタマイズ: サイトのロゴ、フッターのアイコン、デザイン用の背景画像など。
-
カスタムUI(HTML/CSS/Widget)での利用: HTMLやCSSからURLを指定して直接参照したい場合。
-
全ユーザーに共通して見せたい固定の画像: システムのブランディングに関わるもの。
sys_attachmentを使うべきケース
-
ナレッジベース: 記事ごとに異なる手順のスクリーンショットや説明画像(リッチテキストエディタに画像をドラッグ&ドロップすると、自動的にここに保存されます)。
-
ユーザープロファイルのアイコン: ユーザー(sys_user)ごとに異なる動的な画像。
-
各種申請やタスクの添付ファイル: ユーザーがフォームからアップロードするファイル(PDF、Excel、画像などすべて)。
まとめ
db_imageテーブルとsys_attachmentテーブルはどちらも画像を保存できますが、用途は大きく異なります。
システム全体で共通して利用するロゴやアイコンなどの静的な画像はdb_image、レコードごとに異なる添付ファイルや、ユーザーがアップロードする画像・資料はsys_attachmentを利用するのが基本です。
是非参考にしてみてください。
