Feature Branch — はGitのブランチ戦術で、各新機能がメインコードから分離された個別のブランチで開発されます。これにより、複数の開発者がプロジェクトの安定バージョンを損なうリスクなしに、異なるタスクに同時に取り組むことができます。Atlassian(2024年)によると、Feature BranchはGit Flowの重要な要素であり、ほとんどの商用プロジェクトで使用されています。
重要なポイント
feature/機能名。Feature Branch(機能ブランチ)は、特定の機能を開発するためにdevelopから作成されるGitの一時的なブランチです。長期にわたって存在するmainブランチやdevelopブランチとは異なり、featureブランチは限られた時間 — 数時間から数週間 — だけ存在します。
feature branchの主な目的は、1つのタスクに関連する変更を他のコードから分離することです。開発者は自分のブランチで実験し、多数のコミットを行い、コードを壊すことさえも、チームの他のメンバーの作業に影響を与えずに行えます。
開発が完了すると、featureブランチは必須のコードレビューを伴うPull Requestを通じてdevelopにマージされます。マージ後、リポジトリをクリーンに保つためにブランチは通常削除されます。
Vincent Driessen(2010年)によると、featureブランチを使用したGit Flowモデルは、異なる種類のブランチ間の責任の明確な分割により、業界標準となりました。
ワークフローは、開発者が新しい機能ごとに実行する一連のステップで構成されています。このプロセスはマージの競合を最小限に抑え、コード品質管理を保証します。
developとの定期的な同期は非常に重要です。featureブランチがdevelopからの変更をマージせずに長く存在するほど、最終的なマージでの競合の可能性が高まります。
| 同期頻度 | 競合リスク | 開発の利便性 |
|---|---|---|
| 毎日 | 低い | 頻繁なrebaseまたはmergeが必要 |
| 毎週 | 中程度 | 快適なペース、中程度の競合 |
| 毎月 | 高い | 複雑なマージ競合解決のリスク |
| なし | 重大 | データ損失なしではマージが不可能になる可能性 |
ブランチの命名はチームの規律の重要な部分です。統一された命名基準により、どのタスクに取り組んでいるか、誰がそれを実行しているかを迅速に特定できます。
feature/added-auth-module。feature/PROJ-42-add-login。feature/feat/analytics-dashboard。JIRA、Trello、または他のシステムからのタスクIDの使用はベストプラクティスです。コードとタスクを自動的に関連付け、git logによるブランチ検索を簡素化します。
Pull Request(またはGitLabのMerge Request)は、featureブランチをdevelopにマージするリクエストです。PRは単なる技術的操作ではなく、コード品質を向上させ、チーム内に知識を広めるチームコードレビュープロセスです。
良いPRには、タスクの簡潔な説明を含むタイトル、チケットへのリンク、変更の説明が含まれます。開発者は何が行われたか、どのファイルが変更されたか、プロジェクトの他の部分への潜在的なリスクがあるかを示す必要があります。
チームはPR内のコードをレビューし、コメントを残し、変更を要求し(change requests)、マージを承認します(approve)。承認後、mergeまたはsquash mergeが実行されます。
モバイル開発におけるPRレビューの平均時間は4〜24時間です。Dangerライブラリは、PR内でリンターとテストを直接実行することで、一部のチェックを自動化します。
PR承認後、featureブランチはさまざまな方法でdevelopにマージできます。マージ戦略の選択は、コミット履歴と変更のロールバック可能性に影響します。
頻繁にリリースを行うモバイルプロジェクトでは、通常squash mergeが使用されます。developでクリーンな履歴を提供し、開発の詳細はPRの説明とトラッカータスクに残ります。
経験豊富な開発者でも、featureブランチで作業するときに間違いを犯します。典型的な問題を知ることで、時間とデータの損失を防ぐことができます。
これらの問題を回避する最善の方法は、プロジェクト開始時に作業ルールに合意し、CI/CDパイプラインで自動チェックを使用することです。
実践的なシナリオを考えてみましょう。開発者がモバイルアプリで新しい認証機能を開始します。featureブランチを作成し、コードに取り組み、Pull Requestでタスクを完了します。
# developを更新し、featureブランチを作成
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# 機能の作業:コミット
git add src/ui/login/
git commit -m "Add login screen layout"
# featureブランチをサーバーにプッシュ
git push origin feature/add-login-screen
# developと同期(rebase)
git fetch origin develop
git rebase origin/develop
# PR承認後:ローカルのdevelopを更新し、ブランチを削除
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
git branch -dコマンドは、変更が完全にマージされた後にのみブランチを削除します。ブランチがマージされていない場合、Gitは強制削除のためにgit branch -Dを使用するよう提案します — このフラグは注意して使用してください。
PRを作成する前に、各featureブランチでCI/CDパイプラインを実行する必要があります。これにより、コードが他の開発者のレビューに入る前に、早期に問題を発見できます。
# featureブランチをチェックするGitHub Actions
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
パイプラインは、コードがコンパイルされること、テストに合格すること、コードスタイルがチーム標準に準拠していることを確認します。すべてのチェックに合格した後にのみ、Pull Requestを作成できます。
よくある質問
はい、これは標準的なプラクティスです。各開発者は自分のfeatureブランチで作業でき、すべてがdevelopと独立して同期します。主要なルールは、コード内のクロスタスク依存関係を避けるために、1タスクにつき1ブランチです。
featureブランチでgit rebase origin/developを実行してください。競合が発生した場合は、1つずつ解決します — コミットはdevelopの最新状態の上に書き換えられます。rebase後、リモートブランチを更新するにはgit push --forceが必要です。
タスクがキャンセルされた場合は、featureブランチを単に削除できます。ローカルブランチにはgit branch -d feature/name、リモートブランチにはgit push origin --delete feature/nameを実行してください。コミットされていない変更はすべて失われます。
基本的に同じものです。チームによって異なるプレフィックスを使用します:feature/、task/、feat/。Gitのメカニズムに違いはありません — すべて、分離された開発のためにdevelopから作成された一時的なブランチです。
はい、これは必須のプラクティスです。マージ後のブランチは参照リストを散らかし、混乱を引き起こす可能性があります。ほとんどのプラットフォーム(GitHub、GitLab)はPRのマージ直後にブランチを削除するオプションを提供し、ローカルブランチはgit branch -dコマンドで削除されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。