😎

Azure DevOps 環境を gh-ado2gh と AI で整理する話

に公開

0. はじめに

「Azure DevOps から GitHub に移行しようかな」と考え始めると、最初にぶつかる壁はだいたいこれです。

「で、そもそもウチの Azure DevOps に何個プロジェクトあって、どれぐらいリポジトリあるんだっけ?」

Microsoft Learn の「Azure DevOps to GitHub Enterprise Migrations – Source Environment Assessment」でも、最初のステップは “今あるものの棚卸し” だと説明されています。

https://learn.microsoft.com/en-us/training/modules/ado-github-migrations-2/

この記事では、GitHub Enterprise Importer の一部である GitHub CLI の ADO2GH 拡張 gh-ado2gh を使って、

  • Azure DevOps のリポジトリやパイプラインを CSV で棚卸しする
  • 得られた orgs.csv / team-projects.csv / repos.csv / pipelines.csv をざっくり読み解く
  • ついでに AI(Copilot / ChatGPT)に解析を手伝ってもらう視点 をちょっとだけ足す

ところまでをまとめます。

💡 GitHub への移行予定がなくても、「今の AzDO の使われ方を可視化するツール」としてかなり便利です。

1. ADO2GH 拡張機能とは?

GitHub Enterprise Importer (GEI) は、Azure DevOps や GitHub Enterprise Server などから GitHub Enterprise Cloud への移行を支援する公式ツール群です。その一部として、GitHub CLI 用の拡張機能 gh-ado2gh が提供されています。

https://github.com/github/gh-gei

gh ado2gh inventory-report コマンドを使うと、Azure DevOps の API に接続して、

  • 組織
  • チームプロジェクト
  • リポジトリ
  • パイプライン

の情報を CSV ファイルとして一気に出力 できます。GitHub Docs でも、「Azure DevOps から移行する場合は inventory-report を使って基本的なインベントリを作るのがおすすめ」と書かれています。

https://docs.github.com/ja/enterprise-cloud@latest/migrations/overview/planning-your-migration-to-github

2. 前提:GitHub CLI と ADO2GH 拡張のセットアップ

2.1. ADO2GH 拡張のインストール

GitHub CLI gh が入っている前提で、拡張は次の 1 行で入ります。

gh extension install github/gh-ado2gh

アップデートするときは

gh extension upgrade github/gh-ado2gh

2.2. GitHub CLI へのログイン

GitHub 側の認証を済ませます。

gh auth login --hostname github.com

ブラウザが開くので、GitHub アカウントでサインインして認可すれば OK です。

2.3. Azure DevOps の PAT を環境変数に設定

ADO2GH は、Azure DevOps の REST API を叩くために Azure DevOps の PAT を必要とします。環境変数 ADO_PAT に設定しておきます。

  • macOS / Linux(bash 等)の例
export ADO_PAT="your-ado-pat-token"
  • PowerShell の場合(Windows)の例
$Env:ADO_PAT = "your-ado-pat-token"

PAT の権限は、少なくとも対象 Org のリポジトリやパイプラインを読み取れるスコープを付けて作成しておきましょう。

詳細は以下のとおりです。

  • Build (Read) … ビルド パイプライン情報にアクセスする
  • Code (Read) … リポジトリのコンテンツと履歴の読み取り
  • Project and Team (Read) - プロジェクトとチームのメタデータにアクセスする
  • Service Connections (Read, query, & manage) - ハイブリッド統合を構成する
  • Work Items (Read, write, & manage) - Azure Boards 統合機能にアクセスする

3. gh ado2gh inventory-report で棚卸しレポートを作る

準備ができたら、いよいよ棚卸しです。コマンドはとてもシンプルです。

gh ado2gh inventory-report --ado-org "your-ado-org"

この 1 行で、カレントディレクトリに 4 つの CSV ファイルが出力されます。

  • orgs.csv
  • team-projects.csv
  • repos.csv
  • pipelines.csv

以下、それぞれどんな項目が入っていて、何に使えるかを見ていきます。

3.1. orgs.csv:組織レベルのサマリを見る

  • 主な列の意味
項目 説明
name Azure DevOps の Organization 名
url Organization のトップ URL
owner Owner として認識されているユーザー(または PAT 発行ユーザー)
teamproject-count チームプロジェクトの数。→ 「この Org はどれくらいの単位に分割されているか」の目安になります。
repo-count 全リポジトリ数。→ 移行の規模感をざっくりつかむのに使います。
pipeline-count パイプラインの総数(Build + Release)。→ GitHub Actions や別の CI に移行する際のボリューム感。
is-pat-org-admin PAT が Org 管理者権限を持っているか。TRUE になっていれば、移行用ツールを動かす上で十分な権限を持っている可能性が高いです。
pr-count 全リポジトリの PR 合計数。→ GitHub Docs でも、PR 数は移行時間や複雑さの指標として重要とされています。
  • ここから読み取れること

    • 「そもそもこの Org は大きいのか、小さいのか」
    • 「パイプライン多すぎ問題では?」といった 第一印象レベルの健康診断

3.2. team-projects.csv:チームプロジェクトごとのボリュームを見る

  • 主な列の意味
項目 説明
org 所属する Azure DevOps Organization 名
teamproject チームプロジェクト名
url チームプロジェクトの URL
repo-count そのチームプロジェクト配下のリポジトリ数
pipeline-count そのチームプロジェクト配下のパイプライン数
pr-count チームプロジェクト配下リポジトリの PR 合計数
  • ここから読み取れること
    • 「どのチームプロジェクトが一番 “重い” のか」をざっくり比較できます。
    • リポジトリ数は少ないのに PR はやたら多い チームプロジェクトがあれば、重要度が高いか、歴史が長い可能性があります。

3.3. repos.csv:リポジトリ単位の “サイズ・活動量・複雑さ” を見る

  • 主な列の意味
項目 説明
org 所属する Azure DevOps Organization 名
teamproject チームプロジェクト名
repo リポジトリ名
url リポジトリURL
last-push-date 最後に push された日時。→ アクティブなリポジトリか、過去の遺産かを見分けるのに重要。
pipeline-count このリポジトリに紐づくパイプライン数。→ CI/CD の複雑さの目安。
compressed-repo-size-in-bytes 圧縮後のリポジトリサイズ(バイト)。→ 大きいほど移行時間が伸びたり、LFS や履歴の整理が必要になったりします。GitHub Docs
most-active-contributor もっとも活動量の多いコントリビューター。
pr-count PR 数。→ レビュー文化があるか、長く運用されているかの指標にもなります。
commits-past-year 過去 1 年のコミット数。→ 「最近どれくらい更新されているか」の定量的な指標。
  • ここから読み取れること
    この CSV が、移行優先度やアーカイブ候補を考えるうえでのメインデータ になります。

    • last-push-date が古く、commits-past-year も 0 → 「アーカイブ候補?」
    • サイズが極端に大きい → 移行前に履歴整理や LFS への移行が必要かも
    • PR 数が多い → 開発フローとして重要、移行時には丁寧なテストやコミュニケーションが必要

3.4. pipelines.csv:パイプラインの存在をざっくり把握する

  • 主な列の意味
項目 説明
org 所属する Azure DevOps Organization 名
teamproject チームプロジェクト名
repo リポジトリ名
pipeline パイプライン名。
url パイプライン定義の URL(Azure DevOps の Build/Release ページ)。
  • ここから読み取れること

「CI/CD がまったくないリポジトリ」「パイプラインが複数ぶら下がっているリポジトリ」 を簡単に見分けられます。
GitHub Actions への移行や、別の CI に置き換えたい場合に、「どこから手を付けるか」を決める材料になります。

4. 人間が見るときの基本的な観点

ここまでで、「数字としての棚卸し」は終わっていますが、ここからが本題です。

4.1. まずは "健康診断"

  • Org 単位で、リポジトリ数・パイプライン数・PR 数を眺める
  • チームプロジェクト単位で、「やたらと重そうなところ」を探す
  • repos.csv を眺めて、
    • last-push-date が古いもの
    • compressed-repo-size-in-bytes が大きいもの
    • pipeline-count が多いもの

これらをざっとマークしていきます。

ここまでは、Excel のフィルタやピボットテーブルだけでも十分できます。

4.2. 移行する?残す?アーカイブする?

GitHub Docs でも、「移行は“全部持っていく”のではなく、不要なリポジトリを整理する良い機会」と書かれています。

https://docs.github.com/ja/enterprise-cloud%40latest/migrations/overview/planning-your-migration-to-github

たとえば、こんな基準でざっくり分類できます。

  • 現役 & 重要

    • commits-past-year > 0
    • PR もそこそこある
    • パイプラインも動いている
  • 現役だけど軽い

    • 更新はあるが、サイズも小さいし PR も少ない → 移行の実験台向き
  • 過去の資産

    • 更新なし
    • それでも PR やコミット履歴は価値がありそう(監査・トレーサビリティなど)

ここまでは人間の判断が必要ですが、その前段の「候補リストづくり」は AI に任せるとかなり楽 になります。

5. AI に repos.csv を “読ませて” スコアリングする

ここからは、記事冒頭で触れた「GitHub Enterprise Migration Analysis Prompt」の考え方を、ライトに活用してみます。専用のツールがあるわけではありませんが、、、

やりたいことはシンプルで、

  • サイズ(compressed-repo-size-in-bytes
  • 活動量(commits-past-year, last-push-date
  • 複雑さ(pr-count, pipeline-count

このあたりから、移行のしやすさをざっくりスコアリングすることです。

https://wellarchitected.github.com/library/scenarios/migrations/azure-devops-migration-guide/

5.1. 例:AI に投げるプロンプト案

たとえば ChatGPT や Copilot Chat に repos.csv を貼って、こんな感じでお願いできます。

「この repos.csv をもとに、各リポジトリを次の 3 軸で High / Medium / Low に分類してください。

  • Size(compressed-repo-size-in-bytes)
  • Activity(commits-past-year と last-push-date)
  • Complexity(pr-count と pipeline-count)
    そのうえで、
  • Wave 1:小さく・シンプルで・活動量も少ない
  • Wave 2:中ぐらい
  • Wave 3:大きい or 複雑
  • Manual Review:特殊ケース
    の 4 つに分けて、Markdown テーブルで出力してください。」

AI は計算と分類が得意なので、きれいに表にまとめてくれます。
人間側は、その結果を見て「このリポジトリは業務上どういう位置づけだっけ?」という 文脈判断だけに集中できます。

5.2. AI を使うときのコツ

  • 生の CSV をそのまま投げるより、最低限の説明(どの列が何を意味するか)を添えると精度が上がる

  • AI が出した分類は「たたき台」なので、

    • 移行リーダー
    • チームリーダー
    • プロダクトオーナー

と一緒にレビューする前提にしておく

まとめ:棚卸しツール + AI で「手を付ける前に全体像をつかむ」

この記事では、

  • gh ado2gh inventory-report --ado-org "your-ado-org"
    Azure DevOps 環境を CSV に棚卸しする
  • orgs.csv / team-projects.csv / repos.csv / pipelines.csv
    見どころと各列の意味
  • そして AI を使って repos.csv をスコアリング・分類させるアイデア

を紹介しました。

実際にやってみるとわかりますが、「とりあえず inventory-report を 1 回流す」だけでもかなり視界がクリアになります。GitHub への移行を本格的に始める前に、まずは ADO2GH で環境を棚卸ししてみるのがおすすめです。

移行をする予定がなくても、

  • 放置されているリポジトリ
  • いつの間にか増えたパイプライン
  • 規模が大きくなりすぎたプロジェクト

などが一気に見えてくるので、Azure DevOps の “健康診断ツール” としても十分価値があります

あとは、生成された CSV を GitHub Copilot や ChatGPT に投げて、
「この Org のリポジトリをどう整理・移行していくのが良さそうか?」を一緒に考えてもらうだけです。

リファレンス

https://learn.microsoft.com/en-us/training/modules/ado-github-migrations-2

https://docs.github.com/ja/enterprise-cloud%40latest/migrations/ado/overview-of-a-migration-from-azure-devops-to-github-enterprise-cloud

https://docs.github.com/ja/enterprise-cloud%40latest/migrations/overview/planning-your-migration-to-github

https://wellarchitected.github.com/library/scenarios/migrations/azure-devops-migration-guide

GitHubで編集を提案

Discussion