その日の作業を数えたい
論文を執筆するときに、作業の進捗を記録することがよいとよく言われる。 でも、毎回字数を数えるのもちょっとめんどうだ。
例えば、その日の作業を終えるときにgitでコミットする。コミットメッセージに進んだ字数を自動的に入れておいてくれればかなり楽ではないか。
なんかいいのないかな?と探していたら、jMatsuzakiさんという方が、便利なシェルスクリプトを公開してくれている。
執筆やプログラミングの相棒として使える「Git Character Counter」なるものを作成して公開しました。 (出所:「Gitリポジトリに追加された文字数をカウントするシェルスクリプト公開 | jMatsuzaki」、(https://jmatsuzaki.com/archives/28195)
しかし、僕の環境だとうまく動かないのか、コミットメッセージに入れてくれるわけではないようだ。
汎用的に、「どれだけ進んだかな?」ということには使えそうなんだけど。
Windowsでコミットメッセージ自動的に字数を挿入する方法
少し調べてみると、.git/hooks/prepare-commit-msgでコミットメッセージを編集できるらしい。
issue番号を自動で入力する (出所:「git commitする時にissue番号を自動で入力するgit hooks」、(https://gist.github.com/saxsir/5cd33801fc2a77a1b1f8)
jMatsuzakiさんのスクリプトをsaxirさんのスクリプトに混ぜ込むと、うまく動くものができた。
ただし、僕のばあい、sedとwcコマンドは別途用意した。 まず、scoopでsedコマンドをインストールした。wcはscoopには見つからなくて、どうしようもなかったので、wslのwcを使用した。 sedもwslのものを使うなら、それぞれの前にwslを入れておくとよい。
それから、今回の利用方法ではステージングされているファイルとリポジトリの最新のコミットとの差分を見ればいいので、オプションも決め打ちにしておいた。
prepare-commit-msgの中身
最終的には以下で動くようになった。
#!/bin/sh
if [ "$2" == "" ] ; then
mv $1 $1.tmp
echo -e "\nprogress: `git diff -p -b -w -U0 --diff-filter=AM --ignore-cr-at-eol --ignore-space-at-eol --ignore-blank-lines --ignore-matching-lines="^(---|uid|title|aliases|date|update|tags[]|draft)" "@" "--cached" | grep ^+ | grep -v ^+++ | sed s/^+// | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' | wsl wc -m`" > $1
cat $1.tmp >> $1
fi
コミットしてみると、以下のようなコミットメッセージが作成される。
> git commit -m '字数数えるよ'
字数数えるよ
progress: 8
1 file changed, 1 insertion(+), 1 deletion(-)
いい感じ!