0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Enterprise Cloud オンボーディングガイド:エンタープライズ開発基盤の構築

Posted at

GitHub Enterprise Cloud オンボーディングガイド:エンタープライズ開発基盤の構築

GitHub Enterprise Cloudは、大規模組織の開発チームに強力な協働環境を提供します。本記事では、トライアルの開始から本格運用まで、体系的なオンボーディングプロセスを解説します。技術的な詳細を押さえながら、実践的なアプローチで進めていきましょう。

目次

  1. エンタープライズの開始
  2. 組織とチームの構築
  3. サポート体制の確立
  4. ガバナンスとセキュリティ
  5. GitHub Appsによる自動化
  6. GitHub Actionsによるci/cd構築

1. エンタープライズの開始

1.1 エンタープライズタイプの選択

GitHub Enterprise Cloudには2つのエンタープライズタイプがあります。適切な選択が、その後の運用を大きく左右します。

Enterprise Managed Users(管理ユーザー)を選ぶべきケース:

  • ユーザー名やメールアドレスを含む、完全なアカウント管理が必要
  • SAML/OIDCによる真のSSO体験を提供したい
  • データ保存場所の選択が必要(データレジデンシー要件)
  • IdPとの「paved-path」統合を活用したい

Personal Accounts(個人アカウント)を選ぶべきケース:

  • ユーザーが既存のGitHubアカウントを使用できる柔軟性が必要
  • エンタープライズ外でのコラボレーションが頻繁に発生する
  • パブリックリポジトリ、Gists、GitHub Pagesサイトが必要
  • IdPの統合が複雑すぎる、または確立されたプロセスがない

重要な考慮事項:

  • Enterprise Managed Usersでは、パブリックコンテンツの作成やエンタープライズ外でのコラボレーションに制限があります
  • 既存のエンタープライズからEnterprise Managed Usersへの移行には、新しいエンタープライズアカウントが必要です
  • データレジデンシーが必要な場合、Enterprise Managed Usersが必須となります

1.2 トライアルの設定

30日間のトライアル期間で、主要な機能を実際に検証できます。

トライアルに含まれる機能:

  • GitHub Enterprise Cloudのほとんどの機能
  • GitHub Copilot Business
  • GitHub Secret Protection and Code Security
  • エンタープライズアカウント(複数組織の管理)
  • 最大50ライセンス

トライアルに含まれない機能:

  • GitHub Codespaces
  • GitHub Copilot Enterprise
  • GitHub Sponsors
  • 有料Marketplaceアプリ
  • GitHub Connect
  • Git Large File Storage
  • GitHub Actionsの増加した分数、ジョブ同時実行数、大型ランナー

支払い方法について:

  • トライアル開始に支払い方法は不要です
  • Copilot Businessを試用する場合のみクレジットカードが必要ですが、トライアル期間中は課金されません

トライアル中の組織管理:

  • 最大3つの新規組織を作成可能
  • 既存組織を無制限に転送可能(ただし、無料または有料のMarketplaceアプリがない組織に限る)
  • 転送された組織の請求はトライアル中一時停止されます

1.3 ユーザーの追加

エンタープライズタイプによって、ユーザー追加の方法が異なります。

Personal Accountsの場合:

Enterprise Managed Usersの場合:

  1. SAML または OIDC で認証を設定
  2. SCIM プロビジョニングを設定
  3. IdPからユーザーをプロビジョニング

IdPがユーザーライフサイクル全体を管理します:

  • 新規ユーザーアカウントのプロビジョニング
  • ユーザー名、プロファイルデータの管理
  • 組織メンバーシップとリポジトリアクセスの制御
  • IdPでの認証が必須

1.4 請求の理解

GitHub Enterprise Cloudの新しい請求プラットフォームは、柔軟な管理を提供します。

月次請求に含まれるもの:

  • ライセンス数: エンタープライズ内のユニークユーザー数で決定
  • 使用量課金: GitHub ActionsやCodespacesのプラン許容量を超えた分
  • 追加機能: Copilot、Advanced Securityなどの追加ライセンス

支払い方法の選択肢:

  • クレジットカード
  • PayPal
  • Microsoft Azureサブスクリプション
  • インボイス払い(Salesチーム経由の契約の場合)

新しい請求プラットフォームの機能:

  • 支出の見積もり
  • コストセンター作成による事業部門ごとの経費追跡
  • 必要なライセンス分の柔軟な支払い

1.5 移行の計画

既存のDevOpsソリューションから移行する場合、計画的なアプローチが重要です。

移行の主要ステップ:

移行元の例:

  • GitHub Enterprise Server
  • Bitbucket Server
  • GitLab
  • その他のコードホスティングプラットフォーム

重要な推奨事項:

GitHub Actionsへの移行は、リポジトリ移行と同時に行わないでください。CI/CD移行は別のステップとして後日実行することで、移行プロセスがより管理しやすくなります。


2. 組織とチームの構築

2.1 組織構造のベストプラクティス

組織の構造は、開発者体験に直接影響します。

組織を使用する2つの主要モデル:

  1. 関連する作業プロジェクトでグループ化

    • 特定のアプリケーションと関連サービスのリポジトリをまとめる
    • チームが効果的にコミュニケーションし、異なるリポジトリ間で貢献できる
  2. 類似したガバナンス要件でグループ化

    • 同様のポリシー、セキュリティ設定、アクセス制限が必要なリポジトリをまとめる
    • 組織レベルで必要な設定を大規模に適用

組織作成の原則:

組織作成時の注意点:

  • 追加は簡単ですが、削除は困難です
  • 多数の組織に分割することのトレードオフを理解する
  • 組織間では@メンション機能が使えません
  • 複数組織にまたがる検索は複雑になります

2.2 組織の設定

トライアル中に組織を追加する方法は2つあります。

方法1: 新しい組織を作成

Enterprise Managed Usersを選択している場合、この方法のみ使用できます。

# 組織作成の手順
手順:
  1. プロフィール写真 → Enterprise
  2. Organizationsタブをクリック
  3. "New organization"をクリック
  4: 
    - 組織名を入力
    - オプション: organization ownerを招待
  5. "Create organization"で完了

制限:
  - トライアル中: 最大3つの新規組織
  - Enterprise owner が自動的に organization owner になる

方法2: 既存組織を招待

Personal Accountsを使用している場合に利用可能です。

  • 他のエンタープライズに所属していない組織のみ招待可能
  • Organization ownersがメールで招待を受け取る
  • 承認前であれば、招待のキャンセルまたは再送信が可能

2.3 ロールの理解と設計

ロールは、エンタープライズのあらゆるレベルでアクセスと権限を安全に管理します。

ロールの階層構造:

事前定義ロールとカスタムロールの比較:

特徴 事前定義ロール カスタムロール
利用可能性 すべてのアカウント 作成が必要
権限範囲 事前定義された権限セット 選択可能なきめ細かい権限
柔軟性 固定 必要な権限のみを付与可能
Enterprise Owner, Billing Manager 監査ログ閲覧のみのロール

ロール設計の6ステップ:

  1. 利用可能なロールと権限を確認

    • 事前定義のエンタープライズロール
    • 事前定義の組織ロール
    • カスタムエンタープライズロール(現在は限定的、今後拡張予定)
    • カスタム組織ロール
  2. アカウントごとに2人のオーナーを特定

    • Enterprise ownersとOrganization ownersを決定
    • 最低2人を推奨(1人だけだとアクセス不能のリスク)
  3. 管理業務のためのロールを特定

    実践例:

    タスク ロールの例 目的
    監査 カスタムロール 監査ログへのアクセスのみ、設定変更不可
    認証 カスタムロール IdP管理者がSSO設定を独立して管理
    セキュリティ Enterprise Security Manager エンタープライズ全体のアラートとデータへアクセス
  4. 管理者以外の基本権限を特定

    全メンバーに役立つ権限の例:

    • 他のエンタープライズメンバーと管理者の閲覧
    • 監査ログの閲覧(透明性向上のため)
  5. アプリに作業を委任

    GitHub Appsは、人間のロールと同様に機能します:

    • 特定のタスク用のきめ細かい権限
    • 特定のリポジトリとアカウントへのスコープアクセス
    • 監査ログで追跡可能な独自のID
  6. エージェントにタスクを割り当て

    Copilot coding agentで頻繁なタスクを自動化:

    • Markdownファイル(エージェントプロファイル)で定義
    • 例:README作成、ユニットテスト生成

2.4 カスタムロールの作成

カスタムロールにより、企業のニーズに合わせた権限管理が可能になります。

エンタープライズカスタムロールの作成:

# エンタープライズカスタムロールの作成手順
権限の範囲:
  - 監査ログの閲覧
  - 組織の作成
  - その他のエンタープライズ設定のサブセット
  
注意事項: "GitHubは今後、利用可能な権限のリストを拡張予定"

作成手順:
  1. Enterprise → People → Enterprise roles
  2. Role management → Create custom role
  3: 
    name: "ロール名を入力"
    description: "説明を入力"
    type: "タイプを選択"
  4. Create role

組織カスタムロールの作成:

# 組織カスタムロールの作成手順
作成者: Enterprise owners
割り当て者: Organization owners
制限: エンタープライズあたり最大20個(各組織も別途20個作成可能)

作成手順:
  1. Enterprise → People → Organization roles
  2. Create custom role
  3:
    name: "ロール名を入力"
    description: "説明を入力"
    base_role: "ベースロールを選択"
    permissions: "追加権限を選択"
  4. Create role

2.5 エンタープライズチームの活用

エンタープライズチーム(パブリックプレビュー中)は、大規模なアクセスと権限管理を革新します。

チームの種類と特徴:

エンタープライズチームができること:

  • エンタープライズから直接Copilot Businessライセンスを受け取る
  • 事前定義およびカスタムエンタープライズロールを割り当て
  • 組織に追加され、組織管理者が追加のアクセスと権限を付与
  • ルールセットでバイパスアクセスを受け取る

現在サポートされていない機能:

  • 組織内でのチーム名の@メンション
  • プルリクエストでのチームへのレビューリクエスト
  • プロジェクトボードへのチーム追加
  • Personal accountsでのTeam sync
  • CODEOWNERステータス
  • シークレットチーム、ネストされたチーム、チームメンテナー

制限:

  • 1エンタープライズあたり最大2,500チーム
  • 各チームに最大5,000ユーザー
  • 各チームは最大1,000組織に割り当て可能

チーム作成の実践:

# エンタープライズチーム作成の手順
前提条件:
  - Enterprise owner または Organization owner 権限

手順:
  1. Enterprise → People → Enterprise teams
  2. Create Enterprise team
  3:
    name: "チーム名"
    description: "説明"
    organization_access: "組織へのアクセスを選択"
  4. Create Enterprise team

ユーザー追加の方法:
  手動追加:
    - Add members → ユーザー検索 → Add
  
  IdP同期: # Enterprise Managed Users のみ
    前提: "チームに手動割り当てユーザーがいないこと"
    手順:
      - Edit → Manage members → Identity provider group
      - Select group → Update team
    注意: "IdPグループが5,000ユーザーを超えると同期停止"
  
  API使用:
    - REST API endpoints for enterprise team memberships

IdP統合による自動管理:

Enterprise Managed Usersの場合、IdPグループとチームを同期できます:

2.6 ロールとチームの割り当て

効率的な権限管理のため、チームにロールを割り当てます。

割り当て可能なロールの種類:

1. App managers, Security managers, Custom rolesの割り当て:

# これらのロールはチームまたはユーザーに割り当て可能
注意: "Enterprise Security Managerロールはチームのみに割り当て可能"

手順:
  1. Enterprise → People → Enterprise roles
  2. Role assignments → Assign role
  3:
    target: "ユーザーまたはチームを選択"
    role: "ロールを選択"
  4. Assign role

権限変更の動作:
  Enterprise ownerが変更:
    - エンタープライズ内の組織によって自動承認
  
  App managerが変更:
    - App managerがOrganization ownerでもある組織で承認
    - 他の組織ではOrganization ownerが承認必要

2. Enterprise owners, Billing managers, Guest collaboratorsの割り当て:

これらは招待時またはIdPからのプロビジョニング時に設定されます。

3. 組織レベルのロール割り当て:

Enterprise ownersはエンタープライズ設定から組織レベルのロールを割り当てできません。Organization administratorが実施する必要があります。

2.7 インナーソースの実践

インナーソースは、オープンソース手法を内部開発に適用する実践です。

インナーソースの実装:

1. リポジトリを発見可能にする:

Internal visibility の設定:
  利点:
    - エンタープライズ内の任意の組織メンバーが閲覧可能
    - リポジトリ所有組織のメンバーである必要なし
  
  推奨: "機密情報を含まない限り、すべての従業員に見えるようにする"

ベース権限の設定:
  推奨: "最低でも Read ベース権限"
  効果:
    - すべての組織メンバーが任意のリポジトリを閲覧可能
    - 組織オーナーはチームで特定リポジトリの高いアクセスを付与

機密リポジトリの扱い:
  方法: "制限的なベース権限を持つ専用組織を設定"
  対象: "特定の少数のユーザーのみアクセス"

2. プロジェクトを文書化する:

文書化手段 用途 メリット
リポジトリREADME プロジェクト説明 コードのように検索可能
組織README 組織レベルの概要 プロジェクトの場所を示す
エンタープライズREADME 全体像の提供 高レベルの概要
GitHub Pagesサイト 正式な文書 包括的なドキュメント
Wiki 協働文書作成 簡単に編集可能
リポジトリトピック グループ化 検索性向上

3. 共有文化を構築する:

実践方法:
  Discussions:
    用途: "作業を他のチームに見えるようにする"
    効果: "チーム間のコミュニケーション促進"
  
  内部リポジトリ:
    共有内容:
      - Actions
      - 再利用可能なワークフロー
    参照方法: "エンタープライズ内の誰でも参照可能"
  
  GitHub Packages:
    用途: "再利用可能なコードの共有"
    利点: "セキュリティ機能の強化"
  
  テンプレートリポジトリ:
    用途: "共通テンプレートとフレームワーク"
    効果: "プロジェクトの素早い開始"

サポートモデル:
  推奨: "オープンソースプロジェクトと同様"
  要件:
    - 明確に定義されたメンテナーチーム
    - 異なるチームからの代表者を含む

4. 外部コラボレーターからコンテンツを保護する:


3. サポート体制の確立

3.1 サポートオプションの理解

GitHub Enterprise Cloudには、標準サポートとプレミアムサポートがあります。

Standard GitHub Support:

  • GitHub Enterpriseサブスクリプションに含まれる
  • 大企業やチーム向けにカスタマイズされた包括的なサポートと管理機能

GitHub Premium Support:

有料の補足サポートサービスで、以下の特徴があります:

2つのプレミアムプラン:

機能 Premium plan Premium Plus / Mission Critical Services plan
優先チケット処理
プレミアムコンテンツ
専任CRE -
四半期ヘルスチェック -
テクニカルアドバイザリー -
アップグレード支援 -

3.2 サポートポータルの使用

GitHub Support portalは、エンタープライズサポートの中心です。

開始手順:

前提条件:
  1. Enterprise ownerの特定:
     role: "GitHub.com上のエンタープライズアカウントオーナー"
  
  2. 検証済みドメインの設定:
     目的: "エンタープライズの真正性を確認"
     手順: "ドメインの検証または承認"
  
  3. サポート権限を持つユーザーの追加:
     roles:
       - Enterprise owners (自動付与)
       - Billing managers (自動付与)
       - Support-entitled members (手動追加)

機能:
  - シングルサインオン(SSO): "GitHubアカウントに接続"
  - チケット管理: "閲覧、作成、コメント"

3.3 サポート権限の管理

サポート権限により、誰がサポートチケットを作成できるかを制御します。

サポート権限の追加:

前提条件:
  - ユーザーがエンタープライズ所有の組織のメンバーであること

制限:
  Premium plan: "最大20メンバー"
  Premium Plus plan: "最大40メンバー"

手順:
  1. Enterprise → Settings → Support
  2: 
    action: "検索バーで名前またはユーザー名を入力"
    result: "マッチリストから選択"
  3. "Add support entitlement"をクリック

注意: "権限追加後、GitHub Support portalからサインアウトして再度サインインが必要な場合がある"

権限削除:
  対象: "Enterprise ownerまたはBilling managerでないメンバー"
  方法: "手動削除"

4. ガバナンスとセキュリティ

4.1 エンタープライズポリシーの理解

ポリシーは、ビジネスルールと規制コンプライアンスを実施する単一管理ポイントです。

ポリシーの仕組み:

ポリシー例:Base permissions

設定オプション:
  option1:
    name: "ポリシーを強制しない"
    効果: "Organization ownersが組織のベース権限を設定可能"
  
  option2:
    name: "特定のレベルを強制"
    : "Read を強制"
    効果: "すべての組織に Read ベース権限が適用される"

4.2 カスタムプロパティによるリポジトリ分類

カスタムプロパティは、リポジトリに情報を付加して管理を容易にします。

カスタムプロパティの特徴:

  • エンタープライズあたり最大100個のプロパティ定義
  • 許可値リストは最大200項目
  • プライベート(リポジトリへの読み取り権限を持つ人のみ閲覧可能)

使用例:

プロパティ名 用途
compliance_framework コンプライアンス分類 SOC2, HIPAA, PCI-DSS
data_sensitivity データ機密性 public, internal, confidential, restricted
project_status プロジェクト状態 active, maintenance, deprecated
team_owner 所有チーム platform-team, security-team

カスタムプロパティの作成:

許可される文字:
  名前: "a-z, A-Z, 0-9, _, -, $, #"
  : '「"」を除くすべての印刷可能なASCII文字'

作成手順:
  1. Enterprise → Policies → Custom properties
  2. New property
  3:
    name: "プロパティ名(最大75文字、スペース不可)"
    description: "説明"
    type: "タイプを選択"
    options:
      allow_repository_actors: "リポジトリアクターが設定可能"
      require_for_all: "すべてのリポジトリに必須"
      default_value: "デフォルト値"
  4. Save property

値の設定権限:
  Enterprise owners:
    - 必須プロパティのデフォルト値を設定
  
  Organization owners:
    - 組織内で、リポジトリ全体または個別に値を設定
    - カスタムプロパティ値でリポジトリを検索可能
  
  リポジトリアクセス権を持つユーザー:
    条件: "allow_repository_actorsが有効な場合"
    権限: "自分のリポジトリのプロパティ値を設定・更新"

4.3 リポジトリポリシーの定義

リポジトリポリシー(パブリックプレビュー中)は、リポジトリライフサイクルを管理します。

制限できる内容:

実用例:

例1_命名規則の強制:
  目的: "すべての新しいリポジトリでkebab-caseを使用"
  pattern: "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$"
  効果: "my-repo-name は許可、MyRepoName は拒否"

例2_削除の制限:
  目的: "組織管理者以外によるリポジトリ削除を防止"
  設定:
    policy: "Restrict deletions"
    allow_list: ["Organization Admin"]

例3_パブリックリポジトリの制限:
  目的: "open source組織でのみパブリックリポジトリ作成を許可"
  設定:
    policy: "Restrict visibility"
    target_organizations: ["open-source"]
    allowed_visibilities: ["public"]

例4_可視性変更の防止:
  目的: "メタデータ損失を避けるため、パブリックからプライベートへの変更を防止"
  設定:
    policy: "Prevent visibility changes"
    from: "public"
    to: "private"

リポジトリポリシーの作成:

制限: "組織ごと、エンタープライズごとに最大75個のポリシーとルールセット"

作成手順:
  1. Enterprise → Policies → Repository
  2. New policy
  3:
    policy_name: "説明的な名前(例: Prevent public repos on production)"
    enforcement_status:
      - Disabled: "作成時に適用しない"
      - Active: "作成時に適用"
    allow_list: "このポリシーをバイパスできるロール"
    targets:
      organizations:
        - "すべての組織"
        - "既存組織の選択"
        - "動的リスト(fnmatch構文)"
      repositories:
        - "すべてのリポジトリ"
        - "カスタムプロパティによる動的リスト"
    policies: "含める制限を選択"
  4. Create

命名制限の設定:
  pattern_syntax: "正規表現(RE2構文)"
  validation: "Test pattern で検証可能"

委任バイパスの設定:

機能: "リポジトリポリシーの委任バイパス(パブリックプレビュー中)"

用途:
  - リポジトリの削除
  - 可視性の変更

仕組み:
  1:
    actor: "リポジトリ管理者"
    action: "変更リクエストを送信"
  2:
    actor: "指定されたレビュアーグループ"
    action: "承認または拒否"
  3:
    承認された場合: "変更が即座に完了"
    拒否された場合: "変更は行われないが、再リクエスト可能"

設定:
  1: "Enterprise ownersまたはOrganization ownersがバイパスリストを作成"
  2: "特定のロールとチーム(チームまたはリポジトリ管理者など)を含める"

4.4 ルールセットによるブランチ保護

ルールセットは、コードガバナンスポリシーをエンタープライズ全体に適用します。

ルールセットの種類:

適用状態の活用:

状態 動作 用途
Active ルールセットが適用される 本番環境での使用
Evaluate 適用されないが、違反を監視 テストとモニタリング
Disabled 適用も評価もされない 一時的な無効化

Evaluateモードの活用:

推奨される使用方法:
  1. ルールセットをEvaluateモードで作成
  2. Rule Insightsページで影響を確認:
     - どのアクションがルールに違反するか
     - どのユーザー/チームが影響を受けるか
  3. 必要に応じてルールを調整
  4. Activeモードに切り替え

メリット:
  - 本番環境への影響なくテスト可能
  - チームへの事前通知と準備時間を提供
  - ルールの妥当性を検証

ルールセットの作成:

作成手順:
  1. Enterprise → Policies → Code
  2. New ruleset
  3:
    type:
      - "New branch ruleset: ブランチをターゲット"
      - "New tag ruleset: タグをターゲット"
  4:
    ruleset_name: "ルールセット名"
    enforcement_status: "Disabled/Evaluate/Active"
    targets: "対象組織とリポジトリ"
    rules: "適用するルール"
  5. Create

4.5 監査ログの活用

監査ログは、エンタープライズのアクティビティを追跡する強力なツールです。

監査ログの特徴:

  • 過去180日間のイベントを保持
  • Gitイベントは7日間保持
  • デフォルトでは過去3か月のイベントを表示

監査ログエントリに含まれる情報:

基本情報:
  - エンタープライズまたは組織
  - アクションを実行したユーザー(アクター)
  - アクションの影響を受けたユーザー
  - 対象リポジトリ
  - 実行されたアクション
  - 発生国
  - 日時

認証情報:
  - SAML SSOとSCIM ID
  - Web UI外のアクションの認証方法
  - ソースIPアドレス(オプション)

エントリ形式:
  pattern: "カテゴリ.操作タイプ"
  : "repo.create = repoカテゴリのcreate操作"

監査ログの使用方法:

代替手段:Webhooks:

Webhooksの利点:
  用途: "特定のイベントが発生したときの通知"
  効率: "APIポーリングより効率的"
  
  適切なユースケース:
    - リアルタイムのイベント通知が必要
    - 特定のイベントタイプのみ監視
    - 外部システムとの統合

監査ログの利点:
  用途: "包括的な履歴とコンプライアンス"
  
  適切なユースケース:
    - 過去のアクティビティの調査
    - コンプライアンスレポート
    - 詳細な分析

4.6 エンタープライズセキュリティ

GitHubは、コードの品質を向上・維持する多くのセキュリティ機能を提供します。

セキュリティ機能の階層:

セキュリティ機能の概要:

機能 説明 プラン
Dependency graph 依存関係の可視化 すべて
Dependabot alerts 脆弱性の通知 すべて
Code scanning コードの脆弱性検出 Advanced Security
Secret scanning 認証情報の検出 Advanced Security
Dependency review プルリクエストでの依存関係レビュー Advanced Security

5. GitHub Appsによる自動化

5.1 エンタープライズアプリの作成

GitHub Appsは、エンタープライズレベルのリソースにアクセスし、ワークフローを自動化します。

エンタープライズアプリの特徴:

  • エンタープライズアカウント配下で作成
  • エンタープライズまたはエンタープライズ内の組織にのみインストール可能
  • エンタープライズメンバーのみが承認可能
  • ユーザーアカウントにはインストール不可

作成プロセス:

Step 1: GitHub Appの登録

登録方法:
  1. アプリの新規登録
  2. メンバーまたは組織からの移転

権限の管理:
  Enterprise owners:
    - アプリの権限をいつでも変更可能
  
  App managers:
    - アプリの設定と認証情報を管理
    - アプリのインストールは不可
  
  権限変更の承認:
    Enterprise ownerが変更:
      - エンタープライズ内の組織で自動承認
    
    App managerが変更:
      - App managerがOrganization ownerの組織でのみ承認
      - 他の組織ではOrganization ownerが承認必要

Step 2: コードの記述

実装例:
  quickstart: "GitHub Appsのクイックスタート"
  webhook_response: "Webhookイベントへの応答"
  login_button: "Login with GitHub ボタンの構築"
  cli_tool: "CLIツールの構築"
  github_actions: "GitHub Actionsワークフローでの認証済みAPIリクエスト"

ベストプラクティス:
  - 最小権限の原則に従う
  - エラーハンドリングを適切に実装
  - レート制限を考慮
  - セキュリティを最優先

Step 3: 承認またはインストール

承認が必要なアプリ:
  : "Copilot extensions"
  動作:
    - エンタープライズ内のユーザーが承認
    - 組織内のリソースへのアクセスが可能
    - インストールされている場所のみアクセス可能

インストールが必要なアプリ:
  方法: "インストールリンクを提供"
  効果:
    - アプリがインストールされると組織のリソースにアクセス
    - Organization ownersがインストール

5.2 エンタープライズアプリのインストール

Enterprise-installed GitHub Apps(パブリックプレビュー中)は、エンタープライズアカウント自体を管理します。

Enterprise-installed GitHub Appsの特徴:

インストール要件:

必須条件:
  1: "GitHub Appがエンタープライズレベルの権限をリクエスト"
  2: "アプリはエンタープライズまたはエンタープライズ内の組織が所有"

制限:
  - "エンタープライズ外のアカウントが所有するアプリはインストール不可"

Enterprise-installed appsができること:

現在サポートされているAPI:
  - エンタープライズ内の組織のリスト表示と作成
  - エンタープライズ内のユーザー管理
  - 組織内のGitHub Appインストールの作成と管理
  - エンタープライズカスタムリポジトリプロパティの管理
  - エンタープライズSCIM APIの呼び出し

レート制限:
  基準: "GitHub Enterprise Cloud組織と同じ"
  適用: "インストールごと"
  : "エンタープライズと2つの組織にインストール = 3つの独立したレート制限"

現在の制限事項:

項目 現状 今後の予定
APIサポート 限定的 拡張予定
Webhookサポート 未対応 組織/リポジトリレベルで使用
組織アクセス 付与されない 各組織に個別インストール必要

6. GitHub ActionsによるCI/CD構築

6.1 GitHub Actionsの基礎

GitHub Actionsは、ソフトウェア開発ワークフローのすべてのフェーズを自動化します。

主要コンポーネント:

1. イベント (Events):

リポジトリ内の特定のアクティビティでワークフロー実行をトリガー

イベント例:
  - pull_request: "プルリクエストの作成"
  - push: "リポジトリへのプッシュ"
  - issues: "イシューのオープン"
  - schedule: "定期実行"
  - workflow_dispatch: "手動実行"
  - repository_dispatch: "REST API経由"

2. ワークフロー (Workflows):

1つ以上のジョブを実行する設定可能な自動化プロセス

# .github/workflows/example.yml
name: "CI/CDパイプライン"

on:
  pull_request:
    branches: [ main ]
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: "依存関係のインストール"
        run: npm install
      - name: "テスト実行"
        run: npm test

3. ジョブ (Jobs):

同じランナー上で実行されるステップのセット

ジョブの特徴:
  - デフォルトで並列実行
  - 依存関係を設定可能(needs キーワード)
  - 同じランナー上でデータ共有が可能

例_並列ビルド:
  jobs:
    build-linux:
      runs-on: ubuntu-latest
    build-windows:
      runs-on: windows-latest
    build-macos:
      runs-on: macos-latest
    
    package:
      needs: [build-linux, build-windows, build-macos]
      runs-on: ubuntu-latest

4. アクション (Actions):

複雑だが頻繁に繰り返されるタスクを実行するカスタムアプリケーション

アクションの用途:
  - Gitリポジトリのプル
  - ビルド環境のセットアップ
  - クラウドプロバイダーへの認証

アクションの入手先:
  - GitHub Marketplace: "10,000以上のアクション"
  - 独自開発: "組織固有のニーズに対応"
  - 内部共有: "エンタープライズ内で再利用"

例_アクションの使用:
  steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: '20'
    - uses: actions/cache@v4
      with:
        path: ~/.npm
        key: npm-${{ hashFiles('**/package-lock.json') }}

5. ランナー (Runners):

ワークフローがトリガーされたときに実行するサーバー

GitHub-hosted runners:
  OS:
    - Ubuntu Linux
    - Microsoft Windows
    - macOS
  特徴:
    - GitHubが維持・アップグレード
    - 新しくプロビジョニングされた仮想マシン
    - larger runners も利用可能
  課金: "プランの許容量超過分"

Self-hosted runners:
  設定可能項目:
    - オペレーティングシステム
    - ハードウェア構成
    - ネットワーク設定
  追加レベル:
    - リポジトリレベル
    - 組織レベル
    - エンタープライズレベル
  課金: "無料"

6.2 GitHub Actionsのロールアウト計画

体系的なアプローチで、GitHub Actionsを段階的に導入します。

1. ガバナンスとコンプライアンス:

許可するアクションの決定:
  選択肢:
    - GitHub作成のアクションのみ
    - 検証済みクリエイターのアクション
    - 特定のアクションリスト
  
  設定レベル:
    - リポジトリレベル
    - 組織レベル
    - エンタープライズレベル

OIDC + 再利用可能なワークフロー:
  利点: "クラウドロールに基づいて信頼条件を定義"
  効果: "一貫したデプロイメントの強制"

監査ログ:
  保持期間: "180日間"
  延長が必要な場合: "GitHub外へのエクスポートとストレージを計画"

カスタム組織ロール:
  用途: "CI/CDパイプラインの設定へのアクセス管理"
  原則: "最小権限"

2. セキュリティ:

ワークフローとリポジトリのセキュリティ強化:
  計画: "優良なセキュリティプラクティスを実施"
  推奨: "セキュリティ評価済みのワークフローの再利用"

シークレット管理:
  保存場所:
    - GitHub: "リポジトリまたは組織レベル"
    - クラウドプロバイダー
  
  制限:
    environment: "本番、テストなど特定の環境"
    approval: "機密性の高い環境には手動承認保護"

サードパーティアクション:
  リスク: "大きなリスクが存在"
  対策:
    - 内部ガイドラインの作成
    - アクションを完全なコミットSHAにピン留め
    - セキュリティレビュー

プライベートネットワーキング:
  方法: "Azure VNETでGitHub-hosted runnersを使用"
  利点:
    - GitHub管理のインフラストラクチャ
    - ランナーのネットワーキングポリシーを完全制御

3. インナーソーシング:

エンタープライズ全体でのアクション共有:
  方法:
    - 内部リポジトリにアクションを保存
    - 他のリポジトリのワークフローへのアクセスを許可
  範囲: "同じ組織またはエンタープライズ内の任意の組織"

再利用可能なワークフロー:
  利点:
    - 正確な重複を回避
    - よく設計され、テスト済みのワークフローを使用
    - ベストプラクティスの促進

ワークフローテンプレート:
  用途: "新しいワークフローの出発点"
  効果:
    - 開発者の時間を節約
    - エンタープライズ全体の一貫性

4. リソース管理:

Self-hosted runnersの決定事項:

マシンタイプ:
  物理マシン:
    注意: "前のジョブの残骸が残る"
  
  仮想マシン:
    推奨: "各ジョブで新しいイメージを使用、またはジョブ後にクリーンアップ"
  
  コンテナ:
    注意: "ランナーの自動更新でコンテナがシャットダウン"
    対策: "自動更新を防止、またはコンテナ終了コマンドをスキップ"

追加場所:
  個別リポジトリ: "特定のリポジトリ専用"
  組織全体: "ランナーの共有"
  エンタープライズ全体: "最大限の共有"
  
  利点: "組織またはエンタープライズレベルでの追加により、インフラストラクチャサイズを削減"

アクセス制御:
  方法: "ポリシーを使用してランナーグループを特定のリポジトリや組織に割り当て"

自動スケーリング:
  推奨: "利用可能なself-hosted runnersの数を自動的に増減"

セキュリティ強化:
  重要性: "Self-hosted runnersのセキュリティ強化を検討"

ストレージ:

Artifacts:
  用途:
    - ワークフロー内のジョブ間でデータを共有
    - ワークフロー完了後にデータを保存

キャッシング:
  用途: "依存関係をキャッシュしてワークフロー実行を高速化"
  
  :
    - npm パッケージ
    - Maven 依存関係
    - Docker レイヤー

ポリシー設定:
  カスタマイズ可能:
    - ワークフローアーティファクトのストレージ
    - キャッシュ
    - ログ保持

コスト:
  含まれる: "サブスクリプションに一部含まれる"
  追加: "追加ストレージは請求に影響"
  計画: "このコストを事前に計画"

5. 使用状況の追跡:

追跡すべき項目:
  - ワークフローの実行頻度
  - 成功・失敗した実行の数
  - どのリポジトリがどのワークフローを使用しているか

基本的な使用状況:
  場所: "請求設定"
  内容: "各組織のストレージとデータ転送使用量"

詳細な使用データ:
  方法: "Webhooksを使用"
  購読内容:
    - ワークフロージョブ
    - ワークフロー実行
  
  データアーカイブ:
    推奨: "WebhookからデータアーカイブシステムへのGitHub情報の渡し方を計画"
    ツール: "CEDAR.GitHub.Collector(オープンソース)の使用を検討"
  
  チームアクセス:
    計画: "チームがアーカイブシステムから必要なデータを取得できる方法"

6.3 GitHub Actionsへの移行

既存CI/CDシステムからGitHub Actionsへの移行を計画的に実施します。

移行計画の策定:

1. 移行専門家の活用:

サポート:
  - GitHubが移行を支援
  - GitHub Professional Servicesの購入を検討
  
連絡先: "専任担当者またはGitHubのSalesチーム"

2. 移行ターゲットの特定とインベントリ作成:

手順:
  1. 既存のビルドおよびリリースワークフローのインベントリを作成
  2:
    収集情報:
      - どのワークフローがアクティブに使用されているか
      - 移行が必要なワークフロー
      - 放置できるワークフロー
  
  3. 現在のプロバイダーとGitHub Actionsの違いを学習
  4:
    評価項目:
      - 各ワークフローの移行における困難さ
      - 機能の違い
  
  5. 移行できる、移行したいワークフローを判断

3. チームへの影響判断:

考慮事項:
  開発者の日常業務:
    - ワークフローの移行が開発者の作業にどう影響するか
  
  プロセスと統合:
    - 影響を受けるプロセス、統合、サードパーティツールを特定
    - 必要な更新の計画を立てる
  
  コンプライアンス:
    - 既存の認証情報スキャンとセキュリティ分析ツールの互換性
    - 新しいツールの必要性
  
  ゲートとチェック:
    - 既存システムのゲートとチェックを特定
    - GitHub Actionsでの実装可能性を検証

4. 移行ツールの特定と検証:

GitHub Actions Importer:
  機能:
    - 各種サービスからGitHub Actionsへの移行を計画、スコープ、実行
    - サポートされる各種サービスからのCIパイプライン移行
  
  検証方法:
    1. テストワークフローでツールを実行
    2. 結果が期待通りか確認
    3. 手動作業量を見積もる
  
  注意: "自動ツールは大部分を移行できるが、少なくとも小さな割合は手動で書き直す必要がある"

5. 移行アプローチの決定:

小規模チーム:
  アプローチ: "Rip-and-replace"
  方法: "すべてのワークフローを一度に移行"

大規模エンタープライズ:
  アプローチ: "反復的アプローチ"
  方法: "段階的に移行"

推奨アプローチ_反復的:
  1_早期採用者:
    - 小規模グループから開始
    - 内部チャンピオンとして機能
  
  2_包括的なワークフロー選択:
    - ビジネスの幅を表すワークフローを特定
  
  3_協力して移行:
    - 早期採用者と協力してワークフローを移行
    - 必要に応じて反復
    - 他のチームに確信を与える
  
  4_大規模展開:
    - GitHub Actionsを大規模組織に利用可能に
    - チームが独自のワークフローを移行するためのリソース提供
    - 既存システムの廃止を通知
  
  5_完全移行:
    - 旧システムを使用しているチームに特定期間内の移行を通知
    - 他のチームの成功例を指摘

6. 移行スケジュールの定義:

手順:
  1. 移行完了希望日を決定:
     : "現在のプロバイダーとの契約終了時"
  
  2. チームと協力してスケジュールを作成:
     考慮事項:
       - 期限を満たす
       - チーム目標を犠牲にしない
  
  3. ビジネスのペースを確認:
     - 各チームのワークロード
     - 配信スケジュール
  
  4. 調整:
     - チームの配信能力に影響を与えない時期を選択

移行実行:

実行内容:
  - 自動ツールと手動書き直しで既存ワークフローを変換
  - 既存システムからの古いビルドアーティファクトの維持を検討

並行運用:
  推奨: "両システムを一定期間並行運用"
  目的: "GitHub Actions設定が安定していることを確認"
  確認項目: "開発者体験の劣化がないこと"

最終廃止:
  - 古いシステムを廃止してシャットダウン
  - エンタープライズ内の誰も古いシステムを再起動できないようにする

6.4 GitHub Actions for Enterprise Cloudの開始

GitHub ActionsはGitHub Enterprise Cloudでデフォルトで有効です。

初期設定の3ステップ:

1_ポリシー管理:
  制御内容:
    - エンタープライズメンバーのGitHub Actions使用方法
    - 許可されるアクション
    - アーティファクトとログ保持
  
2_ランナーの追加:
  選択肢:
    GitHub-hosted:
      課金: "プランの分数使い果たし後、消費量ベース"
    
    Self-hosted:
      課金: "無料"
      追加レベル: "エンタープライズ、組織、リポジトリ"

3_きめ細かい権限のプロビジョニング:
  対象: "組織内のユーザーとチーム"
  原則: "最小権限でCI/CDパイプラインの設定を保護"

GitHub Actions用の権限:

権限名 アクセス内容
Manage organization Actions policies Actions General設定ページのすべての設定(self-hosted runners設定を除く)
Manage organization runners and runner groups GitHub-hosted runners、self-hosted runners、runnerグループの作成と管理
Manage organization Actions secrets Actions組織シークレットの作成と管理
Manage organization Actions variables Actions組織変数の作成と管理

まとめ

GitHub Enterprise Cloudのオンボーディングは、体系的なアプローチによって確実に成功させることができます。本記事で解説した6つのステージ(エンタープライズの開始、組織とチームの構築、サポート体制の確立、ガバナンスとセキュリティ、GitHub Appsによる自動化、GitHub ActionsによるCI/CD構築)を順に進めることで、エンタープライズレベルの開発基盤を構築できます。

重要なのは、各組織の要件に合わせて柔軟にアプローチを調整することです。トライアル期間を活用して実際の運用を検証し、段階的に本格導入を進めてください。技術的な詳細と実践的なベストプラクティスを理解することで、GitHub Enterprise Cloudの機能を最大限に活用した開発環境を実現できます。

オンボーディングの要点:

各ステージを着実に進めることで、セキュアで効率的な開発環境を構築し、チームの生産性を最大化することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?