es5-compliance について
ServiceNowのサーバーサイドスクリプト開発者向けのES5準拠スキルです。Rhinoで使えない構文と、一般的なJavaScript記法のES5での代替方法を説明します。
主な機能
- 01非対応のES6以降の構文を列挙
- 02ES5での代替記法を提示
- 03デプロイ前の構文確認項目
- 04サーバーとクライアントの規則を区別
活用シーン
- 01ServiceNowサーバーサイドスクリプトの作成
- 02デプロイ前の構文確認
- 03モダンJavaScriptのES5への書き換え
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ serac-labs/ serac --skill es5-complianceインストール後、Claude Code で/es5-complianceを入力して読み込まれたか確認します。
詳細
ServiceNow の ES5 準拠
ServiceNow は Mozilla Rhino エンジンで動作し、ES5 JavaScript(2009 年標準)のみをサポートします。サーバーサイドスクリプトでは、必ず ES5 構文を使用してください。
使用禁止の構文(構文エラーの原因になります)
| ES6 以降の構文 | ES5 の代替構文 |
|---|---|
const x = 5 | var x = 5 |
let items = [] | var items = [] |
() => {} | function() {} |
`Hello ${name}` | 'Hello ' + name |
for (x of arr) | for (var i = 0; i < arr.length; i++) |
{a, b} = obj | var a = obj.a; var b = obj.b; |
[a, b] = arr | var a = arr[0]; var b = arr[1]; |
...spread | Array.prototype.slice.call() を使用 |
class MyClass {} | コンストラクター関数を使用 |
async/await | GlideRecord コールバックを使用 |
Promise | コールバック付きの GlideRecord を使用 |
よく使われるパターン
変数宣言
// WRONG - ES6
const MAX_RETRIES = 3
let currentUser = gs.getUser()
// CORRECT - ES5
var MAX_RETRIES = 3
var currentUser = gs.getUser()
関数
// WRONG - Arrow functions
var active = incidents.filter((inc) => inc.active)
var process = () => {
return "done"
}
// CORRECT - ES5 functions
var active = []
for (var i = 0; i < incidents.length; i++) {
if (incidents[i].active) {
active.push(incidents[i])
}
}
var process = function () {
return "done"
}
文字列の連結
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`
// CORRECT - String concatenation
var message = "Incident " + number + " assigned to " + user
ループ
// WRONG - for...of
for (var item of items) {
gs.info(item)
}
// CORRECT - Traditional for loop
for (var i = 0; i < items.length; i++) {
gs.info(items[i])
}
デフォルトパラメーター
// WRONG - Default parameters
function process(incident, priority = 3) {
// ...
}
// CORRECT - Manual defaults
function process(incident, priority) {
if (typeof priority === "undefined") {
priority = 3
}
// ...
}
自動検証
サーバーサイドスクリプトをデプロイする前に、次の点を確認してください。
const/let宣言を確認し、varに置き換えます- アロー関数
=>を確認し、function()に置き換えます - テンプレートリテラル
`を確認し、文字列の連結に置き換えます - 分割代入
{a, b}を確認し、明示的なプロパティアクセスに置き換えます for...ofループを確認し、インデックスベースのループに置き換えます
例外:クライアントスクリプト
クライアントサイドスクリプト(クライアントスクリプト、UI ポリシー)はブラウザーで実行されるため、ユーザーのブラウザーによっては ES6 以降をサポートする場合があります。ただし、最大限の互換性を確保するため、ES5 の使用を引き続き推奨します。
コメント
Markdown 対応