Apple製品を使うなら自動化を極めようという話

はじめまして、この度CDSLに配属となりました院生の高谷です。

サービス開発について研究していて、夢と目標は大きく、パフォーマンスにメリハリを、がモットーです。
夢に関しては、夢川ゆい派閥と華園しゅうか派閥があると思いますが、私は華園しゅうか派閥に属しています。
大学入るまでデザイン・イラストを専門にしていて、コロナ騒動前まではコミケ中心に色々出してました。はやく気にせず参加できる日が来ることを心待ちにしています。
ヤリスクロスに乗っています。近いうちに愛知にFC3Cを乗りにいくつもりです。

ここまで自己紹介でしたが、たぶん意味不明だと思います。そういう人間だと認識いただければ光栄です。

話が脱線しそうですので、本題に入りたいと思います。

Appleにちょっぴり詳しいです。
なので、今回は意外に知られていないオートメーション機能について語ります。

AppleScript

近頃、MacBookを使い始める人をよく見かけるようになりました。
特にM1チップ登場後からは、そのマシン親和性の高さから”沼”にハマっていく人を、暖かい目で見守っています。

そんなMacシリーズには、macOS 7の頃から AppleScript というものが実装されています。
これはApple独自の言語で、macOS内のあらゆる動作を自動化することができます。

実は標準搭載されているもので、専用のアプリケーション スクリプトエディタ を使って記述することができます。
標準では /system/Applications/Utilities/Script Editor.app となります。


図:クリップボードにあるテキストデータをGoogle検索するAppleScript

スクリプトエディタは、ほぼAppleScriptを記述する専用のアプリケーションになります。

AppleScriptというだけあり、記述方法もApple独自のものとなります。
考え方自体はSwiftに近いものがありますが、それでも全く違うものと考えた方が良いです。
というのも、AppleScriptは「可能な限り自然な英文で記述可能」であることを目指しているもので、構文を読むと確かに英文っぽさを感じます。
この英文ぽさが、記述された処理の理解のしやすさでもあり、冗長記述の原因でもあるため、一概に良いものとは言えませんね。

例えば、「クリップボードにあるテキストデータをGoogle検索する」スクリプトを書くと次のようになります。


-- URLを入力
set url_txt to "http://google.co.jp"
-- 検索ワードを入力

page_open(url_txt)
key_stroke()

-- ページオープンメソッド
on page_open(url_txt)
--処理開始
set url_txt to url_txt
tell application "Safari"
activate
delay 1
make new document with properties {URL:url_txt}
delay 1
end tell
end page_open

-- 指定したキーを入力する
on key_stroke()
tell application "System Events"
tell process "Safari"
--検索ワードをはりつけ
keystroke "v" using {command down}
delay 0.5
end tell
end tell
end key_stroke

簡単に説明をしますと、 set ~ to は変数定義、 on ~は関数定義となります。

独特なのが、tell applicationです。
これは、指定したアプリケーションをアクティベートする処理にあたります。
tell application "Safari" では、Safariを起動して利用可能な状態にします。
tell application "System Events"は、特定のアプリではなく、システム管理されているイベント処理全般を行うことができます。
ここでは keystroke で、キーボード入力を行っています。

図:スクリプトエディタはメニューバーに設置可能

そうして作成した自動化スクリプトは、macOS上のメニューバーで簡単に呼び出すことができます。
この機能を使えば、お使いのMacでの作業を大幅に効率化することができるはずです。
普段している作業で、自動化してしまいたいものがあれば、大体のことが可能だと思うのでぜひ挑戦してみてください。

ちなみに、シェルスクリプトを実行する do shell script や、ブラウザによってはJava Scriptを実行することも可能です。
私は、仕事でヤマト運輸の伝票をたくさん記入しなきゃいけない時に、伝票記入フォームをJavaScriptで操作して、かなり楽な自動化を行いました。
シェルスクリプトで行うバックアップなどの動作も、AppleScript側から行うと何かと便利なこともあります。

AppleScriptは、有名でないところもあり、調べてもリファレンスというものがなかなか見つかりません。
しかし、アプリケーションごとの固有の関数などのドキュメントは存在するため、基本を覚えれば十分活用できます。

Automator

AppleScript はスクリプトで記述していくことで、自動化においてかなり細かい設定を行うことができます。
しかし、独特な言語であることもあって、すぐにモノにしにくいのも確かです。

Automator は macOS X から登場した GUI でのオートメーションアプリケーションです。

むしろ、スクリプトエディタ(AppleScript)は、macOSのバージョンアップによって(セキュリティが理由で)機能が削除されていく一方で、Automatorはアップデート毎に安定している気がします。

Automator も macOS における処理を大体自動化することが可能です。

こちらも標準搭載されているもので、専用のアプリケーション Automator を使って記述することができます。
標準では /system/Applications/Automator.app となります。

図:PDFファイルからテキストを取り出してテキストファイルを作成するAutomatorフロー

処理したい内容は、ワークフローウィンドウの左サイドバーに全て表示されます。
上記の例では、「PDFファイルからテキストを取り出して、テキストファイルを作成する」ワークフローを作成しました。
このように左サイドバーから、行いたい処理を探して組み立てることができます。

そして、ウィンドウ右上に『記録』とあります。
この機能がなかなか凄くて、『記録』を開始してからマウスの動作やキー操作、全てのユーザインタラクティブを記録して、再現まで行ってくれます。

マウス操作の自動化が地味に便利で、同じ操作をしなければいけない”作業ゲー“は大体解決することができます。
私は、くだらない人間なので、minecraftで自動操作botを作ったり、LINEのスタ爆botを作ったり(アカウント一時凍結した)して遊んでいました。

図:Automatorではトリガーが選択可能

また、 Automator のワークフローをいつ実行するかのトリガーも指定することができます。
例えば、カレンダーイベントでのトリガー、音声入力でのトリガー、トリガーをアプリケーションとして事実上大体の処理をトリガーとして動かすことができます。

ただ、スクリプトエディタ(AppleScript)と比べて、モッサリ感は否めません。
そこも処理速度の問題だと思うので、M1チップとかで解決してるかもしれません。

iOSショートカット

最後にiOSでのオートメーションアプリケーションとして『ショートカット』があります。
ショートカットは(確か)iOS13に登場したiOSアプリです。

この、ショートカットアプリについては、Apple自体がかなり推していると実感していて、登場から間もなくも様々なレシピが登場しています。

図:iPad OSでも同様にショートカットが利用可能でレシピが豊富

ものとしては、iOS版Automator みたいなもので、iOSで結構多くのことが自動化できます。
Automatorと同様に、トリガーを設定することができます。
例えば、「指定されたNFCタグに反応して時」みたいなトリガーが可能なため、ショートカット登場当時は、「出勤時にかざすとタイムカードがわりに──」みたいなことが話題になった気がします。実際にやってるかはわかりません。

「職場から離れた時」みたいなものもあるため、職場から帰る時に自動で親族に連絡したり、家のエアコンを起動しておいたり、みたいなことも実現可能です。

私のiPhoneでは、電源に接続するトリガーを使っていて、充電器を挿すと真中らぁらちゃんが反応してくれます

また、AppleScriptやAutomatorとは違って、新しいレシピがよく提案されているので、まだまだ新しい使い方は模索されていくと考えられます。

みなさんも、Apple製品を使っているなら、無駄なことはなるべく自動化してみましょう。

それでは良いAppleライフを✋

コメントを残す