Zuruzuru Blog
🍜< ズルズル

September 08, 2022

パッケージは毎日アップデートしよう

#shell
#zsh
#dotfiles

業務でとあるパッケージが古く自分の環境で動かなかったことがあり、毎日アップデートするようにした。

最新が最高。

幸いなことに、ほとんどのツールやパッケージはhomebrewとghqで管理していたので、毎日一括アップデートするようなコマンドを叩いて更新するだけで良さそうだった。 brewもghqも途中であるパッケージの更新に失敗した場合でも、そこで終了せず全部のパッケージに対して更新を行なってくれるので特にそういう処理を自分で書く必要もなかった。

なので前回の一括アップデートから1日経っていたら警告をターミナルで出すように実装した。

ScreenShot

毎回プロンプトが更新されるたびに確認処理が入るので冗長にも思えるけど今のところ困ってないのでこのままにする。

実行のタイミングを考えるのがめんどくさくなってしまったのでやめてしまったけど、AppleScriptで定期実行するようなコードを書いたほうがコマンド打つ手間もないし良かったかもしれない。

コード

## .zshrc

# パッケージのアップデート
function update() {
  # homebrewのアップデート & brewパッケージの一括アップデート
  echo " # Homebrew Packages"
  brew upgrade

  # リポジトリの一括アップデート
  echo " # Git Repositories"
  ghq list | ghq get --update --parallel

  # 更新日時をファイルに残す
	# 自分はgheで管理しているdotfileのリポジトリ配下に置くようにしている(もちろんgitignoreしてる)
  date +%s > "$(ghq root)/github.com/yagijin/setting_files/last_updated"
}

# 最後にパッケージアップデートした時から一定時間経っているか判定する
function should_update() {
  now=`date +%s`
  date_file="$(ghq root)/github.com/yagijin/setting_files/last_updated"
	# 86400秒は1日
  will_update="$(($(cat $date_file)+86400))"
  if [ $now -gt $will_update ]
  then
    echo ' ##################################################\n' \
      'It'"'"'s Time.\n You Should Update Packages Using #update Command🫵\n' \
      '##################################################'
  fi
}

# zshのhook関数
precmd () { 
  should_update
}