「Get(システムプラットフォーム)」の数字を覚えるのは諦めました【FileMakerカスタム関数】

FileMaker(正式名称:Claris FileMaker)の世界では、開発はmacOS、お客さんの環境はWindowsということが多いです。

開発者の方々は、「macOSでは動くのにWindowsだと動かない」ことに幾度となく涙を流し、条件分岐を増やしてきたことと思います。

こんな感じで。

ただこれ、パッと見ただけじゃ意味がわからないですよね。
久々にOS周りの処理を実装する人や、そもそもFileMakerを知らない人にはさっぱりだと思います。

Get ( システムプラットフォーム )は数値を返す

「Get ( システムプラットフォーム )」の公式の説明はこちら。

この関数が返す値は次のとおりです:

・「1」- 現在のプラットフォームが macOS の場合
・「-2」- プラットフォームが Windows の場合
・「3」- 現在のプラットフォームが iOS または iPadOS の場合
・「4」- プラットフォームが FileMaker WebDirect の場合
・「5」- プラットフォームが CentOS Linux の場合
・「8」- プラットフォームが Ubuntu Linux の場合

https://help.claris.com/ja/pro-help/content/get-systemplatform.html

プラットフォームに応じて、数値が返ってくる仕組みです。
FileMakerは、こういったシステム関連の値をサッと取得しやすいのが魅力だと思います。

ただ、世界地図どころか日本の都道府県すら全部言えるかあやしい自分には、どのプラットフォームがどの数値だったか覚えられそうにありません。

カスタム関数化してしまおう

戻り値がどのプラットフォームかわからない問題に対して、各種コメントで対策する人が多いのではないでしょうか。

今まで自分もコメントを付与していたのですが、次にOS分岐を作る場面が来ると毎回思い出せず…。
以前のスクリプトをコピペする、もしくは毎回ヘルプページを確認するという工程が必要でした。

もう少し直感的な分岐を作れないか、という思考の流れからプラットフォーム名がテキストで返ってくるカスタム関数を作ってみました。

番号を覚えていなくても、このカスタム関数を用意してあれば直感的に分岐条件を書きやすくなったと思います。

カスタム関数「Get_PlatformName」

機能はシンプルで、使用しているプラットフォームに応じたテキストを返してくれます。
テキストのバリエーションは、「Get ( システムプラットフォーム )」とほぼ同じです。

  • macOS
  • Windows
  • iOS
  • iPadOS
  • iOS/iPadOS
  • FileMaker WebDirect
  • FileMaker WebDirect (Android)
  • CentOS
  • Ubuntu

iOSとiPadOSの区別や、Android検知など、ちょっとだけ工夫してみました。
関数名は「Get_PlatformName」としましたが、各環境のルールにあわせて調整してください。

サンプルファイル

カスタム関数を実装したサンプルファイルを用意しました。
「カスタム関数の値を確認」ボタンを押すと、ダイアログでGet_PlatformNameの結果が返ってきます。
※コードのみが必要な方は記事下部をご参照ください。

コード内容

/* 
 * =====================================================
 * Get_PlatformName
 * 引数 :なし
 * 戻り値:Get ( システムプラットフォーム ) の戻り値を文字列に変換
 *     "macOS" / "Windows" / "iOS" / "iPadOS" / "iOS/iPadOS" /
 *     "FileMaker WebDirect" / "FileMaker WebDirect (Android)" / 
 *     "CentOS" / "Ubuntu"
 * =====================================================
 */

Let (
	[
		pfNum = Get ( システムプラットフォーム ) ;
		device = Get ( デバイス )
	] ; 
	Case ( 
		pfNum = 1                            ; "macOS" ; 
		pfNum = -2                          ; "Windows" ; 
		pfNum = 3 and device = 3 ; "iPadOS" ; 
		pfNum = 3 and device = 4 ; "iOS" ;
		pfNum = 3                           ; "iOS/iPadOS" ;
		pfNum = 4 and device = 5 ; "FileMaker WebDirect (Android)" ;
		pfNum = 4                           ; "FileMaker WebDirect" ; 
		pfNum = 5                           ; "CentOS" ;
		pfNum = 8                           ; "Ubuntu" ; 
		"Error(" & pfNum & "," & device & ")"
	)
)

【余談】OSのバージョンも取得したい場合の代替案

FileMakerの便利なカスタム関数がたくさん公開されているサイト、BrianDunning’s FileMaker Custom Functions をご存知でしょうか?

実はこのサイトにも、今回の記事に似たカスタム関数が掲載されています。

FileMaker Custom Function: GetSystemPlatformVersion
Returns host OS name and version number or OS abbreviation and browser version in human readable format.

ログ取得で使用する場合など、OSのバージョンまで知りたい方は上記サイトで配布されているGetSystemPlatformVersionがオススメです。
ただし、最新仕様には対応しておらず、CentOSやUbuntuを取得できない点にご注意ください。

【余談】Windowsの戻り値だけマイナスが付くのは旧仕様の名残

なぜWindowsだけ「-2」という、その他の戻り値とは異なるマイナスの値が返ってくるのでしょうか?
これは、過去のバージョンでの仕様がそのまま引き継がれたことが原因らしいです。

FileMakerコミュニティの過去のスレッドを遡ると、この件に関してのやり取りが確認できます。
その返答の一部にて

FMP 6.0 and earlier the function returned +1 for Mac OS Classic and -1 for Mac OS X while -2 was for the Windows NT family (2000, XP) and +2 was the Windows 9x family. There was no iOS or WD.

https://arc.net/l/quote/bibhqmig

という記述があり、訳すと、

『FMP 6.0以前では、この関数はMac OS Classicの場合は「+1」、Mac OS Xの場合は「-1」を返していました。一方、Windows NT系(2000、XP)の場合は「-2」、Windows 9x系の場合は「+2」でした。当時、iOSやWD(WebDirect)はまだ存在していませんでした。』

とのこと。

Windowsでもバージョンによって戻り値「2」と「-2」と区別されていましたが、その中で「-2」を戻すWindows NT系が発展していったため、現在の仕様となっているようですね。
開発的にも、今更「2」に戻すのは現在稼働しているシステムへの影響が大きく、戻すに戻せないといった状況でしょうか。

ちなみに、macOSの方もこのコメントだとMac OS Xの「-1」が残ったのではないかと考えがちですが、そうではないようで。
軽く調べたところでは、『Intel Macが「1」、PowerPC Macが「-1」を返していたけれど、現在はIntel Macが生き残ったので「1」を返し、新しいAppleシリコンに対しても「1」のままで進めた』と考えるのが良さそうです。

FileMakerの歴史を感じますね。

タイトルとURLをコピーしました