アップデート可能なformulaをリストから選択してbrew upgradeする方法
これはInfocom Advent Calendar 2024 12日目の記事です.
Homebrewでインストールしているソフトウェア(formula)をアップグレードするコマンドbrew upgrade
するときに,必要なものだけ選んでアップグレードするために,fzfを使ったスクリプトを作成しました.
環境
- mac: 14.7 (Sonoma)
- Homebrew: 4.4
- fzf: 0.56
シェルスクリプト
brew-upgrade-df
#!/bin/bash
brew update > /dev/null
outdated=$(brew outdated --verbose)
pattern=$(brew leaves | awk '{print $1}' | sed -e 's/\+/\\\+/g' -e 's/\(.*\)/\^\1/')
candidates=$(grep -E "$pattern" <<<"$outdated" | sort)
selected=$(echo "$candidates" | fzf -m | awk '{print $1}')
if [[ $selected ]]; then
for formula in $selected; do
brew upgrade "$formula"
done
fi
他のformulaから依存されているformulaをアップグレードすると問題になったことが過去にあったので,
brew leaves
を使って依存されていないformulaだけをリストして,brew outdated
の出力をフィルタするパターンを作っています.
実行例
brew-update-f
を実行するとfzfが実行され,選択したformulaがアップグレードされます.
╭───────────────────────────────────────────────────────────────────────────╮
│ > │
│ 16/16 (1) ───────────────────────────────────────────────────────────── │
│ ▌ aws-sam-cli (1.129.0) < 1.131.0 │
│ azure-cli (2.66.0) < 2.67.0_1 │
│ cfn-lint (1.19.0) < 1.22.0 │
│ clang-format (19.1.3) < 19.1.5 │
│ docker (27.3.1) < 27.4.0 │
│ docker-completion (27.3.1) < 27.4.0 │
│ fastlane (2.225.0) < 2.226.0 │
│ fzf (0.56.2) < 0.56.3 │
│ go (1.23.3) < 1.23.4 │
│ gradle (8.11) < 8.11.1 │
│ imagemagick (7.1.1-40) < 7.1.1-41 │
│ pandoc (3.5) < 3.6 │
│ pkl (0.27.0) < 0.27.1 │
│ plantuml (1.2024.7) < 1.2024.8 │
│ python@3.11 (3.11.10) < 3.11.11 │
│ tree (2.1.3) < 2.2.1 │
│ │
╰───────────────────────────────────────────────────────────────────────────╯