【IRIS/Cache】テストデータを作成しよう(%Populate初級編)

本記事は、テストデータを作成する%Populateについて紹介します。
全2回 + αでお送りする第1回目になります。

※この記事は下記の方向けになります。
  • 大量のテストデータが必用な方
  • テストデータを作成する時間が惜しい方

はじめに

データベースアプリケーションの開発で、「ダミーデータ」を効率的に生成したいと思ったことはありませんか?
そのような場面で役立つのが、「%Populate」です。

初めて%Populateに触れる方や、どのように使うのか迷っている方に向けて、本記事ではこの機能の基本から実践的な使い方までを詳しく紹介したいと思います。

%Populateの仕様を理解することで、テストデータの作成時間が短縮し、開発効率を大幅に向上させることができます。

本記事は初級編として、一先ずテストデータを「簡単に」かつ「大量に」生成する方法を主眼にお送りいたします。

【テストデータ生成について関連記事】
生成AIを利用した、CSVからのテストデータ作成方法のご紹介

仕組み

「%Library.Populate(%Populate).cls」は、データを作成するクラスの親クラス(Extends)として設定します。

親クラスに設定すると、関数「Populate([作成するレコード数])」が使用可能になり、コマンドを実行する事で、テストデータを作成する事が可能になります。

データの各プロパティの値は、該当プロパティのデータ型(「文字列」「数値」「日付」等々)に基づき、値がランダムに作成されます。

また、「%Library.PopulateUtils.cls」やカスタムロジックを追加することで、実用的なデータを生成することも可能です。

基本的な使い方

%Populateを使った基本的なデータ生成の方法を見ていきます。

先ずは、%Persistentと%Populateを継承したデータクラスを作成します。

Class developer.data.Sample Extends (%Persistent, %Populate)
{

Index idx On code [ PrimaryKey ];

Property code As %String;

Property name As %String;

Property flg As %Boolean;

Property number As %Integer;

Property birthDay As %Date;

}

このクラスに対して、以下のコードを実行することで500件のダミーデータを生成できます。
 ※値がランダム生成のためPrimaryKeyが重複すると、若干足りない時があります。

w ##class(developer.data.Sample).Populate(500) // 497 ...3件重複

では、管理ポータルで作成したデータを確認してみます。

プロパティ「name」だけ意味ありげな値となっていますが、後は基本的にランダムな値となっています。

これは、「特定のプロパティ名」の時に実行される関数より取得しています。
 ※データは全て英語か数値になります(日本じゃ使いにくい!)。

プロパティ名呼び出す関数
%PopulateUtils
説明サンプル値
NAME.Name()名前Clinton,Liza Z.
SSN.SSN()米国保障番号322-75-2265
COMPANY.Company()会社名MicroComp Associates
TITLE.Title()役職Global Technician
PHONE.USPhone()米国電話番号435-536-8634
CITY.City()都市名(26都市)Chicago
STREET.Street()住所9917 Second Place
ZIP.USZip()米国郵便番号78416
MISSION.Mission()企業のミッションEnabling individuals and…
STATE.USState()米国の州の略語SC
COLOR.Color()色名(5色)Green/Blue/Red/Black/Yellow
PRODUCT.Product()製品名(4つ)Desk/Lamp/Table/Chair

プロパティ名が上記リスト外の場合、該当プロパティの型よりランダムな値を生成します。

【データ生成が自動で行われるデータ型一覧】
  • %String
  • %Integer
  • %Date
  • %Binary
  • %Double
  • %Boolean
  • %Currency
  • %Float
  • %Numeric
  • %Decimal
  • %PosixTIme
  • %TimeStamp
  • %SmallInt
  • %Time
  • %TinyInt
  • %BigInt

意味のある値を格納する

ランダムな値でデータを作成した場合、必用なテストが十分に行えない場合があります。

その場合、各プロパティに対しPOPSPEC パラメータを指定する事で、Populate()を実行する際に意味のある値を設定する事が可能です。

POPSPECパラメータの基本仕様

下記がサンプルです。
POPSPECパラメータの関数指定方法は、下記3種類となります。

  • 関数名()のみ → %PopulateUtilsの関数を実行
  • .関数名() → 自クラスで実行できるインスタンスメソッドを実行
  • ##class(クラス名).関数名() → クラスメソッドを実行
Class developer.data.Sample Extends (%Persistent, %Populate)
{

/// %PopulateUtilsより取得
Property text As %String(POPSPEC = "Title()");

/// インスタンスメソッドより取得
Property ID As %String(POPSPEC = ".Sample()");

/// クラスメソッドより取得
Property name As %String(POPSPEC = "##class(developer.data.Sample).GetName(""名前"")");

Method Sample() As %String
{
	q $tr($j($r(1000),8)," ","0")
}

ClassMethod GetName(txt As %String) As %String
{
	q "サンプル値:"_$r(1000)_txt
}

}

「Populate()」を実行し、データを作成してみました。
指定した関数が実行され、値が格納されているのが確認できます。

【Populate用のクラス作成】
下記クラスを用意しておけば、色々なプロジェクトで使いまわせるので便利です。
 →②はお好みで

①Populate用のクラスを作成し、データ作成用のクラスメソッドを記述する。
②継承用に①のクラスメソッドを呼ぶインスタンスメソッドを記述する。

おわりに

%Populateで生成したデータは、テスト環境での動作確認やパフォーマンス評価に最適です。
また、以下のような場面でも役立ちます。

  • 新しい機能の試験的な実装
  • データ量に応じたスケーラビリティの検証
  • フィルタリングやソート機能の動作確認

本記事では、%Populateについてその基本的な使い方から、応用的なカスタマイズ方法までをご紹介しました。

%Populateを活用することで、効率的にテストデータを生成し、開発やテストの品質を向上させることができます。
生産性を高めるためにも、ぜひご活用してみてください。

次回は%Populateの2回目「マニアック編」をお送りいたします。