Macで実行もできるFileMakerコード管理

AppleScriptのスクリプトやターミナルコマンドのメモをFileMakerProで一元管理することで、コマンドランチャーと化して簡易自動処理も可能になりAutomatorを凌駕する勢い。

ヘッドラインでわけのわからないことをほざいておりますが、概ね次のようなお話です。

コードのメモを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なんか諦めて、こっちで作ればいいんじゃないかと思って、テスト的に作ってみたら、実に簡単に出来上がりました。

FileMakerの変数入力画面
“名前”を好きな文言に簡単に変更できて履歴も残せる凄いやつができたよ

さきほどの例の、スクリーンショットの名前を変更する処理も容易く実現。

以前にも、ターミナルでは動くのにAutomatorのシェルで動かない件について書きましたが、あの処理もFileMakerを使ったほうがよほど上手くいくのではと今思ってます。

FileMakerでコードが書かれたフィールドを実行させる

何のことはない、基本、FileMakerのスクリプトで「AppleScriptを実行」を使うだけです。

もしAppleScriptのスクリプトなら、そのまま「AppleScriptを実行」で実行させます。

もしターミナルのコマンドなら、ターミナルを起動させてコードが保存されたフィールド内容を実行させます。

変数があるものは、コードの中で特定文字列(例えば”変数1″とか)として書いておき、対応する変数用のフィールド内容で置換します。

変数の文字列をフィールド内容で置換することは、FileMakerで簡単にできる小技のひとつです。

変数をどのように扱うかという部分では試行錯誤の必要があります。難しいからではなく、無限のやりかたが考えられるからです。

その他、FileMakerならではの便利機能を付け足します。一覧から探しやすくするとか、テキストをカラーリングして見やすくするとか、変数の履歴を残して再利用しやすくするとか、いろいろ施します。

コードのメモデータベースを発展させる

最初に紹介した「あちらこちらにメモしていたコマンドをまとめただけのデータベース」ですが、このように実行環境として生まれ変わりました。

このブログの記事のためにスクリーンショットを撮りまくることがあるんですが、たとえば最初にアプリ名を入れるなど名前の変更が気軽にできるようになり、重宝しています。最初の目論見がスクリーンショットの名前変更や保存場所の変更でした。

FileMaker コード管理

コードを集めることがコードを実行させることに直結する機能的データベース

そういえば昔、「機能的な絵画」を作る芸術家になろうと考察していました。ルネ・マグリットが「これはパイプではない」とタイトルを付けたパイプの絵を描きましたね。よしわかった。では、機能させることが出来る絵画を作ってやろうじゃないかと、思いついたのがパレットの絵でした。パレットの絵を描き、他の絵を描くためのパレットとして実際に使用しました。

パレット

これこそがマグリットへの回答であると確信したのはいいのですが、パレット以外に機能的絵画のネタを思いつけず、頓挫して人生諦めました。

コマンドのメモを集めたカード型データベースをコマンド実行環境として使うことはこれと似ていますね。似ていませんか?そうですか。すいません。

Penguin icon

ということで、どのように作ったのかを実際のファイルを基に記していきます。

が、また前置きの枕が長くなったので(ここまで枕かよっ)ここで一旦終わっといて、実例の具体例はまた日を改めて。でも大した話じゃないし技術的に誰かの参考になるようなものでもないかからつづきが有用かどうかわからないけど。

つづく

つづきました→ Macで実行もできるFileMakerコード管理 その2