テック技報最新号へ →
インフラ

gh-infra: GitHub リポジトリの設定を YAML で宣言し、plan → apply で反映する

gh の拡張機能。Terraform のように差分を見てから適用できるが、HCL もステートファイルも要らない。GitHub 上の現在の設定そのものを「正」として毎回比較する。

@b4b4r07 · 2026-10-16
#infra#github#iac#gitops#cli

どんなときに使う?

  • 多数のリポジトリで、説明・トピック・機能(Issues / Wiki / Discussions)・マージ方式・ブランチ保護などをそろえたいとき
  • リポジトリ設定の変更を PR でレビューしたいとき
  • Terraform の GitHub プロバイダはステート管理が重いと感じるとき

やり方

  1. インストール
    gh extension install babarot/gh-infra
  2. 既存リポジトリの設定を YAML に書き出す
    gh infra import babarot/my-project > repos/my-project.yaml
  3. YAML を編集する
    yaml
    apiVersion: gh-infra/v1
    kind: Repository
    metadata:
      name: my-project
      owner: babarot
    spec:
      description: "My awesome project"
      visibility: public
      topics: [go, cli]
      features:
        wiki: false
        discussions: true
  4. 差分を見て反映する
    gh infra plan repos/       # 変更点を表示
    gh infra apply repos/      # 確認プロンプトのあと適用

    validate で YAML の構文とスキーマも確認できる。

複数リポジトリに同じ設定をそろえるなら kind: RepositorySet を使い、1 ファイルで多数のリポジトリを管理できる。

運用パターン

  • 中央管理: 設定専用リポジトリに YAML を集め、RepositorySet で組織全体をそろえる
  • 各リポジトリで自己管理: .github/infra.yaml を置き、main へのマージ時に GitHub Actions で gh infra apply .github/infra.yaml --auto-approve を流す

注意点

  • ステートがないぶん、YAML に書いていない設定は管理対象外。削除の扱いは事前に plan で確認する
  • apply に使うトークンには、対象リポジトリの管理権限が必要。Actions の GITHUB_TOKEN で足りない設定もありうる

出典

X の元の投稿を開く