この投稿は インタープリズムの面々が、普段の業務に役立つ記事を丹精込めて書き上げる! Advent Calendar 2016 - Qiitaの24日目 の記事です。
hiranoです。私は新しいツールやコマンドや言語を知るのが好きです。 おお、なんだこれ、使ってみよう的なやつです。
それをやるには新しいものの存在に気付く必要がありますが、以下の方法を使っています。
- Inoreader にサイトを登録して適宜チェックする
- Explore GitHub をたまに見に行く
- Homebrew の
brew update
の結果から発掘する
前者2つは得られる情報の偏りはあるものの、名前と説明がセットになって得られるので探索する時の効率に不満はありません。
Homebrewは全く興味がないものにも気付ける良い面がある反面、探索するプロセスが煩雑(後述します)で不満があります。
※Homebrewは悪くありません
ということでカイゼンすることにしました。
現在の探索プロセス
現在の探索プロセスはこうです。
brew update
を叩くbrew info {名前}
で概要を知る- 興味が湧いた場合
brew home {名前}
でWebで詳しく知る - 1の結果を再度見て2,3の手順を繰り返す
地道です。
大事なこと
brew update
で出力される画面はその時に変わったものだけで、再度実行しても二度と同じものが見られない
これが非常に大切です。これがあるせいで次の不満点が生じてしまいます。
不満点
- 2,3の手順を繰り返すと1の結果が上の方にスクロールしてしまって繰り返しにくくなる
brew info
→ スクロール →brew info
→ スクロール(さっきより長い)と、スクロールしてる時間の方が長くなってくる
- 時間が足りなくて全部見られなかった時に中断、再開がしにくい
- もはやどこのターミナルで実行したかすら憶えてないので再開できないことも多い
解決策
何度でも更新されたリストが見られればいいんじゃね?
ということで、スクリプトを書きました。
#!/bin/sh if ! type gsed 2>/dev/null 1>/dev/null then echo 'gsed is required. "brew install gnu-sed"' exit 1 fi RED="\x1b[1;31m" GREEN="\x1b[1;32m" YELLOW="\x1b[1;33m" RESET="\x1b[0m" BREW_FORMULA_BASE="/usr/local/Homebrew/Library/Taps" BREW_FORMULA_REPOSITORIES="homebrew/homebrew-core homebrew/homebrew-php homebrew/homebrew-versions" function GITLOG { git log --date=format:"%Y/%m/%d %H:%M:%S" --pretty=format:"%cd %s" } function EMPHASIZE { script=$(mktemp) touch $script echo "s/\(new formula\)/${YELLOW}\1${RESET}/g" >> $script for installed_pkg in $(brew list) do echo "s/\( ${installed_pkg} \)/${RED}\1${RESET}/g" >> $script echo "s/\( ${installed_pkg}:\)/${RED}\1${RESET}/g" >> $script done gsed -f $script < /dev/stdin rm $script } TMPOUT=$(mktemp) touch ${TMPOUT} _BAKDIR=`pwd` for fdir in ${BREW_FORMULA_REPOSITORIES} do BREW_FORMULA_DIR="${BREW_FORMULA_BASE}/${fdir}" if [ -d ${BREW_FORMULA_DIR} ]; then cd ${BREW_FORMULA_DIR} GITLOG >> ${TMPOUT} fi done cd ${_BAKDIR} cat ${TMPOUT} | EMPHASIZE | sort -r rm ${TMPOUT}
上記を適当なファイル名で保存(brew_history.sh
)して実行すると、以下のように各パッケージの更新履歴的なものが表示されます。
一応以下の機能がついてます。
- インストール済みのものは赤字で強調
- 新しいやつは黄色で強調
こちらの記事を参考にさせていただきました。
なお、大量に出力されるので、以下のようにするといいかも。
./brew_history.sh | less -R
でちょっとずつ見たり(Rオプションつけないとエスケープシーケンスがそのまま出ちゃう)./brew_history.sh | grep hoge
でフィルターしたり./brew_history.sh | peco
でpecoったり(これやると強調表示が消えます)
正直やっつけなので色々おかしい点はマサカリお願いします。
結果
余は満足じゃ。
brew update
で発見brew info {名前}
で概要を知る- 興味が湧いた場合
brew home {名前}
でWebで詳しく知る - 再度見たい場合はスクリプトで履歴を追う ← NEW
より良い探索ライフを
たくさん探索していきましょう!
不満点
git
のログを表示してるだけなので、余計な情報が多いが判別がむずいので諦めた- インストール済みのものは強調表示したけど完璧じゃない
- TAPしたやつは未対応(ログがフリーダム過ぎて諦めた)
- cask系も未対応(よく分からんかった)
- 若干遅い
- FORMULAのリポジトリが複数になってるんだけど、全部まとめて時系列に見せたいので一度ファイルに出力してるところで遅くなってるのは分かるんだけど解決方法が思いつかなかった
副産物
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-boneyard
は削除されたformula置き場だった。なんか悲しい/usr/local/Homebrew/Library/Taps/homebrew/homebrew-dupes
はmac標準のコマンドと重複してるものらしい。今回は無視/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services
はmacのサービス(launchd)と関連してるものらしい。今回は無視
余談: んなことしなくてもぱっと考えて思い浮かぶ改善案があるだろ…
A. 1の結果をスクショしておく
保存しておけば確かに見返せるのですが、コピペできないのが痛いので却下
B. 1を実行したターミナルと2,3をやるターミナルを分ける
まあ確かに。だけどおお新しいのある!という感動で脳内麻薬が出ていると別ターミナル開こうとなる前にbrew info
してしまうので結局ログが流れてしまうので却下。
インタープリズムの面々が、普段の業務に役立つ記事を丹精込めて書き上げる! Advent Calendar 2016 - Qiitaの25日目の記事