スクリプト入門

今回はJohn Mark OsborneさんのサイトPhilosophy of FileMakerから、Ver.15の頃に書かれたスクリプトに関する入門記事を紹介します。


Philosophy of FileMaker

Scripting Primer

(元記事はこちら)

John Mark Osborne
2017/4/18

FileMaker Proスクリプトとは何でしょうか? 自動化ツール、マクロ、さらにはプログラミング言語と定義することもできます。FileMaker Proスクリプトには、これらすべての定義の要素が含まれています。スクリプトの元々の目的は、レポート印刷という日常的なタスクを自動化することでした。メニュー上のほとんどの項目を繰り返すことに使えるため、マクロ言語と見なすこともできます。しかし、それだけではありません。論理分岐があるので、プログラミング言語と見なすこともできます。FileMaker Proのスクリプトワークスペースは、市場に出ているどの市販製品にも劣らないソリューションを作成できる、美しく設計された作業環境です。

スクリプト入門

しかし、150以上のスクリプトステップとそれらがどう連携するかを学ぶことは困難な作業です。このガイドの最初の部分は、学習プロセスをより簡単にするためにこのリストを分解することを目的としています。スクリプトを3つのグループに分けるので、無視すべきステップ、最も重要なステップ、有用でかつ学習しやすいステップを把握できます。後半では、スクリプトの起動方法、ショートカット、コメント、スクリプトデバッガ、データビューアについて説明します。これは、学習の努力を集中すべきスクリプトの関連領域を理解するのに役立ちます。この記事は単なる入門なので、実際のスクリプトについては触れません。最初のスクリプトを書く準備を整えることを目的とした、何ができるかの概要またはスクリプト環境のツアーだと考えてください。ただし、経験豊富なスクリプト作成者であっても、いくつかの役立つ情報が見つかるはずです。

 

The Good (善玉)

前述のように、ほとんどのスクリプトステップは単にメニュー項目を自動で実行するだけです。ただし、FileMakerのメニューからは実行できないタスクを行うスクリプトステップがかなりあります。たとえば、[エラー処理]を使用すると、FileMakerのエラーメッセージを抑制し、カスタムメッセージに置き換えることができます。[ユーザによる強制終了を許可]は、ユーザがスクリプトをキャンセルできなくします。これは、スクリプト環境がプログラミングに似ていることを示すいい例です。学習時間の多くを、以下の表のスクリプトステップを学ぶのに費やすべきです。これらのスクリプトステップのほとんどは、その機能に計算が含まれていて、その深さを大幅に増やしています(例えば、[If]、[フィールド設定]、[オブジェクトへ移動]など)。いくつかは多くの点で非常に有用であり、それらがなければスクリプトが成り立ちません。

奥行があるスクリプトステップ
スクリプト実行サーバー上のスクリプト実行
If, Else, Else If, End If
Loop, Exit Loop If, End Loop
ユーザによる強制終了を許可エラー処理
フィールド設定, フィールドを名前で設定, 変数を設定
フィールド内容の全置換
オブジェクトへ移動
カスタムダイアログを表示

150以上あるスクリプトステップの他の残りが重要でないということではありません。深さがないというだけです。たとえば、ほとんどすべてのスクリプトで[レイアウト切り替え]ステップを使えますが、レイアウトを切り替える以上のことは行いません。レイアウトを切り替えることはコンテキストにとって非常に重要ですが、使い方を一度学習すれば、それ以上のことはあまりありません。計算されたレイアウト名または番号を使う場合でも、式は非常に簡単です。一方、上にあげたスクリプトステップは非常に中身が濃いため、長い期間をかけて使い方を学ぶことになります。

 

The Bad (悪玉)

また、できるかぎり使うことを避けるすべきスクリプトステップもあります。

避けるべきスクリプトステップ
切り取り, コピー, 貼り付け
消去
テキストを挿入, 索引から挿入, 直前に参照したレコードから挿入, 現在の日付を挿入, 現在の時刻を挿入, 現在のユーザ名を挿入, 計算結果を挿入
新規作成, ファイルの修復, ファイルを変換, 名前を付けて保存
保存済み検索を開く, ファイルオプションを開く, データベースの管理を開く, データソースの管理を開く, 値一覧の管理を開く, 検索/置換を開く, ヘルプを表示, スクリプトワークスペースを開く, 環境設定を開く, オブジェクトの管理を開く, レイアウトの管理を開く, テーマの管理を開く, 起動センターを開く, 共有設定を開く

これらの中で最も問題のあるスクリプトステップは[コピー]と[貼り付け]で、その理由はクリップボードの内容を破壊するからです。ユーザがプログラムのある領域からテキスト文字列を手動でコピーし、ボタンをクリックして貼り付け用の別の領域に移動すると、スクリプトの[コピー]と[貼り付け]のステップのたちの悪い誤用によって、コピーされたデータが消去されたことに気づくという場面を想像してください。[フィールド設定]と[変数を設定]を使用した、クリップボードを破壊しない簡単な回避策があります。現時点では、[切り取り]、[コピー]、[貼り付け]は、ボタンのタイトルにこれらの単語のいずれかが含まれていない限り、使用しないでください。

[切り取り]、[コピー]、[貼り付け]、[消去]、およびすべての「挿入」ステップは、もう一つ共通の悪い特徴を持っています。これらのステップでは、現在のレイアウトにターゲットフィールドが存在する必要があります。スクリプトとレイアウトを紐づけることは、決していいアイデアではありません。それは、レイアウトを変更しようとするときに、スクリプトがそのフィールドを参照していて削除してはいけないことを覚えておく必要があるからです。初心者の開発者が、スクリプトで[コピー]または[貼り付け]する必要があるフィールドを、ユーザに見せたくないので非表示設定にしているという、多くのソリューションを長年にわたって見てきました。その後、レイアウトを変更し誤ってフィールドを削除して、スクリプトを壊してしまいます。[フィールド設定]と[変数を設定]は、対象フィールドが現在のレイアウト上にある必要はなく、レイアウトのコンテキストが正しいければ動作するため、はるかに優れたコンビです。

注: [挿入]またはレイアウト上に対象フィールドを必要とするその他のスクリプトステップを使いたいが、レイアウト上にフィールドを表示したくない場合は、レイアウトの右側の灰色の領域にドラッグします。これでレイアウトには表示されませんが、スクリプトからはアクセスできます。

[新規ファイル]、[ファイルの回復]、[ファイルの変換]、および[コピーとして保存]などのステップは、ユーザには不要です。開発者でさえ手動で実行できるため、これらのステップは必要ありません。これらのステップが必要となると想像できる唯一の理由は、コマンドをキーボードから起動できるように1行のスクリプトを作成する場合です。しかし、ショートカットが便利に感じるほどこれらのステップを実行する必要がどれほどあるでしょうか。

正直に言うと、すべての[開く]スクリプトステップは価値がありません。 [データベースの管理]にどう入ればいいかわからない場合は、同じことを行うスクリプトを使用しないでください。また、ユーザは確かにデータベースの管理を入力する必要がないので、マーケティングの目的でスクリプトステップの数を増やす以外のポイントはありません。誤解しないでください。私はFileMakerが大好きですが、これらのスクリプトステップは誰の役にも立ちません。

 

The Ugly (卑劣漢)

映画のたとえ(クリント・イーストウッド主演の”The Good, the Bad and the Ugly” [邦題: 続・夕陽のガンマン])はこの記事のテーマによく合っていますが、ここまでにしておきましょう。まだ触れられていない残りのスクリプトステップは、実際には醜くはありません。深さはあまりありませんが、完全に役に立たないわけでもありません。これらはまったく異なるグループに属するもので、とても有用ですが、目的が単純です。あなたのお気に入りのスクリプトステップが言及されていないとしたら、それはそのステップが便利ではないという意味ではありません。FileMakerスクリプトの主力である、[レイアウト切替]、[レコード/検索条件/ページへ移動]、[検索モードに切り替え]、[検索実行]など、言及されていないスクリプトステップはたくさんあります。それらはほぼすべてのスクリプトで使用されますが、操作にそれほど多くの知識を必要としません。しかし、あなたのお気に入りのステップが言及されていた場合、しかも悪いものとして挙げられていたとしたら、別の方法を学ぶ時かもしれません。

 

まとめ

どのスクリプトステップが重要であり、どのスクリプトステップが学習しやすく、どのスクリプトステップを避けるべきかがわかったところで、150以上のスクリプトステップを学習することは前ほども恐ろしいことではなくなったのではないでしょうか。重要なステップに集中して、使うべきでないステップを避けましょう。学習プランは簡単です。ただスクリプトを勉強して独自のスクリプトを書き続ければ、いつの間にかあなたは熟練者になっていることでしょう。念のため、利用可能なすべてのステップに目を通しておくことをお勧めします。FileMakerヘルプのスクリプトのセクションの定義を読んで、すべてのステップを理解することをお勧めします。

 

スクリプトの起動

スクリプトを起動する方法はいくつもあります。最も一般的なのは、ボタンにスクリプトを割り当てる方法です。ただし、他にも多くの方法があります。自明なものもあれば、難解なものもあります。存在することを気付かれずに、ずっとあなたの目の前にあったものもあります。実際にはこれらの方法の一部しかスクリプトの起動に使用しないかもしれませんが、すぐに使用できるソリューションを必要とする特別なケースが将来あるかもしれないので、利用できるさまざまな方法を理解しておくことをお勧めします。

スクリプトの起動方法
ボタン
スクリプト実行, サーバ上のスクリプト実行
[スクリプト]メニュー
[スクリプト]メニューのショートカットキー
スクリプトワークスペース画面の実行ボタン
スクリプトトリガ
カスタムメニュー
プラグイン
 Appleイベント
サードパーティ製のマクロプログラム
XML, PHP, WebDirect (訳注: Ver.17からはData APIからも実行可)
FileMaker Serverのスケジュールイベント

ファイルオプションで使用可能なOnFirstWindowOpenスクリプトトリガは、よく使われる一般的なトリガなので、注目してみましょう。ファイルを開くときに実行するスクリプトは、さまざまな方法でデータベースを初期化できますが、その中には、グローバルフィールドの初期化、適切なレイアウトへの移動、ウィンドウサイズの設定、などが含まれます。ただし、OnFirstWindowOpenスクリプトが起動しない状況がいくつかあります。最も重要なのは、関連フィールドまたは[スクリプトの実行]ステップによってファイルが開かれる場合です。その理由はシンプルで…パフォーマンスです。もし関連フィールドが外部ファイルを開くたびにOnFirstWindowOpenスクリプトが実行されるとすると、起動スクリプトの実行によりパフォーマンスが大幅に低下してしまいます。そのため、ファイルがいつ必要になるかを予測し、OnFirstWindowOpenの実行を許可する[開く]スクリプトステップでファイルを開くことが重要です。

具体的には、現在のレイアウトの関連フィールドを介して関連ファイルを開くと、ファイルは非表示で開きますが、[ウィンドウ]メニューから手動で選択するか、[ウィンドウの選択]、[レイアウト切り替え]、[スクリプトの実行]などのさまざまなスクリプトステップで表示できます。ウィンドウが表示された瞬間に、遅延したOnFirstWindowOpenスクリプトがようやく実行されます。これにより、新しく開いたファイルを不適切に初期化したり、非表示ファイルを表示するスクリプトが中断されるなど、いくつかの問題が発生する可能性があります。最近のほとんどのソリューションは単一ファイルであるため、それほど懸念はありませんが、この動作に注意することが重要です。

避けるべきもう一つの不都合は、レイアウトの過剰なトリガです。私はスクリプトトリガが大好きですが、あまりにも好きすぎるかもしれません。単一のレイアウトで起動するスクリプトトリガが多すぎると、すべてのボタン駆動のスクリプトも合わさって、競合が発生する場合がよくあります。スクリプトトリガを使用する前に、[自動入力]、[検証]、計算フィールドなど、FileMakerのその他のすべての機能が必要なところで適切に使われていることを確認してください。スクリプトトリガは、現時点でうまく動作しているから採用するのではなく、ソリューションにとって最適な選択である必要があります。

私は、[スクリプト]メニューでスクリプトを使用することは、(特にクライアントソリューションでは)ほとんどありません。まず、私はほぼ常にカスタムメニューを使用するため、スクリプトメニューの下のスクリプトは表示されません。次に、メニュー上のスクリプトはどのレイアウトからでも実行できます。ボタン駆動のスクリプトとは異なり、実行時にいるレイアウトのコンテキストが使われます。これは、一部のスクリプトでは問題にならないですが、特定のレイアウトから開始しなくてはいけないスクリプトもあります。そのような場合は、[レイアウト切り替え]ステップで適切なレイアウトに移動することで、スクリプトを正しく開始させることができます。私はナビゲーション用スクリプトはシンプルに保ち、レイアウトを切り替えるだけにしています。スクリプトが別のコンテキストで何かを実行する必要がある場合は、ユーザにまずそこに移動させてから、別のボタンをクリックさせます。

私はいつもスクリプトワークスペースの再生ボタンを忘れてしまいます。ボタンにスクリプトがまだ割り当てられていない場合に、これはインターフェイスに追加せずにテストできる便利な方法です。スクリプトがモジュール化されて複数のスクリプトに分割され、[スクリプトの実行]ステップを介して接続されている場合に、再生ボタンは親スクリプトを使わずにサブスクリプトを実行できます。これは、スクリプト全体を実行することなしに機能をテストするのに適した方法です。私自身はこの機能はあまり使用しませんが、必要なときには非常に役立ちました。

スクリプトの起動方法を選択する際には、多くのことを考慮する必要があります。ここにあげたのは、最も一般的な問題と例のほんの一部です。さまざまなスクリプトの起動方法を探索して、それぞれの利点に慣れておく必要があります。ここで重要なのは、シナリオに完全に適合するのであれば、利用可能な方法に精通することです。

 

スクリプトワークスペースのショートカット

[スクリプトワークスペース]のウインドウでは、マウスを使用して簡単に移動や制御ができます。私はキーボード使いというよりはマウス派ですが、スクリプトワークスペースはキーボードを使用すると活気づきます。実際、新しいスクリプトワークスペースは、完全にキーボードで操作できるように設計されています。スクリプトを文字通りマウス操作なしで作成することが可能です。完全にキーボードだけで操作できるようになるまでには時間がかかるので、それまでマウスとキーボードの操作を組み合わせるのは問題ありません。ひたすら練習を続け、キーボードだけの操作に向かって進めば、スクリプトの作成がより効率的になります。

スクリプトワークスペース用ショートカット
スクリプトステップ名を入力すると、自動補完される。各単語の頭文字を使うこともできる(例: Go to Related Record = GTRR)
矢印キーで選択行を上下できる
Enter, Return, 下矢印キー(最終行にいる場合)で、新しいステップ行を作成
スクリプトリストの検索窓で、スクリプトステップ名を入力し始めると自動補完され、ReturnかEnterキーを押すと、現在の選択行の下に挿入される
シフトを押しながらクリックで、連続したスクリプトステップを選択。Command + クリック(Macintosh) あるいはCtrl + クリック(Windows)で、連続していないスクリプトステップを選択
左右の矢印キーで、(複数ある)オプションを移動。スペースキーでオプションを開いて、選択を決定
スクロールバーが表示されている場合、Home, End, Page Up, Page Downで上下に移動
Deleteキーでスクリプトステップを削除、あるいはリスト中のハイライトされたスクリプトを削除
スクリプトステップ上でOption + ダブルクリックあるいはAlt + ダブルクリックで2つ目のオプションを開く。[フィールド設定]で使うと便利
Command-SあるいはCtrl-Sでスクリプトを保存
Command-シフト-SあるいはCtrl-シフト-Sでスクリプトワークスペースを開く

特にFileMaker 14で導入されたキーボード指向のスクリプトワークスペースでは、スクリプト作成のためのショートカットがさらに増えました。これらの対応するキー操作を探す最良の方法は、FileMakerヘルプでMacintoshWindowsのショートカットを調べることです。これらのショートカットを学習すると、開発速度が大幅に上がります。

 

コメント

スクリプトにコメントを付けることは、ほぼ常にいい考えです。スクリプトの詳細な機能を6か月後に思い出そうとすることは、常に大変な作業です。コメントを作成するのは、後で詳細が曖昧になったときではなく、スクリプトを書きながら行うよう練習をしてください。コメントは、FileMakerプロジェクトを採用するすべての人にとっても有益なため、同僚の開発者への親切として実施してください。

コメントには、いろいろな種類とサイズがあります。スクリプトの最初の数行は、多くの場合、スクリプト全般を説明するコメントで構成されます。グループによるプロジェクトのコメントには、スクリプトを作成した開発者の名前と、編集日および変更の簡単な説明が含まれます。あなたが一人で開発している場合も、履歴のコメントは通常は不要ですが、あるにこしたことはありません。

あるステップ(または一連のステップ)が複雑または不明確な場合は、コメントを書きます。しかし、ここで行き過ぎてしまって、すべてのステップに説明を入れる開発者も多いです。これは実際には不要であり、スクリプトを読みにくくします。解読が必要なステップだけにコメントするのがいいでしょう。

また、スクリプトの流れを損なわないように、オプションの計算式内にコメントを隠すのもいい方法です。たとえば、[フィールド設定]ステップにコメントが必要な場合は、独立のコメントステップではなく、計算オプション内でコメント機能を使用することを検討してください。これにより、スクリプトが整理され、多くの場合にスクリプトが読みやすくなります。コメントが重要で目立たせる必要があるという場合以外は、計算式に入れる方法で十分であり見苦しくないでしょう。

もう一つのチップスは、テキストを入力せずにコメントすることです。EnterキーまたはReturnキーを入力するだけで、空白行が作成されます。これにより、コードが空白で区切られて、コードが目立つようになります。これだけで十分な場合もあります。よく考えてつけられたスクリプト名とフォルダ名だけでも、コメントが不要になるほど背景を十分に伝えることができます。

 

スクリプトデバッガとデータビューア

古い時代には、スクリプトデバッガやデータビューアは存在しませんでした。スクリプトをデバッグするということは、条件付きステートメントに[ビープ音]、[カスタムダイアログの表示]、または[スクリプトの一時停止/再開]ステップを追加して、スクリプトが特定のポイントに到達したかどうかを確認することを意味しました。本当に洗練された方法では、計算式を[カスタムダイアログの表示]に追加して結果を確認できるので、結果を確認するためだけにスクリプトをキャンセルする必要はありません。

データビューアの方は、特に計算式がスクリプト内にある場合、プロセスを複雑にしてしまうのですが、最終的に停止する場所に計算を書く以外に選択肢はありませんでした。スクリプトを一時停止したときにフィールドの内容を表示したい場合は、アクティブなレイアウトに配置する必要があり、多くの場合、レイアウトに追加する必要があるフィールドが多いため、スクリプトを数回実行する必要がありました。往々にして、そのフィールドは忘れられたままレイアウトに残り、ソリューションを更新する必要がありました。ああ…そんな頃もありました!

スクリプトの作成を効果的に行うのに、FileMaker Advancedのスクリプトデバッガやデータビューアは必要ありません。これら2つの機能で、スクリプトステップや計算用関数が追加されるわけではありません。それらは以下のような機能でスクリプト作成を効率化します。すなわち、スクリプトをゆっくり実行したり、エラーメッセージを表示したり、変数の内容を監視したり、レイアウトに配置せずにフィールドを調べたり、試しで数式を簡単に作成したりする機能、などです。本格的なFileMaker開発者にはFileMaker Advancedを強くお勧めしますが、Proでも仕事は完了します(訳注: 現在はFileMaker Proはなく、Pro Advancedのみ)。正直に言うと、Advancedの2つの機能、[カスタム関数]と[カスタムメニュー]は、Proでは代替するものがありません。これは、計算エンジンがないというのと同じくらいの致命的な問題ですが、私は作成するほとんどのソリューションで使用しています。

スクリプトデバッガの使い方を習得するのはそれほど難しくありません。さまざまな機能を1つずつ試してみましたが、すべてを数分以内にできました。ここでの私の目的は、あなたにFileMaker Advancedを購入するため余分に出費させて、Advancedの追加機能をあなたの業務フローに組み込むよう説得することです。定常的にスクリプトを書くようになると、最初からスクリプトを完璧に書くことがどれほど難しいか、またデバッガがいかに簡単にエラーを発見してくれるかがわかります。スクリプトをゆっくり実行して一度に1ステップずつ表示し、最初は見つけるのが難しかったエラーが飛び出してきてバシッと顔を叩かれます。冗談ではないですよ!

データビューアも組み合わせると、スクリプトで参照されているすべてのフィールドと変数を、レイアウトに配置することなく、[現在]タブの下に表示できます。現在実行中のスクリプトで参照されていないフィールドを表示する必要がある場合は、[監視]タブに追加します。データビューアは単独で使うこともできますが、スクリプトデバッガとデータビューアを組み合わせることで、スクリプト作成時の最強のペアになります。

Leave a Reply