はじめに
この記事では、MacのautomatorとCalendarアプリを使って、Homebrewを定期的にアップデートする方法についてお話しします。
HomebrewはMacユーザーにとって便利なパッケージマネージャーなので、定期的なアップデートはこまめにやっておきたいですよね。
なぜアップデートが必要なの?
アップデートすることで、以下のような利点があります。
- セキュリティ上の脆弱性が修正される
- formulaeの最新版がインストールされる
- バグが修正され、安定性が向上する
- 新しい機能が追加される
定期的にアップデートすることで、常に最新の状態を維持し、セキュリティ面でも安定性の面でも恩恵を受けることができます。
どんな風にするの?
この自動化スクリプトは、Homebrewのアップデートを次の3つのステップで行います:
- Homebrewの更新: Homebrewを最新の状態に更新します
-
インストール済みのパッケージの更新: インストール済みのパッケージを最新版にアップグレードします。
--greedy
オプションを使って、できるだけ最新版を優先的にインストールします - 古いパッケージのクリーンアップ: 古いバージョンのパッケージや不要なファイルを削除して、ディスクスペースを開放します
スクリプトの中身
こんな感じの自動化スクリプトが必要です。
#!/bin/zsh
set -e
# ログディレクトリとログファイルの設定
logdir=~/logs/brew
logfile=$logdir/calendar_alarm_brew_update.log
errorlogfile=$logdir/calendar_alarm_brew_update_error.log
# ログディレクトリが存在しない場合は作成
mkdir -p $logdir
# 環境変数の読み込み
source ~/.env
# ログメッセージを出力する関数
log_message() {
local message=$1
local log_file=$2
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | tee -a $log_file
echo "--------------------------------------------------" | tee -a $log_file
}
# 環境変数が設定されているかチェックする関数
check_env_var() {
local var_name=$1
local var_value=$(eval echo \$$var_name)
if [ -z "$var_value" ]; then
log_message "環境変数$var_nameが設定されていません。" $errorlogfile
exit 1
fi
}
# brewコマンドを実行する関数
execute_brew_command() {
local command=$1
local options=${2:-""}
/usr/bin/expect -c "
set timeout 60
spawn /opt/homebrew/bin/brew $command $options
expect {
\"Password:\" {
send \"$MAC_LOGIN_PASSWORD\n\"
exp_continue
}
eof
}
" >>$logfile 2>>$errorlogfile
}
# ログを出力しながらbrewコマンドを実行する関数
log_and_execute_brew_command() {
local message=$1
local command=$2
local options=${3:-""}
log_message "$message - 開始" $logfile
execute_brew_command $command $options
log_message "$message - 終了 - 終了コード: $?" $logfile
}
# 環境変数MAC_LOGIN_PASSWORDが設定されているかチェック
check_env_var MAC_LOGIN_PASSWORD
# Homebrewの更新
log_and_execute_brew_command "Homebrewの更新..." "update"
# インストール済みformulaeの更新
log_and_execute_brew_command "インストール済みformulaeの更新..." "upgrade" "--greedy"
# 古いformulaeの削除
log_and_execute_brew_command "古いformulaeの削除..." "cleanup"
.envファイルの設定
スクリプト内で参照している環境変数MAC_LOGIN_PASSWORD
は、.env
ファイルに設定しておく必要があります。
export MAC_LOGIN_PASSWORD="your_mac_login_password"
automatorでカレンダーアラームとして設定する
-
automatorを起動: MacのSpotlight検索で「automator」を検索して起動します
-
カレンダーアラームを作成: 「カレンダーアラーム」を選択して、カレンダーアラームを作成します
-
アクションを追加: 「アクション」を選択して、検索ボックスに「シェル」と入力して、「シェルスクリプトを実行」をダブルクリックします
-
スクリプトを追加: 先ほどのスクリプトを貼り付けます
-
保存: cmd + Sでワークフローを保存します(例:
brew_update
)
-
スケジュール設定: Calendarアプリが開かれるので、アラームの日時や繰り返しを設定します
ログの確認
スクリプトの実行ログは、~/logs/brew/calendar_alarm_brew_update.log
に保存されます。
スクリプトの編集をする場合
エディタでスクリプトを編集する場合は、以下のコマンドでディレクトリを開きます。(例: Visual Studio Code)
❯ code ~/Library/Workflows/Applications/Calendar/brew_update.app
Contents/document.wflow
を開いて、スクリプトを編集します。
おわりに
この設定をすることで、定期的にHomebrewの更新を行うことができます。
めんどうな作業は自動化して、快適なMacライフを楽しみましょう!