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

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


| 内容 | 項目名 | 値 | 必須 | 説明 |
|---|---|---|---|---|
| ロジック | command | value | 〇 | 値をセットするコマンド |
| 入力 項目名 | 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

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

| 内容 | 項目名 | 値 | 必須 | 説明 |
|---|---|---|---|---|
| ロジック | command | fixed | 〇 | 固定値をセット |
| 出力項目名 | id | 文字列 | 〇 | セットする項目名 |
| 値 | value | 文字 | 〇 | セットする値 |
・join

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

| 内容 | 項目名 | 値 | 必須 | 説明 |
|---|---|---|---|---|
| ロジック | command | date | 〇 | 日付を取得してセットするコマンド |
| 処理 | operator | now, 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

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

| 内容 | 項目名 | 値 | 必須 | 説明 |
|---|---|---|---|---|
| ロジック | command | replace | 〇 | 項目の値を変換する |
| 出力項目名 | id | 文字列 | 〇 | 処理対象のアウトプット項目名 |
| 変換リスト名 | filePath | 文字列 | 〇 | 変換ルールを記載したtsvのファイルパス |
| 条件 | ifstate | 詳細は条件:ifstate | 条件がすべてtrueの場合に処理をする |
条件
・where
インプットCSVデータのうち、where条件がtrueのデータのみを対象とするフィルタリング処理
whereの処理内容は3つの配列要素で定義でき、配列要素をつなげることで複数処理を実行可能
| operator | 説明 | 配列要素① | 配列要素② | 配列要素③ |
|---|---|---|---|---|
| eq | equal to(==) | "eq" | 左オペランド(数値、文字列ともに可) | 右オペランド(数値、文字列ともに可) |
| ne | not equal to(!=) | "ne" | 左オペランド(数値、文字列ともに可) | 右オペランド(数値、文字列ともに可) |
| le | less than or equal to(<=) | "le" | 左オペランド(数値のみ可) | 右オペランド(数値のみ可) |
| ge | greater than or equal to(>=) | "ge" | 左オペランド(数値のみ可) | 右オペランド(数値のみ可) |
| match | 正規表現にマッチしている場合はtrue | "match" | 正規表現 | 対象文字列 |
・ifstate
ジョブコマンド実行対象のヘッダ/明細項目のうち、ifstate条件がtrueの項目のみを実行対象とするフィルタリング処理
ifstateの処理内容は3つの配列要素で定義でき、配列要素をつなげることで複数処理を実行可能
| operator | 説明 | 配列要素① | 配列要素② | 配列要素③ |
|---|---|---|---|---|
| eq | equal to(==) | "eq" | 左オペランド(数値、文字列ともに可) | 右オペランド(数値、文字列ともに可) |
| ne | not equal to(!=) | "ne" | 左オペランド(数値、文字列ともに可) | 右オペランド(数値、文字列ともに可) |
| le | less than or equal to(<=) | "le" | 左オペランド(数値のみ可) | 右オペランド(数値のみ可) |
| ge | greater than or equal to(>=) | "ge" | 左オペランド(数値のみ可) | 右オペランド(数値のみ可) |
| match | 正規表現にマッチしている場合はtrue | "match" | 正規表現 | 対象文字列 |
変数
ETL機能では、あらかじめ定義された「予約済み変数」を利用して、データの値を動的に参照したり加工したりできます。
一部の項目では、変数名を <> で囲んで入力することで、その変数の値を呼び出すことができます。
(例)<year>年<month>月分_データ → 2026年03月分_データ
・予約済み変数一覧
項目によって利用できる変数が異なります。以下の表を参照してください。
| 項目 | 変数名 | 説明 |
|---|---|---|
| インプットCSVのValue | value | コマンドのどの項目で使用するかによって意味が異なる ①CSVデータ各行のValue ②主キーのValue ③対象idを用いてvalueコマンドで設定したCSVデータ行のValue ④whereフィルタで抽出したCSVデータ行のValue |
| インプットCSVのItemName | itemName | コマンドのどの項目で使用するかによって意味が異なる ①CSVデータ各行のItemName ②主キーのItemName ③対象idを用いてvalueコマンドで設定したCSVデータ行のItemName ④whereフィルタで抽出したCSVデータ行のItemName |
| アウトプットCSVの行番号 | rowNumber | アウトプットCSVのヘッダ行を除いた値行の行番号。番号は1から採番される。 |
| 実行日付 | year, month, day | AIReadETL実行日付。フォーマットは以下の通り 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になります。
実行方法は以下をご参照ください。
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" |