
左メニューもテーブルでできている(sys_app_module)
ServiceNow にログインすると、まず目に入るのが画面左の アプリケーションナビゲーター(左メニュー、Next Experience では「All」から開くメニュー)です。「Incident」「Configuration」といった見出しがあり、その下に「Create Incident」「All Incidents」といった項目がぶら下がっています。この見慣れたメニューが、実はテーブルのデータから組み立てられていることはあまり知られていません。
この記事は、ServiceNow を毎日触っているが、左メニューがどんなテーブルでどんな形で定義されているのかを確認したい管理者・開発者を想定しています。PDI(Zurich / OOTB)で実際にテーブルを開き、メニューが「見出し(sys_app_application)+項目(sys_app_module)」の親子で出来ていることを確認します。あわせて1項目の挙動を決める link_type、並び順の order、誰に見えるかを決める roles も見ます。
この記事で分かること
左メニューは見出し=sys_app_application(Application menu)と項目=sys_app_module(Module)の親子で出来ていること
親子は sys_app_module の application(→ sys_app_application 参照)でつながること
1項目の挙動は link_type で決まること(List of Records / New Record / Single Record / URL / Separator など)。PDI 実機では2705件中1637件(約61%)が List of Records だったこと
roles が空なら全員に見え、ロールを指定するとその保有者だけに見えること(見出し単位・項目単位の両方で効く)
見出し「Incident」は roles=itil、「Self-Service」は roles 空、という実例
この記事の内容は ServiceNow の PDI(Personal Developer Instance)Zurich(ズーリッヒ)リリースの OOTB(初期設定)で確認した個人メモです。本番環境やカスタマイズ済み環境では、フィールド・選択肢・件数が異なる場合があります。
左メニューは「見出し」と「項目」の親子
アプリケーションナビゲーターは、2つのテーブルの親子関係で出来ています。
見出し … sys_app_application(label=Application menu)。Incident・Configuration といった太字の見出しにあたります。PDI 実機では203件ありました。
項目 … sys_app_module(label=Module)。見出しの下にぶら下がる Create Incident・All Incidents などのクリックできる行です。PDI 実機では2705件ありました。
この2つは、sys_app_module の application フィールド(Reference → sys_app_application)でつながっています。つまり「この項目はどの見出しに属するか」を application が指しています。

下の実画面は、項目(sys_app_module)を1件開いたフォームです。Title(Incidents Assigned to Me)、Application menu(Incident)、Order(200)が並びます。Visibility タブには Roles(itil)が見えます。link_type は「Link Type」タブで設定します。「どの見出しの・どんな挙動の・誰に見える項目か」が1レコードで決まることが分かります。

項目(sys_app_module)の主なフィールド
項目1件の挙動を決めるのは、次のフィールドです。

application … 親の見出し。
link_type … クリックしたときの挙動(後述)。
name … 対象テーブル(例: incident)。
order … 見出し内の並び順。小さいほど上に出ます。
roles … この項目を見られるロール。
filter … 一覧(List of Records)の絞り込み条件。「Open Incidents」のような既定フィルタはここで定義します。
なお、タスクでよく混同される query(Arguments) は、URL や Script など一部の link_type に渡す引数で、一覧の絞り込み(filter)とは別物です。
link_type:クリックしたときの挙動が変わる
同じ「項目」でも、link_type によって挙動はまったく変わります。

List of Records(LIST) … name のテーブルの一覧を開く。最も一般的。
New Record(NEW) … 新規作成フォームを開く。
Single Record(DETAIL) … 特定の1レコードを開く(例: My Profile)。
URL (from Arguments:)(DIRECT) … query に書いた URL へ遷移。
Separator(SEPARATOR) … クリックできない区切り線。
PDI 実機で link_type を集計すると、分布は次の通りでした。


2705件中1637件(約61%)が List of Records でした。左メニューの正体は「ほとんどが、どこかのテーブルの一覧を開くショートカット」だと言えます。区切り線(Separator)が354件もあるのは、メニューを見やすくグループ分けするためです。
roles:誰にどの項目が見えるか
ナビゲーターは「全員に同じメニューが見える」わけではありません。roles が表示を絞っています。

ルールはシンプルです。roles が空なら制限なし(ログインユーザー全員に見える)、ロールを指定すると、そのいずれかを持つ人だけに見える。これは見出し(application)にも項目(module)にも効きます。
PDI 実機で見比べると分かりやすい例がありました。
見出し Self-Service は roles が空。だから全ユーザーに見えます。ただしその配下の My Approvals という項目だけは roles=approver_user。承認者ロールを持つ人にしか出ません。見出しは全員でも、項目単位でさらに絞れるわけです。
見出し Incident は roles=itil。itil ロールがないユーザーには、この見出しごと左メニューに現れません。

「ロールを付けたのにメニューが出ない/消えない」という場面では、見出しと項目の両方の roles を確認するのが近道です。ロールそのものの仕組みは ユーザー・グループ・ロール(sys_user_has_role) で詳しく確認できます。
実例:Incident メニューの中身
最後に、見出し「Incident」(roles=itil)配下のモジュールを実機で並べてみます。


Create Incident は URL (from Arguments:) で新規起票画面へ。
Incidents Assigned to Me / Open Incidents / All Incidents はすべて List of Records。同じ incident テーブルを filter 違いで見せている。
6件すべて roles=itil。
つまり「Incident」という1つの見出しは、同じ incident テーブルへの入口を、用途別に order で並べたものだと分かります。203件の見出しと2705件の項目すべてが、この同じ仕組みで出来ています。フォーム下部に出る関連リストの仕組みは 関連リストは一覧の列とは別テーブル(sys_ui_related_list) で確認できます。
実機で確認するときに見るべきURL
最後に、今回見た画面を自分のインスタンスで開くためのURLをまとめます(<YourInstance> は置き換えてください)。
# 見出し(Application menu)の一覧
https://<YourInstance>/sys_app_application_list.do?sysparm_query=ORDERBYorder
# 項目(Module)を link_type でグループ化
https://<YourInstance>/sys_app_module_list.do?sysparm_query=GROUPBYlink_type
# sys_app_module のフィールド定義
https://<YourInstance>/sys_dictionary_list.do?sysparm_query=name=sys_app_module^elementISNOTEMPTY公式の説明は ServiceNow ドキュメントの Application navigator(Zurich) にもあります。
まとめ
左メニューは 見出し(sys_app_application・203件)+項目(sys_app_module・2705件) の親子で出来ている。
親子は sys_app_module の application 参照でつながり、項目の name が対象テーブルを指す。
1項目の挙動は link_type で決まり、約61%が List of Records(一覧を開くショートカット)。
order で並び順、roles で表示権限が決まる。roles 空=全員、指定=該当ロールのみ。見出し・項目の両方で効く。
「メニューが出ない」は、見出しと項目の roles を両方見れば原因にたどり着ける。
左メニューの仕組みが分かると、アプリとスコープ(sys_app / sys_scope)・ユーザー・グループ・ロール・関連リストは一覧の列とは別テーブル(sys_ui_related_list)・権限を決める ACL という「アプリ・権限・画面」のつながりが、ひとつの地図として見えてきます。
関連記事
ServiceNow 画面・フォーム完全ガイド:どこを直せば見た目が変わるのか — 左メニュー以外に、フォームや一覧など画面全体をどこで直すかを整理した記事です