Git戦略
この記事では、アジャイル開発におけるバージョン管理ツールであるGitの戦略について説明します。
Gitの戦略
Gitは、分散型バージョン管理システムであり、複数の開発者が同時にコードを編集することができます。Gitを使った開発では、複数の開発者が同じリポジトリに対して変更を加えることがあるため、コンフリクト(競合)が発生する可能性があります。そのため、Gitを使った開発では、コンフリクトを避けるための戦略が必要です。
ブランチ戦略
Gitを使った開発では、複数のブランチを使って開発を進めることが一般的です。ブランチは、リポジトリ内のコードの状態を分岐させるためのものであり、複数のブランチを使うことで、複数の開発者が同時にコードを編集することができます。
メインブランチ
Gitを使った開発では、通常、以下のようなメインブランチが使われます。
- masterブランチ:リリース可能な状態のコードを管理するブランチ
- developブランチ:次のリリースに向けて開発を進めるブランチ
- featureブランチ:新機能の開発を行うブランチ
- hotfixブランチ:緊急の修正を行うブランチ
- releaseブランチ:リリース前の準備を行うブランチ
- bugfixブランチ:バグ修正を行うブランチ
- infraブランチ:インフラの変更を行い、developブランチにマージする
- docsブランチ:ドキュメントの変更を行い、developブランチにマージする
- testブランチ:テストの変更を行い、developブランチにマージする
- choreブランチ:その他の変更を行い、developブランチにマージする
- ciブランチ:CI/CDの変更を行い、developブランチにマージする
ブランチの運用
Gitを使った開発では、以下のようなブランチの運用が一般的です。
- masterブランチ:リリース可能な状態のコードがマージされる
- developブランチ:featureブランチからのマージを受け入れる
- featureブランチ:新機能の開発を行い、developブランチにマージする
- hotfixブランチ:masterブランチに直接マージする
- releaseブランチ:developブランチからのマージを受け入れる
- bugfixブランチ:developブランチにマージする
コミットメッセージの書き方
Gitを使った開発では、コミットメッセージの書き方にも注意が必要です。コミットメッセージは、コードの変更内容を記録するためのものであり、他の開発者がコードの変更内容を把握するために重要です。
コミットメッセージの書き方には、以下のようなルールがあります。
- コミットメッセージの1行目には、変更内容の要約を記述する
- 2行目には空行を入れ、3行目以降に詳細な変更内容を記述する
- コミットメッセージの1行目は50文字以内に収める
- コミットメッセージの1行目は命令形で書く(例:Fix typo)
コミットメッセージの書き方には、以下のようなメリットがあります。
- コミットメッセージを見ただけで変更内容が把握できる
- コミットメッセージを見ただけで変更の理由がわかる
- コミットメッセージを見ただけで変更の影響範囲がわかる
プルリクエストの運用
Gitを使った開発では、プルリクエストを使ってコードのレビューを行うことが一般的です。プルリクエストは、コードの変更内容を他の開発者に通知し、レビューを依頼するためのものであり、コードの品質を向上させるために重要です。
プルリクエストの運用には、以下のようなメリットがあります。
- コードの品質を向上させる
- コードの変更内容を他の開発者に通知する
- コードの変更内容を他の開発者にレビューしてもらう
プルリクエストの運用には、以下のようなルールがあります。
- プルリクエストを作成する前に、コードの変更内容を確認する
- プルリクエストには、変更内容の要約と詳細な説明を記述する
- プルリクエストには、レビューを依頼する開発者を指定する
- プルリクエストには、レビューを依頼する理由を記述する
プルリクエストのテンプレート
コンフリクトの解消
Gitを使った開発では、複数の開発者が同時にコードを編集することがあるため、コンフリクト(競合)が発生する可能性があります。コンフリクトが発生した場合、よくあるシーンでの解消方法を以下に示します。
クローンしたリポジトリでfeatureブランチを作成し、変更を加えるときにコンフリクトが発生した場合
-
リモートリポジトリの最新情報を取得する
1
git fetch origin
-
ローカルのdevelopブランチを最新の状態にする
1 2
git checkout develop git pull origin develop
-
featureブランチをdevelopブランチにマージする
1 2
git checkout feature-branch git merge develop
-
コンフリクトを解消する
1 2
git add . git commit -m "Fix conflict"
-
リモートリポジトリにプッシュする
1
git push origin feature-branch
プルリクエストをマージするときにコンフリクトが発生した場合
-
ローカルのdevelopブランチを最新の状態にする
1 2
git checkout develop git pull origin develop
-
プルリクエストをマージする
1 2
git checkout feature-branch git merge develop
-
コンフリクトを解消する
1 2
git add . git commit -m "Fix conflict"
-
プルリクエストを再度マージする
リベース戦略
Gitを使った開発では、リベース戦略を使ってコンフリクトを避けることができます。リベース戦略は、featureブランチをdevelopブランチにリベースすることで、コンフリクトを解消する方法です。
リベース戦略を使った開発の流れは以下の通りです。
-
developブランチを最新の状態にする
1 2
git checkout develop git pull origin develop
-
featureブランチをdevelopブランチにリベースする
1 2
git checkout feature-branch git rebase develop
-
コンフリクトを解消する
1 2
git add . git rebase --continue
-
リベースしたfeatureブランチをリモートリポジトリにプッシュする
1
git push origin feature-branch
リベース戦略を使った開発では、コンフリクトを避けることができるため、開発効率を向上させることができます。
フォークしているリポジトリでfeatureブランチを作成し、変更を加えるときにコンフリクトが発生した場合
-
リモートリポジトリを追加する
1
git remote add upstream
-
リモートリポジトリの最新情報を取得する
1
git fetch upstream
-
ローカルのdevelopブランチを最新の状態にする
1 2
git checkout develop git pull upstream develop
-
featureブランチをdevelopブランチにリベースする
1 2
git checkout feature-branch git rebase develop
-
コンフリクトを解消する
1 2
git add . git rebase --continue
-
リベースしたfeatureブランチをリモートリポジトリにプッシュする
1
git push origin feature-branch