チーム開発を意識してブランチ作成の習慣をつける

Technical

GitHubを用いたチーム開発において「Issue → Branch → PR → Merge → Issue Close」というワークフローが良く使われます。

Udemyなどの教材でも講師がブランチを切る場面がよくありますが、チーム開発を安全かつ効率的に進めるための習慣作りとして、個人開発でもブランチやワークツリーを活用してみましょう。

ブランチを作成する(=ブランチを切る)

git switch -c feature-branch

または古い書き方を使うこともできます。

git checkout -b feature-branch

git checkoutコマンドは、ブランチ切り替え以外にもファイル復元など複数の機能があります。分かりづらく操作ミスにつながることから Git 2.23 (2019.8) で switchrestoreが追加されました。

なので新しく身につける習慣としては switch コマンドをおすすめします。

作業してコミット&プッシュ

ブランチを切ったら、通常通り作業を進めてコミットします。

git add .
git commit -m "ユーザー認証機能を追加"

作業がまとまったら、リモートにブランチをプッシュします。(GitHub CLIでPRを作成する場合は同時にpushされるのでスキップしてよい。)

git push origin feature-branch

これで GitHub 上にブランチが作成され、PR を作成できる状態になります。

個人開発でPRを省略して進める場合はいったん main に戻ってからマージします。

git switch main
git merge feature-branch

プルリクエストを作成する

リモートにプッシュしてプルリクエストを作成する方法は複数あります。

  • GitHub サイト上でプルリクエストを作成する
  • VS Codeの拡張機能 GitHub Pull Requests を使う
  • GitHub CLIを使う

GitHub サイト上で操作するかVS Codeの機能を使うのが安全かなと思いますが、GitHub CLIを使う場合はこのようにします。

    gh pr create --title "ユーザー認証機能の追加" \
             --body "レビューしてください。" \
             --base main --head feature-auth

レビュー後 mainにマージします。PULL-REQUESTは、プルリクエストの番号またはURL、ヘッドブランチを入れます。

ローカルを更新する

マージ後のmainを取り込みます。

git switch main
git pull origin main

ワークツリーを作成してより効率的に

ワークツリーを作成して、同じリポジトリを別のディレクトリに展開すると、今やっているタスクを中断(git stashなど)せずに他のタスクを進めることができます。

最近のAIを活用した開発では、自分がタスクを進めている間に、AIに実験的なコードを作成させてテストする、といった使い方ができます。

たとえば、feature-fix ブランチを ../fix-directory に展開して作成するには以下のようにします。

git worktree add ../fix-directory -b feature-fix

注意点としては、.gitignore で除外されているファイル(node_modules.envなど)はコピーされないので、手動でコピーあるいはパッケージを再インストールする必要があります。

個人開発では「ブランチを切ってマージ」でも良し

ここまでチーム開発を意識したgitの使い方を紹介してきましたが、個人開発でプルリクエストを介さず、もっとシンプルに進めたい場合は、ローカルだけで完結させることも可能です。

  1. ブランチを作成して作業
  2. main に戻る: git switch main
  3. マージする: git merge feature-auth

細かい変更までいちいちブランチを切る必要はないかと思うのですが、学習の過程を記録するうえでは、機能単位や開発フェーズ単位でグルーピングしておくとわかりやすいです。

個人的には、ブランチを切って、その中でコミットの粒度を高めにして、コミットメッセージで変更した理由をなるべく書くようにしています。そうすれば、その時どんなことにつまづいたのか、どんな疑問を持ったのか、といったことも思い出しやすいです。