ServiceNow の開発において、カンマ等で区切られた文字列を「配列(Array)」に変換する操作は数え切れないほど発生します。リスト形式のデータをループ処理したり、特定のエレメントを抽出したりするために不可欠なこの技術について、起こりやすいバグを取り上げながら「基本から応用まで」を解説します。
1. 文字列から配列への変換とは?
ServiceNow では、システム間の連携やデータの保存形式として、複数の値をカンマで区切った一つの文字列(例: 'user1,user2,user3')として扱うことがよくあります。
しかし、バックエンド(GlideRecord)やクライアントスクリプトにおいて、これらの個々の要素に対して処理を行うには文字列のままでは不便です。そこで、JavaScript の split() メソッドを使用して、文字列をプログラムが扱いやすい「配列」という構造に変換する必要があります。
2. 代表的な3つのアプローチ(特徴と違い)
単に変換する基本機能から、実務で必ず直面する「不要なスペース」問題への対策まで、主に以下の3つのアプローチが存在します。
✅ 基本的な split() の使用
- データの内容: 指定した特定の区切り文字(カンマなど)で文字列を純粋に分割します
- 特徴: 最もシンプルで一般的な手法ですが、区切り文字の前後にスペースがあった場合、それも要素の一部としてそのまま取り込まれてしまう弱点があります
✅ map() と trim() によるクレンジング(最も推奨)
- データの内容:
split()で分割した直後にmap()を使い、配列の各要素の不要な空白をtrim()で削ぎ落とします - 特徴: 最も安全で実務向けの手法です。データ自身の文字は壊さず、要素の前後にある余計なスペースだけを綺麗に除去して整合性を保ちます
✅ replace() を使った一括空白削除(非推奨)
- データの内容: 配列に分割する「前」に、文字列内のすべてのスペースを正規表現で強引に削除します
- 特徴: 手軽に書けますが、データ自体に「意図的なスペース(例: ユーザーのフルネームなど)」が含まれている場合、それらのスペースまで消去してしまうリスク(データ破損)があります
3. なぜ使うべきなのか?(実装のメリット)
- 精密なデータ操作の実現: 配列に変換することで、
forEachやfilterなどの強力な配列メソッドが使えるようになり、条件に合う要素だけを抽出する高度な処理が可能になります - バグの防止(クレンジング): ユーザー入力や他システムからのデータに含まれる「予期せぬ空白」による文字列比較エラー(例:
'Resolved'と' Resolved'は不一致になる)を防ぎ、スクリプトの堅牢性を劇的に高めます
4. 主な活用シーンと実装例
📋 基本的な変換(スペース対策なし) カンマ区切りの文字列を配列にし、システムログに出力する例です。
var inputString = 'abcd,efgh,ijkl';
var outputArray = inputString.split(',');
// 各要素が存在することを確認
for (var i = 0; i < outputArray.length; i++) {
gs.info("要素 " + i + ": " + outputArray[i]);
}
📋 空白が含まれる場合の高度な処理 (Recommended) 実務データを扱う際によくある「カンマ+スペース」が含まれる汚い文字列を、美しくクレンジングして配列化します。
var inputStringWithSpaces = 'abcd, efgh, ijkl'; // 要素の前にスペースがある
// まずsplitで分割し、その後mapを使用して全ての要素にtrim(空白除去)をかける
var outputArrayClean = inputStringWithSpaces.split(',').map(function(item) {
return item.trim();
});
gs.info("クレンジング後の配列: " + outputArrayClean.join('|'));
// 結果: ['abcd', 'efgh', 'ijkl'] (※スペースが綺麗に消えている)
⚠️ 注意点:データの性質を見極める
replace(/ /g, '') を使って一括でスペースを消す方法はコードが短くなりますが、「データの一部」にスペースが含まれる場合は致命的です。 例えば、'Google Cloud, Microsoft Azure' というデータを処理する場合、この方法だと 'MicrosoftAzure' となってしまい、システム名の大切な一部が失われます。そのため、データの安全性を守るためには常に map() と trim() の組み合わせを優先しましょう。
💡 補足:データのクレンジングは「必須」の工程
外部から取得したデータは常に不完全・不均一である可能性があるため、split() 後の trim() 処理は実質的に必須のクレンジング工程です。 この一手間を惜しまず実装する癖をつけることが、バグの少ない堅牢なアプリケーションを構築する上で極めて重要です。
まとめ
- 文字列を配列(Array)に変えるには標準の
split()メソッドを使用する - 文字列比較のエラー(バグ)を避けるために
map()とtrim()をセットで使い、データを綺麗にするのがベストプラクティス - 意図的なスペースを消さないよう、正規表現(replace)による一括削除には慎重になる
一言まとめ: 👉 文字列を分割するなら、split() 単体ではなく必ず trim() で「磨き上げる」工程をセットにしよう!