コンテンツにスキップ

第9章 GitHub Organizationの管理

ここまではリポジトリ単位の管理を学んできました。
この章では視野を広げて、Organization 全体 の管理を学びましょう。

管理者の腕の見せどころです 👔


Organization は、複数のリポジトリとメンバーをまとめて管理するための仕組みです。
会社、チーム、OSSプロジェクトなど、グループ単位の開発 に使います。

flowchart TD
    ORG["🏢 Organization
(your-company)"] ORG --> T1["👥 Team: Frontend"] ORG --> T2["👥 Team: Backend"] ORG --> T3["👥 Team: DevOps"] T1 --> R1["📁 web-app"] T1 --> R2["📁 design-system"] T2 --> R1 T2 --> R3["📁 api-server"] T3 --> R1 T3 --> R3 T3 --> R4["📁 infrastructure"] style ORG fill:#F3E5F5,stroke:#8E24AA,color:#4A148C style T1 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style T2 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style T3 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
役割権限対象者
OwnerOrganization のすべての設定を管理CTO、管理責任者(最小限に)
MemberTeam 経由でリポジトリにアクセス一般の開発者
Billing Manager課金情報のみ管理経理担当
Outside Collaborator特定リポジトリのみアクセス外部パートナー

Team は、メンバーをグループ化して リポジトリへのアクセス権限 をまとめて管理する仕組みです。

Team は 入れ子(ネスト) にできます。
親 Team の権限は子 Team に 継承 されます。

flowchart TD
    E["🏢 engineering
(親Team)"] E --> FE["👥 frontend
(子Team)"] E --> BE["👥 backend
(子Team)"] E --> INFRA["👥 infrastructure
(子Team)"] FE --> FE_LEAD["👤 frontend-leads
(孫Team)"] style E fill:#F3E5F5,stroke:#8E24AA,color:#4A148C style FE fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style BE fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style INFRA fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
レベル説明
Readコードの閲覧、Issue / PR の作成
TriageIssue / PR の管理(ラベル、アサインなど)
Writeコードの push、PR のマージ
Maintainリポジトリ設定の一部管理(ブランチルールなど)
Adminリポジトリのすべての設定を管理
flowchart LR
    subgraph "Team → Repository 権限マッピング"
        FE["frontend
(Team)"] BE["backend
(Team)"] DO["devops
(Team)"] WA["web-app"] API["api-server"] INF["infrastructure"] end FE -- "Write" --> WA FE -- "Read" --> API BE -- "Read" --> WA BE -- "Write" --> API DO -- "Admin" --> WA DO -- "Admin" --> API DO -- "Admin" --> INF style FE fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style BE fill:#E8F5E9,stroke:#43A047,color:#1B5E20 style DO fill:#FFF3E0,stroke:#FB8C00,color:#E65100

権限は 3つの階層 から決まります。
より狭い範囲の設定が優先されます。

flowchart TD
    O["🏢 Organization
デフォルトの権限
(Base permissions)"] T["👥 Team
Team 経由の権限"] C["👤 Collaborator
個別の権限"] O --> T --> C P["⬇️ 下にいくほど優先度が高い"] style O fill:#F3E5F5,stroke:#8E24AA,color:#4A148C style T fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1 style C fill:#E8F5E9,stroke:#43A047,color:#1B5E20 style P fill:#FFF9C4,stroke:#F9A825,color:#F57F17

Organization Settings → Member privileges → Base permissions

設定おすすめ
No permission最も安全。
Team 経由でのみアクセス
Read社内リポジトリを全員が閲覧可能にしたい場合
Write⚠️ 全員が全リポジトリに push できてしまう

Organization 内で 誰が何をしたか を記録するログです。
セキュリティインシデントの調査や、コンプライアンス監査に使います。

Organization → Settings → Audit log

カテゴリイベント例
orgメンバーの追加・削除、役割変更
repoリポジトリの作成・削除・Visibility変更
teamTeam の作成・削除・メンバー変更
hookWebhook の作成・変更・削除
protected_branchBranch Protection の変更
integration_installationGitHub App のインストール
oauth_applicationOAuth アプリの認可
Terminal window
# GitHub CLI でAudit Logを取得
gh api \
-H "Accept: application/vnd.github+json" \
/orgs/your-org/audit-log?phrase=action:repo.create \
--paginate

Webhook は、GitHub でイベントが発生したときに 指定した URL に HTTP リクエストを送信 する仕組みです。

flowchart LR
    GH["GitHub
(イベント発生)"] WH["Webhook
(POST リクエスト)"] SV["外部サーバー
(Slack, CI, etc.)"] GH -- "push, PR, etc." --> WH --> SV style GH fill:#F3E5F5,stroke:#8E24AA,color:#4A148C style WH fill:#FFF3E0,stroke:#FB8C00,color:#E65100 style SV fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
連携先用途
SlackPR 作成やマージを通知
CI/CDpush をトリガーにビルド開始
社内ツールIssue 作成をタスク管理ツールに連携
監視ツールデプロイイベントを記録

GitHub Apps は Webhook よりも高度な連携ができるアプリケーションです。
API 操作、コメント投稿、ステータスチェックなどを プログラムから実行 できます。

項目WebhookGitHub Apps
方向GitHub → 外部(一方向)双方向
認証Secret で検証Installation Token
権限なし(通知のみ)細かく設定可能
API 操作不可可能
使いどころシンプルな通知高度な自動化

管理項目やるべきこと
Organization 設定Owner を最小限に、Base permissions を適切に
Team 設計組織構造に合わせた階層設計、最小権限
権限管理Team 経由でアクセス、個人への直接権限は避ける
Audit Log定期的な監査、不審なアクティビティの監視
Webhook / AppsSecret 設定、不要な連携の削除