FileMakerで変数にテキストを設定する際、一般的には「変数を設定」スクリプトステップを使うことが多いのではないかと思います。「変数を設定」スクリプトステップは、FileMakerに変数という機能が登場したVer.8から存在しています。
さて、この変数へのテキスト設定という場面で、「テキストを挿入」スクリプトステップも使えるということをご存知だったでしょうか。「テキストを挿入」スクリプトステップは、もとは指定したフィールドにテキストを挿入するためのものでしたが、Ver.16でテキストの挿入先として変数も指定することができるようになりました。
「変数を設定」スクリプトステップが用意されているにも関わらず、わざわざ「テキストを挿入」スクリプトステップを使うメリットはあるのでしょうか。
両スクリプトステップの違いを見ていきましょう。
【1】挿入する値として指定できるものの違い
「テキストを挿入」で指定できるのは、その名の通り、テキスト(文字列リテラル)のみです。変数などを指定することはできません。例えば「$a」と記述すると、「$a」というテキストがセットされます。
「変数を設定」スクリプトステップは、文字列リテラルだけでなく、変数やフィールド、関数などを指定することができます。「$a」と記述すると、$aという変数にセットされている値がセットされます。「"$a"」と記述すると、「$a」というテキストがセットされます。
したがって、固定のテキストを挿入する時はどちらのスクリプトステップも使用可能ですが、それ以外の場合は「変数を設定」を使用することになります。
【2】ダブルクォーテーションの扱いの違い
「変数を設定」スクリプトステップの場合、挿入するテキスト全体をダブルクォーテーション(")で囲む必要があります。そのため、挿入するテキストにダブルクォーテーションを含んでいる場合は、エスケープ処理が必要です。具体的には、テキスト内のダブルクォーテーションの前にバックスラッシュ(日本語環境では¥マーク)を付けます。
一方「テキストを挿入」スクリプトステップでは、全体をダブルクォーテーションで囲む必要がありません。したがって、テキスト内にダブルクォーテーションを含む場合でも、エスケープなしで記述することができます。
テキスト内にダブルクォーテーションが多く含まれる場合(例えばHTMLソースなど)は、「テキストを挿入」スクリプトステップが便利です。
【3】上書き/追記の指定の違い
すでにテキストがセットされている変数を更新する場合、内容を上書きするケースと、テキストを追記するケースとがあります。それぞれのスクリプトステップで、上書き・追記の指定のしかたに違いがあります。
[3-1]変数を設定
「変数を設定」スクリプトステップでは、上書きと追記とで「値」の書き方が異なります。
・上書き
「値」に上書きするテキストを入力します。
・追記
「値」に「$変数名 & "追記するテキスト"」 を入力します。
[3-2]テキストを挿入
「テキストを挿入」スクリプトステップの場合、テキストの内容に違いはありません。「内容全体を選択」チェックボックスによって上書き・追記を指定します。
・上書き
「内容全体を選択」チェックボックスをONにします。
・追記
「内容全体を選択」チェックボックスをOFFにします。
これについては好みが分かれるところだと思います。
(個人的には、「テキストを挿入」の「内容全体を選択 = 上書き」、というのが直感的でないように思います。)
【4】処理速度の違い
変数($message)にテキスト(あいうえおかきくけこさしすせそたちつてと)をセットする処理をループで繰り返し実行し、その時間を測定しました。
・上書き
ループ回数 |
テキストを挿入 |
変数を設定 |
10,000回 |
1秒 |
0秒 |
50,000回 |
3秒 |
3秒 |
100,000回 |
5秒 |
5秒 |
200,000回 |
10秒 |
13秒 |
400,000回 |
21秒 |
24秒 |
上書きの処理時間は、両スクリプトステップにほとんど差はありませんでした。
・追記
ループ回数 |
テキストを挿入 |
変数を設定 |
10,000回 |
1秒 |
1秒 |
50,000回 |
3秒 |
38秒 |
100,000回 |
5秒 |
2分56秒 |
200,000回 |
10秒 |
11分11秒 |
400,000回 |
22秒 |
44分11秒 |
追記処理の速度は、ループ回数が増えるにつれて大きな差が生じました。
「テキストを挿入」は上書き処理と変わらない時間で処理しているのに対し、「変数を設定」は指数関数的に時間が遅くなっていきました。
【結論】
以上のことから、「テキストを挿入」を変数に対して使用するメリットは、ダブルクォーテーションのエスケープ処理が不要だという点と、大量テキストの処理が高速に行えるという点だと言えそうです。
例えばHTMLをWEBビューアで表示するケース。HTMLヘッダ部分は、ダブルクォーテーションを含む定型文であることが多いと思います。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src="https://hoge/fuga.js"></script>
...
他にも、jsonを扱う際にもダブルクォーテーションが数多く登場します。
フィールドや変数の値をjsonに反映する場合は「変数を設定」を使用することになりますが、定型の箇所には「テキストを挿入」を使うと便利かもしれません。
また、大量の固定テキストを扱うことはあまりないかもしれませんが、そういう場面では「テキストを挿入」を採用することも選択肢の一つとして覚えておくと良さそうです。
詳細