はじめに
Homebrewのアップデートを定期的に実行するの面倒くさくないですか?
私は友人に毎日アプデした方がいいと言われて、毎日アプデしているのですが、これが地味に面倒くさい。
そこで、アップデート(brew update & brew upgrade)を定期的に自動実行するやり方を紹介します!
なんで定期的にアップデートした方がいいかは、下記記事をご参考に。
やり方
- ~/.zshrcに 'export EDITOR=vim' を追記
- ~/.vimrcに 'set nowritebackup'と'set nobackup' を追記
- Homebrewをアップデートするシェルスクリプトを作成
- 作成したシェルスクリプトに実行権限を付与
- cronによる定期実行を設定
1. ~/.zshrcに 'export EDITOR=vim' を追記
下記をターミナルで実行。
echo '# デフォルトのエディタを Vim に設定' >> ~/.zshrc
echo 'export EDITOR=vim' >> ~/.zshrc
source ~/.zshrc
この設定をしていないと、cronを登録しても保存されずに、エラーで終了してしまうそうです。
2. ~/.vimrcに 'set nowritebackup'と'set nobackup' を追記
下記をターミナルで実行。
echo '" ファイルを上書きする前にバックアップを作ることを無効化' >> ~/.vimrc
echo 'set nowritebackup' >> ~/.vimrc
echo '" ファイルを上書きする前にバックアップを作ることを無効化' >> ~/.vimrc
echo 'set nobackup' >> ~/.vimrc
先ほどと同様に、この設定をしていないと、cronを登録しても保存されずに、エラーで終了してしまうそうです。
3. Homebrewをアップデートするシェルスクリプトを作成
私は、下記のシェルスクリプトを /Users/(あなたのユーザ名)/logs/crontab_scripts/ 下に配置しました。ファイル名はauto_update_brew.shとしました。
シェルスクリプトの内容として、/Users/(あなたのユーザ名)/logs/ 下に、brew update と brew upgradeした時の実行結果をログファイル(ファイル名の形式: yyyymmdd_hhmmss.log)として出力するようにしました。
スクリプト内のlog_nameのパスの一部分は、自分のユーザ名にすることを忘れないでください。
#!/bin/bash
# cronがbrewコマンドを使えるように、環境変数を設定
export PATH=/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin
# ログファイル名を設定
log_name="/Users/(あなたのユーザ名)/logs/$(date '+%Y%m%d_%H%M%S').log"
# Homebrewのアップデート実行開始日時を出力
echo "Script started at $(date)" >> "${log_name}" 2>&1
# brew updateの実行開始を出力
echo 'brew update ---------------------------------------------------' >> "${log_name}" 2>&1
# brew updateを実行し、結果を出力
/opt/homebrew/bin/brew update >> "${log_name}" 2>&1
# brew upgradeの実行開始を出力
echo 'brew upgrade --------------------------------------------------' >> "${log_name}" 2>&1
# brew upgradeを実行し、結果を出力
/opt/homebrew/bin/brew upgrade >> "${log_name}" 2>&1
# お好みでコメントアウト
# echo 'brew cleanup --------------------------------------------------' >> "${log_name}" 2>&1
# /opt/homebrew/bin/brew cleanup >> "${log_name}" 2>&1
# Homebrewのアップデート実行終了日時を出力
echo "Script ended at $(date)" >> "${log_name}" 2>&1
もし、brewコマンドのパスが "/opt/homebrew/bin/brew"ではなかった場合、
$ which brew
/opt/homebrew/bin/brew
下記の/opt/homebrew/binを修正する必要があるかもしれません。
その時は下記を適宜修正してください。
# cronがbrewコマンドを使えるように、環境変数を設定
export PATH=/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin
4. 作成したシェルスクリプトに実行権限を付与
下記コマンドを実行。cronの定期実行を可能にするために必要です。
ここでもパスの一部分を自分のユーザ名にすることを忘れずに。
あと、スクリプト名やディレクトリ構成を変えた人は、パスを適切に変更してください。
chmod +x /Users/(あなたのユーザ名)/logs/crontab_scripts/auto_update_brew.sh
5. cronによる定期実行を設定
下記コマンドで cronの設定ファイルを開き、
crontab -e
下記を追記しましょう。
# Homebrewのupdateを毎日15時00分に実行
0 15 * * * /Users/(あなたのユーザ名)/logs/crontab_scripts/auto_update_brew.sh
これで、Homebrewのアップデートが毎日15時に行われるようになります!
ちなみに、"15"から"13"にすれば、毎日13時に実行されるようになります。
もっと細かい設定をしたい方は、下記の記事を参考に。
アップデートが上手く行った時のログファイルの中身
cat 20250109_150006.log
Script started at Thu Jan 9 15:00:06 JST 2025
brew update ---------------------------------------------------
==> Updating Homebrew...
Updated 3 taps (oven-sh/bun, homebrew/core and homebrew/cask).
==> New Formulae
codesnap
openapi-tui
oven-sh/bun/bun@1.1.43
==> New Casks
aw-edid-editor
font-brass-mono
font-nanum-square
font-nanum-square-neo
font-nanum-square-round
macai
serial-studio
==> Outdated Formulae
bun
libpng
You have 2 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
brew upgrade --------------------------------------------------
==> Upgrading 2 outdated packages:
libpng 1.6.44 -> 1.6.45
oven-sh/bun/bun 1.1.42 -> 1.1.43
==> Downloading https://ghcr.io/v2/homebrew/core/libpng/manifests/1.6.45
==> Fetching libpng
==> Downloading https://ghcr.io/v2/homebrew/core/libpng/blobs/sha256:2d9fddec7ff85ea205bf37bcba29116f37b581da9eb90c5bb8beda489f7d6105
==> Fetching oven-sh/bun/bun
==> Downloading https://github.com/oven-sh/bun/releases/download/bun-v1.1.43/bun-darwin-aarch64.zip
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/357728969/43522b9c-243f-4e8f-a0a4-b88c8ed3435d?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250109T060031Z&X-Amz-Expires=300&X-Amz-Signature=9eefaa7c7b4c7fc68a9ff8e0e550edd726089ec5f38612e9a6c8d8f0f02f53f1&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dbun-darwin-aarch64.zip&response-content-type=application%2Foctet-stream
==> Upgrading libpng
1.6.44 -> 1.6.45
==> Pouring libpng--1.6.45.arm64_sequoia.bottle.tar.gz
🍺 /opt/homebrew/Cellar/libpng/1.6.45: 28 files, 1.3MB
==> Running `brew cleanup libpng`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /opt/homebrew/Cellar/libpng/1.6.44... (28 files, 1.3MB)
Removing: /Users/youtome/Library/Caches/Homebrew/libpng_bottle_manifest--1.6.44... (8.1KB)
Removing: /Users/youtome/Library/Caches/Homebrew/libpng--1.6.44... (448.6KB)
==> Upgrading oven-sh/bun/bun
1.1.42 -> 1.1.43
==> Caveats
Bash completion has been installed to:
/opt/homebrew/etc/bash_completion.d
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
==> Summary
🍺 /opt/homebrew/Cellar/bun/1.1.43: 8 files, 53.3MB, built in 3 seconds
==> Running `brew cleanup bun`...
Removing: /opt/homebrew/Cellar/bun/1.1.42... (8 files, 53.0MB)
Removing: /Users/youtome/Library/Caches/Homebrew/bun--1.1.42.zip... (19MB)
==> Caveats
==> bun
Bash completion has been installed to:
/opt/homebrew/etc/bash_completion.d
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
Script ended at Thu Jan 9 15:00:43 JST 2025
おわりに
Homebrewの自動アップデートはApacheなどに影響するので、注意して行いましょう。
参考にしたサイト