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

スクリプトの準備
自動化の旅を始める前に、まずは実行したいスクリプトを用意する必要があります。このステップでは、単純なシェルスクリプトを作成し、それを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
は実行するスクリプトのパスを指定します。RunAtLoad
がtrue
に設定されていると、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
による登録までの全ステップをカバーしました。また、引数を含むスクリプトの扱い方についても触れました。