📝

ブランチ作成から Draft Pull Request 作成までを1コマンドで出来るように、シェルスクリプト自作した話

2024/01/31に公開

2024/02/12 追記

gbinit 実行時、現在のブランチがマージ先になるように、スクリプト改良しました。

はじめに

会社の業務などで、先に Draft Pull Request を作るケースがあるんですが、
その一連の作業が、少々手間で効率悪かったので、1コマンドですべてやってくれるシェルスクリプト自作しました。

読む前に注意

Mac 環境を前提として、記載しています。
他OSについては、各自環境に合わせて修正していただければと思います。

自作したシェルスクリプト gbinit

事前準備

homebrew 等で、Git & GitHub CLI をインストールします。

brew install git
brew install gh

続いて、以下スクリプトを .zshrc に貼り付けます。

function gbinit() {
  current_git_branch_name=$(git rev-parse --abbrev-ref HEAD)
  command git switch -c $1
  command git commit --allow-empty -m "[ci skip] Create branch"
  command git push origin $1
  command git branch --set-upstream-to=origin/$1 $1

  read "yn?Would you like create pull Request?(y/n):"

  case "$yn" in  
    [yY]*) 
      read "title?What do you name pull request title?:"
      if [ $title ]; then
        command gh pr create --title $title --assignee @me --draft --base $current_git_branch_name
      else
        echo "Error: Can't create pull request for not title."
        return;
      fi
      ;;
    *) 
      return;
      ;;
  esac 
}

最後に .zshrc を読み込みます。

source ~/.zshrc

これで準備完了です。

使い方

以下コマンドを実行するだけです。

gbinit [branch-name]

途中で Would you like create pull Request?(y/n): を聞かれますが、ここで n を入力すると、Pull Request 作成せず、ブランチ作成のみで終わります。
y を入力すると、Pull Request 作成フローに移行します。
その後 What do you name pull request title?: が表示されるので、Pull Request のタイトルを入力して、最後に enter を押します。
(未入力で enter 押した場合は pull request は作成されません。)
GitHub CLI が起動するので、後は表示された内容を沿って入力してください。

Would you like create pull Request?(y/n):y
What do you name pull request title?:Test Pr 17

Creating draft pull request for test-pr-17 into main in bebeji-nappa/room-nappa

? Choose a template pull_request_template.md
? Body <Received>
? What's next? Submit as draft
https://github.com/bebeji-nappa/room-nappa/pull/76

解説

ここからは、シェルスクリプトの具体的な解説になります。

現在のブランチ名を取得

現在のブランチがマージ先になるように、
git rev-parse --abbrev-ref HEAD というコマンド実行して、現在のブランチ名を取得して、変数に格納します。

current_git_branch_name=$(git rev-parse --abbrev-ref HEAD)

https://qiita.com/usamik26/items/8aa6c3aed4b9c7dba5ca

ブランチ作成から push まで

以下で構成されています。

command git switch -c $1
command git commit --allow-empty -m "[ci skip] Create branch"
command git push origin $1
command git branch --set-upstream-to=origin/$1 $1

gbinit ブランチ名 で実行した場合、
引数 $1 でブランチ名が取得できるので、それを使って、コマンドを作成しています。

https://qiita.com/kaw/items/034bc4221c4526fe8866

最後に git branch --set-upstream-to=origin/$1 $1 を実行することで git pull が実行しやすいようにしています。

プルリク作成

プルリク作成は以下の部分です。

read "yn?Would you like create pull Request?(y/n):"

case "$yn" in  
  [yY]*) 
    read "title?What do you name pull request title?:"
    if [ $title ]; then
      command gh pr create --title $title --assignee @me --draft --base $current_git_branch_name
    else
      echo "Error: Can't create pull request for not title."
      return;
    fi
    ;;
  *) 
    return;
    ;;
 esac 

read "変数名?プロンプト" で入力待ち状態にしています。尚、bash の場合は、コマンド変わるので、注意です。

https://qiita.com/isobecky74/items/63ac79a039a4975d569d

case ~ in ~ esac 構文で、条件分岐させて、
最終的に、タイトルまで入力したら command gh pr create --title $title --assignee @me --draft --base $current_git_branch_name を実行してプルリクを作成されるようにしています。

最後に

シェルスクリプト自作出来るようになると、色々生産性上げれるようになるので、是非お試しください!

Discussion