りんごが好きなのでぃす

Mac/iPhone/iPadなどに関する話題を届け続けて今年で地味に24年目

OS X:AppleScriptでログイン項目を指定順に起動させる

起動時にネックとなってるアプリは遅れて起動させると良い感じに

f:id:kjx130:20141209152410j:plain

OS X のシステム環境設定>ユーザとグループ>ログイン項目では、ログイン項目に設定されているアプリケーションの起動順を指定することができませんが、AppleScript を使えばこれらの起動順を指定できるそうです。

f:id:kjx130:20141209152431j:plain

Mac起動後の重たい動作を解決する為にAppleScriptでログイン項目を管理してみた。 @ U3QXII

当方の環境では Dropbox が Instashare よりも先に起動プロセスに入ると、Instashare がシークモードから離脱できない(iPhone などの相手端末を検索中であることを示す効果音 - 潜水艦のソナー音 - が鳴り続ける)現象が頻発していましたが、上記ページにならって作成した AppleScript を使い始めたところ問題が解決しました。

上記ページに書かれている内容で十分だと思いますが、多少の補足を含めて以下にも記しておきます。

基本となる記述

ベースとなる記述は以下の通り。

repeat with appList in {(* 起動順にアプリ名をカンマ区切りで記述 *)}
    tell application appList to activate
    display notification appList & " を起動しました。" with title "ログイン項目"
    beep
    delay 10
end repeat

display notification "全てのアプリケーションを起動しました。" with title "完了" sound name "Glass"

tell my application
    quit
end tell

各自が手直ししなければならないのは1行目の赤でマークしてある部分のみです。例えば私の場合……

  1. Instashare
  2. ClipMenu
  3. BetterTouchTool
  4. Dropbox

……の順番で起動させたかったのでこの部分は……

repeat with appList in {"Instashare", "ClipMenu", "BetterTouchTool", "Dropbox"}

……と記述してあります(途中で行が折り返されていますが、改行は入力していません)

Automator で記述

この AppleScript をアプリケーション形式で作成したいので、AutomatorAppleScript を記述してアプリケーション形式で保存します。

  1. Automator を起動
  2. 新規ファイル作成は "アプリケーション" を選択
  3. 検索欄に "applescript" と入力:使うアクションを手っ取り早く見つけるため
  4. "AppleScript を実行" というアクションを右側のエリアにドロップ
  5. 例示した AppleScript をこの中にコピペして適宜修正
  6. 書類フォルダなど、任意の場所を指定してアプリケーションとして保存(保存時のファイル名は任意)

f:id:kjx130:20141209152643j:plain

この画像では AppleScript を一部カスタマイズしています(後述)

起動項目を整理し、設定

AppleScript の作成が終わったら、そこに記述したそれぞれのアプリケーションの設定画面を開いてログイン時の起動が行われないように設定を変更します。

例えば Dropbox だと下図のようになりますが、他のアプリも類似した項目があるはずなのでこれを OFF にします。

f:id:kjx130:20141209152708j:plain

このチェックを外す

設定の変更が終わったら、OS X のアカウントに再ログイン、または Mac を再起動して "システム環境設定>ユーザとグループ>ログイン項目" を開きます。

この時、もし先ほどの手順でログイン時に起動しないよう設定したアプリケーションがまだ載っているようだったら削除してください。アプリ名を選択して、左下にある[-]ボタンをクリックすれば OK です。

なお、iTunesHelper は削除しないで残しておくこと。

作成したアプリケーションをログイン項目に追加

Automator で作成・保存したアプリケーションをログイン項目に追加します。追加はログイン項目画面の左下にある[+]ボタンから。

f:id:kjx130:20141209152749j:plain

私の場合は書類フォルダに "LoginItems.app" として保存してあるので[+]ボタンからこれを指定

これで、ログイン時に指定した順番でログイン項目が起動されるようになります。

なお、この AppleScript ではプロセスごとに通知センターに進捗が効果音とともに通知されるようになっています。これについては次で説明します。

AppleScript のカスタマイズ

お手本とした AppleScript がこちらで……

repeat with appList in {(* 起動順にアプリ名をカンマ区切りで記述 *)}
    tell application appList to activate
    display notification appList & " を起動しました。" with title "ログイン項目"
    beep
    delay 10
end repeat

display notification "全てのアプリケーションを起動しました。" with title "完了" sound name "Glass"

tell my application
    quit
end tell

私が実際に記述した AppleScript がこちら。

repeat with appList in {"Instashare", "ClipMenu", "BetterTouchTool", "Dropbox"}
    tell application appList to activate
    display notification appList & " を起動しました。" with title "ログイン項目"
    sound name "Tink"
    delay 5
end repeat

display notification "全てのアプリケーションを起動しました。" with title "完了" sound name "Pop"

tell my application
    quit
end tell

1行目(赤)は先述した通り起動させたい順でアプリケーション名をカンマ区切りで記述。

3行目(緑)はテンプレートのまま。ちなみにこの部分は下図のようにアプリが起動するたびに通知センターで知らせるように、と命じている部分。

f:id:kjx130:20141209152823j:plain

4行目(青)は通知音。お手本では "Beep" とだけ記述して OS X の "システム環境設定>サウンド" で設定されているアラート音を鳴らすようにしていますが、自分は "Tink" を鳴らしたかったので「sound name "Tink"」と記述しました。効果音が要らなければここ部分は不要。

5行目(黄)は時間差(秒)です。例では10秒おきに指定されたアプリを順番に起動させますが、これだと間隔が長すぎるように感じたので自分のは5秒に設定しました。

7行目(紫)はログイン項目の処理が完了した旨を報せる通知を出せ、という記述。お手本では効果音が "Glass" に指定されていましたが、自分は Pop に変更しています。効果音が要らなければ sound 以降は不要。