Automator とフォルダアクション(教員のための Mac Tips:4)

Automator

最近、Mac を使い始めた人の多くは、UNIX 互換の OS を使っていたという人も多いです。そのような人は、自分でシェルスクリプトなどでかなりの作業を自動化しているものと思います。Mac でも古くから AppleScript というものがあり、かなり複雑なスクリプトを書いている人もおります。しかしながら、AppleScript はかなり敷居が高く、一般人が手を出すのは意外と面倒でした。

このような状況で Mac OS X 10.4 Tiger に導入されたのが Automator です。Automator を開くと様々なアプリで行える定型作業が一覧で表示されます。これらの作業をワークエリアに並べることでワークフローを作成することができます。例えば、選択された PDF を連結して一つの PDF にするといった複雑な作業なども定型作業として用意されています(この機能を使った例を後で示します)。

また、シェルスクリプトを起動するという定型作業もあり、シェルスクリプトの引数や標準入力に選択したものを渡すようなこともできます。例えば、処理はシェルスクリプトで簡単に書けるのだけど、ファイル名を指定するのが面倒だというような場面があるとします。この場合、Finder からシェルスクリプトを内包した Automator アプリを起動することでこのような問題が回避されます。

フォルダアクション

フォルダアクションはフォルダにファイルが追加された時に自動処理を行う機能です。歴史は古く Mac OS 8.5 から用意されました。ただし、当時は AppleScript を呼ぶことしかできず、本当に一握りの人しか使用してなかったあまり知られていない機能だと思います。

フォルダアクションが日の目を見たのはやはり、上記の Automator でフォルダアクションを作成できるようになった時だと思います(それでも知ってる人は少ないかも)。とりあえず使用イメージがわかないと使いようがないと思うので、具体的な使用例で説明したいと思います。

具体的な使用例

以前、別のページで紹介したものもありますが、こちらでも再掲しておきます。

xbb作成アプリ(makebb)

Mac は pdf がネイティブに使用できるため、LaTeX する場合、図は pdf を差し込むことが多いです(eps を使うのは、学会の投稿論文を出す時くらい)。これは、dvipdfmx で pdf を作成するときに無駄な変換作業をさせないためです。ただ、唯一のネックは bounding box 情報を別途用意しなければならない点です。mediabb.sty のように bounding box を直接取得してくれるものもありますが、以前特定のアプリから出力した pdf がうまく設定されなかったこともあり、地道に bounding box を作成しています。また、platex 時に外部コマンドを呼び出して bounding box を作成するように設定することもできますが、図を追加・修正する頻度とコンパイルの頻度を比較すると、圧倒的に後者の方が多いので、図を書き出しては bounding box を作成するという作業を行っています。

bounding box を作成する作業は、ターミナルで extractbb ファイル名.pdf のように打ち込むだけです(MacTex 2013 からは ebb ではなく、extractbb になりました)。ただ、これだけの作業のためにターミナルを立ち上げるのも大変ですし、周りには UNIX を使い慣れない人も多くいます。そこで、以下の図のような Automator アプリを作成しました。ここで、Mavericks の不具合で定型作業の一覧がローカライズされずに英語になってしまっています。ただし、フローに落とし込むと日本語で表示されます。

Automator では、以下の二つのフローを実行します。

  1. 選択された Finder 項目を取得
  2. シェルスクリプトを実行(入力は引数として受け取る)

シェルスクリプトでは、以下のスクリプトを実行します。

for f index "$@"
do
    cd ‘/usr/bin/dirname $f‘
    /usr/texbin/extractbb ‘/usr/bin/basename $fdone

作成したアプリは makebb と名前を付け、/Applications フォルダに入れておきます。また、わかりやすいようにカスタムアイコンを設定し、Finder のツールバーに登録しておきましょう。なお、Mavericks からはツールバーへのアプリ登録時にコマンドキーを押さないといけなくなったので注意してください。逆に間違ってツールバーに登録されてしまう事故は減ります。

後は、xbb ファイルを作成したい画像ファイルを全て選択し、ツールバーに登録した makebb アプリをクリックするだけです。これならターミナルが苦手な人でも問題ありません。アプリをツールバーに置いたのは、選択状態を保持したまま、アプリを起動したいためです。ツールバーのアプリはシングルクリックで起動するため、クリックミスで選択状態が解除されてしまうことを防ぎます。

PDFファイルの連結(combinePDF)

昨年度に職場に導入された輪転機は両面印刷できるだけでなく、USB ポート接続のプリンタとしても使える優れものでした。そのため、今年度からは20ページ近い教職員会議の資料を全て電子化し、一つの PDF ファイルを作成することにしました。最初の一回目はプレビューアプリにおいて、手作業で一枚一枚連結したのですが、ここで Automator のことを思い出し、以下のアプリを作成しました。

やっている内容は簡単で以下の定型作業の組み合わせです。

  1. 選択された Finder 項目を取得
  2. PDF ページを結合(ページを追加)
  3. Finder項目を移動(デスクトップに保存)

PDF ファイルは連結したい順に名前を付け(先頭に00,01のように通番を付けるとよいです)、名前順に並べた後で選択し、ツールバーに置いた combinePDF をクリックします。こうすることで、連結された PDF ファイルがデスクトップに保存されます。ファイル名はランダムな文字列が適当に付けられるので、気になる人はファイル名変更の定型処理を追加するとよいと思います。

xbb ファイルの自動生成(autobb)

makebb でだいぶ楽にはなったものの、xbb の作成を忘れることが多いです。そこで、xbb を自動生成するフォルダをフォルダアクションで実装しました。各原稿のフォルダの下に figures というフォルダを作り、以下のフォルダアクションを設定します。


フォルダアクションの場合は、対象フォルダがわかっていること、対象ファイルが指定済みであることから、単にシェルスクリプトを呼び出すだけになっています。

for f index "$@"
do
    /usr/texbin/extractbb $f
done

OmniGraffle などで 指定したフォルダにPDF ファイルを書き出す処理を行うと、ファイル出力と同時に Automator フォルダアクションが起動され、xbb が自動的に生成されます。この結果、新規ファイルを作成した時に xbb ファイルがありませんというエラーは全く見なくなりました。画像の更新時でサイズが変わった時には、autobb が働かないこともあるため、その時には前述の makebb を使います。

別のフォルダで新しい原稿を書き始めたら、同様に配下に figures フォルダを作成し、右ボタンでフォルダアクションを割り当てします。フォルダアクション自体はライブラリフォルダに保存済みなので、二度目以降はこれを選択するだけで済みます。

Automator の各種定型処理の中には、かなり便利なものがあるので一度見ておくとよいでしょう。