ローカル変数とグローバル変数、何が違うの?
FileMakerを使っていると、スクリプトの中で「$ローカル変数」や「$$グローバル変数」という表記をよく目にします。「なんとなく使っているけど、違いがよく分からない」「とりあえず全部グローバルにしている」という方も多いのではないでしょうか。
ローカル変数とグローバル変数は、データを一時的に記憶しておくという点では同じですが、「いつまで」「どこから」参照できるのかが大きく違います。この違いを理解しておくと、スクリプトが分かりやすくなり、予期せぬ動作も減らせます。
この記事では、専門用語はできるだけ避けながら、ローカル変数とグローバル変数の基本的な使い分けと、実際の操作方法を分かりやすく解説します。
ローカル変数とは?:その場限りのメモ帳
ローカル変数(表記は $変数名 )は、「そのスクリプトの中だけで有効なメモ」と考えると分かりやすいです。
- 使える範囲:変数をセットした「スクリプト」と、その中から呼び出した「サブスクリプト」まで
- 消えるタイミング:呼び出し元も含めて、そのスクリプト(サブスクリプトを含む一連の処理)が終わった時点で自動的に消える
- 代表的な用途:その場で計算した値の一時保存、ループ内でのカウンターなど
ローカル変数の特徴は、「スクリプトが終われば必ず消える」ことです。後に影響を残さないため、安心して使える一時メモとして考えると良いでしょう。
グローバル変数とは?:ウインドウをまたぐ長期メモ
グローバル変数(表記は $$変数名 )は、「FileMakerを開いている間じゅう有効なメモ」です。
- 使える範囲:同じファイル内のほぼすべてのスクリプト・レイアウト・ウインドウから参照できる
- 消えるタイミング:FileMakerを終了した時(もしくは明示的にクリアした時)
- 代表的な用途:ログインユーザー情報、画面間で共有したい検索条件、設定値の一時保存など
グローバル変数の大きな利点は、「どこからでも読める」ことですが、その分、思わぬ場所で値が書き換わってしまうリスクもあります。使いどころを絞ることが大切です。
基本の使い分けの考え方
難しく考えず、次のような基準で判断すると迷いにくくなります。
- この処理スクリプトの中だけで完結する値か?
→ はい:ローカル変数($) を使う - 別のスクリプトや画面でも同じ値を使いたいか?
→ はい:グローバル変数($$) を検討する
イメージとしては、次のように覚えると便利です。
- ローカル変数:スクリプト専用の付せんメモ
- グローバル変数:システム全体で共有するホワイトボード
付せんメモはその用事が終わったら捨てますが、ホワイトボードはしばらく残ります。この違いが、そのまま変数の性質の違いになっています。
ローカル変数の具体的な使い方
ローカル変数は、基本的に「スクリプトステップ:変数を設定」で使います。
- スクリプトワークスペースを開き、スクリプトを作成または編集
- 左側から「変数を設定」ステップを追加
- 「指定…」ボタンをクリックし、変数名に
$UserNameのように入力 - 計算式に
Get ( アカウント名 )などを指定して保存
こうして作成した $UserName は、そのスクリプトと、そこから呼び出したサブスクリプトの中で自由に参照できます。
たとえば、次のような場面で便利です。
- 複雑な計算結果を一度変数に入れて、何度も使い回したいとき
- レコードのフィールド値を一時的に覚えておき、戻したいとき
- ループ処理で「今、何回目か」をカウントしたいとき
ローカル変数は、使い終わった後に「消す」処理は不要です。スクリプト終了と同時に自動的にクリアされます。
グローバル変数の具体的な使い方
グローバル変数も、基本操作はローカル変数と同じです。ただし、変数名の先頭を「$$」にします。
- スクリプトワークスペースで「変数を設定」ステップを追加
- 変数名に
$$LoginUserIDのように入力 - 計算式に、ユーザーIDや権限を求める式を指定
こうして設定したグローバル変数は、同じファイル内の別のスクリプトからも参照できます。
例えば、ログイン時のスクリプトで次のように設定しておけば:
$$LoginUserName:ログインしている人の名前$$LoginUserRole:権限や役割
その後の画面表示やボタン表示の判断に、これらの変数を使うことができます。また、画面Aで入力した検索条件をグローバル変数に入れておき、画面Bでも同じ条件で絞り込みたいといった場合にも役立ちます。
グローバル変数を使うときの注意点
便利なグローバル変数ですが、いくつか注意点があります。
- どこでセットされ、どこで変更されるかを把握しておく
同じ名前のグローバル変数を複数のスクリプトで書き換えると、思わぬ値になることがあります。 - 不要になったらクリアする習慣をつける
終了時やログアウト時のスクリプトで、変数を設定ステップを使って空文字にするなど、片付けを行うと安全です。 - 名前を分かりやすくする
何のための変数か分かるような名前を付けることで、後々のトラブルを防ぎやすくなります。例:$$gUserRole、$$gSearchKeywordなど
迷ったときのシンプルな指針
最後に、実務で迷ったときのシンプルな指針をまとめます。
- まずはローカル変数を使う
多くの処理はスクリプト内で完結するので、基本はローカル変数で十分です。 - 画面やスクリプト間で「共有したい情報」が出てきたときだけグローバル変数を検討
- グローバル変数の数は、できるだけ少なく保つ
「本当にシステム全体で共有すべき情報か?」を意識して使うと、管理しやすくなります。
ローカル変数とグローバル変数をきちんと使い分けることで、スクリプトの見通しが良くなり、エラーの原因も追いやすくなります。最初は意識的に使い分ける必要がありますが、慣れてくると自然に選べるようになりますので、ぜひ日々の開発で意識してみてください。