Edited at

シェルとgitで残業コミットを調べる

More than 1 year has passed since last update.


環境

Mac:10.12.5

bash:3.2.57


はじめに

1月の残業時間を10時間以内(1日30分以内)にすることを目標にしています。

そこで月の終わりに以下を行うことにしました。

・出勤簿を確認して残業が発生している日を洗い出す。

・残業時間に何をしていたか確認する。

 ・チャットツールで自分の発言履歴を調べる。

 ・git logで作業内容を調べる。

・その要因を特定して事前に防ぐフローに変更する。

この「git logで作業内容を調べる」方法の改善策として作成したシェルスクリプトのまとめです。


先にまとめ

# 引数チェック

if [ "$1" == "" ]; then
echo "引数に何日前からのチェックを開始するか指定してください\n例)sh checkOvertime.sh 30"
exit 1
fi

# チェック開始日を表示
DATE=$(date -v -"$1"d "+%Y/%m/%d")
echo "$(git config user.name)$DATE 以降の残業コミット一覧\n"

for (( i = "$1"; i >= 0; i-- )); do
DATE=$(date -v -"$i"d "+%Y/%m/%d")
LOG=$(git log --pretty=format:"%h %ad %s" --date=format:'%H:%M' --since="$DATE 19:30:00" --until="$DATE 23:59:59" --author="$(git config user.name)" | sort -k2)

# 残業コミットがないなら次の日へ
if [[ $LOG == "" ]]; then
continue
fi

# 日にちと残業コミットを表示
echo "[$DATE]"
echo "$LOG\n"
done

# 調べたいリポジトリに移動

# sh ~/checkOvertime.sh 30 を実行した結果

panti310 の 2017/08/02 以降の残業コミット一覧

[2017/08/04(金)]
0bcbeceb1c5 22:28 コミットメッセージが表示されます
1b4d4eddfed 22:55 コミットメッセージが表示されます
fa245590885 22:56 コミットメッセージが表示されます
b9123d98df2 22:56 コミットメッセージが表示されます

[2017/08/24(木)]
60f3975eca2 19:57 コミットメッセージが表示されます

[2017/08/29(火)]
51007bd88c1 19:42 コミットメッセージが表示されます

[2017/08/30(水)]
6a722556eec 19:43 コミットメッセージが表示されます

※author名とコミットメッセージは適当に伏せています。

4日はチャットツールを合わせて見ると19時からレビュー会があったようです。さらに、その後修正&デバッグ依頼を行っているので、 完全にカツカツでスケジューリングミスです。また、コミットを見る限り修正内容は大したものではないので、レビュー会自体の進行の不手際が大きそうです。

24日、29日、30日は「あともうちょっと」でズルズル残ってしまったパターンですね。その日に必須ではないけど依頼されたからやって帰ったという感じです。


解説


git log フォーマットを指定する

--pretty と --date を合わせてフォーマットを指定しています。

▽Qiita - git logのフォーマットを指定する

http://qiita.com/harukasan/items/9149542584385e8dea75

▽Qiita - 任意の日付フォーマットでgit logを表示する

http://qiita.com/tomlla/items/219cea9dd071c8a9e147


git log 日付けで絞り込む

--since と --until で残業時間でのコミットを絞り込んでいます。

時間帯は19:30:00 ~ 23:59:59の設定にしているので、適宜変更してくださいmm

▽Qiita - git log よく使うオプションまとめ

http://qiita.com/take4s5i/items/15d8648405f4e7ea3039#%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF


さいごに

あと5時間削ることができれば目標の10時間以内達成です!

来月頑張るぞ!

追記:改良版を掲載しました。

ワンライナーで残業コミットを調べる

rebaseをかけても正しくコミットの時間を検出できるので、rebase派の人は上記参照くださいmm