ottijp blog

アップデート可能なformulaをリストから選択してbrew upgradeする方法

  • 2024-12-12

これは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                                                    │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯

ottijp
都内でアプリケーションエンジニアをしています
© 2025, ottijp