MENU

Macで自動化する:launchdを使ってスクリプトを起動時に実行する方法

目次

導入

Mac OSでは、launchdという強力なシステムが組み込まれています。これは、さまざまなタスクを自動化するためのツールで、特にシステムの起動時や特定の条件下でプログラムやスクリプトを自動的に実行するのに適しています。launchdはMacのバックグラウンドで動作し、ユーザーが意識することなく様々なプロセスを管理します。

この記事では、launchdを使用して、Macが起動するたびに特定のスクリプトを自動的に実行する方法について詳しく説明します。

定期実行はこちら

あわせて読みたい
macOSのlaunchdでスクリプトを定期実行するplistのメモ macOSのlaunchdでスクリプトを定期実行する方法 macOSのlaunchdは、特定の時間に自動でスクリプトを実行するために利用できる便利な機能です。今回は、毎朝3時15分にバ...

スクリプトの準備

自動化の旅を始める前に、まずは実行したいスクリプトを用意する必要があります。このステップでは、単純なシェルスクリプトを作成し、それをMacの起動時に実行する方法に焦点を当てます。シェルスクリプトは、簡単で理解しやすいので、自動化の基本を学ぶのに最適です。

以下は、非常に基本的なシェルスクリプトの例です。このスクリプトは、「Hello, World!」というメッセージをログファイルに書き込みます。

#!/bin/bash
echo "Hello, World!" > /path/to/your/logfile.log

このスクリプトをテキストエディタで作成し、「myscript.sh」という名前で保存します。保存場所は、例えばホームディレクトリ内のScriptsフォルダなど、容易にアクセスできる場所が適しています。

作成したスクリプトは、実行可能でなければなりません。これを行うには、ターミナルで次のコマンドを使用します。

chmod +x ~/Scripts/myscript.sh

このコマンドにより、myscript.shに実行権限が付与されます。これでスクリプトはlaunchdによって起動時に実行される準備が整いました。

.plistファイルの作成と設定

launchdを使用する際の重要な要素が.plist(プロパティリスト)ファイルです。このXML形式のファイルは、launchdに対して、どのスクリプトをいつ実行するか、そしてどのように実行するかを指示します。正しく設定された.plistファイルは、スクリプトを自動的に、そして安全に実行するための鍵となります。

ここでは、先に作成したmyscript.shを起動時に実行するための.plistファイルの例を示します。以下のコードをテキストエディタで作成し、適切な名前(例:com.yourusername.myscript.plist)で保存します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.yourusername.myscript</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/yourusername/Scripts/myscript.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

このファイルでは、Labelはユニークな識別子を提供し、ProgramArgumentsは実行するスクリプトのパスを指定します。RunAtLoadtrueに設定されていると、Macが起動するたびにスクリプトが実行されます。

作成した.plistファイルを~/Library/LaunchAgents/ディレクトリに保存します。この場所にファイルを置くことで、ユーザーがログインした際に自動的にlaunchdによって読み込まれ、スクリプトが実行されるようになります。

.plistファイルの作成と設定(引数を含むスクリプトの場合)

スクリプトが引数を必要とする場合、それらの引数を.plistファイルに正しく組み込むことが重要です。例として、引数を受け取りログファイルに出力するシンプルなスクリプトを考えてみましょう。

#!/bin/bash
echo "Passed argument: $1" > /path/to/your/logfile.log

このスクリプトは引数$1を取り、それをログファイルに出力します。

引数を含むスクリプトを自動実行するための.plistファイルは、以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.yourusername.myscriptwithargs</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/yourusername/Scripts/myscript.sh</string>
        <string>Argument1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

この例では、ProgramArgumentsキーの配列に、スクリプトのパスと引数Argument1が含まれています。この設定により、スクリプトは指定した引数を持って起動時に実行されます。

  • 引数が正しくスクリプトに渡されることを確認するため、事前に手動でスクリプトをテストしてください。
  • 引数の値が変わる場合は、その都度.plistファイルを更新し、再度launchctlを使って登録する必要があります。

このセクションでは、引数を含むスクリプトの自動実行に必要な.plistファイルの作成方法を示しました。次のセクションでは、これらの.plistファイルを実際にlaunchdに登録し、自動実行を設定する手順について詳しく解説します。

launchdにスクリプトを登録する

.plistファイルを作成し、適切なディレクトリに配置した後、次のステップは、このファイルをlaunchdに登録することです。これにはlaunchctlコマンドが使用されます。以下のコマンドは、新しく作成した.plistファイルをlaunchdに登録する例です。

launchctl load ~/Library/LaunchAgents/com.yourusername.myscript.plist

このコマンドは、~/Library/LaunchAgents/にあるcom.yourusername.myscript.plistという.plistファイルをlaunchdに登録します。これにより、指定された条件(この場合はMacの起動時)にスクリプトが自動的に実行されます。

登録が正常に完了したかを確認するには、以下のコマンドを実行します。

launchctl list | grep com.yourusername.myscript

このコマンドは、登録されたジョブのリストから、指定した識別子com.yourusername.myscriptを検索します。出力結果にこの識別子が表示されれば、登録が成功していることを意味します。

何らかの理由で.plistファイルの登録を解除したい場合は、以下のコマンドを使用します。

launchctl unload ~/Library/LaunchAgents/com.yourusername.myscript.plist

このコマンドは、com.yourusername.myscript.plistファイルの登録を解除し、以降のMacの起動時にはスクリプトが実行されなくなります。

以下は注意点です。

  • launchctl loadコマンドは、Macが起動するたびに自動的にスクリプトを実行するように設定します。
  • 登録を解除する際は、同じ.plistファイルを指定する必要があります。

まとめ

この記事では、Macのlaunchdシステムを利用して、特定のスクリプトを起動時に自動的に実行する方法について詳しく説明しました。スクリプトの準備から、.plistファイルの作成、そしてlaunchdによる登録までの全ステップをカバーしました。また、引数を含むスクリプトの扱い方についても触れました。

目次