拠点マスタ(cmn_location)の住所と階層
ServiceNow でユーザーや資産、構成アイテム(CI)を登録していると、必ず出てくるのが「どこにあるか」を表す Location(拠点) です。ユーザーの所在地、PCやサーバの設置場所、オフィスの住所。これらは個々のレコードに直接書くのではなく、cmn_location という1つの拠点マスタに集約され、各レコードはそこを参照しています。
この記事は、ServiceNow の画面操作には慣れたが、拠点情報がどのテーブルに、どんな形で溜まっているのかをこれから確認したい管理者・開発者を想定しています。PDI(Zurich / OOTB)で cmn_location を実際に開き、1行=1拠点であること、住所や緯度経度の持ち方、parent による親子の階層、そしてユーザーやCIがどう拠点を参照するのかを順に確認します。
この記事で分かること
拠点が cmn_location(Location)の1行=1拠点として溜まること
cmn_location が 独立したルート基底テーブルで、ログとは違い 更新できる通常マスタであること
拠点が持つ主なフィールド(名前・住所・緯度経度・parent・company)
parent(自己参照)で地域→国→州→市…と階層になり、full_name がそのパスを保持すること
PDI 実機の 427拠点の内訳(USA が367件)と、12種ある location_type
ユーザー(553件)・CI(901件) が location で拠点を参照していること
この記事の内容は ServiceNow の PDI(Personal Developer Instance)Zurich(ズーリッヒ)リリースの OOTB(初期設定)で確認した個人メモです。本番環境やカスタマイズ済み環境では、拠点の件数・階層・項目の使われ方が異なります。
拠点マスタ cmn_location とは
cmn_location とは、ServiceNow が扱う「拠点」を1件=1レコードで記録した住所マスタです。会社のオフィス、データセンター、フロアや部屋まで、場所と呼べるものはすべてこの1つのテーブルに集約されます。アプリナビで「Organization > Locations」を開くと見えるのが、この cmn_location です。
下の画面は、PDI(Zurich / OOTB)の cmn_location を full_name(拠点のフルパス)順に並べたものです。Apac/Japan/Tokyo/... のように、拠点が地域から住所まで階層的に並んでいるのが分かります。

PDI(Zurich / OOTB)の cmn_location には、427件の拠点が登録されていました。これはデモ用のサンプルデータで、後述のとおり大半が米国(USA)の拠点です。
cmn_location はどんなテーブルか
名前に cmn_(common)が付いていますが、継承元を確認するとシンプルでした。今回の PDI(Zurich / OOTB)では、cmn_location の super_class(継承元)は空で、task も cmdb も継承しない 独立したルート基底テーブルです。場所という共通の概念を、業務テーブルとは独立して受け止める器になっています。
ここで一点、以前の記事で扱ったシステムログ syslog との違いに触れておきます。syslog は追記専用(append-only)で更新されないログでしたが、cmn_location は sys_updated_on / sys_updated_by / sys_mod_count を持つ通常のマスタです。拠点は引っ越しや改称で変わるので、当然ながら 編集・更新できる設計になっています。

1拠点が持つフィールドは全部で33項目あります。中心になるのは 名前・住所・座標・parent・company で、主なものを次にまとめます。

フィールド定義は次のURLで確認できます(先頭の <YourInstance> は自分のインスタンスに置き換えてください)。
https://<YourInstance>/sys_dictionary_list.do?sysparm_query=name=cmn_location^elementISNOTEMPTY
parent で拠点が階層になる
cmn_location でいちばん重要なのが parent フィールドです。これは cmn_location 自身への参照(自己参照) で、ある拠点の「親拠点」を指します。これによって、地域 → 国 → 州 → 市 → 住所、というように拠点を入れ子の階層で表現できます。

PDI 実機で数えると、全427件のうち421件が parent を持つ子拠点で、parent を持たないルート拠点は6件でした。ルートは Americas / Emea / Apac の3地域に加え、親を持たない単独の米国住所が混在しています。
そして各拠点には full_name という読み取り専用のフィールドがあり、ここに 親をたどったフルパスが / 区切りで自動的に入ります。たとえば東京の拠点なら Apac/Japan/Tokyo/2-10-1 Yurakucho, Chiyoda-ku, Tokyo のようになります。一覧で full_name を見るだけで、その拠点が階層のどこにあるかが一目で分かる仕組みです。
なお、拠点の「粒度」を表す cmn_location_type という項目もあり、選択肢は12種類用意されています。

ただし注意したいのは、今回の OOTB データでは cmn_location_type は全件未設定(0件)だった点です。階層は parent で作られており、type は「使えるが初期データでは埋まっていない」項目でした(運用で粒度を明示したいときに使います)。
国・地域の広がりと座標
拠点には住所(street / city / state / zip / country)に加えて、latitude(緯度)・longitude(経度)の座標が入ります。PDI では 421件に座標が登録済みで、地図表示やジオロケーション機能で使えるようになっていました。
国の分布を見ると、デモデータの性格がよく分かります。全427件のうち367件が USAで、残りを Australia・Germany・Canada・China・Japan などが少数ずつ占めています(国の値は19種類)。下の画面は、cmn_location を country でグループ化したものです。

ちなみに country は選択肢付きですが内部的には文字列フィールドのため、選択肢にない国名(Brasil など)も入っています。一方 time_zone は全427件で空でした。座標は入っていてもタイムゾーンは OOTB では未設定、という温度差も実機ならではの発見です。
ユーザーや CI から参照される拠点
cmn_location が「マスタ」と呼べるのは、他の多くのテーブルから参照されているからです。各レコードに住所を直接書くのではなく、「この拠点を見て」と cmn_location を指すことで、住所を一元管理できます。

PDI 実機で参照状況を数えると、はっきりした数字が出ました。

ユーザー(sys_user)は 634人中553人(約87%)が location を設定済み、構成アイテム(cmdb_ci)は 901件、資産(alm_hardware)も location で拠点を指していました。つまり「誰がどこにいるか」「どの機器がどこにあるか」は、すべて cmn_location という1つのマスタに集約されているわけです。
実際の拠点レコードをフォームで開くと、住所・座標・parent・company がどう入っているか確認できます。下は東京の拠点で、緯度経度(35.674989 / 139.764365)と所属会社(ACME Japan)、親拠点(Tokyo)が入っているのが分かります。

なお、拠点を参照する側のフィールドがどう働くか(参照修飾子など)は「ServiceNow の参照フィールドと参照修飾子を実機で読み解く」も参考になります。location は典型的な reference 型フィールドの集まりです。
実機で確認するときに見るべきURL
最後に、今回見た画面を自分のインスタンスで開くためのURLをまとめます(<YourInstance> は置き換えてください)。
# 拠点をフルパス順に一覧
https://<YourInstance>/cmn_location_list.do?sysparm_query=ORDERBYfull_name
# 国でグループ化
https://<YourInstance>/cmn_location_list.do?sysparm_query=GROUPBYcountry
# ルート拠点(親なし)だけ絞る
https://<YourInstance>/cmn_location_list.do?sysparm_query=parentISEMPTY
# cmn_location のフィールド定義
https://<YourInstance>/sys_dictionary_list.do?sysparm_query=name=cmn_location^elementISNOTEMPTYまとめ
拠点は cmn_location(Location)の1行=1拠点として溜まる。PDI では 427件。
cmn_location は 独立したルート基底テーブルで、ログと違い 更新できる通常マスタ。中心は name / 住所 / 座標 / parent / company。
parent(自己参照)で地域→国→州→市…と階層になり、full_name がそのパスを自動で保持する。ルートは6件、子拠点は421件。
国は USA が367件で大多数。座標は421件登録済みだが、time_zone と cmn_location_type は OOTB では未設定。
ユーザー(553件)・CI(901件)・資産(901件) が location で cmn_location を参照する。住所を一元管理する基礎マスタ。
拠点マスタが分かると、ユーザー・グループ・ロール・CMDB の cmdb_ci・資産 alm_assetが、「人・モノ → どこにあるか(cmn_location)」という形でつながって見えてきます。
関連記事
ServiceNowのデータはどこに溜まっていつ消える? 添付・履歴・ログ・アーカイブを実機で確認 — 拠点マスタもレコードとして蓄積される1つのデータ。添付・履歴・ログを含めてServiceNow全体でデータがどこに溜まりいつ消えるかを確認できる。