集合処理
最終更新日: 2022年10月28日
R8 | R9
レコードの総数を求めます。計算結果を格納する項目の型は「整数」としてください。
条件に合致するデータが存在しなかった場合、"0" 件と表示されます。
[制約...]
例:繰り返し項目 number の件数を求める。
COUNT
COUNT(繰り返し項目, [条件])
COUNT(繰り返しコンテナ名, [条件])
COUNT(外部キー子モデル名, [条件])
COUNT(${number})
例:繰り返しコンテナ report の件数を求める。
COUNT(${report})
例:外部キー子モデル support の件数を求める。(外部キーの指定方法の詳細...)
COUNT(${support_lp})
条件の指定
二重引用符(ダブルクォーテション)の中に、条件式を記述します。項目名は${...} で囲みます。
例:繰り返し項目 number について、正の数となっている件数を求める。
COUNT(${number}, "${number}>0")
例:繰り返しコンテナ report の件数を求める。ただし同コンテナ内の項目である report/date が今年のもののみとする。
COUNT(${report}, "YEAR(${report/date})==YEAR(TODAY())")
例:外部キー子モデル support の項目 kingaku の件数を求める。ただし子モデルの項目 name に値がセットされているもののみとする。(外部キーの指定方法の詳細...)
COUNT(${support_lp}, "${support_lp.name}!=null")
例:条件部にモデル参照項目を指定する。ID 部で判断する場合。
COUNT(${report}, "${report/type#id}==1")
COUNT(${support_lp}, "${support_lp.type#id}==1")
例:条件部にモデル参照項目を指定する。内容部で判断する場合は文字列一致比較のため EXACT 関数と併用します。
COUNT(${report}, "EXACT(${report/type#content}, "男")")
COUNT(${support_lp}, "EXACT(${support_lp.type#content}, "男")")
注意
COUNT 関数は "自分のモデルの検索結果" を扱うものではありません。この場合は RESULTSIZE 関数を利用します。
SUM
SUM(繰り返し項目, [条件])
SUM(繰り返しコンテナ項目, [条件])
SUM(外部キー子モデル項目, [条件])
指定した集合値の加算を行います。 計算結果を格納する項目の型、ならびに計算対象項目の型は「整数」(あるいはその他、数値を表現する型)としてください。 [制約...]
例:繰り返し項目 number の合計を求める。
SUM(${number})
例:繰り返しコンテナ report/number の合計を求める。
SUM(${report/number})
例:外部キー関連モデル support の項目 kingaku の合計を求める。(外部キーの指定方法の詳細...)
SUM(${support_lp.kingaku})
条件の指定
二重引用符(ダブルクォーテション)の中に、条件式を記述します。項目名は${...} で囲みます。
例:繰り返し項目 number について、正の数の合計を求める。
SUM(${number}, "${number}>0")
例:繰り返しコンテナ report/number の合計を求める。ただし同コンテナ内の項目である report/date が今年のもののみとする。
SUM(${report/number}, "YEAR(${report/date})==YEAR(TODAY())")
例:外部キー子モデル support の項目 kingaku の合計を求める。ただし子モデルの項目 name に値がセットされているもののみとする。(外部キーの指定方法の詳細...)
SUM(${support_lp.kingaku}, "${support_lp.name}!=null")
例:条件部にモデル参照項目を指定する。ID 部で判断する場合。
SUM(${report/number}, "${report/type#id}==1")
SUM(${support_lp.kingaku}, "${support_lp.type#id}==1")
例:条件部にモデル参照項目を指定する。内容部で判断する場合は文字列一致比較のため EXACT 関数と併用します。
SUM(${report/number}, "EXACT(${report/type#content}, "男")")
SUM(${support_lp.kingaku}, "EXACT(${support_lp.type#content}, "男")")
演算精度8.2.0
R8.2.0より集合関数 SUM は java.math.BigDecimal を使います。
AVERAGE
AVERAGE(繰り返し項目, [条件])
AVERAGE(繰り返しコンテナ項目, [条件])
AVERAGE(外部キー子モデル項目, [条件])
平均値を算出します。
整数型の項目に対する平均値を求める場合、計算結果を格納する項目の型は「8バイト浮動小数点」とすることを推奨します。(「4バイト浮動小数点」よりも演算精度が高くなります。) その他の記述例、制約については SUMと同様です。
演算精度8.2.0
R8.2.0より集合関数 AVERAGE は java.math.BigDecimal を使います。
MAX
MAX(繰り返し項目)
MAX(繰り返しコンテナ項目)
MAX(外部キー子モデル項目)
MAX(数値1, 数値2), MAX(数値が格納された配列)
MAX(日付1, 日付2), MAX(日付が格納された配列)
MAX(文字列1, 文字列2), MAX(文字列が格納された配列)
複数個の引数のうち、最大値を返します。 引数が二つ以上の場合は、ARRAY関数と組み合わせて利用できます。
引数に繰り返し項目、繰り返しコンテナ項目、外部キー子モデルを指定できます。 また項目の型に日付型、文字列型を指定できます。
例:multiple_item は繰り返し項目
MAX(${multiple_item})
例:繰り返しコンテナ項目 report/number を対象
MAX(${report/number})
例:外部キー子モデルとして紐づいている support モデルの kingaku 項目を対象
MAX(${support_lp.kingaku})
例:二つの項目 item1, item2 は同じ型
MAX(${item1}, ${item2})
例:複数の項目 item1, item2, item3 は同じ型
MAX(ARRAY_INT(${item1}, ${item2}, ${item3})
MIN
MIN(繰り返し項目)
MIN(繰り返しコンテナ項目)
MIN(外部キー子モデル項目)
MIN(数値1, 数値2), MIN(数値が格納された配列)
MIN(日付1, 日付2), MIN(日付が格納された配列)
MIN(文字列1, 文字列2), MIN(文字列が格納された配列)
複数個の引数のうち、最小値を返します。 引数が二つ以上の場合は、ARRAY関数と組み合わせて利用できます。
例:multiple_item は繰り返し項目
MIN(${multiple_item})
例:繰り返しコンテナ項目 report/number を対象
MIN(${report/number})
例:外部キー子モデルとして紐づいている support モデルの kingaku 項目を対象
MIN(${support_lp.kingaku})
例:二つの項目 item1, item2 は同じ型
MIN(${item1}, ${item2})
例:複数の項目 item1, item2, item3 は同じ型
MIN(ARRAY_INT(${item1}, ${item2}, ${item3})
FIRST
FIRST(繰り返し項目, [条件])
FIRST(繰り返しコンテナ項目, [条件])
FIRST(外部キー子モデル項目, [条件])
先頭のレコードの値を取得します。
文字列型/整数型/日付型など、さまざまな型で用いることができます。計算結果を格納する項目の型と、計算対象となる項目の型を同じとしてください。(ただしモデル参照については参照先の型を指定してください。[詳細...])
この設定を行うときは繰り返しコンテナ内のすべての項目について、ソートボタンを非表示にすることを推奨します。(ソートされてしまうと、最後のレコードが変わってしまうため。)
その他の記述例、制約については SUMと同様です。
LAST
LAST(繰り返し項目, [条件])
LAST(繰り返しコンテナ項目, [条件])
LAST(外部キー子モデル項目, [条件])
最後のレコードの値を取得します。
文字列型/整数型/日付型など、さまざまな型で用いることができます。計算結果を格納する項目の型と、計算対象となる項目の型を同じとしてください。(ただしモデル参照については参照先の型を指定してください。[詳細...])
この設定を行うときは繰り返しコンテナ内のすべての項目について、ソートボタンを非表示にすることを推奨します。(ソートされてしまうと、最後のレコードが変わってしまうため。)
その他の記述例、制約については SUMと同様です。
SLICE
SLICE(繰り返し項目, 開始レコード番号または項目名, [代替値])
SLICE(繰り返しコンテナ項目, 開始レコード番号または項目名, [代替値])
SLICE(外部キー子モデル項目, 開始レコード番号または項目名, [代替値])
N番目のレコードの値を取得します。
文字列型/整数型/日付型など、さまざまな型で用いることができます。計算結果を格納する項目の型と、計算対象となる項目の型を同じとしてください。(ただしモデル参照については参照先の型を指定してください。[詳細...])
開始レコード番号は項目名の横に(コンマ区切りの第二引数として)指定します。レコード番号は「0」から数えます。また、指定したレコードが存在しなかった場合は、空白が表示されます。
開始レコード番号は固定値を指定します。また、開始レコード番号を示す特別な表記 "first" と "last" を使うことができます。"first" は先頭のレコードを、"last" は末尾のレコードを意味します。
指定したレコードが存在しない場合に、セットする値を指定することができます。コンマ区切りの第三引数に代替値を指定してください。
例:繰り返し項目 number の最初の項目の値を取得する。
SLICE(${number},0)
例:繰り返しコンテナ report/number の先頭から 1 番目の項目の値を取得する。ただしレコードが存在しなかった場合は "なし" を取得する。(取得する項目の型は文字列型であること)
SLICE(${report/number}, first+1, "なし")
例:外部キー連携モデル support の項目 kingaku の末尾から 2 つ前の値を取得する。ただしレコードが存在しなかった場合は 0 を取得する。(外部キーの指定方法の詳細...)
SLICE(${support_lp.kingaku}, last-2, 0)
開始レコード番号に代わって項目名を指定する
第二引数の開始レコード番号に、項目名を指定できます。項目名は ${...} で囲みます。
SLICE(${report/number}, ${item}+1)
項目名に簡単な四則演算を加えることはできますが、他の関数を含めることはできません。
項目名を指定する場合の注意点
第二引数の項目名に繰り返しコンテナ内の項目、または外部キー子モデルの項目を指定することはできません。例えば、次のような式はエラーになります。
SLICE(${report/number}, ${report/rid}) //エラー
SLICE関数は通常、繰り返しコンテナの *外* の項目に指定します。ここで第二引数は "何番目" を指定するものですが、report/rid 項目を含む繰り返しコンテナは N 行ありますので、その N 行のうち、どの行の値を使うか、という番号を指定することができないためです。
型の考え方
"モデル参照については参照先の型を指定" について、第一引数の項目が参照連動の場合、参照先の型になります。もし参照先がさらにモデル参照の場合、この型は「参照先モデルの主キーの型」を指定してください。
JOIN
JOIN(繰り返し項目, [連結文字])
JOIN(繰り返しコンテナ項目, [連結文字])
JOIN(外部キー子モデル項目, [連結文字])
JOIN(チェックボックス型の項目, [連結文字])
すべての項目値を連結した文字列を作成します。文字列型/整数型/日付型など、さまざまな型で用いることができます。計算結果を格納する項目の型は「文字列型」としてください。
第二引数に連結時の文字を指定することができます。省略時は「,」(コンマ)が用いられます。
チェックボックス型の項目に対して適用した場合は、"チェックされたデータ" を連結対象とします。
例:繰り返し項目 number の値を連結した文字列を取得する。区切り文字はデフォルト値「,」(コンマ)を用いる。
JOIN(${number})
例:繰り返しコンテナ report/staff の値を連結した文字列を取得する。区切り文字は「;」(セミコロン)を用いる。
JOIN(${report/staff},';')
例:外部キー連携モデル support の項目 companyname の値を連結した文字列を取得する。区切り文字はデフォルト値「,」(コンマ)を用いる。(外部キーの指定方法の詳細...)
JOIN(${support_lp.staff})
DJOIN
DJOIN(繰り返し項目, [連結文字])
DJOIN(繰り返しコンテナ項目, [連結文字])
DJOIN(外部キー子モデル項目, [連結文字])
DJOIN(チェックボックス型の項目, [連結文字])
連結対象項目の重複を許さない join です。
例えば、連結対象の文字列項目が "aaa", "bbb", "aaa", "ccc" のとき、区切り文字「,」で連結すると "aaa,bbb,ccc" という文字列が生成されます。
DDJOIN
DDJOIN(繰り返し項目, [連結文字])
DDJOIN(繰り返しコンテナ項目, [連結文字])
DDJOIN(外部キー子モデル項目, [連結文字])
DDJOIN(チェックボックス型の項目, [連結文字])
連結対象項目の重複を許さない join です。さらに、連結対象項目内に区切り文字があれば、それを分割して重複チェックを行います。
例えば、連結対象の文字列項目が "a,b,c", "a,b,d" のとき、区切り文字「,」で連結すると "a,b,c,d" という文字列が生成されます。
RANK
RANK(繰り返し項目, 繰り返し項目(範囲), [順序])
RANK(繰り返しコンテナ項目, 繰り返しコンテナ項目(範囲), [順序])
RANK(外部キー子モデル項目, 外部キー子モデル項目(範囲), [順序])
引数の集合の順位を返します。第一引数が対象項目、第二引数が範囲を示す項目ですが、通常は第一引数と第二引数の項目名は同じものになります。第三引数の順序は省略できます。省略時は大きい方からの順(降順)となります。"1" を指定すると昇順になります。
例:繰り返しコンテナ項目 staff/tensuu を対象とする。昇順とする。
RANK(${staff/tensuu}, ${staff/tensuu}, 1)
例:外部キー子モデルとして紐づいている staff モデルの tensuu 項目を対象とする。降順とする。
RANK(${staff_lp.tensuu}, ${staff_lp.tensuu})
LARGE
LARGE(繰り返し項目, 順位)
LARGE(繰り返しコンテナ項目, 順位)
LARGE(外部キー子モデル項目, 順位)
大きい方からの順位を返します。第二引数の順位は数値(一位,二位..)を指定します。RANK関数の利用例における「トップ」の項目が相当します。
例:繰り返しコンテナ項目 staff/tensuu を対象
LARGE(${staff/tensuu}, 1)
例:外部キー子モデルとして紐づいている staff モデルの tensuu 項目を対象
LARGE(${staff_lp.tensuu}, 1)
SMALL
SMALL(繰り返し項目, 順位)
SMALL(繰り返しコンテナ項目, 順位)
SMALL(外部キー子モデル項目, 順位)
小さい方からの順位を返します。第二引数の順位は数値(一位,二位..)を指定します。RANK関数の利用例における「最下位」の項目が相当します。
例:繰り返しコンテナ項目 staff/tensuu を対象
SMALL(${staff/tensuu}, 1)
例:外部キー子モデルとして紐づいている staff モデルの tensuu 項目を対象
SMALL(${staff_lp.tensuu}, 1)
GCD
GCD(繰り返し項目)
GCD(繰り返しコンテナ項目)
GCD(外部キー子モデル項目)
GCD(整数型の配列)
引数の整数型配列から、最大公約数を返します。戻り値は整数型です。
例:以下の式は "6" を返します。
GCD(ARRAY_INT(12,18))
例:繰り返しコンテナ項目 cont/value を対象。型は整数型のみ。
GCD(${cont/value})
LCM
LCM(繰り返し項目)
LCM(繰り返しコンテナ項目)
LCM(外部キー子モデル項目)
LCM(整数型の配列)
引数の整数型配列から、最小公倍数を返します。戻り値は整数型です。
例:以下の式は "6" を返します。
LCM(ARRAY_INT(2,3))
例:繰り返しコンテナ項目 cont/value を対象。型は整数型のみ。
LCM(${cont/value})
ARRAY
ARRAY_INT(整数型の数値...)
ARRAY_LONG(8バイト整数型の数値...)
ARRAY_FLOAT(4バイト浮動小数点型の数値...)
ARRAY_DOUBLE(8バイト浮動小数点型の数値...)
ARRAY(文字列...)
引数の整数型数値(コンマ区切りで複数個、記述できます)から、整数型の配列を生成します。 MAX, MIN 関数と組み合わせることで、最大値や最小値を返すことができます。
引数がない場合は、空の配列を生成します。ARRAY_INT(), ARRAY_LONG(), ARRAY_FLOAT(), ARRAY_DOUBLE(), ARRAY() が利用できます。
例:
MAX(ARRAY_INT(10, 20, 30))
文字列項目を、文字列の配列へと変換することもできます。
例:
ARRAY(USERNAME())
ARRAY(${item1},${item2},${item3})
ARRAY_OBJ8.3.0
ARRAY_OBJ(数値型配列)
基本型の数値型配列を、オブジェクトの配列に変換します。戻り値の型は基本型のラッパークラスとなります。例えばint配列を引数に渡すと、Integer配列が返ります。
SORT
SORT(数値型配列)
SORT(文字列型配列)
引数の配列を昇順で並び替えます。戻り値の型は、引数と同じ型です。
REVERSE
REVERSE(数値型配列)
REVERSE(文字列型配列)
引数の配列を降順で並び替えます。戻り値の型は、引数と同じ型です。
CONTAINS
CONTAINS(数値型配列, 数値)
CONTAINS(文字列型配列, 文字列)
第一引数の配列に、第二引数の値が含まれているかどうかを返します。戻り値は boolean 型(真/偽) です。
ISEMPTY
ISEMPTY(配列)
第一引数の配列が空かどうかを返します。戻り値は boolean 型(真/偽) です。
ADD
ADD(配列, 値)
第一引数の配列の末尾に、値を加えた新しい配列を生成します。戻り値は配列です。数値型、文字列型、日付型で利用できます。
ADD(${array},1)
項目arrayが繰り返し項目で値 "1,0" を持っている場合、"1,0,1" という配列を新たに生成します。
GET
GET(配列, 添字)
第一引数の配列の「何番目」の値を返します。配列の添字は0から数えます。第二引数の添字が不適切の場合(例:添字が負数、添字が配列の大きさを超えている)、添字は 0 として扱われます。すなわち、配列の0番目の値を返します。
INDEXOF
INDEXOF(配列, 見つける値)
第一引数の配列中に、第二引数で指定した値が含まれている場合、先頭から何番目に含まれているかを返します。配列の添字は0から数えます。見つからなかった場合は -1 を返します。
LASTINDEXOF
LASTINDEXOF(配列, 見つける値)
第一引数の配列中に、第二引数で指定した値が含まれている場合、末尾から何番目に含まれているかを返します。配列の添字は0から数えます。見つからなかった場合は -1 を返します。
ISEQUALS
ISEQUALS(配列, 配列)
第一引数の配列と、第二引数の配列の値が同じかどうかを調べます。戻り値は boolean 型(真/偽) です。数値型、文字列型、日付型で利用できます。
ISSAMELENGTH
ISSAMELENGTH(配列, 配列)
第一引数の配列と、第二引数の配列の要素数が同じかどうかを調べます。戻り値は boolean 型(真/偽) です。数値型、文字列型、日付型で利用できます。(配列がnullの場合、要素数は0個として比較します。)
REMOVE
REMOVE(配列, 添字)
第一引数の配列から、何番目の要素(添字として表現された数値)を削除した配列を返します。配列の添字は0から数えます。数値型、文字列型、日付型で利用できます。
REMOVEELEMENT
REMOVEELEMENT(配列, 削除する値)
第一引数の配列から、最初にみつかった「削除する値」を除いた配列を返します。指定された値が含まれていなかった場合は、第一引数の配列と同じ配列が戻り値になります。削除される要素は1つだけです。
例えば配列の要素が "1,2,3,2,1" で、削除する値が "2" のとき、戻り値の配列は "1,3,2,1" になります。
REMOVEELEMENTALL
REMOVEELEMENTALL(配列, 削除する値)
第一引数の配列から、みつかった「削除する値」をすべて除いた配列を返します。指定された値が含まれていなかった場合は、第一引数の配列と同じ配列が戻り値になります。
例えば配列の要素が "1,2,3,2,1" で、削除する値が "2" のとき、戻り値の配列は "1,3,1" になります。
UBOUND
UBOUND(配列)
配列の大きさ(サイズ)を返します。戻り値は整数型です。
AGCOUNT
AGCOUNT("項目名")
「出力制御 > 一覧画面 > 集計値 > 個数」の項目名を指定します。一覧表示画面の集計機能で求めた「個数」の値を取得できます。戻り値の型は8バイト整数(long)です。
例:
AGCOUNT("kosuu")
項目名が存在しない場合、または一覧表示画面の集計機能が設定されていない場合は -1 が返ります。
使い方:ボタン表示制御の式で使うことができます。この値がxxならボタンを表示する、などです。
AGSUM
AGSUM("項目名")
「出力制御 > 一覧画面 > 集計値 > 合計値」の項目名を指定します。一覧表示画面の集計機能で求めた「合計値」の値を取得できます。戻り値の型は8バイト整数(long)です。
例:
AGCOUNT("goukei")
項目名が存在しない場合、または一覧表示画面の集計機能が設定されていない場合は -1 が返ります。
使い方:ボタン表示制御の式で使うことができます。この値がxxならボタンを表示する、などです。
AGAVG
AGAVG("項目名")
「出力制御 > 一覧画面 > 集計値 > 平均値」の項目名を指定します。一覧表示画面の集計機能で求めた「平均値」の値を取得できます。戻り値の型は8バイト浮動小数点(double)です。
例:
AGAVG("heikin")
項目名が存在しない場合、または一覧表示画面の集計機能が設定されていない場合は -1 が返ります。
使い方:ボタン表示制御の式で使うことができます。この値がxxならボタンを表示する、などです。
AGMAX
AGMAX("項目名")
「出力制御 > 一覧画面 > 集計値 > 最大値」の項目名を指定します。一覧表示画面の集計機能で求めた「最大値」の値を取得できます。
例:
AGMAX("saidai")
戻り値の型は java.lang.Object であるため、利用する場合は明示的な型変換が必要です。例えば日付型の場合、次のようになります。
(java.util.Date)AGMAX("salesday")
数値型(整数)の場合、次のようになります。
(Integer)AGMAX("salestotal")
項目名が存在しない場合、または一覧表示画面の集計機能が設定されていない場合は null が返ります。
使い方:ボタン表示制御の式で使うことができます。この値がxxならボタンを表示する、などです。
AGMIN
AGMIN("項目名")
「出力制御 > 一覧画面 > 集計値 > 最小値」の項目名を指定します。一覧表示画面の集計機能で求めた「最小値」の値を取得できます。
例:
AGMIN("saisyou")
戻り値の型は java.lang.Object であるため、利用する場合は明示的な型変換が必要です。例えば日付型の場合、次のようになります。
(java.util.Date)AGMIN("salesday")
数値型(整数)の場合、次のようになります。
(Integer)AGMIN("salestotal")
項目名が存在しない場合、または一覧表示画面の集計機能が設定されていない場合は null が返ります。
使い方:ボタン表示制御の式で使うことができます。この値がxxならボタンを表示する、などです。
モデル参照項目の扱い
コンテナ内に含まれているモデル参照の ID 部と内容部を指定することができます。 単に項目名のみを指定した場合は、その「内容」が対象となります。
外部キー子モデルの指定方法
- 外部キー関連モデルのモデル名に接尾語 "_lp" を付与してください。
- 外部キーの項目を指定する場合、その項目は一覧表示の対象となっている必要があります。
- 親モデルの更新時に、紐づく子モデルの値も再計算&再保存されます。
- 子モデルが親モデルの値を参照するような式の場合、子モデルを保存すると関連する親モデルの値も再計算&再保存されます。
COUNT,SUMなどの条件部に指定する項目
子モデルの値で判定する
外部キー子モデルのCOUNT,SUMなどを扱う場合、条件部に指定する項目に接頭語 "子モデル名_lp." を指定することで「子モデル」に含まれるものとなります。
例えば
SUM(${support_lp.kingaku}, "${support_lp.type#id}==1")
の場合、条件部に記述した type 項目は、子モデル側 (support) に含まれるものを使います。このときの条件判定は、子モデルの1データ毎に行われます。
親モデルの値で判定する
接頭語を付与しない場合、「親モデル」に含まれる項目を使います。
例えば
COUNT(${child_lp}, "${child_lp.status#id}==${status#id}")
の場合、親モデルの status 項目の値と一致する子モデルのみが対象となります。
制約
- 計算対象となる繰り返し項目、コンテナ、外部キー項目が存在しないか、または SUM,COUNT 関数に指定した条件部を満たすものが一つもなかった場合、計算結果は格納されません。(表示部分は空白となります。) このような場合でも強制的に「0」をセットする場合は、計算式を記述した項目を「必須」としてください。
- 検索条件の初期値設定に、集合関数を用いることはできません。
- 「入力方式 > ユーザ定義チェック」に集合関数を用いることはできません。
- 「メール送受信 > 時間指定によるメール送信」「時間指定によるメール受信(データ取り込み)」の「ジョブ定義」-「起動条件」に集合関数を用いることはできません。
- 「帳票 > ファイル名」に集合関数を用いることはできません。
- 集合関数で指定する「項目部」および「条件部」に(COUNT,SUM 等の)集合関数を含めることはできません。例えば次の式はエラーになります。
JOIN(JOIN(${item1}, ","), ",")
- 集合関数の条件部に繰り返しコンテナ項目を指定する場合、一つの繰り返しコンテナ内に含まれる項目のみ利用できます。二つ以上の繰り返しコンテナの項目値を条件とすることはできません。(このように複雑な条件を使う場合、式ではなくスクリプトを利用してください。)