Libraries(共有ライブラリ。以下ASLと略)にsdef(Scirpt辞書)をつけて、AppleScriptや他のOSA言語との間で共通して呼び出し可能なライブラリを書くシリーズの続きです。単なるASLでは、AppleScript側からしか呼び出せません。そこで、sdefを書いて指定することで、より運用性を高められるのではないかと考え、実際に簡単な(素朴な内容の)ライブラリで実験してみました。Libraries)コマンドが1つだけ。パラメータがいくつか。AppleScript側から呼び出す場合にはパラメータの省略ができるが、JXA側からは省略できないといった状態のライブラリで、普通に使っている分には問題を感じませんでした。一方で、sdefについて調べはじめるといろいろ情報が集まってくるもので、ここ数日で急速にsdef記述のためのノウハウがたまってきました。sdefをいままでに一度も書いたことがないわけではありませんが、必要最低限の情報だけ集めて書いてオシマイという程度の「割り切った関係」というのでしょうか。それほど真剣に付き合ったことはなかったわけです。一応、研究用にすべてのアプリケーションのsdefファイルは取り出して参照できるように収集していますが、カラスが光りものを集めて埋めておくのとほとんど差はありませんでした。HTMLに書き出したsdefについては、バージョン間の差異を検出するために有効活用していますが、sdefそのものを見せられてもあまり実用性がありませんでした。sdefを書くことが要求仕様に出される案件がほとんどないので(1件だけあったかも)、Scripter側でも「別に普通にハンドラ呼べばいいだろ」というぐらいの認識であり、sdefを年がら年中書いているSctipterというのはほとんどいないように見えます(海外でも)。予約語に「ゆらぎ」を許容するいちいち予約語を正確にすべて覚えている人などいません。書いた本人ですら「こういう書き方でも認識すればいいのに」と考えがちです。そこで、入力時に別表記で入力しても、構文確認(コンパイル)時に正しい予約語に変換するSynonymを定義しておきましょう。チェックボックスの形状を「standard」と「flat」の予約語で指定できるようにしてありますが、「standard」という予約語がすぐに思い出せないとスクリプトエディタ上で用語を確認する必要があります(そもそも、スクリプトを書くときに用語辞書を表示させないことなどないのですが)。typesの定義部分に、同一視する単語を列挙しておきます。usual」などが書かれても、これらを「standard」と同一視して、構文確認時に「standard」に書き換えます。▲実際にスクリプトエディタ上でSynonymが表示されている(Synと省略)パラメータの省略許容指定(optional)現在のバージョン(v2)のcheckboxLibでは、パラメータの省略をAppleScript側では行えます。JXAやその他のOSA言語では行えません。パラメータを指定したくない、あるいは無指定時にはデフォルト値で処理してくれるのがベストです。逆に、省略を許容しないコマンドなんて悪夢です。そこで、省略可能を指示する「optional」をsdefに書いてみました。type"/></command>これで、AppleScriptからでもJXAからでも(省略可能な)パラメータを省略できるようになりました。こんなところでしょうか。パラメータのうち必須でないものの省略を許容するためには、sdefでoptionalの指定を行うことも必要です。