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

ServiceNowでバックグラウンドスクリプトを使用して設計書を作る方法


    このシリーズは3本構成です

    1. ServiceNowでバックグラウンドスクリプトを使用して設計書を作る方法(本記事・無料)… 調査セットの使い方を画面つきで解説
    2. ServiceNowの設計書をバックグラウンドスクリプトを使用して作ったレポートの例(¥100) … 出来上がった設計書の実物
    3. ServiceNowの設計書ネタ収集スクリプト(¥300) … 調査セット2ファイルの全文

    「incident の設計書を作ってほしい」と頼まれたとき、最初にやるのは材料集めです。テーブル定義を開いて項目を数え、フォームのスクリーンショットを撮り、ビジネスルールのタブで件数を控え、通知の一覧をExcelに写す。半日かけて集め終わる頃には、どこまで写したか分からなくなっています。

    この記事では、その材料集めをバックグラウンドスクリプト1本に任せる方法を手順で説明します。Scripts - Background に貼って実行すると、対象に応じて26〜31章がまとめて出ます(incident なら26章)。テーブル定義・フォーム構成・通知・ビジネスルール・ACL・SLA・Flow。これらがパイプ区切りの表として並びます。あとは出力を生成AIに渡せば、設計書の原稿になります。

    使うスクリプトは Design Doc Collector v1.0。読み取り専用で、更新処理は実装していません。PDI(Zurich)で3テーマ分を実際に流して確かめた手順を書きます。

    この記事で分かること

    • 材料集めから設計書の原稿までの4ステップ

    • 1回の実行で何が取れるか(incident で26章・782行の実測)

    • テーブル・カタログアイテム・ポータルの3種類を1本で切り替えるやり方

    • 集めた章を設計書のどの章に割り当てるか

    • ACL・Flowが内訳と有効フラグつきで出るので、書くべき数字がすぐ決まること

    この記事の内容は ServiceNow の PDI(Personal Developer Instance)Zurich(ズーリッヒ)リリースで実機確認した個人メモです。件数はこの環境の実測値であり、皆さんの環境とは一致しません。本番環境での実行は、読み取り専用とはいえメタデータへの集計クエリが走るため、業務時間外を推奨します。


    全体の手順

    使うファイルは2つだけです。調査用ベーススクリプトとレポート作成プロンプト。この2つを手元に置き、生成AIとやり取りしながら進めます。


    画像

    ベーススクリプトを直接編集する必要はありません。生成AIに添付して「何の設計書を作りたいか」を伝えると、要求に合わせた専用版を書いてくれます。ベーススクリプトは、AIに ServiceNow のメタデータ構造と出力形式を教えるための土台という位置づけです。

    手順は4つです。

    1. 調査セットを手元に置く(2ファイル)

    2. 作りたい設計書を生成AIに伝える(ベーススクリプトを添付)

    3. 出来上がった調査スクリプトを実行する(Scripts - Background)

    4. 出力とレポート作成プロンプトから設計書を作る


    手順1:調査セットを手元に置く

    用意するのは次の2ファイルです。


    画像

    01.調査用ベーススクリプト.txt は、ServiceNow のメタデータを集める読み取り専用スクリプトです。テーブル定義・フィールド・フォーム構成・通知・ビジネスルール・ACL・SLA・Flow など28章分の収集処理と、パイプ区切りで列を揃える出力形式を持っています。

    02.レポート作成プロンプト.txt は、集めた出力を設計書の体裁に整えるための指示文です。章立て・図表のキャプション規則・数値の扱いを指定しています。

    この2つをフォルダにまとめておけば、以降は同じ手順を繰り返すだけです。案件ごとにスクリプトを書き起こす必要はありません。


    手順2:作りたい設計書を生成AIに伝える

    ベーススクリプトを添付して、日本語で要求を書きます。


    画像

    指定するのは対象だけで構いません。「incident テーブルの設計書」「ポータル sp の画面設計書」「カタログアイテム『Apple iPhone 13 pro』の設計書」といった伝え方で通ります。

    数分待つと、専用版のスクリプトが返ってきます。


    画像

    この回答が示すとおり、AIは対象に合わせて次を行います。

    • パラメータの設定 … TABLE_NAME = 'sc_cat_item'、CATALOG_ITEM_NAME = 'Apple iPhone 13 pro'、TARGET_MODE = 'catalog_item'

    • 不足している処理の追加 … この例では、sys_id を手で調べなくて済むよう「アイテム名から自動特定する」処理が足されています。完全一致を優先し、無ければ部分一致で候補を探し、同名が複数あれば候補一覧を出して停止する、という作りです

    • ベースの制約を維持 … 読み取り専用であること、区切り表形式で出すこと、取得件数の上限を置くことは、そのまま引き継がれます

    sys_id をコピーして貼る手間が消えるのは、実務では効きます。「Apple iPhone 13 pro の設計書」と言えば済むようになります。


    手順3:出来上がった調査スクリプトを実行する

    受け取ったコードを Scripts - Background(sys.scripts.do)の入力欄に全文貼り、Run script を押します。実行前にスコープが global になっていることを確認してください。


    画像

    数秒で結果が返ります。右側が出力です。価格・納期・ポータル表示フラグ・ロール・所有者・掲載カタログといった設定値が、そのまま表として並びます。

    エラーが出たら、その内容を生成AIに貼り付けてください。 修正版が返ってきます。ServiceNow はリリースや導入済みプラグインによってテーブル構成が変わるため、環境固有の調整が要る場面もあります。その往復で吸収できます。

    出力を使うときは、行頭の *** Script: を一括置換で消してください。これは gs.print がプラットフォーム側で付ける接頭辞で、スクリプトからは外せません。


    手順4:出力とプロンプトから設計書を作る

    実行結果を貼り、レポート作成プロンプトを添付して指示します。


    画像

    「調査結果をチェックしてください。レポート作成プロンプトに従ってレポートにしてください」。この一文で、表紙・目次・図表つきの設計書が返ってきます。

    プロンプト側で指定しているのは次のあたりです。

    • 章・節・項の構成(基本方針 → 概要 → 詳細 → 参照)

    • 図表の番号付けと、表は上・図は下にキャプションを置く規則

    • ワークフローは必ず記載する

    • 非IT の読者にも通じる説明を先に置き、そのあと技術的な詳細を書く

    • 数値は引用可能なものに限定する

    最後の1行が効きます。これを入れておかないと、生成AIは出力に無い数字を補完してきます。設計書としては致命的な性質なので、「渡した出力にある数字だけを使う」ことを明示しておきましょう。

    出力が大きいときは、章ごとに分けて渡したほうが後半が薄くなりません。特にフォーム画面イメージはアスキーアートで行数を食うので、単独で渡すと読み落としが減ります。

    実際に起こした設計書は、表紙・目次つきで全7章になりました。フォームの画面イメージ、状態遷移図、優先度マトリクス、SLA一覧まで含んでいます。出来上がった設計書そのものは、レポート例編(¥100)に全ページ掲載しています。

    設定値と運用ルールを混ぜない

    1つだけ注意があります。出力から機械的に決まらない部分は、生成AIに書かせないほうがよいという点です。

    たとえば優先度の対応表は dl_u_priority から取れます。しかし「どういうときに影響度をHighと判断するか」は、設定値のどこにも書かれていません。組織が決めることだからです。状態ごとの担当や、滞留とみなす日数も同じです。

    プロンプトに「設定値から決まらない運用ルールは【要決定】と明示せよ」と足しておくと、埋めるべき箇所がはっきりします。設定の写しである部分と、これから決める部分を分けておくと、レビューで揉めません。


    3種類の設計書を1つのセットで作る

    現場で頼まれる設計書は1種類ではありません。ベーススクリプトは3つの調査モードを持っているため、伝える要求を変えるだけで対象が切り替わります。


    画像

    業務テーブル(incident、change_request、problem など)では、テーブル定義からフォーム構成・通知・ビジネスルール・ACL・SLA・Flow までが揃います。

    カタログアイテムでは、上記に加えて申請画面の項目と申請後の流れが出ます。変数の型と必須の別、カタログUIポリシーによる出し分け、フルフィルメントの担い手が Classic Workflow か Flow か。この4点が揃うと、申請から完了までの説明が書けます。

    Service Portal では、ページとウィジェットの対応が取れます。画面は sp_portal → sp_page → sp_container → sp_row → sp_column → sp_instance → sp_widget という6段の入れ子で構成されます。ただし設計書に要るのは「どのページにどのウィジェットが載るか」だけなので、ページ単位で畳んで1行にまとめてあります。

    どのモードでも出力形式は同じパイプ区切りの表です。レポート作成プロンプトも共通なので、渡し方を1度覚えれば対象が変わっても手順は変わりません。


    1回の実行で取れるもの

    出力はパイプ区切りの表形式テキストです。章ごとに ########## の見出しが入ります。


    画像

    incident を対象にした実測は782行・3.3秒でした。カタログアイテムが509行・1.9秒、ポータルが281行・1.3秒です。業務データの全件走査をせず、メタデータだけを見ているため速く終わります。

    冒頭にはカスタム判定サマリーが出ます。設計書を書くとき最初に知りたいのは「この環境は素のままか、それとも作り込まれているか」だからです。テーブル名とフィールド名の接頭辞(u_ / x_)で標準かカスタムかを判定しています。今回の PDI では incident のカスタムフィールドは0件でした。作り込みがある環境なら、ここに並ぶ項目が設計書の重点になります。


    出力を設計書の章に割り当てる

    集めた章を、設計書のどの章に使うかは決まっています。対応を覚えておくと、2本目以降が速くなります。

    第1章(対象範囲)には0章と1章を使います。カスタム判定と継承チェーンです。テーブルの親子関係は図に起こします。改修の影響範囲を決める前提になるためです。

    データモデルの章には2章と3章。フィールド定義とChoice定義です。「定義元」列で自テーブル由来と継承分を分けると、項目定義表の構成がそのまま決まります。

    画面設計の章には4章。フォームのアスキーアートを表に置き換えるだけで済みます。あわせて7-1章(UIポリシー)、7-2章(クライアントスクリプト)、4C章(データポリシー)を見ると、画面上の制御が揃います。

    業務プロセスの章には3章と10-1章。Choice定義から状態を拾い、ワークフロー定義の有無で自動遷移かどうかを判断します。

    自動処理の章には5章・6章・10-2章。通知・ビジネスルール・Flow です。

    アクセス制御の章には8章を使います。


    数字は内訳つきで出る

    設計書に書く数字は、そのまま転記できる形で出力されます。ここがこのスクリプトの実用性を決めている部分です。

    ACLは適用パターン別に分かれる

    アクセス制御は、テーブル単位・フィールド単位・全社共通の既定という3層で効きます。出力ではこれをパターン別に分けて出します。


    画像

    incident の実測では、このテーブル固有が24件と84件、親テーブルから継承する分が3件と30件、全テーブル共通の既定が29件と600件でした。

    設計書に「インシデント管理のアクセス制御」として書くべきは、固有分と継承分を合わせた141件です。残る629件は全テーブルに効く共通設定なので、別の章で一度だけ扱えば足ります。内訳が出ることで、この切り分けが機械的にできます。

    Flowは有効フラグつきで出る

    incident をトリガーとする Flow は14件見つかり、そのうち有効なのは1件でした。残り13件は JIRA連携・Teams通知・Zoom会議作成といった、初期状態で無効のまま同梱されているテンプレートです。

    「Flowが14件ある」と「14件の自動処理が動いている」は別の話です。有効フラグが列として出るので、設計書には稼働しているものだけを書けます。

    紐付けは確度を分けて出る

    Flow とテーブルの対応は、トリガー定義から確定した情報として出力されます。名前が似ているだけの Flow は「参考」として別の表に分けてあります。

    同じ考え方で、スクリプトインクルード・スケジュールジョブ・REST連携は文字列一致による検索であることを出力に明記しています。確定情報と手掛かりが混ざらないので、設計書に転記するとき「ここは個別確認が要る」と判断できます。


    実行前に確認すること

    読み取り専用とはいえ、他人が書いたスクリプトを本番に貼るのは怖いものです。次の順で確認してください。

    1. 更新系のメソッドが無いこと。update( insert( deleteRecord( deleteMultiple( setValue( を検索して0件であることを目視する

    2. スコープ。global で実行する。スコープドアプリのテーブルは、クロススコープアクセスの設定によっては読めない

    3. 実行時間帯。メタデータへの集計クエリが走るため、業務時間外を選ぶ

    4. 対象の指定。TABLE_NAME を間違えると、意図しないテーブルを丸ごと調べることになる

    まずは PDI か開発環境で1回流し、出力の形を見てから本番に持っていくのが安全です。

    出力が期待と違うときは、症状で見る場所が決まります。ある章が丸ごと「テーブルが存在しません」になるなら、その機能を導入していないか、global から読めないかのどちらかです。件数が明らかに多すぎるときは、フィルタが効いていない可能性を疑います。ServiceNow は存在しないフィールド名で addQuery() すると、警告を出しつつその条件を無視して処理を続けるためです。絞り込んだつもりが上限件数まで丸ごと出ます。


    なぜレポートではなくバックグラウンドスクリプトなのか

    「レポートやダッシュボードでよくないか」という疑問は当然です。使い分けを整理しておきます。

    レポートは決まった指標を継続監視する道具です。対してこの方法は、設計書という一度きりの成果物のために、散らばった設定を1回で拾うものです。目的が違います。設計書を書くたびにレポート定義を20個作るのは割に合いません。

    移植性も理由の1つです。バックグラウンドスクリプトなら、顧客環境でも検証環境でも、貼り付けるだけで同じ調査ができます。Update Set の移送も、プラグインの有効化も要りません。環境に何も残さないのは、調査道具として大事な性質です。

    裏を返すと、継続的な監視には向きません。四半期ごとに設計書を最新化したいなら、都度実行して差分を見る使い方になります。


    この方法の限界

    取れないものも、はっきりさせておきます。

    画面の見た目そのものは取れません。分かるのはフォームのセクション構成と項目の並びまでで、実際のレンダリング結果までは届きません。Service Portal や UI Builder ではこの差がさらに開きます。ウィジェットの配置は取れても、表示された画面がどう見えるかはメタデータからは再現できないためです。スクリーンショットの代わりにはならない、と割り切ってください。

    紐付けが曖昧な章があることもお伝えしておきます。スクリプトインクルード・スケジュールジョブ・REST連携の3つは、テーブル名の文字列一致で拾っています。ServiceNow のデータ構造上、「このスクリプトインクルードは incident 用」という明示的な関連が存在しないためです。incident で59件のスクリプトインクルードが引っかかりましたが、この全部が本当に関連するとは限りません。設計書に転記するときは個別確認が要ります。

    ビジネスルールの中身も対象外です。76件あることと、それぞれの名前・実行タイミング・条件は取れます。しかし各ルールが何をしているかまでは追いません。改修時に該当分だけ個別に読む、という前提です。

    取れるものと取れないものを分けておくと、設計書の「本書で扱わない範囲」の章がそのまま書けます。


    用語

    この記事に出てくる ServiceNow 用語を整理しておきます。

    • バックグラウンドスクリプト(Background Script):管理者がサーバサイドの JavaScript をその場で実行する画面。sys.scripts.do でアクセスする

    • GlideRecord:レコードを検索・読み書きするための標準API。今回は読み取りにのみ使用

    • GlideAggregate:件数や合計を集計するためのAPI。全件を取り出さずに件数だけ数えられる

    • ACL(Access Control List):誰がどのテーブル・フィールドに何をできるかを定める規則。table と table.field の2階層に加え、* によるワイルドカード指定がある

    • UIポリシー:条件に応じて画面上の項目を表示・非表示・必須・読み取り専用に切り替える設定。コードを書かずに設定できる

    • データポリシー:UIポリシーと似ているが、サーバ側で動くため画面経由でも連携経由でも同じ規則が効く

    • Data Lookup(データ参照定義):入力値の組み合わせから別の値を自動決定する仕組み。影響度と緊急度から優先度を決めるのが代表例

    • glide_var:値を専用テーブル(sys_variable_value)に外出しして保持するフィールド型。Flow のトリガー入力値がこれにあたる

    • glide_duration:期間を表す型。内部的にはエポック起点の日時で保持されるため、getValue() ではなく getDisplayValue() で読む


    3部作の構成

    • 本記事(無料):材料集めから設計書までの4ステップと、出力の読みどころ

    • 出力編(¥100):3テーマの実出力と、そこから起こしたWord風設計書12ページ

    • 全文編(¥300):スクリプト全文1,724行+レポート作成プロンプト


    自分の環境で確認するときのURL

    スクリプトを作るうえで実際に参照した公式ドキュメントです。


    検証範囲とおことわり

    • 確認した範囲:本スクリプト(v1.0)を PDI(Zurich / 2026-08-01)の Scripts - Background で3テーマ(incident / カタログアイテム / Service Portal)実行し、いずれもエラー0で完走。本文の件数・行数・実行時間は全てこの実行の出力から転記しています

    • フォーム定義とFlow紐付けの仕様(view にリテラル文字列が入る点、sys_variable_value に紐付けが入る点)は、この環境のレコードを直接確認して特定したものです

    • 確認していない範囲(断定しません):本番規模の環境での実行時間、ドメイン分離環境での挙動、他リリースでの同一性。特にメタデータのテーブル構造はリリースで変わり得ます

    • スクリプトインクルード・スケジュールジョブ・REST連携の抽出は文字列一致によるヒューリスティックです。出力にも確度の別を明記していますが、設計書へ転記する際は個別確認が要ります

    設計書づくりで時間を食うのは、書く作業ではなく集める作業です。集めるところを機械に任せると、考える時間が戻ってきます。

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

    あなたへのおすすめ