You are here: Home / TinBlog / オートマタ、使って天国、作って地獄 orz part.1

オートマタ、使って天国、作って地獄 orz part.1

Posted by h2 at Mar 02, 2013 09:45 PM |
Filed under:
MacのOSXでもれなくおまけに付いてくる、お手軽アプリのAutomator。ファイル名の変更だとか、ちょっとしたことをするのに、大変重宝するアプリだ。ただし、使っている限りは。

オートマタ(Automator)とは、一種のスクリプト実行アプリケーションだ。パソコンを使う上で、お決まりの動作をさせる時など、いちいち手作業というのも馬鹿馬鹿しいので、プログラムにやらせてしまおう、というときに活躍するアプリだ。方向性としては、エクセルのマクロなどに相当するものだが、このオートマタが他のスクリプトやマクロと決定的に違うのは、

  1. ほぼGUIの操作のみで作成できる。
  2. OSや他のオートマタ対応アプリと連携できる。
  3. 一度作成したマクロをアプリケーションとして登録できる。

といったあたり。

 

たとえば、「指定したフォルダ内にある、特定の名称で終わるファイル(.bak とか)をすべてゴミ箱に入れる」なんていうマクロを考えた場合、オートマタだと、

  1. 「受け取ったファイルやフォルダを調べて、特定の名称で終わるファイルを抽出する」というパーツをドラッグアンドドロップで登録する。
  2. 「受け取ったファイルやフォルダをゴミ箱に移動させる」というパーツを、ドラッグアンドドロップで1.のパーツの後ろにくっつける。

これだけ。ほぼマウス操作のみで、アプリが完成してしまうのだ。キーボードを使う場面としては、「なんていう名称で終わるのか(.bak など)」と、「なんていう名前のアプリとして保存するか」の二カ所だけ。もはや学研・電子ブロック並みのお手軽さですな。

 

というわけで、ちょっとした作業であれば、ほぼ秒殺、長くても数分でアプリが完成するので、普段から大変重宝しているのだけれど。不満点が、ないわけでもない。その一つが、パーツが用意されていない場合、またはパーツの機能が不十分な場合に困ることだ。お手軽な分、細かな調整がつけにくいのですな。

 

そして、そういった不満の最たるものに、「ファイルを列挙する機能が不十分」というのと、「ゴミ箱に入れるんじゃ無くて直接削除させてくれよ」というのがあるわけで。この二つがどうにかなるだけで、オートマタで済んでしまう作業というものが、さらに幾つか増えるんだけどね。

 

なんていう不満をふつふつと持っていたある日、ふと思い立った。このような機能を持つパーツを作ってみようか、と。まあ、ネットを探せば、既に誰かが作っていそうなパーツではあるんだけど、ここは興味半分、スキルアップ目的半分で、自作をしてみることにしました。

 

そして、見事にはまったわけですな。アップルお得意の、使うは天国、作るは地獄の落とし穴に orz 。

 

環境がコロコロ変わる

まあ、アップルだし。ある日いきなり仕様変更やらUI変更やらで、使い勝手、というか、作り勝手が全然違ってしまっていることなんて、日常茶飯事なわけだし。昔は、これに加えて「リファレンスの更新が遅れていて関数がサッパリわからん」なことがあったので、轟沈することが多かったけど、iOSが出てからこちらは、こういったことが少ない分、まだ楽。

とはいえ、今回のヤツには嵌まった。作業環境は、OSX10.8+Xcode4.6。久しぶりのOSX向けアプリだったのだけど、いつの間にか、OSXでもARC推奨に変わっていたのですね。お試しのお約束、"Hello World!" を作ってみたのだけど、ビルド後に "Garbage Collection is deprecated; use the 'Convert to Objective-C ARC' menu command to switch to Automatic Reference Counting" (ガーベジコレクションは廃止されます。「Convert to Objective-C ARC」メニューを使用してARC対応に切り替えて下さい)、という警告が出てるじゃありませんか。

オートマタアクション作成#1

画像クリックで、原寸大表示します。

・・・で。ここでちょっと困った。「Convert to Objective-C ARC」のメニューって、どこにあるんでしょうか。

・・・書いてないし。しょーがない、ヘルプで調べてみるか、で調べてみたところ。

オートマタアクション作成#2

・・・・・・・・・・・。うん、なんていうか、すごくわかりやすいし、ありがとう、なんだけど。

Xcode持っている人は是非一度試してみて下さい。

画像だと静止していてわからないんだけど、メニューの脇にある「ここだよ」と指している青い矢印が、ものすごく微妙にふわふわ動いているんですね。

なんていうか、見ていてドッと脱力感が orz

まあ、やることはわかったし、で、まずは指定されたメニューでARC化。所詮は Hello World なので、修正が必要な箇所なんてあろうはずも無く。

オートマタアクション作成#3

すんなりと完了。・・・なんだけど。このあと何度 Clean & Build しても、同じ「ガーベジコレクションは廃止されました」警告が出てくるんですね。

 

コンパイル設定の罠

調べてみたところ、大笑いな事に、肝心のビルドセッティングがまったく変更されていないことが判明。

オートマタアクション作成#4

つまり、Convert to... のメニューは、ソースコードをコンバートするだけだったわけで。

というわけで、ここを削除して、コンパイルし、ついでにARCの設定onも確認して、めでたく警告0のビルド環境が完成。

 

旧式オートマタの罠

あとは、完成したものをオートマタでテスト実行すればいいわけだけど、このままだと、デバッガ上で「実行」するだけでは、ちゃんと動作してくれない。ちゃんとスキームを設定してやる必要があるんですね。やり方は、そんなに面倒くさくは無い。ウインドウ上部の"scheme"ボタンのうち、プロジェクト名が表示されている方(今回の例だと、ボタン表示は [HelloAutomator>My Mac 64] となっているのだけど、このうち [HelloAutomator] の表示されている部分、つまりボタンの左側)をクリックして、"Edit Scheme..."を選択。

オートマタアクション作成#5

そして、でてきたスキームのうち、Run(Debug)用の設定内の Info, Arguments の設定を、それぞれ修正。

オートマタアクション作成#6

オートマタアクション作成#7

Info の方は、"Executable" のポップアップを押して、"Other..."メニューからオートマタのアプリを選択するだけ(普通は /Applications/Automator.app )。

Arguments の方は、"Arguments Passed on Launch" のリスト下部にある + ボタンを押して、「-action "$(SRCROOT)/$(TARGET_BUILD_DIR)/HelloAutomator.action"」を指定。「$(SRCROOT)/$(TARGET_BUID_DIR)/」は、Xcodeのバージョンやら設定やらに依存するので、それぞれ自分の環境でDebug時にビルドされる先のパスを指定してやること。また、シート下部にある Expand Valuables Based On を指定しておかないと、SRCROOT などの変数が適切に展開されないので、これらの変数を使用している場合は適切に設定しておく。

 

あとは、デバッグしたい時に、普通に Run してやれば、勝手にオートマタが起動して、できたてほやほやのアクションをゲストパーツとして読み込んだ状態になる。ついでに、作成したプログラムでNSLogしたものなども、普通のアプリケーションの時と同じように、Xcodeのデバッグウインドウ上に表示されるようになる、という寸法だ。ついでに、オートマタ自体のログまで出てくるのはご愛敬。

 

では、早速実行を。Run すると、オートマタが起動して、どの種類のスクリプトを作成するか尋ねてくる。

手っ取り早くアプリケーションを指定して、いざ、アクションを登録しようとした段になって、HelloAutomator アクションをドラッグアンドドロップしたところ、

オートマタアクション作成#8

 

・・・・・・・・・・・。って、なんでじゃあっ!

互換性がないって、どういうことよ。変なコトした記憶無いけど。というか、Hello って言うだけのアクションに、互換性も無いもんだと思う。

で、このエラーメッセージを元に探ってみたところ、なんとも情けない原因がわかった。

 

曰く。

オートマタ自体がガーベジコレクション対応となっている都合上、その上で動作するアクションも、ガーベジコレクションに対応している必要がある

オートマタのガーベジコレクション対応は64bitのみなので、32bitオートマタ向けのアクションは、ガーベジコレクションに対応して”いない”必要がある

 

・・・・・・・・・・・。

アップルさんよう。理由としてはすっごく理解できるけどよう。

だったら、オートマタプロジェクトでガーベジコレクション廃止の警告なんて出すなよう orz 。

 

なんでこう、アップルの開発環境には、わっかりにくい落とし穴が空いているかなあ。

なにはともあれ。

ガーベジコレクション対応を元に戻して、ARCを使用しない設定にして、

オートマタアクション作成#9

無事、コンニチワできました。

 

というわけで、何ともトホホな罠にはまりつつも、とりあえずオートマタアクション作成の地盤固めができた。

Filed under:
« November 2019 »
November
SuMoTuWeThFrSa
12
3456789
10111213141516
17181920212223
24252627282930