2012-05-25T15:35:15+09:00
AppleScript のスクリプトバンドルを git でバージョン管理する。
AppleScript のスクリプトバンドル/アプレット/ドロップレットのソースコードを git でバージョン管理する AppleScript を作りました。まだ荒削りだけど、積年の悩みが解決できてうれしいので、取り急ぎ公開しちゃう。
git はログインシェルから使えるようになっていればいいです。合わせて、TerminalControl.osax, SmartActivate.osax のインストールを必要になります。
AppleScript のスクリプトバンドル/アプレット/ドロップレット は、バンドルすなわちフォルダだし、肝心のスクリプト本体である Contents/Resources/Scripts/main.scpt はテキストファイルじゃないから、CSV とか Subversion とか git によるバージョン管理とはすこぶる相性が悪い。バイナリ形式だとdiff ができないから、バージョン管理するご利益があんまりない。
でも、コミット時に.scpt ファイルをテキスト形式の .applescript ファイルに自動で変換することができればいいよね。大抵のバージョン管理ソフトには、hook と称する機能があって、各種動作の前後にコマンドを実行する機能がある。コミット直前にも pre-commit という hook が存在する。
hook はレポジトリに対して設定することになるので、今の場合、Subversion だと都合が悪い。リモートのレボジトリにコミットする場合を考えると、リモートのレポジトリに設定された pre-commit はローカルのファイルにはアクセスできないからね。
git の様な分散バージョン管理ならば、常にローカルにレポジトリを持つことになるので、hook コマンドで .scpt ファイルを .applescript コマンドに変換できることが保証されるぜ。
そして、レポジトリをバンドルの中に作ってしまえば、スクリプトバンドル/アプレット/ドロップレット自体はどこに移動してもよくなるので、管理がお気楽になる。スクリプトバンドルと一緒に間違ってレポジトリの消去してしまうことが懸念されるかもしれないけど、GitHub 当たりにレポジトリを push しておけば、管理としては完璧だ。
git-scptd はレポジトリの作成から、pre-commit フック(コミット時に、.applescript を .scpt から自動生成する) の設定、さらにコミットやステータスの表示等、基本的なところは全部まとめて面倒みてくれるぜ。
Finder でスクリプトバンドルを選択して、スクリプトメニューや何らかのランチャーから実行すると、git init を実行してレポジトリを作り、pre-commit フックを設定します。そして、各種アクションを選択するダイアログを表示します。ちなみに、AppleScript エディタでスクリプトバンドルを開いている時に(スクリプトメニュー等から)実行すると、そのファイルが対象になる。賢いでしょう〜。
ソースコードを覗きたい人がいるかもしれない。git-scptd 自体は、実行専用で保存するとか意地悪なことなしていないので、AppleScript エディタで覗けるでしょう。でも、コンパイルは一筋縄ではないかないぜ。XModules に公開している各種モジュールと ModuleLoader.osax が必要だし、未公開のモジュールも使っている。自分でソースを改変したいという人はご連絡ください。個別に対応します。ソースコードレベルでのいちゃもんを待っているぜ。