GitのMainおよびMaster Branch:その概要とメインブランチが必要な理由

著者: IT Sectr 公開日: 2026-05-10 読了時間: 8 分

Main Branch(以前はMaster)は、デプロイメント準備の整った安定したプロダクションコードを含むGitのメインブランチです。mainの各コミットはプロジェクトのリリースバージョンに対応し、ブランチ自体は直接の変更から保護され、チーム全体の単一の真実の情報源として機能します。GitHub、2020によると、2020年10月以降、デフォルトの新しいブランチはmasterではなくmainと呼ばれています。

重要なポイント

  • Main / Master Branch — プロダクションコードを含む安定したブランチで、各コミットはリリースバージョンです。
  • 直接変更からの保護 — mainへの直接プッシュは禁止されており、すべての変更はreleaseまたはhotfixブランチを経由します。
  • masterからmainへの移行は、2020年にすべてのGitプラットフォームで包括的な用語のために行われました。
  • Git FlowとGitHub Flowはmainを異なる方法で使用します:Git Flowではリリースのみ、GitHub Flowでは中央ブランチとして。
  • バージョンタグはmainの各リリースコミットにあり、以前の任意のバージョンに簡単にロールバックできます。

GitのMain / Master Branchとは

Main Branch(またはMaster — リポジトリ設定に依存)は、Gitリポジトリを初期化するときに作成されるデフォルトのブランチです。これはプロジェクトのメインブランチであり、プロダクションにデプロイする準備ができたコードを含んでいます。

新しい機能を使った日々の作業が盛んに行われるdevelopとは異なり、mainはプロジェクトのショーケースです。mainのコードの各バージョンは、featureブランチでの開発、developへの統合、releaseブランチでのリリース準備、最終テストという完全なサイクルを経ています。その後でのみ、変更がmainに到達します。

重要な原則:mainは常に安定している必要があります。mainでエラーが見つかった場合、緊急のhotfixを順番外でリリースする必要があります。そのため、プロフェッショナルなプロジェクトでは、mainはブランチ保護ルールによって偶発的な変更から保護されています。

Git Bookによると、mainは特別なプロパティを持つ特別なブランチではなく、慣例によりメインと見なされるコミットへの通常の参照です。Gitはシステムレベルでmainと他のブランチを区別しません。

masterからmainへの移行

歴史的に、Gitのデフォルトブランチはmasterと呼ばれていました。2020年6月、Black Lives Matter運動がIT業界のmasterとslaveという用語に注目を集めました。GitHubはデフォルトブランチにmainという用語への移行を発表しました。

2020年10月以降、GitHubのすべての新しいリポジトリはmainブランチで作成されます。GitLabとBitbucketもデフォルト名としてmainのサポートを実装しました。Git 2.28(2020年7月)では、デフォルトのブランチ名を設定するためのinit.defaultBranchオプションが追加されました。

技術的には、既存のブランチをmasterからmainに名前変更するのは簡単な操作です。主な課題は、CI/CD設定、ドキュメント、開発者のローカルリポジトリのすべての参照を更新することです。

既存のリポジトリでブランチの名前を変更するには、次を実行します:

bash
# masterをローカルでmainに名前変更
git branch -m master main

# リモートリポジトリを更新
git push -u origin main

# サーバー上の古いmasterを削除
git push origin --delete master

# サーバー上のHEADを更新
# (GitHub Webインターフェース経由:Settings → Branches → Default branch)

Git FlowとGitHub Flowにおけるmainの役割

Git FlowGitHub Flowは、mainブランチの役割を異なる方法で定義します。モデルの選択は、チームのサイズ、リリース頻度、コードの安定性要件によって異なります。

特徴Git FlowGitHub Flow
mainの役割リリースバージョンのみ中央開発ブランチ
追加ブランチDevelop、Release、Hotfixfeatureブランチのみ
リリース頻度1〜4週間ごと1日複数回
複雑さ高い低い
選択するタイミングリリースサイクルがあるモバイルアプリ継続的デプロイメントのWebサービス

モバイル開発では、Git Flowが標準です。App StoreやGoogle Playでのアプリ公開には固定のリリースサイクルがあるためです。GitHub Flowは、1日複数回デプロイできるWebプロジェクトに適しています。

GitHub Flow — 簡略化されたアプローチ

GitHub Flowには、developブランチはありません。すべてのfeatureブランチはmainから直接作成され、完了後はPull Requestを介してマージされます。mainへの各マージは、自動的にプロダクションへのデプロイをトリガーします。このモデルには、高いレベルのテスト自動化とチームの規律が必要です。

GitHub Flowには、developブランチはありません。すべてのfeatureブランチはmainから直接作成され、完了後はPull Requestを介してマージされます。mainへの各マージは、自動的にプロダクションへのデプロイをトリガーします。このモデルには、高いレベルのテスト自動化とチームの規律が必要です。

mainブランチの保護

mainのブランチ保護は、商業プロジェクトでは必須の設定です。これがないと、偶発的なプッシュによって未完成のコードが本番環境に送信されたり、すべてのユーザーに対して動作中のアプリケーションが壊れたりする可能性があります。

  • Require pull request — mainへの直接プッシュは禁止。すべての変更はレビュー付きのPR経由。
  • Require approvals — mainにマージするには最低2つの承認が必要(レビュー担当者が見逃した場合に備えて)。
  • Require status checks — マージ前にすべてのCI/CDチェックが成功する必要があります。
  • Require up-to-date — PRは最新のmainコミットに基づいている必要があります。
  • Include administrators — 保護はリポジトリ所有者にも適用されます。
  • Require signed commits — mainのすべてのコミットはGPGキーで署名される必要があります。

6つすべてのルールを設定することは、10,000人以上のユーザーがいるモバイルプロジェクトの標準です。小規模プロジェクトでは、最初の3つのルールで十分です。

さまざまなプロジェクトタイプの保護レベルの比較

mainの保護レベルはプロジェクトの規模によって異なります。スタートアップは最小限の保護で済みますが、エンタープライズアプリケーションには最大の制限が必要です。

mainのリリースとタグ

タグ付けは、main内の特定のコミットに名前付き参照を作成するプラクティスです。各タグは、本番環境にリリースされたアプリケーションのバージョンに対応します。これにより、デバッグやパッチ適用のために以前のリリースにすばやく切り替えることができます。

モバイル開発におけるタグ命名の標準は、SemVer(セマンティックバージョニング)です:v1.2.3。最初の数字はメジャーバージョン(互換性を破る変更)、2番目はマイナーバージョン(新機能)、3番目はパッチ(修正)です。

タグは、releaseブランチがmainにマージされた後に作成されます。このコミットはCI/CDでビルドされ、署名され、アプリストアに送信されます。タグでエラーが見つかった場合、そのタグからhotfixブランチが作成されます。

bash
# 注釈付きリリースタグを作成
git tag -a v2.4.1 -m "Release version 2.4.1"

# サーバーにタグを送信
git push origin v2.4.1

# リポジトリ内のすべてのタグを表示
git tag -l "v2.*"

# 特定のタグからhotfixブランチを作成
git checkout -b hotfix/crash-fix v2.4.1

Git Flowブランチ階層

Git Flowのブランチ階層を理解することは、協調的な開発を適切に組織するための基盤です。各ブランチタイプには、独自のソース、目的、マージルールがあります。

  • Main(レベル1) — ルートブランチ。リリースバージョンのみを含む。リポジトリ初期化時に作成。
  • Develop(レベル2) — プロジェクト開始時にmainから作成。すべての機能の統合コードを含む。
  • Feature(レベル3) — developから作成。個々の機能の独立した開発。
  • Release(レベル2) — developから作成。特定のリリースを公開用に準備。
  • Hotfix(レベル2) — mainから作成。本番環境の重大なエラーの緊急修正。

重要なルール:featureは決して直接mainにマージされません。feature → develop → release → mainが正しいマージチェーンです。このルールに違反すると、Git Flowモデル全体の目的が無効になります。

mainを操作するコマンド例

シナリオを考えてみましょう:チームがリリースv2.5.0の準備を完了しました。releaseブランチはレビューされ、mainにマージする準備ができています。マージ後、タグが作成され、リリースが公開されます。

bash
# mainに切り替えて更新
git checkout main
git pull origin main

# 検証済みのreleaseブランチをマージ
git merge --no-ff release/2.5.0

# リリースタグを作成
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"

# mainとタグをサーバーに送信
git push origin main --tags

--no-ffフラグ(fast-forwardなし)は、単にポインタを移動するだけでマージが実行できた場合でも、マージコミットの作成を保証します。これにより、変更がreleaseブランチから来たという情報が保存され、履歴分析が容易になります。

mainを介したhotfixの操作

本番環境で重大なエラーが発見された場合、プロセスは通常のリリースとは異なります。hotfixはmainから作成され、修正後、mainとdevelopの両方にマージされます。

本番環境で重大なエラーが発見された場合、プロセスは通常のリリースとは異なります。hotfixはmainから作成され、修正後、mainとdevelopの両方にマージされます。

bash
# mainからhotfixブランチを作成
git checkout main
git checkout -b hotfix/2.5.1-crash-fix

# 修正してコミット
git add src/fix/
git commit -m "Fix crash on login screen"

# hotfixをmainにマージ戻す
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags

# hotfixをdevelopにもマージ
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop

# hotfixブランチを削除
git branch -d hotfix/2.5.1-crash-fix

よくある質問

mainブランチは削除できますか?

技術的には — はい、コミットへの通常の参照です。しかし実際には — いいえ、mainはデフォルトブランチであり、ほとんどのプラットフォームはデフォルトブランチとして設定されたブランチの削除を許可していません。削除する代わりに、新しいデフォルトブランチを作成してから古いものを削除してください。

hotfixなしでmainのエラーを修正するには?

エラーが重大でない場合は、通常のプロセスを使用してください:developからfeatureブランチを作成し、エラーを修正し、コードレビューを受け、次のリリースサイクルを待ちます。hotfixは、ユーザーの作業を妨げる重大なエラーにのみ使用されます。

mainとorigin/mainの違いは何ですか?

mainはコンピューター上のローカルブランチです。origin/mainはサーバー上のリモートブランチの状態のローカルキャッシュです。git fetchコマンドはorigin/mainを更新し、git pullは変更をローカルのmainに即座にマージします。

mainを別のディレクトリに移動するには?

リポジトリ全体を新しいディレクトリにコピーするにはgit cloneを使用します。リモートURLを変更する必要がある場合は、git remote set-url originを実行します。リポジトリをコピーせずに作業ディレクトリを変更するには、git worktree addを使用します。

チームが小さい場合でもmainを保護する必要がありますか?

はい、2人のチームでもmainの保護は正当化されます。誤ったコマンドでの偶発的なプッシュが履歴を上書きする可能性があります。最小限の保護 — 直接プッシュの禁止とPRの要求 — は設定に5分かかり、データ復旧の数時間を防ぎます。

まとめ

  • Main / Master Branch — 安定したプロダクションコードを含むGitのメインブランチ。各コミットはリリースバージョンです。
  • masterからmainへの移行は2020年以降、業界標準となり、すべての主要なGitプラットフォームでサポートされています。
  • Git Flowはmainをリリースのみに使用し、GitHub Flowは継続的デプロイメントの中央ブランチにします。
  • mainの保護には6つのルールが含まれます:PR、承認、CI/CDチェック、最新状態、管理者包含、署名付きコミット。
  • SemVerを使用したmainの各リリースのタグ付けにより、アプリケーションの任意のバージョンへの迅速なアクセスが保証されます。
  • Hotfixブランチは緊急修正のためにmainから作成され、mainとdevelopの両方にマージされます。
  • 推奨事項:mainにマージするときは常に--no-ffを使用し、プロジェクトへの最初のコミットの前にブランチ保護ルールを設定してください。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください