Release Branchは、特定のリリースをデプロイメント用に準備するためにdevelopから作成されるGit Flowのブランチです。アプリケーションのバージョンを固定し、最後のバグを修正し、メタデータを更新します。新機能は追加されません。Vincent Driessen(2010年)によると、リリースブランチはリリース準備を現在の開発から分離し、両方のアクティビティを並行して進めることを可能にします。
重要なポイント
release/X.Y.Z(アプリのバージョンに基づく)。Release Branch(リリースブランチ)は、チームが現在の機能セットがリリース可能と判断したときにdevelopから作成されるGit Flowの一時的なブランチです。その存続期間は最終リリース準備にかかる時間と正確に一致し、数時間から数日間です。
リリースブランチの主な目的は、次バージョンの開発を止めずに、特定の機能セットをリリース用に固定することです。リリースブランチがデプロイメントの準備をしている間、他の開発者は次回リリースに向けてdevelopへのフィーチャーブランチのマージを続けることができます。
リリースブランチでは新機能は作成されません。バグ修正、アプリケーションバージョンの更新、ローカライゼーション、ドキュメントのみが行われます。すべての作業が完了すると、リリースブランチはmain(リリースとしてマーク)とdevelop(バグ修正が将来のバージョンに反映されるため)にマージされます。
Atlassian(2024年)によると、リリースブランチは定期的なリリースサイクルを持つプロジェクトにとって極めて重要であり、リリースプロセスの予測可能性と安定性を保証します。
リリースブランチのライフサイクルは、作成から削除まで複数の段階を含みます。各段階を理解することで、チームは行動を同期し、ミスを回避できます。
release/2.5.0という名前のブランチが作成されます。developは次バージョンのフィーチャーブランチを引き続き受け入れます。v2.5.0。ステップ6(developへのマージバック)はしばしば忘れられますが、極めて重要です。これがないと、リリースで行われたバグ修正がdevelopに反映されず、次回リリースで同じエラーが再発する可能性があります。
リリースブランチの存続期間は、リリースの複雑さとdevelopのコード品質に依存します。中規模のモバイルアプリケーションの場合、準備には平均2〜5営業日かかります。
リリースブランチでは、厳密に制限されたタスクセットのみが実行されます。このリストから逸脱するとGit Flowモデルに違反し、リリースの安定性にリスクをもたらします。
| 変更の種類 | 許可 | 例 |
|---|---|---|
| バージョニング | はい | build.gradleのversionNameを更新 |
| バグ修正 | はい | 起動時のクラッシュを修正 |
| ローカライゼーション | はい | 新しい画面の翻訳を追加 |
| ドキュメント | はい | CHANGELOGとREADMEを更新 |
| 新機能 | いいえ | 新しいプロフィール画面を追加 |
| リファクタリング | いいえ | ネットワーク層を書き直し |
| ライブラリ更新 | 注意 | バグ修正のためのパッチバージョンのみ |
新機能禁止のルールはリリースブランチで最も重要です。機能がリリースに間に合わなかった場合、次のサイクルを待ちます。未完成の機能をリリースブランチに押し込もうとすることは、納期遅延と本番バグの主な原因です。
リリースブランチでは、アプリケーションバージョン番号が必須で更新されます。Androidの場合はbuild.gradleのversionCodeとversionNameフィールド、iOSの場合はInfo.plistのCFBundleShortVersionStringです。
// build.gradle(アプリレベル) — リリースブランチでのバージョン更新
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// iOSの場合 — Info.plistの更新
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
初心者の開発者はreleaseとhotfixブランチを混同することがよくありますが、それらの目的は根本的に異なります。誤ったブランチタイプを選択すると、重要な修正が遅れたり、リリースプロセスが中断されたりする可能性があります。
リリース準備中(リリースブランチ内)にバグが見つかった場合、それは通常のバグ修正です。本番環境(main上)でバグが見つかった場合、それはhotfixであり、リリースブランチが既に存在していてもmainから作成されます。
統一されたリリースブランチの命名標準により、リポジトリのナビゲーションが簡素化され、CI/CDシステムがブランチがリリースプロセスに属することを自動的に検出できるようになります。
release/2.5.0。release/merlin。release/2024-12-01。release/X.Y.Z形式が推奨されます。ブランチをリリースに割り当てられるバージョン番号に明示的に関連付けるためです。これにより、CI/CDスクリプトによる検索と自動処理が簡素化されます。
リリースブランチのdevelopへのマージバックは、最も重要でありながら最も頻繁にスキップされる操作の1つです。これがないと、リリースブランチで行われたすべてのバグ修正はリリースバージョンにのみ残り、次のリリースサイクルに反映されません。
マージバックプロセスは、リリースブランチがmainにマージされた後に実行されます。最初にreleaseがdevelopにマージされ、次に削除されます。これにより、developにリリース準備中に行われたすべての修正が含まれることが保証されます。
マージバック後、特に同じファイルを変更した新しいフィーチャーブランチが既にdevelopに出現している場合、競合が発生する可能性があります。リリース責任者の開発者がこれらの競合を解決し、developをサーバーにプッシュします。
一部のチームは、履歴を線形に保つために、マージバックにマージではなくリベースを使用します。ただし、マージはdevelopにとってより安全であり、他の開発者が既に使用しているコミット履歴を書き換えないためです。
モバイルアプリケーションバージョン2.5.0のリリース成功後のリリースブランチの全サイクル(作成から削除まで)を見てみましょう。
# 1. developからリリースブランチを作成
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. バージョンとバグ修正を更新
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. バグを修正(バグ修正のみ)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. リリースブランチをサーバーにプッシュ
git push origin release/2.5.0
# 5. releaseをmainにマージ
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. developにマージバック
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. リリースブランチを削除
git branch -d release/2.5.0
git push origin --delete release/2.5.0
コマンド5と6(二重マージ)は極めて重要です。最初にmainがリリースコードとタグを受け取り、次にdevelopがリリースのバグ修正と同期します。ステップ6をスキップすると、リリースの修正が次の開発サイクルに反映されません。
定期リリースのあるモバイルプロジェクトでは、リリースブランチの作成とバージョン更新のプロセスをCI/CDスクリプトで自動化できます。GitHub Actionsを使用すると、ボタンをクリックするだけで自動バージョン更新付きのリリースブランチを作成するワークフローを構築できます。
定期リリースのあるモバイルプロジェクトでは、リリースブランチの作成とバージョン更新のプロセスをCI/CDスクリプトで自動化できます。GitHub Actionsを使用すると、ボタンをクリックするだけで自動バージョン更新付きのリリースブランチを作成するワークフローを構築できます。
# GitHub Actions — リリースブランチ作成の自動化
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
よくある質問
Git Flowに従う場合、同時に1つのリリースブランチのみです。2つのアクティブなリリースブランチがあることは、チームが並行して2つのリリースを出そうとしていることを意味し、逐次リリースの原則に違反し、バージョン管理に混乱を招きます。
git revertを使用してリリースブランチから未完成の機能のコミットを削除し、機能を次回リリースまで延期してください。未完成の機能を本番環境にリリースしてはいけません。技術的負債と潜在的なバグは、急ぐ価値がありません。
単一修正のシンプルなリリースでは、リリースブランチをスキップしてdevelopからmainに直接マージできます。ただし、標準的なリリースではリリースブランチが必須であり、バージョンを固定し、準備を分離し、バグ修正の二重マージを保証します。
mainでgit revertを使用して、すべてのリリース変更を取り消す新しいコミットを作成します。次に、git push origin --delete vX.Y.Zコマンドでリリースタグを削除します。問題を修正した後、パッチ番号を増やした新しいリリースブランチを作成します。
Release candidate(RC)は最終テストを受けるビルドアーティファクトです。Release branchはリリース候補がビルドされるGitブランチです。1つのリリースブランチから、バグ修正に応じて複数のRCビルド(RC1、RC2など)を生成できます。
まとめ
release/X.Y.Z(SemVerバージョン番号)。ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。