ServiceNow SDK、Git、ReleaseOps、CI/CD パイプラインを使って ServiceNow アプリをビルド・テスト・リリースするための、エンドツーエンドの SDLC ガイドです。
← → で移動 · Ashwin Patti, Shelby Cohen
このプレゼンテーションには、当社の信念と仮定、およびこのプレゼンテーションの日付時点で入手可能な情報に基づく「将来の見通し」に関する記述が含まれている場合があります。将来の見通しに関する記述には、既知および未知のリスク、不確実性、および実際の結果が将来の見通しに関する記述によって予想または暗示されるものと大幅に異なる可能性があるその他の要因が含まれます。このような差異の原因または一因となりうる、これらまたはその他の要因の詳細情報には、フォーム 10-K の最新の年次報告書、フォーム 10-Q の四半期報告書、およびその他の証券取引委員会に対する提出書類の「Risk Factors」(リスク要因) セクションの記載内容などが含まれます。当社では、将来の見通しに関する記述において開示されている計画、目的や期待を達成することは保証できません。また、お客様は、当社による将来の見通しに関する記述に過度の信頼を置くべきではありません。新製品、特長、機能に関する情報は、製品の一般的な方向性を概説することを目的としており、購入の判断材料にすることはお勧めしません。また、情報提供のみを目的としており、いかなる契約にも組み込むことはできず、いかなる資料、コード、または機能の提供もコミットまたは確約するものではなく、法的義務もありません。当社の製品について記載されている特長や機能の開発、リリース、およびタイミングは、当社の独自の判断で決定されます。当社は、将来の見通しに関する記述を更新する義務を負わず、また更新する意図もありません。
👋 ようこそ — 10:00〜17:00。今日一日で、実際のアプリのビルド・テスト・ソース管理・リリースまでを一貫して体験します。
グローバルアプリ、非グローバルアプリ、そして「move and edit」で構築された ITSM 実装 — すべてが同一モデルの下にある。
「move」による所有権を取得していない、既存の OOTB アプリへのカスタマイズ — そのメタデータには独自の永続的なコンテナがなく、あなたのものではなく ServiceNow の所有権のままとなる。
新規構築であっても既存のカスタマイズであっても、開発モデルは一つに統一される。
ビルドエンジン。デプロイ可能なアーティファクトへコンパイル
IDE / プロダクションコードモード
ブランチ、PR、マージ
分離された開発用インスタンス
AI 支援による実装
自動テストフレームワーク
不変のアーティファクトストア
アセス(評価)、承認、リリース
フォームとクリックによる XML — 読みにくく、diff を取りにくく、レビューしにくい。
編集したのと同じ XML — コンパイルのステップも型チェックも、インストール前の診断もない。
TypeScript — 人が読み・書き・理解するためのもので、コンパイル時の型チェックと診断がある
プラットフォームが実際に実行するもの — その表現形式に直接触れることはない
これが実践における「シフトレフト」です:ミスはビルド時、エディタの中で、インストールの前に検出される — すでに何かが壊れたあとのランタイムではありません。
TypeScript ベースの DSL — .now.ts ファイルでメタデータを定義し、フォームをクリックして回る代わりに、コンパイル時の型チェックと診断が得られる。
export const MaintenanceRequest = Table({ label: 'Maintenance Request', fields: { equipment: Reference('equipment') } });
ビジネスロジックは型付きの @servicenow/glide インポートとして記述。UI Page は React、Svelte、Vue、Preact で構築。
インナーループ
続いてインストールとテスト
ブランチ分岐、プルリクエスト、行単位のレビュー、3-way コンフリクト解決、任意の時点への正確なロールバック。
XML トランスポート用のアーティファクトに過ぎない — コラボレーション、ブランチ分岐、人間が読める diff のために作られたものではない。
この対比については、後ほどソース管理のモジュールで詳しく掘り下げます。
9:55 – 10:10 · Build-ready な要件定義から再開します
「設備担当ユーザーとして、修理してもらうために設備のメンテナンスを依頼したい。」
エンティティ: Maintenance Request、Equipment
ロール: Requester(自分の依頼を作成・参照)、Technician(割り当てられた依頼を参照し、ステータスを更新)
Given–When–Then: Requester が稼働中の Equipment に対して依頼を送信した場合(Given)、送信すると(When)、ルーティングルールに従って「New」状態の Maintenance Request が作成され割り当てられる(Then)。
共有、非本番
フィーチャーブランチはここに存在
開発用とは別
テスト用とは別
開始前にサンドボックスを割り当て、その中でフィーチャーブランチを作成し、作業が終わったら廃棄しましょう。
main からフィーチャーブランチを作成やりたいことを平易な言葉で説明すると、Build Agent がエンティティ・ロール・ロジックを提案します — フォームをクリックして回る必要はありません。
あなたのアプリのスコープ内に、実際の Fluent メタデータオブジェクトを構築します — 後で捨てる使い捨てのプロトタイプではありません。
同じセッションでアプリとその ATF テストの両方を生成します — これが次にビルドしていく内容です。
アプリの既存のメタデータを読み取り、フローが実際に何をしているかを平易な言葉で説明し、具体的な修正案を提示します — 汎用的な回答ではなく、あなたのインスタンスに基づいたものです。
任意・アーキテクト向け
// Build Agent が裏で生成する Fluent コード export const MaintenanceRequest = Table({ label: 'Maintenance Request', fields: { equipment: Reference('equipment') } });
11:30 – 12:00
再開まで少々お待ちください
完了
完了
PR、マージ、公開
ReleaseOps、デプロイ
アプリはビルドとテストが完了しました。次はソース管理とリリースです。
1:45 – 2:00
now-sdk build / now-sdk install は、プラットフォーム上でもオフでも同一に動作します。Git はブランチ分岐・レビュー・行単位のコンフリクト解決ができます。Update Set にはできません。
3:00 – 3:15 · ReleaseOps から再開します
main にマージ済み — サンドボックスをまたいで複数のバージョンが同時に存在
Studio での publish により、会社内のすべてのインスタンスでアプリがインストール可能になる
publish によって自動生成される — 実際のデプロイのペイロード
ReleaseOps はソース管理に直接接続しているわけではありません — この自動生成された Update Set こそが、次に Deployment Request にプロモートされるものです。
ペイロードを格納するコンテナ。Update Set を Deployment Request にプロモートし、「Ready to Assess」にマークすると — アセスメントの手順(Instance Scan → Move to Test → Run ATF)がそれに対して実行されます。
クリアされた Deployment Request を本番環境へ移すレコード — On Demand(即時)または Scheduled(指定日時にまとめて実行)。ReleaseOps のコントローラー環境(通常は本番環境)上に存在します。
ここに到達する経路は2つあります:Update Set を Deployment Request にプロモートする方法(本ラボの方法)、または承認ゲート付きで Git から CI/CD REST API 経由でトリガーする方法(choose-your-own-adventure を参照)。
ビルドする場所、Instance Scan が実行される場所
アセスメントのターゲット — 設定可能なラベルであり、文字通り「test」という意味ではない
別の、最終的な移行先
アセスメントは、ペイロードを dev からテスト/ステージングのターゲットへすでに移動させています。それが最終的な移行先でもある場合、リリースにはもう先がありません — 各ステージにそれぞれ別のインスタンスが必要です。
Ready for Deployment に到達するための締め切り。過ぎてしまうと、Deployment Request は deferred(延期) とマークされます — ブロックされるわけではなく、後のリリースに乗ることもできます。
準備が整ったすべての非延期 Deployment Request に対して、本番環境への一括プッシュが実際に発生するタイミング。
開発用インスタンス上での静的ポリシーチェック
アセスメント開始
機能面のカバレッジ
リリースの準備完了
ラボ:Deployment Request を作成し、「Ready to Assess」にマークして実行を確認しましょう
そのままアセスメントを再実行。
アセスメントは無効化されます — Deployment Request は Draft に戻り、新しいペイロードが必要になります。
手動承認で先に進めます。
3:45 – 4:00
より多くのメタデータ型、UI ビルダーからの transform/sync
Test Agent によるトリアージ、Cloud Runner、回帰スイート
now-sdk cicd、Git トリガーのパイプライン、承認ゲート
Connect Hub 経由で Figma/Miro を連携し、仕様から直接ビルド
Build Agent の出力の言葉・用語を変更するルール
Deployment Request、アセスメントのプレイブック、Ready for Deploy
興味のあるトラックを自由に探索してください — ご質問はいつでもどうぞ。始め方のヒントは演習を参照してください。
ご質問は Ashwin Patti、Shelby Cohen まで。
ホームベースに対して認証
分離されたランタイムでビルド
Dev と Prod が同時に
Generate ATF tests for all the feature permutations on the app we built. その後:Execute all ATF tests.管理者が Figma/Miro アプリを設定
管理者が承認
MCP サーバーを有効化(MCP タブ)
ツールから直接仕様を読み取る
一度だけの管理者設定(Connect Hub + AI Control Tower の承認)を行えば、あとは各開発者が自分の Build Agent 設定で有効化できます。
BONUS SLIDE — PENDING/ROADMAP CONTENT PER LEGAL(SLIDE 2). PRESENTER TO FILL IN BEFORE SESSION.