イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

developが更新されたらお知らせしてくれるシェルスクリプトを作りたい!

こんにちは、未経験中途エンジニアのすももです。
入社してなんだかんだ1年経ちました〜、本当にあっという間ですね。
出来る事が増えた喜びと、まだまだ何も出来ない哀しみの狭間で生きてます。
…​とはいえ元気ですのでご心配なく!笑

今回のテーマは「developが更新されたらお知らせしてくれるシェルスクリプトを作る!」
ということで。

〜なぜ作るのか?〜
私のチームでは、リリースでdevelopを更新した際、メンバーに口頭やSlackで「昨日リリースあったので、developをマージお願いいたします!」と伝えてたりするのですが、言う方も言われた方も忘れてしまうことが多く・・・。笑
「コミットする時とかにdevelopと差分あったら教えてくれるようにしたいね!」という話になりました〜

そして、ちょうどシェルスクリプトの勉強を少ししたところだったので、私が挑戦してみることに!

〜今回作りたいもの〜
・コミットしようとするとシェルスクリプトが動く
・作業ブランチとorigin/developに差分があったらメッセージを出す
・差分がある場合はコミットするかしないか選べる

〜やったこと〜
1.Gitディレクトリのhooksサブディレクトリに「pre-commit」ファイルを作成

$ vi .git/hooks/pre-commit

2.「pre-commit」ファイルの実行権限を追加

$ chmod u+x .git/hooks/pre-commit

<実行権限の追加についてはこちらを参考にしました>
https://qiita.com/shisama/items/5f4c4fa768642aad9e06

3.「pre-commit」ファイルに以下コードを入力

#!/bin/bash

# リモートのorigin/developのデータを取ってくる
git fetch origin develop

# 今いるブランチとorigin/developの差分を取得
difference=$(git log ..origin/develop -n 1)

# 変数の文字が空じゃなければ注意メッセージを表示する
if [ -n "$difference" ]; then
  echo "[注意] developと差分あり!切りの良いとこでpullしてね!"
  echo "[注意] このままcommitしますか? [Y/n]"

  exec < /dev/tty
  read answer

  case $answer in
    "Y" | "y")
      echo "commit実行したよ!"
      exit 0;;
    * )
      echo "commit中止したよ!";
      exit 1;;
  esac
fi
  • git log ..origin/develop -n 1
    今回は、作業ブランチのもとにしたdevelopとorigin/developの差が1件でもあるかどうかが分かれば良かったので、-n 1で1コミット分だけ表示するようにしました!

〜完成したもの〜

1.png

↑【origin/developをpullする前にcommitしようとした場合】
注意メッセージが表示される!

3.png

[Y]または[y]を入力すればcommit実行

2.png

[Y]または[y]以外(nなど)を入力すればcommit中止

4.png

↑【origin/developをpullした後にcommitしようとした場合】
そのままコミット出来る!

〜おわりに〜
最初、差分を取得しようとしても、origin/develop側の変更点だけでなく、作業ブランチの変更点も出てしまったり、上手く変数に入れることが出来なかったりで手こずり頭ぐるぐるしていたのですが、みんなの助けを借りなんとか完成できました〜!
今後はもっと自分のチカラで解決出来るようになりたいなぁ〜と思いつつ、今回のブログを終わりにしたいと思います!

ではでは!