この記事で分かること
-
NetSuiteでのカスタムレコードの作り方(基本手順)
-
DB設計を踏まえた正しいデータ構造の考え方
-
トランザクションを親にした子レコード設計の方法
-
パフォーマンスを意識した実装(同期・非同期の使い分け)
-
SuiteScriptをAIで効率的に生成する方法
NetSuiteのカスタムレコードとは
NetSuiteのカスタムレコードとは、標準機能では管理できない業務データを扱うための拡張機能です。
例えば以下のようなケースで利用されます。
-
入金予定管理
-
承認フロー管理
-
独自マスタ管理
ただし、
👉 設計を誤ると後から修正が難しくなるため、最初の設計が非常に重要です。
カスタムレコード設計で最も重要なポイント(DB設計)
■ 結論:設計せずに作り始めない
NetSuiteでカスタムレコードを作る際に最も重要なのは、
👉 UI操作の前にデータ構造(DB設計)を決めることです。
設計をせずに進めると、以下の問題が発生します。
-
フィールドが増え続ける
-
データ構造が複雑になる
-
パフォーマンスが低下する
■ 入金予定管理の設計例
請求書に対して複数の入金予定を持たせる場合、以下のような構造になります。
請求書(トランザクション)
└ 入金予定(カスタムレコード)
├ 入金予定日
├ 入金予定額
├ 入金実績額
├ 消込フラグ
👉 これは一般的なリレーショナルデータベースと同じ「親子構造」です。
■ よくある設計ミス
-
カスタムフィールドで無理やり管理する
-
サブリスト的な構造を再現しようとする
👉 複数データを扱う場合は必ず子レコードに分離するのが基本です。
NetSuite カスタムレコードの作り方(手順)
① カスタムレコードの作成
-
レコードID:
customrecord_ar_receipt_plan -
名前フィールド:不要(OFF推奨)
👉 ID設計は後から変更しづらいため、命名ルールを決めておきます。
② フィールド定義
以下の項目を作成します。
-
親トランザクション(List/Record:Transaction)
-
入金予定日(Date)
-
入金予定額(Currency)
-
入金実績額(Currency)
-
消込フラグ(Checkbox)
③ 親子関係の設定(重要)
-
親レコード:トランザクション
-
サブリスト表示:有効
👉 これにより請求書に紐づいたデータとして管理できます。
④ フォームにサブリストを追加
-
請求書フォームにカスタムレコードを表示
👉 設定漏れが多いポイントなので注意が必要です。
トランザクションを親にするメリット
■ 請求書だけでなく注文書にも対応可能
トランザクションを親にすると、
-
請求書(Invoice)
-
注文書(Sales Order)
の両方に紐づけることができます。
■ 前受け金・売掛金を同一構造で管理
注文書(トランザクション)
└ 入金予定(前受け金)
請求書(トランザクション)
└ 入金予定(売掛回収)
👉 キャッシュフロー管理を統一できるのが大きなメリットです。
■ 設計上のメリット
-
データ構造を統一できる
-
SuiteScriptを共通化できる
-
レポート設計がシンプルになる
👉 拡張性の高い設計になります。
パフォーマンス対策(同期・非同期の使い分け)
■ よくある問題
-
保存時に大量の子レコード更新
-
同期処理で実装
👉 保存処理が遅くなる原因になります。
■ 同期処理(UserEvent)
-
即時反映される
-
処理が重くなりやすい
■ 非同期処理(Map/Reduce / Scheduled)
-
大量データ処理に強い
-
リアルタイム性は低い
■ 推奨パターン
👉 保存時は軽く、重い処理は非同期に分離する
例:
-
保存時:フラグ更新のみ
-
バックグラウンドで再計算
■ 実務構成
-
UserEvent:トリガー
-
Map/Reduce:データ更新
👉 パフォーマンスと安定性のバランスが取れます。
SuiteScriptをAIで自動生成する方法
■ 実際に試した結果
👉 適切なプロンプトで高精度なコード生成が可能です。
-
CRUD処理はほぼ自動化可能
-
開発効率が向上
■ 注意点
-
NetSuite特有仕様の抜け
-
ガバナ制限未考慮
👉 必ずレビューが必要です。
■ 精度を上げるプロンプトの書き方
-
レコード構造を明記
-
処理フローを具体化
-
制約条件を記載
■ 有償版の必要性
👉 無料版では精度が不足するケースがあります。
-
長文仕様に弱い
-
コンテキスト不足
👉 実務では有償版が現実的です。
まとめ:NetSuiteカスタムレコード設計のポイント
-
カスタムレコードはDB設計が最重要
-
親子構造で設計する
-
トランザクションを親にすると汎用性が高い
-
パフォーマンスは非同期前提
-
AIは効率化に有効だがレビュー必須
関連記事(内部リンク用)
-
NetSuite 入金消込の設計方法
-
SuiteScript 実装パターン集
-
Suitelet UIの作り方