AppleScriptでMacの作業を自動化する
AppleScriptを使うと、いつも行う操作や処理などを自動化できるのでとても便利です。本記事ではAppleScriptを簡単に紹介します。
目次
はじめに
AppleScriptとは、アップルが開発したmacOS用のオブジェクト指向のスクリプト言語で、システムや様々な対応アプリケーションを制御できます。
このAppleScriptを使うことで、いつも行う操作や処理などを自動化できます。
例えば。私はフリーランスで複数のプロジェクトに関わっています。当然、プロジェクトごとに環境は異なりますので、稼働日に応じて現在立ち上がってる環境を落として、新しい環境を立ち上げる、ということを繰り返してたのですが、これが毎回となると結構な手間です。
そこで、AppleScriptを使って、環境の切り替えを自動化しました。
上の動画では、AppleScriptで下記の作業を自動化してます。
- iTermを立ち上げて分割。一つはプロジェクトディレクトリに移動しdocker立ち上げ、一つはVS codeでプロジェクトディレクトリを開く
- chromeでローカルホストを開く(docker起動が終わる前なので最初はnot foundになる)
- Finderでプロジェクトディレクトリを開き、新規タブでプロジェクトの作業フォルダを開く
- Sourcetree立ち上げ
このようにAppleScriptを使うとMac上での作業を効率化できます。
この記事では初めてAppleScriptを使う方向けに、基本的な使い方とどのようなことができるのか紹介します。
エディタ
エディタには、Macにプリインストールされてるスクリプトエディタを使います。他のエディタでもAppleScriptは書けると思いますが、スクリプトエディタは直ぐにスクリプトを実行できたり、後述するアプリケーションの書き出し対応や、用語説明など一通りの機能が備わってるので、まずはこれを使うのが良いと思います。
また、Automatorを使うと、GUIで簡単にワークフローを作れますが、本記事では触れません。
基本コマンド
アプリケーションの選択
tell application "Google Chrome"
<コマンド>
end tell
tell application "起動したいアプリケーション
で、操作するアプリケーションを指定します。tel
とend tell
の間に実行したいコマンドを書きます。
アプリケーションの起動
tell application "Google Chrome"
activate
end tell
activate
でアプリケーションを起動します。
同様に run
でもアプリケーションを起動できます。
activate
と run
の違いは、 activate
アプリケーションを起動してアクティブ(手前)にするのに対し、 run
は起動するのみでアクティブにはしません。
参考:AppleScript でアプリケーションを起動・終了する \- ObjecTips
アプリケーションの終了
quit
でアプリケーションを終了します
tell application "Google Chrome"
quit
end tell
key入力
tell application "System Events"
でSystem Eventsを選択して、keystroke
や key code
コマンドでkey入力を制御できます
スペースキーなど特殊なキーを入力したい場合は key code
コマンドを使用します。
tell application "System Events"
-- スペースキー入力
key code 49
end tell
key code 一覧はこちらを参照ください。
Complete list of AppleScript key codes
コマンドやオプションなどの特殊キーと組み合わせる時は、 using <特殊キー> down
と書きます。
-- コマンドキーを押しながらc(コピー)
keystroke "c" using command down
-- コントロールキー、シフトキーを押しながらスペース
key code 49 using {control down, shift down}
Finderを開き、新規タブを開く(「command + T」を入力する)スクリプトは下記のようになります。
tell application "Finder"
activate
tell application "System Events"
keystroke "t" using command down
end tell
end tell
主な構文
ダイアログ表示
display dialog
でダイアログを表示します
display dialog "hello"
変数への代入
変数への代入は set
を使用します。
set <変数名> to <値>
# sample
set greeting to "hello"
set thisYear to 2021
set isAnimal to true
if 文
if文は、 if 条件式 then
〜 end if
になります。
また、条件式の =
は代入ではなく、等しいという意味の比較演算子になります。
if <条件式> then
<命令>
else if <条件式> then
<命令>
else
<命令>
end if
例
set animal to "dog"
if animal = "dog" then
display dialog "犬"
else if animal = "cat" then
display dialog "猫"
else
display dialog "その他"
end if
コメント
行頭に --
を入れるとその行はコメントになり実行されません。
-- コメントです
アプリケーションとして書き出し
アプリケーションとして書き出すと、ダブルクリックでスクリプトを実行できます。
書き出し方法は、メニューの「ファイル」→「書き出す」を選択し、表示されるウインドウで「ファイルフォーマット」を「アプリケーション」に選択します。
System Eventsエラー
アプリケーションでSystem Eventsを利用する時は、最初に下記のようなエラーが表示されると思います。
System Eventsでエラーが起きました: スクリプトエディタにはキー操作の送信は許可されません
アラートで許可するを選択すれば、それ移行はエラーが表示されずに実行されます。
それでもエラーが表示されるようであれば、「システム環境設定」で「セキュリティとプライバシー」を選択し、「アクセシビリティ」でアプリを追加すると解決します。
各アプリケーションごとのコマンド
アプリケーションによっては、AppleScriptで特定のコマンドを実行できるものがあります。主に自分が利用したアプリケーションのコマンドを紹介します。
他のコマンドやアプリケーションを調べたい時はネットで検索いただくか、「ファイル」→「用語説明を開く」でアプリケーションを選択して確認もできます。
Finder
フォルダを開く
open folder <path>
でフォルダを開きます。
-- デスクトップを開く
tell application "Finder"
open folder "Macintosh HD:Users:taro:Desktop"
end tell
ファイルのパスは下記の書き方もできます。
open folder POSIX file "/Users/hiro/Desktop"
下記の記事も参考になります。
iTerm
iTermを操作する基本構文
iTermのアクティブなセッションで ls
を実行する場合。
tell application "iTerm"
activate
set _current_session to current session of current tab of current window
tell _current_session
-- ここに操作したいことを書く
write text "ls"
end tell
end tell
別のセッションを選択
first
, second
, … last
などでセッションを指定できます。
tell second session of current tab of current window
write text "ls"
end tell
下記の記事も参考になります。
- iTermをAppleScriptで操作する – ハイパーマッスルエンジニアになりたい
- AppleScript で iTerm2 Version 3 を操作する
- Scripting \- Documentation \- iTerm2 \- macOS Terminal Replacement
- 鳶嶋工房 / AppleScript / Dictionary / Application\(目次\)
Chrome
選択
tell application "Google Chrome"
...
end tell
新規ウインドウを開く
make new window
タブでURLオープン
tell window 1 to make new tab with properties {URL:"<https://design-spice.com>"}
URLオープン
ウインドウが0ならウインドウを開いてアクセス、ウインドウがあるなら新規タブで指定したURLを開きます。
open location '<http://xxx>'
リロード
reload active tab of window 1
作成したもの
ここまでの技術をもとに、実際に私が使ってるものを最後に共有します。オリジナルのAppleScript作成するときに参考にしてください。
※ 一部、私の環境に依存してるところもあるので、その辺は書き換えてます。
set theUrl to "http://localhost:3000"
-- 開発ディレクトリ
set theFolder1 to "Macintosh HD:Users:hiro:develop:hoge"
-- 関連ファイルなどを管理するディレクトリ
set theFolder2 to "Macintosh HD:Users:hiro:project:hoge"
tell application "Finder"
activate
close every window
open folder theFolder1
tell application "System Events"
keystroke "t" using command down
delay 1
tell application "Finder" to set target of Finder window 1 to theFolder2
end tell
end tell
tell application "iTerm"
activate
close current window
if current window = missing value then
create window with default profile
end if
set _path to "cd /Users/hiro/develop/hoge"
set _current_session to current session of current window
tell _current_session
-- ここに操作したいことを書く
split horizontally with default profile
-- docker立ち上げ
write text _path
write text "docker-compose up"
end tell
tell last session of current tab of current window
write text _path
-- vscode立ち上げ
write text "code ./ -r"
end tell
end tell
tell application "Google Chrome"
activate
open location theUrl
end tell
tell application "Sourcetree" to run
Comment
コメント(0)
コメントはまだありません。
コメントする
Trackback(0)