Microsoft AzureのBuild GitHub repositories – Azure Pipelinesは何が変わる?確認ポイントを解説

Azure PipelinesでGitHubリポジトリをビルドしている場合、まず押さえるべき結論は「GitHub連携そのものが廃止されるわけではないが、Azure DevOpsのパブリックプロジェクトを前提にした公開OSS運用は見直しが必要」という点です。Build GitHub repositories - Azure Pipelinesは、GitHubへのコミットやプルリクエストをAzure Pipelinesで自動ビルド・検証するための公式ドキュメントで、管理者は認証方式、PRトリガー、フォークからのビルド、公開ログ、移行方針をセットで確認する必要があります。(Microsoft Learn)

特に2026年5月時点の公式情報では、Azure DevOpsのPublic Projectsが廃止され、新しいパブリックプロジェクトは作成できなくなっています。既存のパブリックプロジェクトも2027年にプライベートへ自動変換される予定のため、オープンソース開発でビルド結果やログを外部公開しているチームは、GitHub側への公開運用・移行を検討すべきです。(Microsoft Learn)

目次

Build GitHub repositories – Azure Pipelinesで何が変わるのか

Build GitHub repositories - Azure Pipelinesの中心は、GitHubリポジトリとAzure Pipelinesを連携し、CIビルドやPR検証を動かす設定です。今回の実務上のポイントは、GitHub連携機能そのものの終了ではありません。変化の核心は、Azure DevOpsのパブリックプロジェクト廃止により、「Azure DevOps側を公開プロジェクトとして使い、外部コントリビューターにビルド結果やログを見せる」という運用が今後成り立ちにくくなる点です。(GitHub)

整理すると、影響は次のように分けて考えると判断しやすくなります。

確認項目変更・注意点すぐ確認すべき人
GitHubリポジトリのCI/PRビルドAzure Pipelinesで引き続き利用可能開発者、DevOps担当
GitHub App連携推奨される認証方式。GitHub Checksにも対応Azure DevOps管理者、GitHub Organization管理者
OAuth/PAT連携個人IDに依存するため、退職・権限変更・PAT失効の影響を受けやすい管理者、セキュリティ担当
Public Projects新規作成不可。既存プロジェクトは2027年にプライベートへ自動変換予定OSS運営者、プロジェクト管理者
外部公開ログ・ステータスバッジ匿名アクセスや外部リンクが使えなくなる可能性OSSメンテナー、広報・ドキュメント担当
フォークPRのビルドシークレット漏えいリスクを踏まえた制御が必要セキュリティ担当、CI管理者

対象になるチームと、影響が小さいチーム

今回の情報で優先的に確認すべきなのは、次のようなチームです。

チームの状況影響度理由
GitHubのOSSリポジトリをAzure Pipelinesで検証している外部コントリビューター、公開ログ、フォークPRの運用に影響しやすい
Azure DevOpsのPublic Projectを使っている2027年のプライベート変換に備える必要がある
GitHub AppではなくOAuthやPATで接続している中〜高個人アカウント依存のため、権限変更でビルドが止まりやすい
Azure DevOpsのプライベートプロジェクトだけで社内開発しているすぐに移行が必要とは限らないが、認証方式とトリガー設定の棚卸しは必要
GitHub Actionsへすでに移行済みAzure Pipelines側の公開プロジェクト影響は限定的。ただしAzure DevOps連携が残っていないか確認する

社内向けのプライベートプロジェクトで、GitHub Appを使い、ビルドログも組織内だけで参照している場合、直ちに大きな変更作業が必要になるとは限りません。一方で、Azure PipelinesのステータスをGitHubの必須チェックとして使っている場合は、認証方式とステータス反映の仕組みを確認しておくべきです。

GitHub連携ではGitHub App認証を優先する

Azure PipelinesからGitHubリポジトリへアクセスする方法には、主にGitHub App、OAuth、Personal Access Tokenの3種類があります。公式ドキュメントでは、継続的インテグレーション用の推奨認証方式としてAzure Pipelines GitHub Appが示されています。GitHub Appを使うと、ビルドやステータス更新は個人のGitHub IDではなくAzure PipelinesのIDで実行され、GitHub Checksにも対応します。(Microsoft Learn)

認証方式実行・更新に使われるIDGitHub Checks対応実務上の判断
GitHub AppAzure PipelinesのID対応原則として第一候補
OAuth個人のGitHub ID非対応小規模・一時利用なら可。ただし属人化に注意
PAT個人のGitHub ID非対応権限を絞れるが、期限・失効・漏えい管理が必要

管理者が特に注意したいのは、GitHub Appのインストール範囲です。すべてのリポジトリにアプリを入れると管理は楽になりますが、 privateリポジトリを含む広い範囲にトークンがアクセスできる状態になります。公開用と非公開用のGitHub Organizationを分ける、またはアプリのアクセス対象を必要なリポジトリだけに限定するほうが安全です。(Microsoft Learn)

既存パイプラインで確認する場所

Azure DevOps側では、対象パイプラインの編集画面からGitHub接続の種類を確認できます。サービス接続の種類がGitHub Appなのか、OAuthなのか、PATなのかを棚卸しし、属人化している接続はGitHub Appへ切り替える計画を立てましょう。

確認時の観点は次の通りです。

確認ポイント問題がある例推奨対応
サービス接続の所有者退職予定者や個人アカウントのPATで接続GitHub Appへ移行
GitHub Appの対象範囲Organization内の全リポジトリに無条件で付与必要なリポジトリに限定
ステータスチェックGitHubのPRに古い形式のステータスだけが出るGitHub App + Checksを利用
接続名github-connection-1のように用途不明Organization名・リポジトリ名・用途を含める

CIトリガーは「何も書かないと動く」と思い込まない

Azure PipelinesのYAMLパイプラインでは、条件によっては全ブランチにCIトリガーが有効になります。ただし、組織またはプロジェクトでDisable implied YAML CI triggerが有効な場合、YAMLにtriggerセクションがないパイプラインは自動的にCI実行されません。既定ではこの設定は有効ではありませんが、管理者が組織ポリシーとして変更している可能性があります。(Microsoft Learn)

安全に運用するなら、「暗黙の既定値」に頼らず、YAMLに明示的なトリガーを書くのがおすすめです。

trigger:
  branches:
    include:
      - main
      - releases/*
  paths:
    include:
      - src/**
      - tests/**
    exclude:
      - docs/**
      - README.md

この例では、mainreleases/*への変更のうち、srcまたはtests配下の変更だけでCIが動きます。ドキュメント修正だけでビルドを走らせたくない場合や、モノレポで不要なビルドを減らしたい場合に有効です。

よくある失敗

失敗例原因対策
YAMLにtriggerを書いていないのにCIが動かないDisable implied YAML CI triggerが有効triggerを明示する
パスフィルターが効かない大文字・小文字の不一致実際のフォルダー名と完全一致させる
テンプレートにトリガーを書いたが動かないトリガーはメインYAMLに定義する必要があるルートのパイプラインYAMLに書く
変数でブランチ名を切り替えたいトリガーは実行前に評価されるため変数を使えない静的なブランチ・パス条件にする

パスフィルターでは、リポジトリのルートからの相対パスを指定します。また、Gitのパスは大文字・小文字を区別します。Src/**src/**を混同すると、意図したタイミングでビルドが動かない原因になります。(Microsoft Learn)

PRトリガーは「どのYAMLが評価されるか」を理解する

GitHubのPR検証では、対象ブランチに向けたプルリクエストが作成・更新されたときにパイプラインを実行できます。prトリガーを明示すると、検証対象のブランチやパスを制御できます。(Microsoft Learn)

pr:
  autoCancel: true
  branches:
    include:
      - main
      - releases/*
  paths:
    include:
      - src/**
      - tests/**
    exclude:
      - docs/**
  drafts: false

この例では、mainまたはreleases/*に向けたPRのうち、ソースやテストに関係する変更だけを検証します。drafts: falseを指定しているため、ドラフトPRではビルドを走らせません。PR更新時に古い検証をキャンセルしたい場合は、既定のautoCancel: trueが適しています。(Microsoft Learn)

注意すべきなのは、GitHubのPR検証ではマージコミットを指す参照が作られ、その内容に基づいてパイプラインが実行されることです。つまり、ソースブランチ側でYAMLを変更すると、ターゲットブランチ側で想定していた動作と違う検証になる場合があります。(Microsoft Learn)

[skip ci]だけではPR検証を止められないことがある

コミットメッセージに[skip ci]を含めると、通常のCI実行をスキップできます。ただし、PRトリガーで対象ブランチの検証として動くパイプラインは、PRのマージコミットに対して実行されるため、単純なCIスキップとは挙動が異なります。PR検証を止めたい場合は、pr: noneやパスフィルター、UI側のトリガー設定も含めて制御してください。(Microsoft Learn)

pr: none

ただし、PR検証を完全に無効化すると、GitHubのブランチ保護や必須チェックとの整合性が崩れる可能性があります。無効化する前に、セキュリティレビュー、テスト方針、リリース承認フローへの影響を確認しましょう。

GitHubのブランチ保護とAzure Pipelinesのステータスチェックを確認する

GitHub側で必須ステータスチェックを設定している場合、Azure Pipelinesの実行結果がGitHubに正しく返らないと、PRをマージできなくなります。公式ドキュメントでは、必須検証ビルドを設定するには、まず対象リポジトリでパイプラインを作成し、少なくとも一度実行してGitHubにステータスを認識させる流れが示されています。また、ステータスチェックの一覧にパイプラインが表示されない場合は、GitHub App認証を使っているか、直近1週間以内にパイプラインが実行されているかを確認します。(Microsoft Learn)

実務では、次の順番で確認するとトラブルを減らせます。

手順確認内容目的
1Azure Pipelinesの認証方式を確認GitHub Checks対応か確認
2対象パイプラインを手動実行GitHub側にチェック名を認識させる
3GitHubのBranch protection rulesを確認必須チェック名が古くないか確認
4PRを作成して検証Checksタブに結果が返るか確認
5パイプライン名変更の有無を確認必須チェックが旧名を参照していないか確認

パイプライン名を変更した場合や、GitHub AppからOAuth/PATへ戻した場合、GitHub側の必須チェック設定に古いチェック名が残ることがあります。CI側だけでなく、GitHubのブランチ保護ルールまで確認することが重要です。

フォークからのPRはシークレット漏えい対策を最優先にする

オープンソースリポジトリでは、外部ユーザーがフォークからPRを送る運用が一般的です。しかし、フォークPRのビルドは悪意あるコードを実行するリスクがあります。公式ドキュメントでは、フォークPRの検証に対してシークレットを既定で利用できないようにする設定や、フォークPRのビルドを組織・プロジェクトレベルで制御する仕組みが説明されています。(Microsoft Learn)

特に避けたいのは、「テストが失敗するから」という理由だけでフォークPRにシークレットを渡すことです。シークレットが使える状態で外部PRのコードを実行すると、サービス接続、セキュアファイル、秘密変数、リポジトリアクセストークンなどが漏えいする恐れがあります。

設定・運用推奨度理由
フォークPRにシークレットを渡さない漏えいリスクを大きく下げられる
Microsoft-hosted agentを使う実行後に環境が破棄され、影響を残しにくい
self-hosted agentで外部PRを実行するエージェント上の他ビルドや秘密情報に影響する可能性がある
コメントトリガーで信頼できるPRだけ実行中〜高無差別実行を避けられる
外部PRでも通常ビルドと同じ権限を与える最小権限の原則に反する

公開リポジトリや信頼できないユーザーからのPRを扱う場合は、self-hosted agentに機密情報を置かない、デプロイ処理をPR検証から分離する、Build.ReasonでPR時の処理を制限する、といった対策を組み合わせるべきです。

steps:
  - script: echo "Run tests only for PR validation"
    condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))

  - script: echo "Deploy only outside PR validation"
    condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))

Azure DevOps Public Projects廃止による実務影響

今回の更新で最も見落としやすいのは、Azure Pipelinesの設定変更ではなく、Azure DevOps Public Projects廃止による周辺運用の変化です。公式情報では、Azure DevOpsのPublic Projectsは廃止され、新規作成できず、既存のPublic Projectsは2027年にPrivate Projectsへ自動変換されます。匿名アクセスも無効化されます。(Microsoft Learn)

Public ProjectがPrivateへ変わると、次のような影響が発生します。

領域影響
匿名アクセス未認証ユーザーがコード、作業項目、Wiki、Pipelines、Artifactsを閲覧できなくなる
検索エンジン既存の公開URLがサインイン要求になる
ビルド結果リンク外部に貼ったビルドログや結果リンクに認証が必要になる
パイプライン分数Public Project向けの無制限枠ではなく、Private Projectの標準枠や購入済み容量に依存する
ステータスバッジREADMEや外部ダッシュボードのバッジが匿名ユーザー向けに表示されなくなる可能性がある
パッケージフィードAzure Artifactsの利用者に認証が必要になる
Webhook・外部ツール匿名アクセス前提の監視・連携が停止する可能性がある

既存のパイプライン自体は、Public ProjectがPrivateへ変わっても動き続けるとされています。ただし、Microsoft-hosted pipeline minutesはPublic Project向けの扱いからPrivate Project向けの扱いに変わるため、ビルド頻度が高いOSSプロジェクトでは並列ジョブや無料分数の不足に注意が必要です。(Microsoft Learn)

管理者が確認すべき設定チェックリスト

次のチェックリストを使うと、移行前の棚卸しを短時間で進められます。

分類確認項目判断基準
プロジェクト可視性Azure DevOps ProjectがPublicかPrivateかPublicなら2027年までの方針決定が必要
リポジトリの公開場所OSSとしてGitHubで公開しているかPublic Project依存ならGitHub中心に再設計
認証方式GitHub App、OAuth、PATのどれか原則GitHub Appを優先
サービス接続個人アカウント依存がないか退職・権限変更で停止しない構成にする
CIトリガーtriggerが明示されているか暗黙トリガーに頼らない
PRトリガーpr、パス、ブランチ条件が適切か必要なPRだけ検証する
GitHub必須チェックGitHub Branch protectionと整合しているかチェック名・実行履歴・GitHub Appを確認
フォークPRシークレット利用が制限されているか外部PRに秘密情報を渡さない
エージェント外部PRをself-hosted agentで実行していないかMicrosoft-hosted agentを優先
公開リンクREADME、バッジ、外部ダッシュボードが残っていないかPrivate化後に認証エラーにならないよう修正
パッケージAzure Artifactsの公開利用者がいるか認証方式や移行先を案内
パイプライン容量Private化後の分数・並列ジョブが足りるかビルド頻度と課金を見直す

開発者が見直すべきYAML設定

開発者は、管理者による可視性やサービス接続の見直しと並行して、YAMLのトリガーとチェックアウト設定を確認しましょう。特にモノレポ、タグの多いリポジトリ、長いGit履歴を持つリポジトリでは、ビルド時間とGitHub API負荷を減らす設計が重要です。

ビルド対象を絞る

trigger:
  batch: true
  branches:
    include:
      - main
  paths:
    include:
      - src/**
      - tests/**

batch: trueを使うと、ビルド中に追加された変更をまとめて次の実行にできます。ただし、多段階パイプラインや承認付きデプロイが同じYAMLに含まれる場合、後続実行が待たされることがあります。その場合は、ビルド用パイプラインとデプロイ用パイプラインを分けるほうが安全です。(Microsoft Learn)

大きなリポジトリではfetch設定を見直す

steps:
  - checkout: self
    fetchDepth: 1
    fetchTags: false

浅いfetchはビルド時間短縮に有効ですが、ブランチ更新が非常に速い環境では、解決されたコミットがチェックアウト時に取得できないことがあります。その場合はfetchDepthを増やすか、必要に応じてfetchDepth: 0で全履歴を取得します。(Microsoft Learn)

タグが多いリポジトリでは、タグ同期がビルド時間を延ばすことがあります。fetchTagsを明示し、必要なパイプラインだけでタグを取得する設計にすると、不要なデータ取得を抑えられます。(Microsoft Learn)

移行する場合の選択肢

Azure DevOps Public Projectsを使っていた場合、選択肢は大きく3つあります。

選択肢向いているケース注意点
Azure DevOpsをPrivate化して使い続ける社内開発、顧客向け非公開開発外部公開リンク、バッジ、パッケージ利用者への案内が必要
GitHubへ公開プロジェクトを移すOSS、外部コントリビューター中心リポジトリ、Issue、Wiki、パッケージ、CIの移行計画が必要
GitHubで公開し、Azure PipelinesはCI/CDとして継続利用Azureデプロイや既存パイプライン資産を残したいログ公開範囲、GitHub Checks、サービス接続を再確認

公式の移行情報では、Azure DevOpsの公開プロジェクトからGitHubへ移す対象として、リポジトリ、パイプライン、Wiki、Artifacts、作業項目が挙げられています。GitHub Enterprise ImporterはGitソース、コミット履歴、プルリクエスト、ユーザー履歴、PR上の作業項目リンク、添付ファイル、ブランチポリシーなどを移行できる一方、ブラウザベースのGitHub Importerは比較的簡単ですが、PRや作業項目リンク、ブランチポリシーは移行しません。(Microsoft Learn)

パイプラインについては、GitHub Actions ImporterでAzure PipelinesからGitHub Actionsワークフローへの変換を支援できます。ただし、自動変換後も、サービス接続、シークレット、OIDC、承認フロー、環境保護ルール、デプロイ先の権限は手動確認が必要です。(Microsoft Learn)

Azure Pipelinesを使い続けるか、GitHub Actionsへ移るか

どちらが正解かは、プロジェクトの性質で変わります。単純に「GitHubだからGitHub Actionsへ移る」と決めるのではなく、既存のAzure資産、承認フロー、監査要件、外部コントリビューターの使いやすさで判断しましょう。

判断軸Azure Pipelines継続が向く場合GitHub Actions移行が向く場合
既存資産Azure PipelinesのYAML、タスク、サービス接続が多い新規構築または既存パイプラインが少ない
公開OSS外部公開よりAzureデプロイ連携を優先GitHub上でPR、Issue、Actionsを一体運用したい
権限管理Azure DevOpsのプロジェクト・組織管理を維持したいGitHub Organization中心に管理したい
ログ公開組織内閲覧で十分外部コントリビューターに見せたい
移行コスト低く抑えたい中長期でGitHub中心に統一したい

Azure Pipelinesを継続する場合でも、GitHub App認証、PRトリガー、GitHub Checks、フォークPRの制御は見直すべきです。GitHub Actionsへ移る場合は、azure-pipelines.ymlを単純に.github/workflows/*.ymlへ置き換えるだけでは不十分です。サービス接続はGitHub SecretsやOIDCへ、Agent poolはrunner labelへ、Azure PipelinesのタスクはGitHub Actionsのアクションへ置き換える必要があります。(Microsoft Learn)

トラブルが起きたときの切り分け

GitHub連携のトラブルは、原因をいきなりYAMLだけに絞ると時間を失います。次の順序で切り分けると効率的です。

症状最初に見る場所典型原因
GitHubリポジトリがAzure Pipelines作成画面に出ないGitHub Appのインストール範囲、リポジトリ権限GitHub Organization ownerまたはrepo adminの操作が必要
PushしてもCIが動かないYAMLのtrigger、UI側のトリガー上書き設定暗黙トリガー無効、パス除外、パイプライン停止
PR検証が動かないpr、対象ブランチ、GitHub App接続PR対象ブランチ不一致、テンプレート側にだけ定義
GitHubにステータスが返らないGitHub Checks、サービス接続、直近の実行履歴OAuth/PAT利用、GitHub App未使用
フォークPRで失敗するシークレット、権限、コメントトリガー外部PRに必要な権限を渡していない、または安全上渡せない
checkoutで失敗するfetchDepth、サブモジュール、PATshallow fetch不足、サブモジュール認証不備
Public Projectのリンクが見えなくなるプロジェクト可視性、匿名アクセスPrivate化により認証が必要

なお、Azure PipelinesのFAQでは、UI側のトリガー設定がYAMLトリガーを上書きしていないか、パイプラインが一時停止・無効化されていないか、正しいブランチのYAMLを更新しているか、パスやブランチのinclude/excludeが一致しているかを確認する流れが示されています。(Microsoft Learn)

まず取るべきアクション

今回のBuild GitHub repositories - Azure Pipelinesに関する確認では、すぐに全パイプラインを移行するよりも、影響範囲を正確に棚卸しすることが重要です。

最初の一歩として、Azure DevOps管理者はPublic Projectの有無、GitHub接続方式、GitHub Appのインストール範囲、フォークPR設定、Microsoft-hosted agentの使用量を確認してください。開発者は、triggerprを明示し、パスフィルター、batchfetchDepthfetchTagsを見直しましょう。

OSSとして外部公開を続けるなら、GitHubを公開面の中心に置く方針を早めに決めるべきです。社内開発としてAzure DevOpsを使い続けるなら、Private Project化後のビルド容量、外部リンク、パッケージ利用者、ステータスバッジを確認しておくことで、2027年の自動変換時の混乱を避けられます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次