9. AIReadETL (v5.3.0~)

ETLとは、Extract、Transform、Load の頭文字を取ったもので、複数のソースシステムからデータを「抽出」し、抽出したデータを「変換」、変換されたデータを「書き出し・格納」して活用しやすくします。

AIReadETLは、AIRead独自CSVをinputとし、要望のCSVに変換する機能です。

9.1. ETLフォルダの構成

ETLフォルダは以下の構成にする必要があります。

ETLProject/                                    ---------(ETLフォルダ)
└ [プロジェクトID]/
├ header.txt                                    ---------  出力ヘッダリストファイル
├ InputHeader.txt                            ---------  入力ヘッダリストファイル
├ job.json                                       ---------  ジョブファイル
└ setting.ini                                    ---------  設定ファイル

9.2. データ加工処理(ETL)を作成

FormEditorのETLタブからETLを作成・編集できます。

9.2.1. 新規プロジェクトを作成する

新規プロジェクトを選択し、任意のプロジェクト名を入力します。

9.2.2. ロジック画面

ETLの入力値、出力値、コマンドを設定します。

No.項目説明
1入力:ヘッダーヘッダーの入力値
AIReadで読み取ったヘッダー項目から活用したい項目を追加する
2入力:明細明細の入力値
AIReadで読み取った明細項目から活用したい項目を追加する
3入力:変数変数に値をセットできる
4出力:ヘッダーヘッダーの出力値
ヘッダー項目の変換・加工後の出力値を設定
5出力:明細明細の出力値
明細項目の変換・加工後の出力値を設定
6ロジック変換処理の設定
入力、出力、コマンドを選択し入力値→出力値を要望の形にするための設定
詳細は9.2.3. ロジックの追加

9.2.3. ロジックの追加

白背景部分を右クリックし新規作成を選択します。

ロジックのプルダウンを選択するとコマンドが表示されます。

コマンド各種

・master

内容項目名必須説明
ロジックcommandmaster別のCSVファイルからリストを取得
※使用できるCSVの仕様
 ・区切り文字:,(カンマ)
 ・クオート:ダブルクォーテーションあり・なしに対応
 ・改行コード:LF、CRLF、CR
 ・項目内のダブルクォーテーション:ダブルクォーテーションで囲まれた項目内のダブルクォーテーションは、2つ重ねる("")ことでエスケープされます。
  例)"テーブル(""木製"")" → テーブル("木製")
マスタ名valueName文字列リストの名称を指定
マスタファイルfilePathファイルパスCSVのファイルパス
マスタファイルの文字コード
(v5.3.2~)
option文字列の配列マスタファイルの文字コードを指定可能
・UTF-8
・Shift-jis

・value

内容項目名必須説明
ロジックcommandvalue値をセットするコマンド
入力
項目名
value文字列fromを指定
しない場合〇
input CSVの項目名を指定するとその項目の値をセットする
(fromが指定されている場合は不要)
出力
項目名
id文字列値をセットする項目名
マスタ名from文字列マスタから取得する場合に使用、
masterで指定したvalueを指定(<>で囲む)
キーの列番号keyColumn数値fromを指定
する場合〇
masterで検索キーとする項目の列番号を指定
キー文字列keyName
(fromを指定しない場合)
itemName,
value
パラメータで指定されたinputCSVの項目の値をセットする
キー文字列keyName
(fromを指定する場合)
文字列fromを指定
する場合〇
検索キーとする文字列
値の列番号valueColumn数値fromを指定
する場合〇
masterでセットする項目の列番号を指定
フィルタwhere詳細は条件:where対象とする項目をフィルタリングする

・order

内容項目名必須説明
ロジックcommandorder明細に出力する基準とする項目を作成する
入力
項目名
value正規表現対象とする項目を指定
キー文字列keyNameitemName,
value
対象とする文字列を項目名か値かで指定
(現在、項目名のみ対応)
フィルタwhere詳細は条件:where対象とする項目をフィルタリングする

・fixed

内容項目名必須説明
ロジックcommandfixed固定値をセット
出力項目名id文字列セットする項目名
value文字セットする値

・join

内容項目名必須説明
ロジックcommandjoin項目の値を結合する
出力項目名id文字列セットする項目名
value正規表現結合する値を指定
キー文字列keyNameitemName,
value
regexの対象とする文字列を項目名か値かで指定
文字の一部を取得(正規表現)regex正規表現結合する値をキャプチャする
フィルタwhere詳細は条件:where結合の対象とする項目をフィルタリングする

・date

内容項目名必須説明
ロジックcommanddate日付を取得してセットするコマンド
処理operatornow,
convert(v5.3.2~)
now(処理日時を取得):
 処理時刻を取得してセット
convert(日付変換):
 idで指定した項目の日付フォーマットを変換する
入力フォーマット
(v5.3.2~)
type(例) yyyy年MM月dd日operator=convertの場合変換前の日付フォーマットを指定
出力項目名id文字列セットする項目名
出力フォーマットvalue(例) yyyy/MM/dd出力フォーマット、自由に指定可能
<対応しているフォーマットパターン>
 yy yyyy:西暦年
 M MM:月
 D DDD:年に対する日
 d dd:月に対する日
 w:年に対する週
 W:月に対する週
 E:曜日(英語、省略形)
 F:月に対する曜日の回数
 a:AM/PM
 h hh:時(12時間制)
 H HH:時(24時間制)
 m mm:分
 s ss:秒
 S SSS:ミリ秒

・calc

内容項目名必須説明
ロジックcommandcalc計算した結果をセットするコマンド
出力項目名id文字列セットする項目名
演算子operatoraddadd:valueにセットした値を加算する
value数値この値で計算

・replace

内容項目名必須説明
ロジックcommandreplace項目の値を変換する
出力項目名id文字列処理対象のアウトプット項目名
変換リスト名filePath文字列変換ルールを記載したtsvのファイルパス
条件ifstate詳細は条件:ifstate条件がすべてtrueの場合に処理をする
条件

・where

インプットCSVデータのうち、where条件がtrueのデータのみを対象とするフィルタリング処理
whereの処理内容は3つの配列要素で定義でき、配列要素をつなげることで複数処理を実行可能

operator説明配列要素①配列要素②配列要素③
eqequal to(==)"eq"左オペランド(数値、文字列ともに可)右オペランド(数値、文字列ともに可)
nenot equal to(!=)"ne"左オペランド(数値、文字列ともに可)右オペランド(数値、文字列ともに可)
leless than or equal to(<=)"le"左オペランド(数値のみ可)右オペランド(数値のみ可)
gegreater than or equal to(>=)"ge"左オペランド(数値のみ可)右オペランド(数値のみ可)
match正規表現にマッチしている場合はtrue"match"正規表現対象文字列

・ifstate

ジョブコマンド実行対象のヘッダ/明細項目のうち、ifstate条件がtrueの項目のみを実行対象とするフィルタリング処理
ifstateの処理内容は3つの配列要素で定義でき、配列要素をつなげることで複数処理を実行可能

operator説明配列要素①配列要素②配列要素③
eqequal to(==)"eq"左オペランド(数値、文字列ともに可)右オペランド(数値、文字列ともに可)
nenot equal to(!=)"ne"左オペランド(数値、文字列ともに可)右オペランド(数値、文字列ともに可)
leless than or equal to(<=)"le"左オペランド(数値のみ可)右オペランド(数値のみ可)
gegreater than or equal to(>=)"ge"左オペランド(数値のみ可)右オペランド(数値のみ可)
match正規表現にマッチしている場合はtrue"match"正規表現対象文字列
変数

ETL機能では、あらかじめ定義された「予約済み変数」を利用して、データの値を動的に参照したり加工したりできます。
一部の項目では、変数名を <> で囲んで入力することで、その変数の値を呼び出すことができます。
(例)<year>年<month>月分_データ → 2026年03月分_データ

・予約済み変数一覧
項目によって利用できる変数が異なります。以下の表を参照してください。

項目変数名説明
インプットCSVのValuevalueコマンドのどの項目で使用するかによって意味が異なる
①CSVデータ各行のValue
②主キーのValue
③対象idを用いてvalueコマンドで設定したCSVデータ行のValue
④whereフィルタで抽出したCSVデータ行のValue
インプットCSVのItemNameitemNameコマンドのどの項目で使用するかによって意味が異なる
①CSVデータ各行のItemName
②主キーのItemName
③対象idを用いてvalueコマンドで設定したCSVデータ行のItemName
④whereフィルタで抽出したCSVデータ行のItemName
アウトプットCSVの行番号rowNumberアウトプットCSVのヘッダ行を除いた値行の行番号。番号は1から採番される。
実行日付year, month, dayAIReadETL実行日付。フォーマットは以下の通り
year:0 - 現在(2026)
month:01 - 12
day:01 - 31
インプットCSVヘッダform_id, result などインプットCSVの行の中でpage=-1に該当する項目を変数として扱える
ItemNameを変数名、Valueを変数に格納された値とする

9.2.4. 設定画面

設定タブで出力時の設定をします。

内容項目名説明
出力形式OUTPUT_MODE・1つの明細を1行で出力
・ヘッダとすべての明細を1行で出力
明細件数DETAIL_ROW_NUMBER出力する明細の件数を指定
出力CSV文字コードOUTPUT_CHARACTER_CODE・UTF-8
・SJIS
アウトプットCSVのファイル名
(v5.3.2~)
OUTPUT_FILE_NAME出力するCSVファイルの規則を指定する
「*」「?」「"」「|」は使用不可
<date>:出力時の実行日付8桁(yyyymmdd)をファイル名に表記する
<time>:出力時の実行時間8桁(hhmmssms)をファイル名に表記する
<year>:出力時の実行年(西暦の数字4桁 yyyy)をファイル名に表記する
<month>:出力時の実行月(月の数字2桁 mm)をファイル名に表記する
<day>:出力時の実行日(日付の数字2桁 dd)をファイル名に表記する
<item:項目名>:読み取り結果に含まれる項目名を指定することで、読み取った値をファイル名に表記する
※<item:項目名>の「項目名」は以下の項目名も指定可能
 Image, Image_jshfilename, modifyDate, processDate, result, form_id, group_name
 項目の内容は6.1. 共通を参照
※「/」を入れることでフォルダの指定も可能
 例:/csv_
   と指定すると年ごとに別のフォルダに出力する

ETL設定後はかならず左下の保存ボタンを押して、設定を保存してください。

9.3. AIReadETLの実行

AIReadETLを実行する際は、まずControlPanelで以下の設定をします。
(個別で設定したい場合は個別設定画面で設定をしてください。)

・出力フォーマット:「AIReadETL」を選択
・ETLプロジェクト名:実行したいプロジェクト名を選択

設定後は必ず保存ボタンを押して、設定を保存してください。

設定後、以下のどれかの実行方法で実行します。
実行するタイミングや、作業の目的に合わせていずれかの方法を選択してください

9.3.1. 実行方法(arexファイルを利用する場合)

AIReadを実行して読取から変換までを行い、アウトプットが変換後のCSVになります。
実行方法は以下をご参照ください。

2.2. 実行方法(arexファイルを利用する場合)

9.3.2. 実行方法(batファイルを利用する場合)

AIReadまたはViewerで出力したAIRead独自形式のCSVを入力として、変換したCSVを作成します。

コマンドを使用し、実行結果を出力します。
以下のコマンドを実行してください。

・run_ETL.bat

> run_ETL.bat
"%AIREAD_JAVA%/java" -Dfile.encoding=UTF-8 -jar "%AIREAD_HOME%/lib/AIReadETL-1.5-SNAPSHOT.jar" -input <ファイル/フォルダパス> -output <フォルダパス> -setting <設定ファイルパス>
・起動コマンド
引数必須説明
-i(-input)inputとするCSVファイル/フォルダ
<前提条件>
・形式:CSV(AIRead独自形式)
・文字コード:UTF-8
-o(-output)outputのcsvを出力するフォルダ
-s(-setting)ETLプロジェクトの設定ファイルパス

9.4. サンプル

ETLのサンプルプロジェクトです。
下記よりzipファイルをダウンロードできます。
AIReadETL_sample.zip

内容物
・AIRead_conf -------- フォーマット定義フォルダ
・ETLProject -------- ETLプロジェクトサンプルフォルダ
・input -------- input画像ファイル
・outputCSV -------- 各出力CSVイメージ
・readme.txt -------- ETLプロジェクトサンプルの詳細

ダウンロード後、「AIRead_conf」と「ETLProject」の2つのフォルダーをご自身のAIReadインストールフォルダ直下に置いてください。
※置く際は既存のフォルダをリネームし、退避して置くか、中身を既存のフォルダに移してください。

サンプル1(Invoice1)

・明細の行数分だけ行を出力、ヘッダ項目はすべて同じものを出力(設定タブ)
・請求日付は処理日時を出力(date1)

・出力CSVイメージ

"合計金額","請求日時","商品名","数量","単価"
"\1,573,456","20251216","応接テーブル","2","\59,800"
"\1,573,456","20251216","事務机","14","\14,800"
"\1,573,456","20251216","椅子","14","\36,800"
"\1,573,456","20251216","キャビネツト","10","\59,800"
"\1,573,456","20251216","電子レンジ","2","\19,800"
"\1,573,456","20251216","冷蔵庫","2","\89,000"
サンプル2(Invoice1-1line)

・ETLの処理はケース1と同様
・出力する明細の件数を指定し、ヘッダとすべての明細を1行で出力(設定タブ)

・出力CSVイメージ

"合計金額","請求日時","商品名1","数量1","単価1","商品名2","数量2","単価2","商品名3","数量3","単価3","商品名4","数量4","単価4","商品名5","数量5","単価5","商品名6","数量6","単価6","商品名7","数量7","単価7","商品名8","数量8","単価8","商品名9","数量9","単価9","商品名10","数量10","単価10"
"\1,573,456","20260225","応接テーブル","2","\59,800","事務机","14","\14,800","椅子","14","\36,800","キャビネット","10","\59,800","電子レンジ","2","\19,800","冷蔵庫","2","\89,000","","","","","","","","","","","",""
サンプル3(Invoice1-master)

・別のCSVファイルからリストを取得する(master1)
・マスタの1列目の値が「item_num」の値と一致したマスタの行2列目の値を明細に出力する(value3)

・master CSVイメージ

10845,table
22563,desk
00562,chair
41523,cabinet
20783,microwave oven
30856,refrigerator

・出力CSVイメージ

"税込合計","税抜合計","処理日時","商品名","数量"
"\1,573,456","\1,657,600","20260225","table","2"
"\1,573,456","\1,657,600","20260225","desk","14"
"\1,573,456","\1,657,600","20260225","chair","14"
"\1,573,456","\1,657,600","20260225","cabinet","10"
"\1,573,456","\1,657,600","20260225","microwave oven","2"
"\1,573,456","\1,657,600","20260225","refrigerator","2"
サンプル4(Invoice3-order)

・「帳票種別」の値を変数として設定し、出力項目に使用(変数:docFormat)
・項目名が「数量_(.+)」の()内の値を変数として設定し、入力項目、出力項目に使用(変数:label)
・「数量_*」という項目に値が入っているものだけを明細に出力する(order1)
・変換リスト「number」の変換ルールを適用して出力する(replace)
 ※AIReadインストールフォルダがデフォルトである前提のサンプルです。それ以外の場合は変換リストを再設定してください。
・固定値を出力(fixed)

・出力CSVイメージ

"御請求書No.","出力日時","請求先","担当者","承認者","商品名","数量","最大数量","単価","金額"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","応接テーブル","3","(100)","59,800","\179,400"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","事務机","14","(100)","14,800","\207,200"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","椅子","14","(100)","36,800","\515,200"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","冷蔵庫","2","(100)","89,000","\178,000"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","モニター","28","(100)","24,800","\694,400"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","デスクトップPC","14","(100)","119,800","\1,677,200"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","プロジェクター","2","(100)","39,800","\79,600"
"No.000266","2026/02/25","株式会社東京","山田太朗","鈴木一朗","ホワイトボード","4","(100)","15,980","\63,920"