NetSuiteへのデータ移行を楽にする SuiteQL と SuiteAnalytics ワークブックの二刀流（開発者向け）

**はじめに**
[前回の記事](https://qiita.com/fujitak/items/9ecb4f374430c26bbb7c) では、NetSuiteでデータを検索する一つの手法である「N/search」を応用し、自然言語をパラメーターに変換してデータを抽出するボットを作成しました。あえて、NetSuite用のSQLである「SuiteQL」ではなく、より歴史のある「N/search」を選択したのは、自然言語から 「NetSuite専門のSQL文」を作成するよりも、自然言語から 「N/searchのパラメーター」 を作成するほうが、私の試作段階では簡単かつ高精度に実現できたためです。また、N/searchパラメーターは、直感的に目視確認しやすいというメリットもありました。

今回は、SuiteQL（SQLライクな問い合わせ言語）を用いて、NetSuiteの画面からSuiteQLを実行してデータをダウンロードするアプリを試作し、実際のビジネスシナリオでどのように活用できるか、検討してみました。そのサンプルアプリの名前は、「SuiteQL むさし君」 です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/b05f6a18-b9f4-49f5-bc3e-ad10e1c36f00.png)
<br>

**ちなみに、SuiteAnalytics ワークブックとは？**
[それ](https://www.netsuite.co.jp/products/business-intelligence.shtml) は、NetSuiteに標準搭載されている分析機能の一つで、GUIを通じて簡単にデータを抽出・分析し、視覚的にデータセットやレポートを作成できるツールです。「NetSuite上で、エクセルピボットテーブルやピボットグラフを作成する」、というイメージです。

なお、SuiteAnalytics ワークブックで、ドラッグ＆ドロップにより作成したレポートは、複雑なものであっても「SuiteQL」へ変換することができます。つまり、ワークブックと SuiteQL は「表裏一体」であり、「Microsoft Access」の「クエリ」が、専用の「SQL」へ変換できる関係と同じです。さらに例えるなら、SuiteQL は「舞台で頑張る黒子」、「縁の下の力持ち」、「開発者の味方」なのであります。そして、SuiteQL は「N/search」や保存検索では実現できない、柔軟で高度なデータ取得を可能にしてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/0954b14e-0249-4ee3-bdc6-2b596c882980.png)

<br>

**具体的なビジネスシーン**
順番が逆になりますが、先ずは「SuiteAnalytics ワークブック」の例として、製造業における、データ移行をあげます。製造業では、多段階の階層構造を持つ、複雑なBOM（部品表）などの原価データを、システム上で正確に保持する必要があります。レガシーシステムからNetSuiteへ移行する際、移行した、または移行中の「BOM関連データ」が正しくNetSuiteへ反映されているか、検証が不可欠です。NetSuite の BOM 関連データには、「アセンブリ → BOM → BOMリビジョン → コンポーネント（アイテム）」があります（一部です）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/d89f95b5-377c-46ec-93d6-40ceb375eac2.png)



上記のスクリーンショットのように、ひとつひとつのアセンブリに対してではなく、有効なアセンブリ全てに対して、「BOM関連データ」を一括して取得するのに、SuiteAnalytics ワークブック は、非常に便利です。

a.　「分析」タブを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/459fd893-3328-4202-881a-9cd7ea7f826f.png)

b.　新規ワークブックで、「部品表リビジョン・コンポーネント」データセットを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/297c1441-3b36-4609-82cd-a232566c97c9.png)


c.　ドラッグ＆ドロップで、「アセンブリ → BOM → BOMリビジョン → コンポーネント（アイテム）、数量」などを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/250f90f1-1d89-4271-83fb-a74c5356be16.png)


d.　そのデータをごっそりダウンロードして、レガシーシステムのデータと比較する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/43d1d208-24f5-4a20-834b-f0c3eb2dc441.png)


<br>

**なぜ、SuiteQL 「も」使うと便利なのか？**
前項にて、「a, b, c, d」と簡単に表現しましたが、ドラッグ＆ドロップで作成されたデータが本当に正しいのか判断する、または、正しいものを作ることは、全員ができるものではありません。それは、どんなツールも同じであり、ドラッグ＆ドロップの「操作」はだれにでもできますが、求められる成果物（レポート）のデータ量や複雑さが増すにつれ、「操作」の後の「見極め」ができる人材のプールのは、残念ながら限られるのが現実でしょう。「BOM関連データ」の一括取得のためのワークブック作成を、「市民開発者 (Citizen Developer)」に完全に任せるのは、少し荷が重いかと思われます。

なお、異なる環境間で、カスタムのワークブックを移植する機能は、標準では存在しませんが、SuiteQL は SQL文 なので、標準のデータソースを参照しているかぎり、それはどの環境でも同じようにデータを取得してくれます。そんな背景がから、「どうやってBOM関連ワークブックを作成するのか」をスクリーンショットの指示書として提供する代わりに、「完成後のワークブック」をSuiteQL へ変換し、SuiteQLで正確なデータを取得してもらうほうが、効率的なケースも存在します。
<br>


**SuiteAnalytics と SuiteQL の併用の、特殊な場合の例**
**A: NetSuiteパートナーなど、開発者側の「サンドボックス」環境**
1.　SuiteAnalyticsワークブックで視覚的にデータセットを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/250f90f1-1d89-4271-83fb-a74c5356be16.png)

2.　ワークブックからSuiteQLをエクスポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/b30a7d84-9232-4346-8ff5-3a4e68bdd06a.png)

3.　「SuiteQL むさし君」や SuiteScript などのツールを使用して、SuiteQL を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/26c246cd-d217-4154-8053-474544495a9f.png)

4.　実行結果を確認し、必要に応じてSuiteQL文を調整して完成させる（1～4を繰り返す）
例： 「ORDER BY」句の追加など
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/d0c03e15-07cd-4214-bbed-b50d3147c096.png)
<br>

**B: ユーザー側（ERP管理チームなど）の「本番」環境**
5.　完成品の SuiteQL 文を受け取り、所定のツールを使用してデータを取得し（CSVダウンロードなど）、レガシーシステムのデータと比較する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/ef693acf-ec73-4238-9ba2-53f70a767678.png)

※従来通り、ユーザー側で標準的に、SuiteAnalytics ワークブックをドラッグ＆ドロップで複製し、そのCSVエクスポート機能を使用頂いて問題ありません。上記1～5 は、あくまで非常に複雑なクエリを SuiteQL文 を通じて複製する、特殊なケースです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/43d1d208-24f5-4a20-834b-f0c3eb2dc441.png)
<br>

**サンプルアプリ「SuiteQL むさし君」の技術的なポイント（開発者向け）**
今回のプロトタイプには以下の工夫加えてみました：
- SuiteQL実行前に、SQL文を解析し、大規模または危険な問い合わせを事前にブロック
- 実行成功時のみ結果のプレビューを表示し、CSVダウンロードを許可
- NetSuite標準のLLM「N/llm」を活用し、SQL文とその実行結果に対する分析コメントを生成（※むさし君は、SuiteQL と N/llm の「両刀使い」、というオチです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/a0face55-54cf-4cd0-8612-773c227378b1.png)


※長時間におよぶ巨大なデータ取得が行われる可能性ゼロではないため、「SuiteQL むさし君」の使用は、サンドボックス環境を前提としてください。ただし、実際にそのような問い合わせが実行されたとしても、SuiteCloud は5分後にエラーを返す機能が備わっています。詳細については、以下のリンクを参考にされてください。
[NetSuite サポートコミュニティ› 開発者コミュニティ › SuiteCloud 大容量データ処理に関する、5つのFAQ](https://community.oracle.com/netsuite/japanese/discussion/4507218/)



[※「MusashiQL-chan.zip（ソースコード、手順書など）」（© 2025 Takusuke Fujii）は、CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布可能ですが、無保証につき著作者は一切責任を負いません。](https://drive.google.com/file/d/1ddIRDc3yfNGsWcKRBQZFrfTGGEUzoDfF/view?usp=sharing)
<br>

**LLMによる、今後の SuiteQL などの生成について**
本日時点では、複雑なBOM関連の SuiteQL（NetSuite 専用 SQL）を、自然言語から正確に生成するのは困難です。しかしながら、それも時間の問題であり、そう遠くない未来（数か月後かもしれません）に実現するでしょう。

一方で、生成AIが提供してくれるヒントやソースコードを細部まで確認し、改良して実用的なものに仕上げていくことは、幸いにもまだエンジニアの役割です。そうした状況が、もうしばらくは続けばいいなと思っています。
<br>

**まとめ、次回の予定**
今回は、NetSuiteのマスタデータである「BOMリビジョンコンポーネント」などを一括取得できる標準ツールとして、「SuiteAnalytics ワークブック」をご紹介しました。それに加えて、「SuiteQL」を併用した、複雑なクエリの再現とデータ取の特殊ケースもご紹介しました。

次回の記事では、NetSuiteにおけるトランザクションデータである、「Costed Bill of Materials（部品表原価）」 に関する情報提供を予定しています。
<br>

**参考リンク**
[Oracle NetSuite Help Center > SuiteQL](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156257770590.html)
[Oracle NetSuite Help Center > N/llm Module](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_9123730083.html#subsect_1014032311)
[NetSuite サポートコミュニティ› AI関連機能› SuiteScript 2.x 生成AI API](https://community.oracle.com/netsuite/japanese/discussion/4503315/suitescript-2-x-%E7%94%9F%E6%88%90ai-api#latest)
[Qiita > サンタクロースと原価計算](https://qiita.com/fujitak/items/4921573db61928affc2d)
<br>



© 2025 Takusuke Fujii
本記事は CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布できますが、無保証につき著作者は一切責任を負いません。