今回のブログ移転でドメイン名を変更したので、TextExpanderのスニペットを見直す必要がでてきました。

特に WordPress のピンバック対策として、自分のサイトのURLを書く時には相対的な URL を書く必要があるので、URL を加工したり、自分のブログのタイトルをカットしている部分を直したり。ところがいざ編集しようとすると、書き散らかしていたことが災いし、編集対象が色々なところにちりばめられていました。あるまじきコードになっていたので、モジュール化をして修正することにしました。
スニペットからのスニペット呼び出しの罠
Safari や Chrome から URL やタイトルを取得するための AppleScript を個別のスニペットにして引き込む、ということをしていたのですが、この構造だと、各スニペットで使う共通的な処理(例えば HTML Encode や URL から自サイトの文字列を取り除くなどの処理)を全てのスニペットに書いていくのは、効率的ではありません。そのため、共通的な処理を別のスニペットにして、それを読み込んで使い回すようにしようと考えました。
そうすることで、個別のスニペットを修正せずに共通処理のスニペットを直すだけで済むようになります。
そこで、共通処理をプレーンテキストで書いて、各スニペットで共通処理のライブラリを読み出すようにしてみました。
こんな風に書いていたスニペットを

共通処理を ??ASLib というスニペットに集約して読み込むようにします。

ちなみに ??ASLib は AppleScript の関数を定義しただけのものなので、プレーンテキストにしておき、スニペット呼び出しで各スニペットに流し込みます。 C 言語などの #include と同じイメージですね。
最初はうまくいっていたのですが、罠にハマりました。
モジュール化ができたのを良いことに、モジュールを細かく分けて複雑な呼び出しをさせようとしたのですが、うまくいきませんでした。AppleScript のスニペットの中から AppleScript のスニペットを呼び出すとうまく動かないのです。スニペット呼び出し部分で “(AppleScript did not compile)” というメッセージが表示されます。
今までは

という構造でしか読んでなかったのが、今回のモジュール化で AppleScript スニペットから AppleScript スニペットを呼び出すルートができてしまいました。
モジュールを全て見直してプレーンテキストに変更
今までは一つの AppleScript スニペットの中で同じようなコードを書いたりしていたもの AppleScript のモジュールにしたりしたので、このようなことが起こってしまいました。
そこで、今回は呼び出されるスニペットを全て AppleScript の関数に書き直してプレーンテキストで読み込む形に統一しました。

ちょっと手がかかりましたが、モジュール化されたので今後の拡張や変更も簡単になりましたし、なによりスニペットの見通しが良くなりました。

関連するエントリ
最後まで読んでいただきありがとうございます。

Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す