LoginSignup
1
2

MacのAutomatorを使ってHomebrewを自動アップデートする方法

Last updated at Posted at 2024-04-25

はじめに

この記事では、MacのautomatorとCalendarアプリを使って、Homebrewを定期的にアップデートする方法についてお話しします。
HomebrewはMacユーザーにとって便利なパッケージマネージャーなので、定期的なアップデートはこまめにやっておきたいですよね。

なぜアップデートが必要なの?

アップデートすることで、以下のような利点があります。

  • セキュリティ上の脆弱性が修正される
  • formulaeの最新版がインストールされる
    • バグが修正され、安定性が向上する
    • 新しい機能が追加される

定期的にアップデートすることで、常に最新の状態を維持し、セキュリティ面でも安定性の面でも恩恵を受けることができます。

どんな風にするの?

この自動化スクリプトは、Homebrewのアップデートを次の3つのステップで行います:

  1. Homebrewの更新: Homebrewを最新の状態に更新します
  2. インストール済みのパッケージの更新: インストール済みのパッケージを最新版にアップグレードします。--greedyオプションを使って、できるだけ最新版を優先的にインストールします
  3. 古いパッケージのクリーンアップ: 古いバージョンのパッケージや不要なファイルを削除して、ディスクスペースを開放します

スクリプトの中身

こんな感じの自動化スクリプトが必要です。

#!/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でカレンダーアラームとして設定する

  1. automatorを起動: MacのSpotlight検索で「automator」を検索して起動します
    スクリーンショット 2024-04-25 15.25.48.png
  2. カレンダーアラームを作成: 「カレンダーアラーム」を選択して、カレンダーアラームを作成します
    スクリーンショット 2024-04-25 15.26.29.png
  3. アクションを追加: 「アクション」を選択して、検索ボックスに「シェル」と入力して、「シェルスクリプトを実行」をダブルクリックします
    スクリーンショット 2024-04-25 15.26.29.png
  4. スクリプトを追加: 先ほどのスクリプトを貼り付けます
    スクリーンショット 2024-04-25 15.48.36.png
  5. 保存: cmd + Sでワークフローを保存します(例: brew_update)
    スクリーンショット 2024-04-25 15.27.10.png
  6. スケジュール設定: Calendarアプリが開かれるので、アラームの日時や繰り返しを設定します
    スクリーンショット 2024-04-25 15.21.44.png

ログの確認

スクリプトの実行ログは、~/logs/brew/calendar_alarm_brew_update.logに保存されます。

スクリーンショット 2024-04-25 16.00.09.png

スクリプトの編集をする場合

エディタでスクリプトを編集する場合は、以下のコマンドでディレクトリを開きます。(例: Visual Studio Code)

❯ code ~/Library/Workflows/Applications/Calendar/brew_update.app

Contents/document.wflowを開いて、スクリプトを編集します。

おわりに

この設定をすることで、定期的にHomebrewの更新を行うことができます。
めんどうな作業は自動化して、快適なMacライフを楽しみましょう!

参考サイト

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2