メインコンテンツへスキップ

拠点マスタ(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のPDI(Personal Developer Instance)を実機で観察して、Noteに記事を書いています 実装・運用・教育の現場視点で淡々と記録中です リクエストがあればその記事も書きます 個人の観察日記です

    あなたへのおすすめ