AppleScriptのスクリプトやターミナルコマンドのメモをFileMakerProで一元管理することで、コマンドランチャーと化して簡易自動処理も可能になりAutomatorを凌駕する勢い。
ヘッドラインでわけのわからないことをほざいておりますが、概ね次のようなことです。
AppleScriptのスクリプトやターミナルのコマンドなど、知ったコードをメモっておくためだけの簡易なFileMakerファイルがありました。
メモったコードを直接実行できるようにしてみようと思って、そうしました。
単なるマイコードメモがコード実行マシンとして化けまして、すこぶる良い感じ。では詳しく行きます。
コードのメモをFileMakerで一元化
スクリプトやコマンドをメモしていた
これまで、AppleScriptやターミナルのスクリプトをネットで見かけたり新たに知ってはメモappやスクリプトエディタやテキストクリッピングやスティッキーやJEditやこのブログの記事やその他いろいろにメモっていました。
そのメモがあちらこちらに鳥散らかって、使いたいときに探すのも一苦労、そこで FileMaker Pro のファイルを一つ作って、そこにまとめてみたんです。
FileMakerで一元管理
コードのサンプルをコピペしておくだけのメモの束、タイトルと分類とコードを書くフィールドだけがある簡単なカード型データベースです。
一昔前にEvernoteが流行っていたころのノリで、散在していたメモを一箇所にまとめたというわけです。
まとめることによって若干探しやすくなるし、コピペも楽になりました。ターミナルコマンドのマイリファレンスとしても役立ちます。
とはいうものの、その程度の便利さでは日常的に使いません。FileMakerを常に起動しているわけでもないし。
もともと散在する性質のものを無理矢理一箇所にしまい込もうとすることにそもそも無理があります。
そんなわけでFileMakerでまとめようとしたコードのメモですが、いつしか忘れて放置していました。
しかし、これが意外に化けまして、なかなか使い手があるものに育ちました。コマンドやスクリプトのメモが、実際にそれを実行できる装置へと発展したわけです。
Macの設定や操作の自動化
AppleScriptとターミナル
ところで、ターミナルのコマンドやAppleScriptなどをメモしているというのはどういうことかというと、もちろんそれを使ってMacの設定を変更したり自動化したりするためです。コードを集めるのが趣味だからというわけではありません。
TimeMachineの速度アップやMacの設定、スクリーンショットの変更など、使いたいときにその都度スクリプトエディタやターミナルにコピペして実行させます。そのためのメモです。
Automator
コピペでそのまま使えるタイプのスクリプトはいいのですが、コードの中にパスや名前を含めるタイプのものもあります。
例えば保存するスクリーンショットの名前を変更したいことがあります。
defaults write com.apple.screencapture name "名前"
これがターミナルのコマンドです。名前のところに好きな名前を入れてから
killall SystemUIServer
こうするとスクリーンショットの保存名が変更できます。
都度変更するパスや名前の部分、即ち変数を必要とするスクリプトは、メモから他のメモに一旦コピペして変数部分を書き換えてからターミナルにペーストします。
メモをコピペする度に一手間かけて変数部分を変更するのが面倒で、もうちょっと便利に使えないかと、Automatorの使用を思いつきます。変数部分を入力すると勝手にコードが発動する働きのAutomator書類を作ろうとしたわけですよ。
でもそれができずに頓挫します。Automatorって難しいんです。難しいだけじゃなく、根本的に力不足です。
ひとつは、if が使えません。
条件分岐ができないために、ほとんどのやりたいことは実現しません。
ひとつは、変数の扱いがわけわかりません。
Automator内でシェルやAppleScript実行をまたがって変数を受け渡しすることは最高難易度でありまして、今までこれをやろうとして上手くできた試しがありません。また、変数のために入力を促すダイアログを出現させる方法ひとつ取っても手出し無用の超高難易度で一般人が気軽に実現できるようなものではありません。
主にこの二点のために、目的を果たせずやさぐれて放置します。
FileMakerから実行する
FileMakerのメモ集を使って実行させる目論見
そこでFileMakerで作って放置していたコードメモDBを思い出し、これを利用することを思いつきます。
メモとして保存されているのはコードやスクリプトですから、その保存フィールドそのものをFileMakerから実行させてみようというわけです。
Automatorでは難しい変数や条件分岐を利用した処理ですが、FileMakerでは簡単に作れます。このことにハタと気づいたんですよ。
入力のためのインターフェイスを作ることも得意ですし、わりと複雑な処理も可能、Automatorなんか諦めて、こっちで作ればいいんじゃないかと思って、テスト的に作ってみたら、実に簡単に出来上がりました。
さきほどの例の、スクリーンショットの名前を変更する処理も容易く実現。
以前にも、ターミナルでは動くのにAutomatorのシェルで動かない件について書きましたが、あの処理もFileMakerを使ったほうがよほど上手くいくのではと今では思っています。
FileMakerでコードが書かれたフィールドを実行させる
何のことはない、基本、FileMakerのスクリプトで「AppleScriptを実行」を使うだけです。
もしAppleScriptのスクリプトなら、そのまま「AppleScriptを実行」で実行させます。
もしターミナルのコマンドなら、ターミナルを起動させてコードが保存されたフィールド内容を実行させます。
変数があるものは、コードの中で特定文字列(例えば”変数1″とか)として書いておき、対応する変数用のフィールド内容で置換します。
変数の文字列をフィールド内容で置換することは、FileMakerで簡単にできる小技のひとつです。
変数をどのように扱うかという部分では試行錯誤の必要があります。難しいからではなく、無限のやりかたが考えられるからです。
その他、FileMakerならではの便利機能を付け足します。一覧から探しやすくするとか、テキストをカラーリングして見やすくするとか、変数の履歴を残して再利用しやすくするとか、いろいろ施します。
コードのメモデータベースを発展させる
最初に紹介した「あちらこちらにメモしていたコマンドをまとめただけのデータベース」ですが、このように実行環境として生まれ変わりました。
コードを集めることがコードを実行させることに直結する機能的データベース
そういえば昔、「機能的な絵画」を作る芸術家になろうと考察していました。ルネ・マグリットが「これはパイプではない」とタイトルを付けたパイプの絵を描きましたね。よしわかった。では、機能させることが出来る絵画を作ってやろうじゃないかと、思いついたのがパレットの絵でした。パレットの絵を描き、他の絵を描くためのパレットとして実際に使用しました。
これこそがマグリットへの回答であると確信したのはいいのですが、パレット以外に機能的絵画のネタを思いつけず、頓挫して人生諦めました。
コマンドのメモを集めたカード型データベースをコマンド実行環境として使うことはこれと似ていますね。似ていませんか?そうですか。すいません。
ということで、どのように作ったのかを実際のファイルを基に記していきます。
が、また前置きの枕が長くなったので(ここまで枕かよっ)ここで一旦終わっといて、実例の具体例はまた日を改めて。でも大した話じゃないし技術的に誰かの参考になるようなものでもないかからつづきが有用かどうかわからないけど。
つづく…
つづきました
→ Macで実行可能なFileMakerコード管理 CodeManager(旧)
★ 時は流れ、新しいポストで仕切り直しました。こっちをどうぞ。
→ Macで実行可能なFileMakerコード管理 CodeManager(新)