SuiteScriptの登録と実行方法

# 初心者向け SuiteScript 2.1 入門：NetSuiteカスタマイズの始め方

## はじめに：SuiteScriptとは？

**SuiteScript（スイートスクリプト）**は、NetSuite上でカスタマイズや業務の自動化を行うための **JavaScriptベースのスクリプト機能** です。NetSuite標準のUIカスタマイズ機能以上に柔軟な拡張を可能にし、例えば独自のビジネスロジックを追加したり、外部サービスとの連携処理を実装したりできます。SuiteScriptを活用することで、**他サービスとのAPI連携**、**カスタムポートレット（独自ウィジェット）の作成**、NetSuite操作に応じた**高度な自動処理**など、さまざまな拡張が可能になります。要件に合わせてスクリプトを作成することで、NetSuiteをより効率的かつ柔軟に活用できるでしょう。

なお、SuiteScriptには古い**1.0**系と現行の**2.x**系があります。**SuiteScript 2.1**は最新のスクリプトAPIバージョンで、ES2019相当のモダンなJavaScript構文（`let`/`const`、アロー関数、クラス構文 など）をサポートしており、既存の2.0スクリプトから移行することでパフォーマンスや保守性の向上も期待できます。本記事では**SuiteScript 2.1**に基づいて解説を進めます。

## SuiteScriptの種類と実行タイミング

SuiteScriptにはいくつかの**スクリプトタイプ（種類）**があり、スクリプトごとに**実行されるタイミングや方法**が異なります。それぞれ用途が異なるため、目的に応じて使い分けます。主なスクリプトタイプと概要は次のとおりです。

* **クライアントスクリプト (CS)**：NetSuiteのブラウザ画面(UI)上で**ユーザーの操作に応じて実行**されるスクリプトです。フォーム表示後の初期処理やフィールド入力時の動的なチェック・メッセージ表示など、ユーザーインターフェースの拡張に用います。
* **Suiteletスクリプト**：必要に応じて呼び出せる**カスタムWebページや処理API**を作成するためのサーバサイドスクリプトです。指定したURLで動作し、カスタムフォームを表示したりNetSuiteのデータを処理して結果を返すことができます。ユーザーが直接アクセスできる画面や、バックエンド処理のエンドポイントとして利用します。
* **スケジュールスクリプト (SS)**：**定期実行されるバッチ処理**を記述するスクリプトです。例えば毎日夜間にデータ集計を行う、といった定時処理を自動化できます。
* **RESTletスクリプト**：外部システムとの連携用に、**REST API経由で呼び出せるサービス**を提供するスクリプトです。外部からHTTPリクエストでデータを受け取り、NetSuite内で処理・データ操作を行うエンドポイントを実装できます。

各スクリプトタイプは、それぞれ対応する\*\*「エントリポイント関数」\*\*（トリガーとなる関数）が決まっています。例えばユーザーイベントスクリプトなら `beforeLoad` や `afterSubmit` といった関数、クライアントスクリプトなら `pageInit` や `fieldChanged` 等です。スクリプトファイル内でこれらの関数を定義し、**所定のオブジェクトをreturn**することでNetSuiteにエントリポイントを提供します（SuiteScript 2.xでは`define(...)`関数内でエントリポイント関数をreturnします）。

## スクリプトレコードとデプロイメントの仕組み

SuiteScriptをNetSuite上で動作させるには、単にコードを書くだけでは不十分で、**スクリプトレコード**と**スクリプトデプロイメント**の設定が必要です。NetSuiteではJavaScriptファイルをサーバにアップロードした後、そのファイルを元に\*\*スクリプトレコード（スクリプトの定義情報）\*\*を作成します。スクリプトレコードでは種類（Script Type）やスクリプトID、使用するスクリプトファイルを指定し、スクリプトをシステムに登録します。

さらに、スクリプトを実行可能にするためには**スクリプトデプロイメント（展開設定）**を行う必要があります。デプロイメントでは「どの状況でそのスクリプトを動作させるか」を指定します。例えばユーザーイベントスクリプトであれば適用対象のレコードタイプや実行タイミング（例：**顧客レコード**の**保存前（beforeSubmit）**）を設定します。クライアントスクリプトなら適用するフォームやロール、Suiteletならスクリプトを呼び出すURLやアクセス権限（対象ロールや**ログイン不要オプション**）等を指定可能です。

スクリプトレコードを保存すると「デプロイ済み」チェックボックスが現れます。**デプロイ（Deploy）を有効にしない限りスクリプトは実行されない**点に注意してください。デプロイメントを**有効化（Deployed）**して初めて、そのスクリプトはNetSuite上でアクティブになり動作します。複数のデプロイメントを作成すれば、1つのスクリプトを異なる条件や対象で**複数展開**することも可能です。

このように、SuiteScriptは **「スクリプトファイル」**＋**「スクリプトレコード」**＋\*\*「スクリプトデプロイメント」\*\*の3つが揃って初めてNetSuite上で機能します。次章では、実際にシンプルなスクリプトを作成し、これらの手順を踏んでNetSuite上で動かす方法をステップバイステップで解説します。

## 実践：SuiteScript 2.1をNetSuiteで実行してみよう（簡単ガイド）

ここでは、初心者向けに **「Hello, World!」** 的な簡単スクリプトをNetSuite上で動かしてみます。NetSuiteのUIからスクリプトを作成・登録し、実行する一連の手順を見ていきましょう。今回は **SuiteScript 2.1のSuitelet** を用いて、ブラウザにメッセージを表示する簡単な例を実装します。

### サンプルコードの準備

まず実行するスクリプトコード（JavaScriptファイル）を準備します。以下はSuiteScript 2.1形式のSuiteletのサンプルコードです。ユーザーがSuiteletのURLにアクセスすると、"Hello, SuiteScript 2.1!"というメッセージを画面に表示し、同時にスクリプトの実行ログにデバッグメッセージを出力します。

```javascript
/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/log'], (log) => {

  const onRequest = (context) => {
    // デバッグログの出力
    log.debug('Hello SuiteScript', 'スクリプトが実行されました');

    // ブラウザへの出力
    context.response.write({ output: 'Hello, SuiteScript 2.1!' });
  };

  return { onRequest };

});
```

上記のコードでは、`@NApiVersion 2.1` および `@NScriptType Suitelet` の**コメントタグ**でSuiteScript 2.1のSuiteletであることを宣言しています。`define`関数内で **`onRequest`** エントリポイント関数を定義し、`context.response.write()` によってブラウザにテキストを返しています。加えて、`N/log` モジュールを使い `log.debug(...)` を呼ぶことで、実行時にスクリプトログにメッセージを記録します。

このコードをメモ帳等にコピーし、ファイル名「hello\_suitelet.js」など任意の名前で保存しましょう（文字コードはUTF-8を推奨）。これが実行するスクリプトファイルになります。

### Step 1. スクリプトファイルをアップロードする

次に、作成したJavaScriptファイルをNetSuiteにアップロードします。NetSuite画面上部のメニューから\*\*「カスタマイズ → スクリプト → スクリプトファイル」**と進み、新規ファイルのアップロード画面を開きます。**「新規」\*\*ボタンをクリックし、先ほど保存した「hello\_suitelet.js」ファイルを選択してアップロードします。アップロード後、ファイル一覧にスクリプトが追加されたことを確認してください（まだこの時点ではスクリプトは実行できません。この後のスクリプトレコード作成が必要です）。

### Step 2. スクリプトレコードを作成する

アップロードしたスクリプトファイルをNetSuite上で認識させるため、**スクリプトレコード**を作成します。メニューから **「カスタマイズ → スクリプト → スクリプト」** と進み、新規スクリプト作成画面を開きます。ここで以下の設定を行います。

* **スクリプトタイプ**：ドロップダウンから「Suitelet」を選択します。
* **スクリプトファイル**：Step 1でアップロードした「hello\_suitelet.js」を選択します。
* **スクリプト名**と**スクリプトID**：任意の名前とIDを入力します（例：名前「Hello Suitelet Script」、ID「\_hello\_suitelet\_script」）。IDは自動的に`customscript`プレフィックスが付きます（例えば`customscript_hello_suitelet`のようになります）。

これらを入力して保存すると、スクリプトレコードが作成されます。作成後の画面で、スクリプトの詳細（種類: Suitelet、内部ID、APIバージョン2.1、関連付けられたファイル など）を確認できます。

スクリプトレコード作成後の画面例です。Suiteletタイプのスクリプトが登録され、**APIバージョン2.1**で実行されることがわかります。下部には関連付けられた**スクリプトファイル**（hello\_suitelet.js）のプレビューや編集リンクが表示され、エントリポイント関数として **onRequest** 関数が定義されていることを示すチェックマークも確認できます。

### Step 3. スクリプトをデプロイ（配備）する

続いて、このスクリプトを実行可能にするための**スクリプトデプロイメント**を設定します。先ほど保存したスクリプトレコード画面で、上部メニューの\*\*「スクリプトをデプロイする」**ボタン、もしくは**\[スクリプトデプロイメント]\*\*タブから新規デプロイメント作成画面を開きます。デプロイメントでは以下の項目を設定します。

* **タイトル**：デプロイの名前を入力（例：「Hello Suitelet Deploy」）。
* **ID**：デプロイIDを入力（自動で`customdeploy`プレフィックスが付きます）。
* **スクリプト**：関連付けるスクリプトとして、先ほど作成した「Hello Suitelet Script」（\_hello\_suitelet\_script）を指定します（通常は画面上ですでに選択済みになっています）。
* **部署**：**チェックを入れて**「デプロイ（有効化）」の状態にします【22†閲覧】。このチェックがオンになっていないとスクリプトは動作しません。
* **ステータス**：本番環境であれば「リリース」を選択します（テスト中は「テスト」でも可）。
* **実行ロール**：スクリプトを実行するユーザーのロール指定です。通常は「現在のロール」で問題ありません。
* **ログレベル**：必要に応じてデバッグなど適切なログレベルを設定します（デフォルト「DEBUG」でOKです）。
* **対象ロール（閲覧者/閲覧許可）**：このスクリプトを利用できるユーザーロールを指定します。とりあえずテスト目的であれば「すべてのロール」にチェックを入れておくと、自分のロールで実行可能になります。
* **ログインせずに利用可能**：外部からログイン無しでアクセスさせたい場合にチェックします。今回はNetSuiteにログインして自分で使う想定なので**チェック不要**です。

以上を設定して保存すると、デプロイメント（展開）が完了します。Suiteletタイプのデプロイメントでは、保存後の画面に**スクリプトURL**が表示されます。例えば「内部URL」欄に以下のようなリンクが生成されます。

```
URL: https://・・・/app/site/hosting/scriptlet.nl?script=xxxx&deploy=1
```

こちらはSuiteletスクリプトのデプロイメント画面の例です。黄色のハイライト部分に表示されているのがこのSuiteletの**専用URL**で、`script=<スクリプトIDの数値>` と `deploy=<デプロイIDの数値>` というパラメータ付きのパスになっています。今回は内部アクセスのみなので「内部URL」を使用します（※外部公開したい場合は「ログインせずに利用可能」にチェックを入れ、表示されるExternal URLを利用します）。また、デプロイが有効（デプロイチェック済み）になっていること、対象ロールが「すべてのロール」に設定されていることも確認できます。

### Step 4. スクリプトを実行してみる

準備が整ったので、実際にスクリプトを動かしてみましょう。Step 3で確認したSuiteletの**内部URL**をクリックするか、新しいブラウザタブでそのURLにアクセスします。正しく設定できていれば、新しいページ（またはポップアップ）に **「Hello, SuiteScript 2.1!」** というメッセージが表示されるはずです。これがSuiteletスクリプトからブラウザへの出力結果です。

さらに、NetSuiteの**スクリプトログ**を確認してみましょう。【カスタマイズ → スクリプト → スクリプトログ】の画面を開くと、先ほど実行したスクリプトのログエントリが記録されているのが分かります。サンプルコードでは `log.debug()` を実行しているため、ログ一覧に「Hello SuiteScript」というタイトルのデバッグメッセージが出力されているはずです。もし**エラーが発生**していれば、同じくスクリプトログ画面でエラーメッセージを確認できます。スクリプトが期待通り動作しない場合は、まずログに出力された情報を手がかりに原因を調査するとよいでしょう。

以上で、SuiteScriptを実際にNetSuite上で動かす最も基本的な手順を体験できたと思います。初めて自分で書いたコードがNetSuite上で動くことを確認できたのではないでしょうか。

### 登録から実行までのサンプル動画

https://youtu.be/3R5geS14O9s

## おわりに：さらなるカスタマイズに向けて

本記事では、SuiteScript 2.1の概要から、スクリプトの種類、そしてNetSuite上で実際にスクリプトを実行する手順まで、初心者向けに解説しました。**スクリプトファイルのアップロード**から**スクリプトレコード作成**、**デプロイメント設定**、**実行とログ確認**という一連の流れを押さえることで、NetSuiteカスタマイズの第一歩を踏み出せます。

SuiteScriptを使いこなすことで、手作業で行っていた業務の自動化や、標準機能では実現できない細かなビジネスロジックの実装が可能になり、NetSuiteの柔軟性を最大限引き出すことができます。まずは簡単なスクリプトから始めて、徐々に複雑な処理や他のスクリプトタイプ（ユーザーイベントやスケジュールスクリプト等）にも挑戦してみてください。適切にSuiteScriptを活用すれば、NetSuiteはさらに強力な業務プラットフォームとなるでしょう。一緒に少しずつ理解を深め、カスタマイズの幅を広げていきましょう！