GitHub Innovation Graph Q1 2026更新|CSV互換性・対応要否・テスト手順

GitHub Innovation GraphのQ1 2026更新は、GitHub APIやリポジトリ機能を変更するアップデートではありません。世界の公開GitHub活動を経済圏別に集計したデータセットへ、2026年第1四半期のデータを追加する更新です。

結論として、CSVの実際の列構成に破壊的変更はなく、多くの既存実装はデータ更新と回帰テストだけで対応できます。一方、古い説明資料を基に列数を固定している処理、Pandasで国コードを読み込む処理、EUと加盟国を同時に集計する処理は確認が必要です。

2026年7月8日時点で公開済みの公式情報では、ブログとGitHub Releaseの掲載日はともに7月7日で、データセットのリリース番号はv1.0.11です。(The GitHub Blog)

目次

GitHub Innovation GraphのQ1 2026更新で何が変わったのか

GitHub Innovation Graphは、GitHub上の公開活動を経済圏単位で集計し、四半期ごとのCSVとして提供するオープンデータです。

2020年以降のデータが対象で、次の8種類が公開されています。

  • 開発者数
  • Git Push数
  • Organization数
  • Repository数
  • 使用言語
  • ライセンス
  • Topic
  • 経済圏間のコラボレーション

データはGitHub全体の個別ユーザーや特定プロジェクトを分析するものではなく、経済圏ごとの大きな傾向を調査するためのものです。公開活動のみを対象とし、原則として1四半期遅れで更新されます。(GitHub)

2026年Q1の世界的なコラボレーションは前四半期比16%増

今回の公式発表で中心となっているのは、世界のオープンソースコラボレーションが加速しているという分析です。

GitHubは「アウトバウンドコラボレーション」を、ある経済圏の開発者が、別の経済圏に属する公開リポジトリへ行った次の活動の合計として定義しています。

  • Git Push
  • Pull Requestの作成

この指標は2025年Q4から2026年Q1にかけて16%増加しました。2020年以降では、2020年Q2の21%増に次いで2番目に大きな四半期成長率とされています。(The GitHub Blog)

ただし、この16%は「開発者数が16%増えた」「マージされたコードが16%増えた」という意味ではありません。Push数とPull Request作成数を合計した活動量の変化であり、Pull Requestの採用率、コード品質、生産性を直接示す指標ではない点に注意が必要です。

同じ記事内のメンテナー向け機能は別の変更

公式ブログでは、Pull Request数の制限、リポジトリ単位のIssue・Pull Request制御、コメントのピン留め、一時的なInteraction Limitなど、メンテナー向けの機能も紹介されています。

これらはコラボレーション増加への対応策として紹介されているGitHub本体の機能です。Innovation GraphのCSV仕様変更ではありません。

したがって、今回の記事を見てGitHub Enterpriseの設定変更やOrganization全体への機能展開が必要になるわけではありません。Innovation Graphの利用者は、データセットの更新部分とGitHub本体の機能紹介を分けて判断する必要があります。(The GitHub Blog)

v1.0.10からv1.0.11への仕様差分

前回のQ4 2025データはv1.0.10、今回のQ1 2026データはv1.0.11として公開されています。公式タグのCSVと関連ファイルを比較すると、主な差分は次のとおりです。(GitHub)

確認項目v1.0.10v1.0.11既存実装への影響
最新期間2025年Q42026年Q1最新期間を固定している処理は修正が必要
CSVファイル数88変更なし
CSVの列名従来の列構成同じ列構成原則として互換性あり
過去期間のデータ2025年Q4まで過去データを保持しQ1 2026を追加通常は差分追加または再取込で対応可能
Economy Collaboratorsの実データ5列5列実データの仕様変更なし
Datasheetの列説明不正確な6列表記正しい5列表記説明資料を基にした実装は要確認
ライセンスCC0 1.0CC0 1.0変更なし

公式タグのCSVを比較した範囲では、v1.0.11は既存期間の行を維持し、2026年Q1の行を追加する形になっています。ただし、今後のすべてのリリースが必ず追加のみになるとは限りません。更新のたびに過去データの差分も検証できる設計が安全です。

Economy Collaboratorsの説明資料が修正された

特に注意したいのが、economy_collaborators.csvの列定義です。

実際のCSVは、以前から次の5列です。

weight,source,destination,year,quarter

ところがv1.0.10のDatasheetでは、実際には存在しないiso2_codeを含めた6列として説明されていました。v1.0.11では、この説明が実データと一致する5列へ修正されています。

一方、機械可読なdatapackage.jsonでは、v1.0.10の時点から正しい5列が定義されていました。つまり、今回の変更はCSVスキーマの変更ではなく、Markdown形式の説明資料の訂正です。(GitHub)

次のような処理は修正対象です。

# 誤った6列前提
columns = [
    "weight",
    "source",
    "destination",
    "iso2_code",
    "year",
    "quarter",
]

正しくは次の5列です。

columns = [
    "weight",
    "source",
    "destination",
    "year",
    "quarter",
]

CSVのヘッダーを読み取らず、説明資料から手作業で列名を定義している実装は、今回の更新を機に見直したほうがよいでしょう。

v1.0.11のDatasheetには古いバージョン表記が残っている

v1.0.11タグ内のDatasheetを確認すると、冒頭の更新日とバージョンに、前回の情報が残っています。

Last updated: 2026-05-08
Version: 1.0.10

列定義は修正されていますが、Datasheet冒頭のメタデータはv1.0.11へ更新されていません。(GitHub)

そのため、取得したデータのバージョンをDatasheet内の文字列だけで判定する実装は避けてください。次の情報を組み合わせて管理するのが確実です。

  • Gitのタグ
  • GitHub Releaseのバージョン
  • コミットID
  • CSV内の最大yearとquarter
  • 取得日時

対象者と対応要否を判断する

今回の更新で対応が必要かどうかは、GitHub Innovation Graphをどのように利用しているかで決まります。

利用方法対応要否実施すること
公式サイトのグラフを見るだけ原則不要新しい期間を選択して確認する
CSVを手作業で分析している軽微な対応v1.0.11へ差し替えて再集計する
最新四半期を自動判定するETL回帰テストのみ列名、期間、重複、欠損を確認する
2025年Q4を最新期間として固定対応必要最大期間を動的に取得する
Datasheetの6列定義を使用対応必要Economy Collaboratorsを5列へ修正する
Pandasの初期設定でCSVを読む対応推奨NAを欠損値に変換しない設定を入れる
世界合計や地域合計を計算対応推奨EU集約行の扱いを決める
行数を固定したテストを使用対応必要行数ではなくスキーマと主キーを検証する
レポートの再現性が必要対応必要mainではなくタグやコミットを固定する

特に、BIダッシュボードや定期レポートで「最新四半期=2025年Q4」と指定している場合、データを入れ替えただけではQ1 2026が表示されないことがあります。

次のように、最大期間をデータから判定する設計が適しています。

latest_period = (
    df[["year", "quarter"]]
    .drop_duplicates()
    .sort_values(["year", "quarter"])
    .iloc[-1]
)

latest_year = int(latest_period["year"])
latest_quarter = int(latest_period["quarter"])

GitHub Innovation Graphを導入するための条件

Innovation GraphのCSVを利用するだけであれば、GitHub Enterpriseの契約、Organization管理者権限、APIトークンは必要ありません。公開リポジトリからデータを取得でき、データセットにはCC0 1.0が適用されています。(GitHub)

実務で継続利用する場合は、最低限次の環境を用意します。

  • GitまたはHTTPでファイルを取得できる環境
  • UTF-8のCSVを処理できるツール
  • 四半期と経済圏コードを扱えるデータベースまたはBIツール
  • 取得バージョンを記録する仕組み
  • 欠損値と集約行の扱いを決めたデータ定義書

再現性が必要な分析では、常に変化するmainブランチを直接参照せず、v1.0.11のタグを固定します。

git clone https://github.com/github/innovationgraph.git
cd innovationgraph
git checkout v1.0.11

将来同じ分析を再実行する可能性がある場合は、タグだけでなくコミットIDも記録しておくと安全です。

既存実装と互換性を保つための設計

列番号ではなく列名で処理する

次のように、CSVの2列目や3列目といった位置だけで意味を判断する処理は避けます。

source = row[1]
destination = row[2]

列名を指定して処理すれば、列順の変更を検知しやすくなります。

source = row["source"]
destination = row["destination"]

さらに、取込前に期待する列と完全一致するか検証してください。列が増えた場合にも受け入れる設計にするか、想定外の列をエラーにするかは、システムの用途に応じて決めます。

更新はINSERTではなくUPSERTを基本にする

今回の公式タグ比較では、既存データの後ろに新しい四半期が追加されています。しかし、毎回すべての行をINSERTすると、再実行時に重複する可能性があります。

ファイルごとに次の項目を自然キーとしてUPSERTする方法が適しています。(GitHub)

CSVUPSERTに使う主なキー
developers.csviso2_code, year, quarter
git_pushes.csviso2_code, year, quarter
organizations.csviso2_code, year, quarter
repositories.csviso2_code, year, quarter
languages.csvlanguage, language_type, iso2_code, year, quarter
licenses.csvspdx_license, iso2_code, year, quarter
topics.csvtopic, iso2_code, year, quarter
economy_collaborators.csvsource, destination, year, quarter

値が更新された場合にも追従できるよう、同じキーが存在すれば上書きする設計にします。

行数を仕様として固定しない

Q1 2026の追加により、すべてのCSVで行数が増えています。Topic、言語、経済圏の組み合わせは期間によって変わるため、「必ず何行ある」と固定するテストは更新のたびに失敗します。

行数そのものではなく、次の条件を検証してください。

  • 必須列が存在する
  • 主キーが重複していない
  • year=2026かつquarter=1の行が存在する
  • 数値列が負数になっていない
  • 経済圏コードが意図せず欠損していない
  • 過去データに予期しない変更がない

テスト時に見落としやすい注意点

NAを欠損値に変換しない

Innovation Graphでは、ISO 3166の2文字コードが使われています。ナミビアのコードはNAです。

Pandasのread_csv()は初期設定で文字列のNAを欠損値として解釈します。そのまま読み込むと、ナミビアのiso2_codeや、コラボレーションデータ内のsource、destinationがNaNへ変換される可能性があります。Pandasの公式ドキュメントでも、NAは既定の欠損値文字列に含まれています。(Pandas)

次のようにkeep_default_na=Falseを指定してください。

import pandas as pd

developers = pd.read_csv(
    "data/developers.csv",
    keep_default_na=False,
    dtype={"iso2_code": "string"},
)

collaborators = pd.read_csv(
    "data/economy_collaborators.csv",
    keep_default_na=False,
    dtype={
        "source": "string",
        "destination": "string",
    },
)

読込後は、ナミビアのコードが保持されていることも確認します。

assert "NA" in set(developers["iso2_code"])

欠損値だけを確認するテストでは、NAが誤変換された事実を見逃すことがあります。国コードの代表値を使ったテストも加えることが重要です。

EUと加盟国を二重に合計しない

公式データには、個別のEU加盟国に加えて、EUをまとめたEU行も含まれています。公式画面にもEU加盟国をまとめるための切り替えがあります。(イノベーショングラフ)

国・経済圏別の値を単純にすべて合計すると、EU加盟国分を二重計上する可能性があります。

加盟国を個別に扱う場合は、集計前にEU行を除外します。

country_level = developers[
    developers["iso2_code"] != "EU"
]

Economy Collaboratorsについても、国別のsourceとdestinationを使う場合は、EU集約行を除外します。

country_collaboration = collaborators[
    (collaborators["source"] != "EU")
    & (collaborators["destination"] != "EU")
]

反対に、EUを一つの経済圏として扱う場合は、EU加盟国側の行を除外する必要があります。分析途中で両方の方式を混在させないよう、データ定義書に集約方針を明記してください。

行がないことをゼロと判断しない

Innovation Graphは、関連する活動を行ったユニーク開発者が100人未満の経済圏について、指標を公開しない場合があります。

そのため、CSVに行が存在しない場合でも、活動が完全にゼロとは限りません。次の3つを区別する必要があります。

  • 値が0
  • 公開基準を下回ったため行がない
  • 取得や取込に失敗して行がない

欠損行を自動的に0へ変換すると、規模の小さい経済圏の活動を過小評価する可能性があります。ダッシュボードでは「0」ではなく「非公開」「基準未満」「データなし」など、用途に合った表示を検討してください。(イノベーショングラフ)

Q1 2026の存在だけでなく過去データも検証する

基本的な受入テストでは、各CSVに2026年Q1が含まれることを確認します。

from pathlib import Path
import pandas as pd

DATA_DIR = Path("data")

EXPECTED_COLUMNS = {
    "developers.csv": [
        "developers", "iso2_code", "year", "quarter"
    ],
    "git_pushes.csv": [
        "git_pushes", "iso2_code", "year", "quarter"
    ],
    "organizations.csv": [
        "organizations", "iso2_code", "year", "quarter"
    ],
    "repositories.csv": [
        "repositories", "iso2_code", "year", "quarter"
    ],
    "languages.csv": [
        "num_pushers", "language", "language_type",
        "iso2_code", "year", "quarter"
    ],
    "licenses.csv": [
        "num_pushers", "spdx_license",
        "iso2_code", "year", "quarter"
    ],
    "topics.csv": [
        "num_pushers", "topic",
        "iso2_code", "year", "quarter"
    ],
    "economy_collaborators.csv": [
        "weight", "source", "destination",
        "year", "quarter"
    ],
}

frames = {}

for filename, expected_columns in EXPECTED_COLUMNS.items():
    dataframe = pd.read_csv(
        DATA_DIR / filename,
        keep_default_na=False,
    )

    assert dataframe.columns.tolist() == expected_columns, (
        f"{filename}: 列構成が想定と異なります"
    )

    has_q1_2026 = (
        (dataframe["year"] == 2026)
        & (dataframe["quarter"] == 1)
    ).any()

    assert has_q1_2026, (
        f"{filename}: 2026年Q1がありません"
    )

    frames[filename] = dataframe

assert "NA" in set(
    frames["developers.csv"]["iso2_code"].astype(str)
)

print("v1.0.11の基本検証に成功しました")

本番環境では、これに加えてv1.0.10とv1.0.11の過去期間を比較します。

比較結果に差分があった場合、すぐにエラーとするのではなく、公式リリースで過去データの修正が案内されていないか確認してください。今回の更新では公式タグを比較した範囲で既存期間が維持されていますが、将来の訂正まで拒否する設計は避けたほうが安全です。

データを分析するときの解釈上の注意点

GitHub全体や非公開開発を表すデータではない

Innovation Graphの対象は公開GitHub活動です。Private Repository、社内GitHub Enterprise Server、他のコードホスティングサービス上の活動は含まれません。

したがって、次のような断定には使えません。

  • 国全体のソフトウェア開発者数
  • 企業内で行われている開発量
  • すべてのオープンソース活動
  • 開発者一人当たりの生産性
  • ソフトウェアの品質

公開GitHub活動の傾向を示すデータとして位置付け、他の統計や調査と組み合わせて利用する必要があります。(GitHub)

指標ごとに「期間中の活動」と「期末時点の規模」が異なる

Git PushやEconomy Collaboratorsのweightは、四半期中に行われた活動量です。一方、開発者数、Organization数、Repository数などは、経済圏の規模を把握するための指標です。

すべての指標を同じ性質の数値として比較すると、誤った結論につながります。

例えば、Git Pushが大幅に増えても、次のような可能性があります。

  • 少数の活発なプロジェクトでPushが増えた
  • 自動化された開発フローが増えた
  • 大規模な移行や一括更新があった
  • 開発者数はほとんど変わっていない

活動量と参加規模を分けて分析し、複数の指標を組み合わせて判断してください。

IPアドレスやアクセス環境の変化も影響する

経済圏の判定には、一定期間に観測されたIPアドレスなどの情報が利用されます。そのため、VPN、リモートワーク、移動、ネットワーク構成の変化が地域別集計へ影響する可能性があります。(GitHub)

また、GitHubへのアクセス条件が変化した地域では、実際の開発能力の変化だけでなく、サービスへアクセスしやすくなった影響も数値に現れます。

公式ブログでは、シリアからの活動増加について、制裁や輸出規制の緩和に伴うGitHubへのアクセス拡大と時期が重なった例が紹介されています。時系列グラフに急激な変化があった場合は、技術トレンドだけでなく制度やアクセス環境の変化も確認する必要があります。(The GitHub Blog)

Q1 2026更新へ対応する実務手順

既存の分析環境やダッシュボードへv1.0.11を反映する場合は、次の順序で進めると安全です。

利用箇所を洗い出す

まず、Innovation GraphのCSVを参照している処理を確認します。

  • 定期取得ジョブ
  • ETL・ELT処理
  • データベースの取込テーブル
  • BIダッシュボード
  • PythonやRの分析コード
  • 定期レポート
  • CSV列定義を記載した設計書

特に、最新四半期、列数、行数を固定している箇所を優先して確認します。

v1.0.11を別環境へ取り込む

本番データを直接置き換えず、検証用のテーブルやフォルダへv1.0.11を配置します。

取得時には、少なくとも次の情報を記録してください。

release_version: v1.0.11
latest_period: 2026-Q1
retrieved_at: 取得日時
commit_sha: 対象コミットID

スキーマとデータ品質を検証する

次の項目を自動テストします。

  • 8ファイルが存在する
  • 必須列が想定どおりである
  • Economy Collaboratorsが5列である
  • 2026年Q1のデータが存在する
  • 国コードNAが欠損していない
  • 主キーに重複がない
  • 数値列に不正な文字列や負数がない
  • 過去期間に想定外の変更がない

集計ルールを確認する

地域別・世界全体の集計を行う場合は、EU集約行を使うか加盟国別の行を使うかを決めます。

同時に、公開基準を下回った経済圏の欠損を0として扱っていないか確認してください。

本番反映後に最新期間を確認する

本番反映後は、画面上で2026年Q1が選択できることだけでなく、次の点も確認します。

  • 前四半期との比較対象が2025年Q4になっている
  • 年次集計で2026年を通年データとして扱っていない
  • グラフの注記に「2026年Q1まで」と表示されている
  • キャッシュに古い2025年Q4データが残っていない
  • 定期レポートの対象期間が自動更新されている

2026年はQ1しか収録されていないため、2025年通年と2026年Q1をそのまま比較するのは不適切です。前年同期比を出す場合は、2025年Q1と2026年Q1を比較します。

GitHub Innovation GraphのQ1 2026更新で優先すべき対応

今回のv1.0.11は、実データのCSVスキーマを壊す変更ではありません。列名を使って読み込み、最新期間を動的に判定している実装であれば、基本的にはデータ差し替えと回帰テストで対応できます。

一方、次のいずれかに該当する場合は、更新前に実装を修正してください。

  • Economy Collaboratorsを6列として処理している
  • Pandasの初期設定で国コードを読み込んでいる
  • EUと加盟国を一緒に合計している
  • 最新期間を2025年Q4に固定している
  • CSVの行数をテスト条件として固定している
  • Datasheet内のバージョン文字列だけを参照している
  • 欠損した経済圏を自動的に0としている

最初にv1.0.11を固定した検証環境を作り、列構成、2026年Q1の存在、NAコード、EU集約、過去期間の差分を確認します。そのうえで本番へ反映すれば、既存レポートとの互換性を保ちながら最新の世界的なオープンソース活動を分析できます。

この記事を書いた人

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

コメント

コメントする

目次