LoginSignup
365
334

More than 5 years have passed since last update.

新人さんにより良いコミットメッセージを書いてもらうための対話式スクリプト

Last updated at Posted at 2016-04-04

作ったもの

コミット時に対話式で質問を表示させるものをつくりました。
↓こんな感じ↓

tty.gif

回答の内容をつなげたものがコミットメッセージになります。

質問リストは別のファイルで自由に設定できるので、
チーム内でコミットメッセージへ書いて欲しい内容をゆるく共有したい場合に。

How to use

スクリプト本体はこちら

#!/bin/sh

set -e

# core.editorに設定したいもの
# merge,rebaseなどの時に起動する
CORE_EDITOR=vi

# commitじゃなかった場合(mergeとかrebaseとか)の場合はCORE_EDITORに渡す
if [[ ! "$1" = *COMMIT_EDITMSG ]]; then
    $CORE_EDITOR $1
    exit 0
fi

CURRENT_DIR=$(cd $(dirname $0); pwd)
MSGLIST_FILE=$CURRENT_DIR/.gscme_msglist
SAMPLE_MSGLIST_FILE=$CURRENT_DIR/sample_msglist/.gscme_msglist_present_tense_subject

# .gscme_msglistファイルが無い場合は作る
# デフォルトの質問リストをセットする
if [[ ! -r $MSGLIST_FILE ]]; then
    /bin/echo "please edit .gscme_msglist file."
    cat $SAMPLE_MSGLIST_FILE > $MSGLIST_FILE
fi

COMMIT_MSG=""

exec 3< $MSGLIST_FILE
while read line 0<&3
do
    if [[ ${line} == \#* ]]; then
        continue
    fi
    if [[ ${line} ]]; then
        /bin/echo -n "$line > "
        read msg
        COMMIT_MSG="${COMMIT_MSG}${msg}"
    fi
    COMMIT_MSG="${COMMIT_MSG}\n"
done
exec 3<&-

echo $COMMIT_MSG >> $1
exit 0

コピペなりgithubから持ってくるなりして保存して実行権限つけてpath通して、

% chmod +x gscme
% mv gscme /usr/local/bin/gscme

core.editorを置き換えます。(乱暴)

% git config --local core.editor gscme

代わりに、普段使いのエディタをCORE_EDITORの部分にセットしておいてください。

CORE_EDITOR=vi

.gscme_msglistというファイルができるので「コミットするときに書いて欲しいこと」を質問形式で並べると、
そこから1行ずつ表示させる仕掛けになってます。

チーム内で.gscme_msglistだけ共有することで、コミットの際に書いて欲しいことの統一を期待できます。

期待すること

「コミットメッセージに書いて欲しいこと」の共有方法は過去いろんな記事ありますが、
templateなどだと「メッセージの内容」についてまでは言及できなかったり、
またチーム開発の経験がないと「どんなメッセージが有用なのか?」というのがピンと来づらかったりするのかなぁと。

あと「質問に答えづらいコミット」≒ひとつのコミットでいろいろしすぎではないか、と
コミット分割を検討するチェックになるかな、といった副作用も期待してます。

実際には「事前にセットした文章を一行づつ表示させる」「回答をコミットメッセージとして保存する」ことしかしないので、応用効くと思います。たぶん。
なんか面白い使い方見つけたら教えて下さい。

質問の例

変更の概要とか

どのような変更ですか?

外部への影響とか

この変更によって,どんなことが起きますか?

変更された背景とか

なぜその変更が必要でしたか?

「何かstackoverflowに書いてたやつコピペしたら動いたんです」→せめてURL貼っといて、とか

参考URLなど(あれば)

あとは、issue番号とか(これは自動化したほうが楽かも)

issue number?

無駄に増やして嫌がらせとか

本当にコミットして大丈夫? 
本当の本当に?
ちゃんとレビューした?
ではコミットしますか?
本当に?
・・・?
言い残したことはないですか?

あんまり行数増やすとすぐにうざったくなると思うので,3~4行くらいがいいと思います。

追記(4/16)

質問毎に改行を入れるようにしました

また質問ファイルの方に空行を入れると、コミットメッセージの方も空行が入るようにしました。

質問ファイル

(タイトルは現在形で自然に読めるように書く)このコミットは,

この変更によって,どんなことが起きますか?
なぜその変更が必要でしたか?
参考URLなど(あれば)

↓↓↓
コミットメッセージ

改行を追加した

1行目をタイトルのように表示できるようにしました
gitのお作法に従うようにしたかったため
http://qiita.com/smd8122/items/1dd077cb4d7757c5326c#comment-36fa06a283548220015b

これによって、形式が揃うようになりました。

質問ファイルのサンプルフォルダを作って頂きました

皆さんがどんな質問を書いているのか、共有できればと思います。

365
334
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
365
334