Kekeの日記

エンジニア、読書なんでも

AppleScriptの概要と主要コマンド(随時更新)

f:id:bobchan1915:20190406212946p:plain

動機

私はもとより自動化が興味の中心にいて、Gitなど繰り返しタスクを自動化しています。

その一連の過程で、開発者(=私)に対してフィードバックをするときに、AppleScriptを使って通知などを制御していました。

そのようなものづくりに関しての知見は、普段は一人チームのEsaにメモを付けていますが、今回、日本語の記事にして知見を広めようと再編纂を試みています。

自動化でなくても、何かしらAppleScriptに興味があれば少し役に立つ事が書いてあるかもしれません。

ぜひ、ご一読を。

目次

本記事の目次は以下のようになっています。

AppleScriptについて

AppleScriptについて知るべき基本的なことを解説します。

AppleScriptとは

公式ドキュメントは以下のリンクであります。

developer.apple.com

Appleによって作成された言語で、開発者が直接Macintoshアプリケーションを成業することを可能とするmacOSそれ自体の一部です。

繰り返しタスクを自動化したり、複数のアプリケーションの機能を合わせたり、複雑なワークフローを定義することができます。

自動化を簡単に定義できるAutomatorというアプリケーションがデフォルトで入っていますが、今回はスクリプトから制御したいのでここで学びます。

AppleScriptはApple Eventsと呼ばれるスクリプトがアプリケーション対象に送られる内部アプリケーションのメッセージを担当します。

シェバングは以下のようにすると実行をできるようになります。

#!/usr/bin/osascript

ターミナルでも

osascript -e 'display notification "hogehoge" with title "Fuga"'

のように実行することができます。シェルスクリプトの中で使うには以下のようにPATHを指定してあげるといいかもしれません。

/usr/bin/osascript -e 'tell application "Finder" to get POSIX path of (target of window ${ID} as string)'

-eを連ねることで複数のコマンドを逐次的に実行することができます。

osascript -e 'display notification "hogehoge" with title "Fuga"' -e 'say "My task is done"'

文法

開発する中で必要になる基本的な文法を解説していこうと思います。

set x to y: 変数宣言

変数を定義したいときは以下のように定義します。

set hoge to 4

list: リスト

リストは以下のように書きます。

set myList to {"hoge", 2, "piyo"}

リストにアクセスするにはいくつかの方法があります。例えば3爪の要素にアクセスしたいときは

item 3 of myList
third item of myList
myList's third item
myList's item 3

osascriptとは

osascriptとは、AppleScriptを実行するためのコマンドです。

以下のように実行できます。

osascript <file>
osascript -e [SCRIPT]

主要コマンド

アルファベット順で主要なコマンドをリストしています。

command description
activate アプリケーションをアクティベート状態にする
display alert アラートを通知
display dialog ダイアログを通知
display notification 通知を表示
random number 乱数を出力
set the clipboard to クリップボードにデータもcopyする

全ては以下のリンクでご覧ください。

developer.apple.com

activate: アプリケーションをアクティベート状態にする

アクティベート状態とは、以下のようにフォーカスがあたっていて、もっとも前にある状態のものです。少し古い画像なのですが、エクスタシーを感じるので以下の画像を引用させていたただきます。

f:id:bobchan1915:20190406203314p:plain
Safariがアクティベート状態

以下のように実行します。

osascript -e 'activate application "Slack"'

ここではSlackがアクティベートされます。

必須

  • application: applicationを呼び出す必要がある

display alert: アラートを通知

f:id:bobchan1915:20190406192524p:plain

osascript -e 'display alert "display alert" buttons {"cancel", "OK"}'

必須

なし

オプション

  • message: アラートの内容
  • buttons: 3つまでボタンを指定
  • default button: デフォルトのボタンがどちらなのかを指定
  • cancel button: 拒否的なアクションを起こすボタンを指定
  • as: アラートの種類を指定
    • infomational: スタンダードなアラートダイアログ
    • warning: 警告
    • critical: スタンダートな通知と現在は一緒の仕様
  • giving up after: アラートが消滅するまでの秒数

戻り値

以下のようなレコードが返ってきます。

{button returned: "OK"}

display dialog: ダイアログを通知

ダイアログ通知を表示します。

osascript -e 'display dialog "hoge"'

f:id:bobchan1915:20190406210750p:plain

必須

  • text: 表示するテキスト

オプション*

  • default answer: プレースホルダー
  • hidden answer: パスワードのように*で入力を隠すもの
  • buttons: 3つまでボタンを指定
  • default button: デフォルトのボタンがどちらなのかを指定
  • cancel button: 拒否的なアクションを起こすボタンを指定
  • with icon: アイコンを指定することができる
  • giving up after: アラートが消滅するまでの秒数

戻り値

以下のようなレコードが返ってきます。

{text returned:"Cupertino", button returned:"OK"}

display notification: 通知を表示する

f:id:bobchan1915:20190406192550p:plain

osascript -e 'display notification "hogehoge" with title "Fuga"'

必須なもの

  • text: 通知の内容

オプション

  • with title: タイトル
  • subtitle: サブタイトル
  • sound name : 通知音の指定

set the clipboard to: クリップボードにデータをコピーする

データをクリップボードにコピーします。

osascript -e 'set the clipboard to "hoge"'

必須

  • text: コピーするテキスト

random number: 乱数を出力

乱数を簡単に出力できます。

osascript -e 'random number  from 1 to 10'

オプション

  • from: 数字のはじまり
  • to: 数字の終わり
  • with seed: 乱数のシード値を決定

まとめ

AppleScriptを使うと、日常的な作業が簡単に自動化できると感じました。

これからバンバンに使ってみようと思います。