2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cronを用いてbrew update & brew upgradeを定期的に自動実行

Posted at

はじめに

Homebrewのアップデートを定期的に実行するの面倒くさくないですか?
私は友人に毎日アプデした方がいいと言われて、毎日アプデしているのですが、これが地味に面倒くさい。

そこで、アップデート(brew update & brew upgrade)を定期的に自動実行するやり方を紹介します!

なんで定期的にアップデートした方がいいかは、下記記事をご参考に。

やり方

  1. ~/.zshrcに 'export EDITOR=vim' を追記
  2. ~/.vimrcに 'set nowritebackup'と'set nobackup' を追記
  3. Homebrewをアップデートするシェルスクリプトを作成
  4. 作成したシェルスクリプトに実行権限を付与
  5. 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などに影響するので、注意して行いましょう。

参考にしたサイト

2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?