
macOS Tahoeの最もエキサイティングな追加機能の一つは、ショートカットの自動化です。これは(他にも多くの機能がありますが)ファイルシステム内での移動や変更に合わせてショートカットが自動で動作するようになります。フォルダアクションによってこれらの機能がMac OS X Jaguarに導入されてから20年以上経ち、AppleはHazelなどのサードパーティ製ユーティリティによって普及したこの機能を現代風にアレンジしました。
残念ながら、Appleによるこの機能の実装は非常に簡素です。ショートカットを起動し、ファイルシステムの変更に関するすべての情報を渡すトリガーです。その情報の解析、フィルタリング、そしてそれに基づく操作は、すべてショートカット自体が担っています。つまり、この機能を活用するには、ユーザーはショートカットの基本を理解している必要があります。
この記事の目的は、フォルダにアイテムが追加されたときにその内容を操作するショートカットを作成するための簡単なガイドを提供することです。今回は、Markdownファイルが追加されたときにそれらを別の場所に移動するドロップフォルダを作成します。
まず、「ショートカット」を開き、サイドバーの「オートメーション」項目をクリックします。次に、右上隅のプラスボタンをクリックします。この例では、「フォルダー」オートメーションを選択します。表示されるダイアログボックスで、操作対象のフォルダー(私の場合は「ここにドロップ」)を選択し、そのフォルダーにアイテムが追加された場合にのみショートカットが実行されるようにするチェックボックスをオンにします。また、「すぐに実行」オプションをクリックし、「実行時に通知」のチェックを外します。これは、オートメーションを潜水艦のように静かに実行させたいためです。
すべて完了すると、既存のショートカットを選択するオプションが表示されますが、このアクションに明示的に関連付けられた新しいショートカットを作成することをお勧めします。(こうすることで、操作が整理されます。また、アクション内から呼び出したいルーチンがある場合は、「ショートカットを実行」ブロックを使用できます!)すると、最初のステップ「フォルダー変更の概要を入力として受信」以外の空白のショートカットを含む新しいウィンドウが開きます。このステップで、システムはフォルダー変更の概要項目をショートカットに渡します。残りは自由に設定できます。
この入力を処理する最も簡単な方法は、「Repeat With Each」ブロックを追加することです。これにより、ショートカットは追加されたすべてのファイルを1つずつループし、個別に処理できるようになります。生のショートカット入力を処理するのではなく、「Repeat With Each」ブロックに自動的に入力される「ショートカット入力」フィールドをクリックし、「フォルダー変更サマリー」変数によって提供されるパラメータから「追加されたファイル」を選択します。
フォルダにドロップされたすべてのアイテムを取得して何らかの処理を実行することが目的であれば、これで完了です。繰り返しループ内でアイテムを削除したり、コピーしたり、圧縮したり、移動したりすれば、すべて実行されます。
この例では、さらに一歩進んで、特定のファイルのみに処理を適用するルールセットを適用します。ショートカットなので、追加したファイルのリストをフィルタリングして必要なファイルだけを含める方法は数多くあります。非常にシンプルなルールセットであれば、最も簡単な方法は、「ファイルをフィルタリング」アクションを使用してショートカット入力に処理を適用し、「各ファイルごとに繰り返す」アクションを設定することです。

もう1つの方法は、繰り返しブロック内でIf文を使用し、その文を使って「ファイルのフィルタリング」アクションで使用するのと同じ属性をテストすることです。この場合は、ファイル拡張子がmdであるMarkdownをフィルタリングしています。最初にファイルをフィルタリングする方が効率的かもしれませんが、後述する複雑な状況には対応できません。

これらのアプローチを組み合わせることもできます。まず基本的なフィルタリングを行い、その後でより具体的なテストを実行します。最終的な目標は、ショートカットが、定義した適切な種類のファイルのみを処理するようにすることです。
複雑化:サブフォルダ
さて、ここからが厄介なところです。Appleの自動化では、フォルダ内のサブフォルダの処理に関して選択肢が提示されません。サブフォルダ階層のどのレベルであっても、変更があれば自動化が実行されます。Dan Morenと私はこの問題に時間をかけて取り組みました。適切な解決策としては、Appleがチェックボックスを提供し、ユーザーが自動化にサブフォルダを含めるかどうかを決定できるようにすることですが、他にもいくつかアプローチ方法があります。(もう一つの選択肢は、自動化の対象フォルダのパスを変数としてAppleが提供し、それを使ってテストできるようにすることです。)
Dan のアプローチは、正規表現を使用して受信パスからファイル名を削除し、最上位フォルダーの正確なパスに対して厳密にフィルタリングすることです。

私のやり方は手順は多いですが、ショートカットっぽいです。入力ファイルのパスをスラッシュ文字で分割し、ファイルパス内のすべての項目を含むリストを作成します。最後の項目はファイル名になりますが、最後から2番目の項目はそれを囲むフォルダになります。(おいおい、Appleさん、どうして囲むフォルダは変数として使えないんだ?!)残念ながら、Pythonのようにショートカットにリストから項目-2を取得するように指示することはできません。そこで、代わりにリスト内の項目を数え、その数から1を引いて、その項目を取得します。

すべて完了したら、If ステートメントを使用して、その囲んでいるフォルダーとフィルタリングする最上位フォルダーの名前を比較し、ファイルが最上位フォルダー内にある場合にのみ続行できます。
結論
macOS Tahoeのショートカット自動化は本当に多くの可能性を広げてくれます。私はすでに6つほど作成しました。確かにAppleはもっと簡単にしてくれるはずですが、フォルダ変更の概要の処理に慣れれば、本当に素晴らしいことができます。私が既に作成したアクションをいくつかご紹介します。
- Dropbox にアイテムが追加されたら Finder にファイルを表示する
- 編集者のジム・メッツェンドルフがアップグレード MP3 ファイルを Dropbox に追加したら、ファイルをデスクトップにコピーします。
- 特定の画像ファイルをデスクトップにドロップしたり、ダウンロードフォルダに追加したりするときに JPEG に変換します
- Zoomを起動する前にWebリンクをクリックしたときにZoomがダウンロードし続けるZoomインストーラーを削除します
- サウスウエスト航空のicsファイルをPythonスクリプトで適切な形式に変換してから、カレンダーに追加します
フィルターの作成と「各アイテムで繰り返し」ブロックの使用に慣れれば、この機能は多くの面倒な作業を省いてくれます。そして、まさにそれがユーザーオートメーションの本来の目的ではないでしょうか?
このような記事がお気に召しましたら、ぜひSix Colorsの購読者になって私たちを応援してください。購読者は、限定ポッドキャスト、メンバー限定記事、そして特別なコミュニティにアクセスできます。