Reactによるユーザーインターフェース開発

  • リリースバージョン: Zurich
  • 更新日 2025年07月18日
  • 所要時間:8分
  • React ライブラリを使用してユーザーインターフェイス (UI) を開発し、ソースコードでフルスタックアプリケーションを構築します。

    React を使用した UI 開発の概要

    React は、カスタムユーザーインターフェイスの開発とレンダリングに使用する UI コンポーネントを構築するための業界標準の Web フレームワークです。React コンポーネントは、ボタンなどの自己完結型の再利用可能な JavaScript 関数であり、JavaScript (JS/JSX) および TypeScript (TS/TSX) 構文をサポートします。React に関する一般的な情報については、react.dev Web サイトの React ドキュメント を参照してください。

    ServiceNow IDE または ServiceNow SDK を使用すると、スコープ対象のアプリケーションで React を使用して、ServiceNow Fluentコードで UI ページを作成できます。ServiceNow Fluent UI ページ API は、指定されたエンドポイントでページをロードする HTML エントリポイント (index.html) を参照します。インスタンスでアプリケーションをビルドしてインストールすると、静的資産が適切なテーブルに保存されます。ソースコード内の React アプリケーションの例については、 ServiceNow SDK サンプル GitHub リポジトリを参照してください。React の使用を開始するには、 ServiceNow IDE または ServiceNow SDK でアプリケーションを作成するときに、いずれかの React テンプレートを選択します。

    注:
    公開 npm レジストリにある React Wrapper Component Library Node Package Manager (npm) パッケージを使用して、React アプリケーションの一部のネクストエクスペリエンスのコンポーネントを使用できます。アプリケーションで React ラッパーコンポーネントライブラリを使用するには、 を使用するか、 ServiceNow IDE または ServiceNow SDK からインストールする必要があります。詳細については、「 ServiceNow IDE でのサードパーティライブラリの使用 」または「 ServiceNow SDK でのサードパーティライブラリの使用」を参照してください。

    UI 開発プロセス

    次のリストは、 ServiceNow IDE または ServiceNow SDKで React アプリケーションを開発するプロセスの大まかな概要です。

    1. アプリケーションを作成し、いずれかの React テンプレートを選択します。

      アプリケーションには、React 開発に必要なファイルとディレクトリが含まれています。

    2. src/client ディレクトリに、HTML エントリーポイント (index.html)、クライアントスクリプト、スタイルシートなど、ユーザーインターフェイスのクライアント資産を追加します。index.htmlファイルには、JavaScript エントリーポイントとして <![CDATA[<script>]]> タグが含まれている必要があります。
    3. ServiceNow Fluent UI ページ API を使用して、コードで UI ページ [sys_ui_page] を定義します。UI ページ定義を含む now.ts ファイルで、HTML をインポートし、UiPage オブジェクトの html プロパティから参照します。
    4. ビルド前のロールアップスクリプトを実行するアプリケーションをビルドします 依存関係をバンドルしてクライアント資産を src/client ディレクトリにパッケージ化してから、残りのビルドプロセスを実行します。標準のロールアップビルドプロセスとプラグインがデフォルトの JavaScript バンドラーとして使用されます。

      静的資産は dist/static ディレクトリに出力されます。

    5. アプリケーションをインストールして、該当するテーブル (UX 資産 [sys_ux_lib_asset]、イメージ [db_image]、および UX テーマ資産 [sys_ux_theme_asset] テーブル) のアプリケーションファイル [sys_metadata] に静的資産を追加します。これらのテーブルは、ファイルを添付ファイルとしての追加をサポートしています。
      重要:
      React を使用した UI 開発は、インスタンスからのコンテンツの提供方法と、現在サポートされているコンテンツタイプとテーブルにより、実験的な機能です。

    制限事項

    • UI ページの HTML は、ソースコードでのみ変更する必要があります。インスタンス上の UI ページ [sys_ui_page] の HTML への変更はソースコードに同期されず、意図しない動作が発生する可能性があります。
    • オーディオ、ビデオ、および WASM コンテンツタイプはサポートされていません。
    • アップロードされた添付ファイルの最大ファイルサイズは、 com.glide.attachment.max_size システムプロパティで構成されたサイズによって制限されます。詳細については、「Maximum allowed attachment size [Updated in Security Center 1.3]」を参照してください。
    • 出力パスは確定的である必要があります。
    • HTML からリンクされたコンテンツのプリロードはサポートされていません (rel="preload")。
    • HTML からリンクされた相対スタイルシートはサポートされていません (rel="stylesheet")。代わりにスタイルシートをコードにインポートします (「path/to/style-sheet」@import)。
    • CSS での相対インポートはサポートされていません。
    • CSS モジュールはサポートされていません。
    • UI ページでは、ハッシュルーティングのみがサポートされています。
    • サーバーサイドレンダリングと React サーバーコンポーネントはサポートされていません。

    React を使用した UI ページ開発

    src/fluent ディレクトリの .now.ts ファイルでは、UI ページがServiceNow Fluentコードで定義されています。ページの HTML は、src/client ディレクトリの index.html ファイルからインポートされます。

    //incident-manager.now.ts
    import '@servicenow/sdk/global'
    import { UiPage } from '@servicenow/sdk/core'
    import incidentPage from '../../client/index.html'
    
    UiPage({
        $id: Now.ID['incident-manager-page'],
        endpoint: '<scope>_incident_manager.do',
        description: 'Incident Response Manager UI Page',
        category: 'general',
        html: incidentPage,
        direct: true,
    })

    index.html ファイルでは、<![CDATA[<script>]]> タグは src/client ディレクトリ内の main.jsx ファイルを参照します。

    //index.html
    <html>
    <head>
      <title>Incident Response Manager</title>
    
      <!-- Initialize globals and Include ServiceNow's required scripts -->
      <sdk:now-ux-globals></sdk:now-ux-globals>
    
      <!-- Include your React entry point -->
      <script src="./main.jsx" type="module"></script>
    </head>
    <body>
      <div id="root"></div>
    </body>
    </html>
    main.jsx ファイルには、ページとメイン アプリケーション コンポーネントのレンダリングに必要なインポートが含まれており、React アプリケーションのエントリ ポイントが定義されています。
    //main.jsx
    import React from 'react'
    import ReactDOM from 'react-dom/client'
    import App from './app'
    
    const rootElement = document.getElementById('root')
    if (rootElement) {
        ReactDOM.createRoot(rootElement).render(
            <React.StrictMode>
                <App />
            </React.StrictMode>
        )
    }

    アプリケーションをビルドしてインストールした後、 UiPage オブジェクト (https://<instance>/<scope>_incident_manager.do) で指定されたエンドポイントからページを開くことができます。これにより、インシデントを作成および管理するためのインターフェイスが表示されます。

    図 : 1. React で作成された UI ページの例
    React で作成されたインシデントレスポンス管理の UI ページの例