Develop BranchはGit Flowのメイン統合ブランチであり、リリース準備前にすべての完了したfeatureブランチがマージされます。mainとは異なり、developには最新でありながらまだリリースされていない変更が含まれます。ここでチームの全開発者による日々のコード統合が行われます。Atlassian、2024によると、developはGit Flowの必須ブランチであり、チームに安定した統合環境を提供します。
重要なポイント
Develop Branch(開発ブランチ)はGit Flowにおける長期稼働ブランチであり、全開発者からのコード統合の中心ハブとして機能します。開発完了とコードレビューの後、featureブランチがここにマージされます。
developのコードは常にリリース作成準備が整った状態にありますが、まだ本番環境にデプロイされていません。つまり、developのすべての機能はレビュー、テスト、統合チェックを通過していますが、まだリリースサイクルを待っています。
各コードバージョンがリリースであるmainとは異なり、developには継続的な変更の流れが含まれます。featureブランチがマージされるにつれてdevelopにコミットが表示され、これは1日に複数回発生する可能性があります。
Vincent Driessen、2010によると、developは成功するブランチモデルの重要な要素であり、ドラフト作業をリリース準備済みバージョンから分離します。
developとmainの違いを理解することは、適切なGit Flowワークフローにとって重要です。これらのブランチは異なる機能を果たし、安定性の要件も異なります。
| 特性 | Develop | Main / Master |
|---|---|---|
| 目的 | 新機能の統合 | 安定したリリースコード |
| 安定性 | 高い(テスト後) | 最大(本番) |
| コミット頻度 | 毎日(featureマージ) | リリースごと(1〜4週間) |
| ブランチのソース | これからfeatureを作成 | これからhotfixを作成 |
| マージ | PR経由でfeatureから | merge経由でreleaseから |
developとmainに分割することで、チームは本番バージョンの安定性を危険にさらすことなく、新しいコードを継続的に統合できます。開発者は公式リリース前でも、PR承認後すぐにdevelopで自分のコードを確認できます。
Git Flowモデルでは、developはfeatureブランチ(変更のソース)とreleaseブランチ(リリース準備)の間で中心的な位置を占めています。この階層を理解することが効果的なブランチングの基盤です。
この構造により、developには常にすべての新機能を含む最新コードが含まれ、mainには検証済みの本番コードのみが含まれます。これは、App StoreやGoogle Playでのレビューサイクルが長いモバイルプロジェクトにとって特に重要です。
Developはfeature、release、hotfixブランチ間の中心的なリンクとして機能します。マージの方向性を理解することは、競合やコミットの損失を防ぐために不可欠です。
developのコード品質は高くなければなりませんが、絶対的ではありません。すべてのエラーが緊急hotfixを意味するmainとは異なり、developではリリース前に修正される軽微な不完全さが許容されます。
developにマージする前のコードの最小要件:
CI/CDパイプラインの自動チェックは、developへのプッシュごとに実行する必要があります。ビルドが壊れた場合、責任のある開発者は1時間以内に問題を修正するか、コミットを元に戻す必要があります。
developにGitHub Actionsを設定すると、すべてのPRがマージ前に自動チェックを通過することが保証されます。一般的なパイプラインには、ビルド、テスト、リンティングが含まれます。
# GitHub Actions — マージ後のdevelop確認
name: Develop CI
on:
pull_request:
branches: [develop]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Unit tests
run: ./gradlew testDebug
- name: Lint
run: ./gradlew lint
- name: Build
run: ./gradlew assembleDebug
developへのマージは、統合ブランチの安定性を維持するために厳格なルールに従う必要があります。これらのルールに違反すると、競合、ビルド破損、チームの時間の無駄が発生します。
PRを最新に保つルールは特に重要です。featureブランチが1週間前に作成され、developが50コミット進んでいる場合、直接マージすると競合が発生する可能性があり、developではなくPRのコンテキストで解決する方が適切です。
ブランチ保護ルールは、GitHub、GitLab、Bitbucketレベルの設定で、developへの不正な変更を防ぎます。偶発的なプッシュでも統合ブランチが壊れないことを保証します。
developに推奨される保護ルール:
developの保護設定には10分かかりますが、統合ブランチの破損に関連する数週間のダウンタイムを防ぎます。マルチプラットフォームチームを持つモバイルプロジェクトでは、これは特に重要です。
典型的な開発者の一日を考えてみましょう。朝にdevelopを更新し、新しいfeatureブランチを作成し、タスク完了後に変更をdevelopにマージし直します。
# 朝のdevelop同期
git checkout develop
git pull origin develop
# developから新しいfeatureブランチを作成
git checkout -b feature/add-push-notifications
# 機能の開発中...
git add . && git commit -m "Add FCM integration"
# 開発中のdevelop更新
git fetch origin develop
git rebase origin/develop
# PR承認後 — ローカルdevelopを更新
git checkout develop
git pull origin develop
git branch -d feature/add-push-notifications
developでのgit pullコマンドは、一度に2つの操作を実行します。git fetch(サーバーから新しいコミットを取得)とgit merge(ローカルブランチとマージ)です。developにとって、これが標準的な同期方法です。
ビルドを壊すコードがdevelopに入った場合、迅速に対応する必要があります。developのダウンタイムの1時間ごとに、開発チーム全体の作業がブロックされます。
ビルドを壊すコードがdevelopに入った場合は、git revertを使用して問題のある変更を元に戻す新しいコミットを作成します。git resetをdevelopで使用しないでください。他のチームメンバーが既に持っている履歴を書き換えてしまいます。
# 問題のあるコミットを見つける
git log --oneline develop
# revertによるコミットの取り消し(安全)
git revert a1b2c3d
# リモートdevelopに修正をプッシュ
git push origin develop
# 特定のコミットの変更を表示
git show a1b2c3d --stat
よくある質問
1〜2人の開発者のプロジェクトでは、developは多くの場合冗長です。mainとfeatureブランチで十分です。チームが3人以上に成長すると、developは安定した本番コードから未完成の機能を分離するために必要になります。
いいえ、プロフェッショナルなプロジェクトではdevelopへの直接コミットは禁止されています。すべての変更はコードレビューと自動チェック付きのPull Requestを通過します。例外はREADMEやCI設定の管理編集ですが、これらもPR経由で行う方が良いです。
Trunk-based developmentには個別のdevelopブランチはなく、すべての開発者が非常に短いfeatureブランチ(1〜2日)でmainで作業します。これはGit Flowの代替であり、テスト自動化のレベルが高いDevOps文化で人気があります。
各リリース後、releaseブランチはdevelopにマージし直され、リリース準備中に行われたすべての修正が組み込まれます。これを行わないと、developがリリースコードから乖離し、次回のリリースで競合が発生します。
developが壊れた場合、シニア開発者が最後の安定コミットからhotfixブランチを作成し、問題を修正して、特別なステータスのPRを介して修正をdevelopに直接マージします。復旧後、根本原因分析が行われます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。