コンテンツにスキップ

第6章 GitHubのリポジトリ管理

ここからは GitHub の機能を中心に学んでいきます。
管理者として、リポジトリを 安全で効率的な開発環境 に整えるのが目標です 🏗️


設定説明使いどころ
Public誰でも閲覧可能OSS、ポートフォリオ
Privateメンバーのみ閲覧可能社内プロジェクト
InternalOrganization 内で閲覧可能社内共有ライブラリ(Enterprise のみ)

新規プロジェクトの雛形として使えるリポジトリです。
Settings → Template repository にチェックを入れると、
「Use this template」ボタンが表示されます。

含めるべきもの:

  • .gitignore / .gitattributes
  • README のテンプレート
  • CI/CD ワークフロー(.github/workflows/
  • CODEOWNERS
  • Issue / PR テンプレート
  • エディタ設定(.editorconfig

開発が終了したリポジトリは アーカイブ して読み取り専用にできます。
Settings → Danger Zone → Archive this repository


重要なブランチ(main, develop など)を 誤った操作から守る ためのルールです。

flowchart TD
    A["開発者が main に
直接 push しようとする"] B{"Branch Protection
Rules"} C["❌ 拒否
PR 経由でマージしてください"] D["✅ PR 作成 → レビュー → マージ"] A --> B B -- "直接 push" --> C B -- "PR 経由" --> D style B fill:#FFF3E0,stroke:#FB8C00,color:#E65100 style C fill:#FFEBEE,stroke:#E53935,color:#B71C1C style D fill:#E8F5E9,stroke:#43A047,color:#1B5E20
ルール説明
Require a pull request before merging直接 push を禁止、PR 必須
Require approvals指定人数のレビュー承認を必須に
Dismiss stale PR approvals新しいコミットが push されたら承認をリセット
Require status checks to passCI のテストが通らないとマージ不可
Require branches to be up to dateベースブランチの最新を取り込み済みであること
Require signed commitsGPG 署名付きコミットを必須に
Require linear historyマージコミットを禁止(squash or rebase のみ)
Restrict who can push特定のチーム/ユーザーのみ push 可能
Do not allow bypassing管理者もルールをバイパスできない
flowchart TD
    subgraph "main ブランチの保護"
        R1["PR 必須 ✅"]
        R2["レビュー 2名以上 ✅"]
        R3["CI テスト通過必須 ✅"]
        R4["最新取り込み必須 ✅"]
        R5["force push 禁止 ✅"]
    end
    subgraph "develop ブランチの保護"
        R6["PR 必須 ✅"]
        R7["レビュー 1名以上 ✅"]
        R8["CI テスト通過必須 ✅"]
    end

    style R1 fill:#E8F5E9,stroke:#43A047,color:#1B5E20
    style R6 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1

項目Branch Protection RulesRulesets
適用範囲1リポジトリOrganization 横断可能
重複ルール1ブランチに1ルール複数ルールを重ねられる
バイパス管理者は自動バイパスバイパスリストで明示的に管理
対象ブランチのみブランチ + タグ
Push ルールなしフォークネットワーク全体に適用可能

Settings → Rules → Rulesets → New ruleset から作成します。

設定の流れは以下のとおりです。

flowchart TD
    A["① Ruleset 名を設定"]
    B["② ステータス(Active / Evaluate / Disabled)"]
    C["③ バイパスリストの設定
(誰がルールを迂回できるか)"] D["④ ターゲットの設定
(どのブランチ/タグに適用するか)"] E["⑤ ルールの選択
(PR必須、署名必須、CI必須 etc.)"] A --> B --> C --> D --> E style A fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style E fill:#E8F5E9,stroke:#43A047,color:#1B5E20

CODEOWNERS は、ファイルやディレクトリごとに 自動でレビュアーを割り当てる 仕組みです。
PR が作成されると、変更されたファイルに対応するオーナーが自動的にレビュアーに追加されます。

.github/CODEOWNERS
# デフォルトのオーナー(すべてのファイル)
* @your-org/core-team
# フロントエンドのコード
/src/frontend/ @your-org/frontend-team
*.tsx @your-org/frontend-team
*.css @your-org/frontend-team
# バックエンドのコード
/src/api/ @your-org/backend-team
/src/models/ @your-org/backend-team
# インフラ・CI/CD
/.github/workflows/ @your-org/devops-team
Dockerfile @your-org/devops-team
docker-compose.yml @your-org/devops-team
# ドキュメント
/docs/ @your-org/docs-team
*.md @taro-yamada
# セキュリティ関連(管理者が必ずレビュー)
.env.example @your-org/security-team
/src/auth/ @your-org/security-team
パターンマッチ対象
*すべてのファイル
*.jsすべての .js ファイル
/docs/ルート直下の docs ディレクトリ
src/どの階層の src/ でもマッチ
/src/api/**src/api 以下のすべて

PR をマージする際、GitHub では3つの方法を選べます。

flowchart TD
    subgraph "Merge commit"
        M1["A - B - C (feature)"] --> MM["M (マージコミット)"]
        M2["D - E (main)"] --> MM
    end
    subgraph "Squash and merge"
        S1["A - B - C (feature)"] --> SM["ABC' (1つにまとめ)"]
        S2["D - E (main)"] --> SM
    end
    subgraph "Rebase and merge"
        R1["A - B - C (feature)"] --> RM["A' - B' - C' (付け替え)"]
        R2["D - E (main)"] --> RM
    end

    style MM fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
    style SM fill:#E8F5E9,stroke:#43A047,color:#1B5E20
    style RM fill:#FFF3E0,stroke:#FB8C00,color:#E65100
方法履歴マージコミットおすすめ場面
Merge commit全コミットが残る作られる履歴を完全に保持したい
Squash and merge1コミットにまとまる作られないきれいな履歴を保ちたい
Rebase and merge直線的に並ぶ作られない直線的な履歴にしたい

Settings → General → Pull Requests セクションで、
許可するマージ方法を設定できます。


.github/pull_request_template.md
## 概要
<!-- この PR で何を変更しましたか? -->
## 変更の種類
- [ ] 新機能 (feat)
- [ ] バグ修正 (fix)
- [ ] リファクタリング (refactor)
- [ ] ドキュメント (docs)
- [ ] その他
## 関連 Issue
<!-- Closes #123 -->
## テスト
<!-- どのようにテストしましたか? -->
## スクリーンショット(該当する場合)
## レビュアーへのメモ
<!-- 特に見てほしいポイントなど -->
.github/ISSUE_TEMPLATE/bug_report.yml
name: バグ報告
description: バグを報告してください
title: "[Bug]: "
labels: ["bug"]
body:
- type: textarea
id: description
attributes:
label: バグの内容
description: 何が起きましたか?
validations:
required: true
- type: textarea
id: steps
attributes:
label: 再現手順
description: バグを再現する手順を教えてください
value: |
1. ...
2. ...
3. ...
validations:
required: true
- type: textarea
id: expected
attributes:
label: 期待する動作
- type: textarea
id: actual
attributes:
label: 実際の動作
- type: dropdown
id: severity
attributes:
label: 深刻度
options:
- "低:軽微な問題"
- "中:機能に影響あり"
- "高:主要機能が使えない"
- "緊急:本番障害"
ラベル用途
bug🔴 赤バグ報告
feature🟢 緑新機能
enhancement🔵 青改善
documentation🟡 黄ドキュメント
good first issue🟣 紫初心者向け
priority: high🔴 赤優先度高
status: in review🟠 橙レビュー中

タグ作成と連動して、リリースノート を公開できます。

Terminal window
# タグを作成して push
git tag -a v1.2.0 -m "Release v1.2.0"
git push origin v1.2.0
# GitHub CLI でリリースを作成
gh release create v1.2.0 \
--title "v1.2.0 - ログイン機能追加" \
--generate-notes
# ファイルを添付する場合
gh release create v1.2.0 ./dist/app.zip --title "v1.2.0"

機能管理者として確認すべきこと
Visibility適切な公開範囲になっているか
Branch Protection / Rulesets重要ブランチが保護されているか
CODEOWNERSレビュー体制が自動化されているか
マージ戦略チームで統一されているか
PR/Issue テンプレート情報が漏れなく集まる設計か
リリース管理バージョンとリリースノートが整備されているか