git push したらブログが更新されるようにしたのだけど、Slack に投げてた通知が味気ないなと思い、お洒落にしようとしたら沼だった。
Before:
After:
と言っても公式ドキュメントを見るのが一番良い。
知見としては
絵文字で手軽にお洒落になる。
"attachments"
の中の "fields"
に "short": true
で要素を放り込むとお洒落になる。
面倒臭がらずにリンクを張るようにするとお洒落になる。
細かい要素 ("author_name"
とか "author_icon"
とか) を面倒臭がらずに入れるとお洒落になる。
なんか結局シェルスクリプトで色々実装してしまったので微妙な知見が貯まった。
cut
コマンドを使う。bash
の変数展開を使う。あたりが考えられる。
#!/usr/bin/env bash
REVISION="0123456789abcdef0123456789abcdef01234567"
echo "${REVISION:0:7}" # 0123456
echo "$REVISION" | cut -c 1-7 # 0123456
パイプで繋げて cut
コマンドを立ち上げるよりは bash
依存の変数展開の方が速そうではあるけど、経験的に変数展開を駆使すると未来の自分が読めなくなることを知っているのでやめた。
TZ
を指定しつつ起動してやれば良い。
TZ='JST-09:00' date '+%Y/%-m/%-d %-H:%M:%S %Z' # 2018/5/10 1:49:00 JST
alpine 等の環境で tzdata
が入ってないような場合でも 'JST-09:00'
と指定すれば意図した通りの挙動になる。
date
コマンドで UNIX time を保持しておけば引き算で出せる。
#!/usr/bin/env bash
BEGIN_UNIX_TIME=$(date '+%s')
function elapsed_sec() {
CURRENT=$(date '+%s')
ELAPSED=$(( $CURRENT - $BEGIN_UNIX_TIME ))
echo "$ELAPSED"
}
sleep 10
echo "$(elapsed_sec) sec" # 10 sec
sleep 5
echo "$(elapsed_sec) sec" # 15 sec
time
コマンドでも実行時間は測れるけど、別にそういう正確な情報が欲しい訳じゃなくて、ステップ毎に「何秒経過しました」みたいなのを雑に出すにはこういうのもあるかなと。あと、そもそも bash
組み込みの time
は単純に扱い辛い。
しかしこの辺まで来ると段々気が狂ってきて「expr
コマンドより $(( ))
の二重括弧の方が速いっしょ」みたいな気持ちで実装しがちになる。別にループ内で使う訳でもないから誤差の範囲になるのだけど。
最初の段階で jq
コマンドが便利すぎた結果、それに合わせる形で curl
で API を叩いて遊ぶみたいなことしてしまって、うっかり最後までシェルスクリプトで実装してしまったみたいな話でした。