Homebrew-file への機能追加でBrewfileへの変更があった際にGitHubへのレポジトリへpushしたり なんらかアクションを起こせる様な仕組みを作りました。
Homebrew-file
HomebrewのパッケージリストをBrewfileを使って管理するツール。
Homebrew自体にも公式にbundleというBrewfileファイルに書き出す機能がありますが、 Homebrew-fileにはGitHubとかと連携してBrewfileの履歴を管理したり他の環境と共有しやすくするための 機能だったり、Brewfileを自動的にアップデートする機能があったりします。
brew-wrap
追加の機能はbrew file
コマンド本体ではなく
brew
コマンドのラッパーの
brew-wrap
の中に追加しました。
brew-wrap
は.bashrcや.zshrc、もしくはconfig.fishなんかの中で設定ファイルを読み込むと
brew
コマンドをラップして
brew install
などを行った際にbrew file
を使ってBrewfileを自動でアップデートしてくれるようになります。
Brewfileのバージョン管理
brew-wrap
を使うとBrewfileに対してinstall
時にパッケージの追加やremove
時に削除などは行います。
一方でHomebrew-fileにはGitHubのレポジトリなどと結びつけて バージョン管理する機能もあります。
Brewfileに変更があった後、
$ brew file update
とすればGitHub上の変更を取り入れて、追加パッケージがあれば追加し、
また、ローカルに新たなパッケージが追加されていたりBrewfileがアップデートされていれば
新たなBrewfileをGitのレポジトリ内でcommit
してGitHubにpush
します。
(GitのリモートサーバーはGitHubでなくてもOK。)
ただ、現状この作業は自分で行う必要があって、私自身はcronジョブを使って1日1回、
30 12 * * * brew file update
みたいな設定でbrew file update
を行っています。
(上の設定だと毎日12:30に実行されます。)
_post_brewfile_update
この様な変更管理をBrewfile変更後に毎回行いたい、といったIssueをもらいました。
Feature request: provide hook into “Initialize Brewfile” process · Issue #121 · rcmdnk/homebrew-file
Git関連の作業ならupdate
の様なことを中でできる設定にしても良いかな、と思ったのですが、
このIssueだと別な管理をしていて、別途コマンドを使いたい、という感じだったので
brew-wrap
の方を使って簡単にコマンドを追加できるようにしてみました。
.bashrcの中などで、brew-fileを読み込んだ後、_post_brewfile_update()
という関数を実装すると、
brew
コマンド実行時、Brewfileに何らかの変更があった際、
その関数が実行されます。
1 2 3 4 5 6 7 |
|
こんな感じの関数を実装して、
$ brew install python
とすると、もしpythonが新たにインストールされてBrewfileがアップデートされると
Brewfile was updated!
と表示されます。 すでにインストールされてる場合にはBrewfileに変更がないので関数は実行されません。
GitHubと連携していて常にリモートレポジトリと同期したい場合には
1 2 3 4 5 6 7 |
|
とかしておけばよいかと思います。