brew upgrade 半自動でやる

brew upgrade 半自動でやる #

brew update && brew upgrade && brew cleanup && brew autoremove

を手動でやるのが面倒になって、homebrew-update 試そうとしたんだけど「チェックだけする。自動アップグレードしない」のやり方がよくわからなくて、仕方ないので shell script 書いた。想像してたより気に入ったんで職場で共有。そしてここでも公開。

コメントは生成 AI がいれてくれたよ。素敵

#!/bin/bash

# brew-outdated-check.sh
# Homebrewの更新をチェックして通知します
#
# セットアップ:
# 1. brew install terminal-notifier
# 2. システム設定 > 通知 で terminal-notifier の通知を許可
#    (初回起動時にダイアログが出るので、それに沿って設定で OK)
# 3. ~/.bashrc または ~/.zshrc に以下を追加:
#    (前回ターミナル起動が 12 時間以上前ならチェック)
#
# CHECK_FILE="/tmp/brew_check_last_${USER}"
# CHECK_SH="$HOME/bin/brew-outdated-check.sh"
# if [[ ! -f "$CHECK_FILE" || $(find "$CHECK_FILE" -mmin +720) ]]; then
#     (bash "$CHECK_SH" &) > /dev/null 2>&1
#     touch "$CHECK_FILE"
# fi

# 0. Terminal, iTerm, WezTerm ....
case "$TERM_PROGRAM" in
    "WezTerm")        TERM_APP="WezTerm" ;;
    "iTerm.app")      TERM_APP="iTerm" ;;
    "Apple_Terminal") TERM_APP="Terminal" ;;
    *)                TERM_APP="Terminal" ;; # デフォルト
esac

# 1. 依存ツールのチェック
if ! command -v terminal-notifier &> /dev/null; then
    echo "⚠️  terminal-notifier がインストールされていません。"
    echo "通知機能を利用するために、以下のコマンドでインストールしてください:"
    echo "brew install terminal-notifier"
    exit 1
fi

# 2. 更新があるかチェック
brew update > /dev/null 2>&1
OUTDATED_COUNT=$(brew outdated --quiet | wc -l | tr -d ' ')

# 3. 更新があったら通知
if [ "$OUTDATED_COUNT" -gt 0 ]; then
    MAINTENANCE_CMD="brew upgrade && brew cleanup && brew autoremove";
    terminal-notifier \
        -group "brew-maintenance" \
        -title "🍺 Homebrew Update" \
        -message "${OUTDATED_COUNT}件の更新があります。クリックでコマンドをコピーしてターミナルを開きます。ペーストして実行してください。" \
        -sound default \
        -execute "echo '$MAINTENANCE_CMD' | pbcopy && open -a '$TERM_APP'"
#        -execute "osascript -e 'tell application \"${TERM_APP}\" to activate' -e 'delay 0.5' -e 'tell application \"System Events\" to keystroke \"$MAINTENANCE_CMD\" & return'"

    echo "通知を送信しました (${OUTDATED_COUNT}件の更新)"
else
    echo "✅ 更新はありません"
fi

See Also

Copyright © 髭。/ Hugo + hugo-book