46億のGitHubイベントの深層を探る

46億というのは、文字通り天文学的な数字です。宇宙観測所ガイアがもたらした銀河系の最も豊富な星図には、20億弱の星が含まれています。46億のGitHubのイベントは、実際にはどのように見えるのでしょうか？このような膨大なデータから、どのような秘密や価値を見出すことができるのでしょうか？

さあ、いよいよです。その答えを見つけるために、[OSSInsight.io](https://ossinsight.io/)が役に立ちます。それは、最新のオープンソースインテリジェンスを提供し、リアルタイムで46億のGitHubイベントを深く掘り下げることによって、ひとつのGitHubプロジェクトを深く理解したり、2つのプロジェクトを迅速に比較するのに役立つインサイトツールです。ここでは、いくつかの使い方を紹介します。

GitHubの2つのプロジェクトを比較
異なるプロジェクトが時間とともにどのような成果を上げ、どのように発展してきたのか気になりませんか？どのプロジェクトがもっと注目される価値があるのでしょうか？[OSSInsight.io](https://ossinsight.io/)は、[Compare Projects](https://ossinsight.io/analyze/pingcap/tidb)のページであなたの質問に答えることができます。
ここでは、[Kubernetes](https://github.com/kubernetes/kubernetes)のリポジトリ（K8s）とDockerの[Mobyリポジトリ](https://github.com/moby/moby) を例にとって、人気度とコーディングの活力という観点から比較してみましょう。

### 人気度
2つのリポジトリの人気度を比較するために、スターの数、時間経過によるスターの増加傾向、stargazer（スターゲイザー）の地理的・雇用主の分布などの複数の指標を使用しています。

### スターの数
下の折れ線グラフは、K8sとMobyの各年の累積スター数を示したものである。このグラフによると、2019年後半まではMobyがK8sを上回っていました。2017年以降はMobyのスターの伸びが鈍化し、K8sは安定した伸び率を保っています。
![the-star-history (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/60b0f03e-febc-ae31-0e0e-e3d7ebc229cc.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8sとMobyのスターの歴史}}$$


### スターゲイザーの地理的分布
下の地図は、MobyとK8sのスターゲイザーの地理的な分布を示しています。ご覧の通り、それらのスターゲイザーは世界中に散らばっており、アメリカ、ヨーロッパ、中国からのユーザーが大半を占めています。
![geographicla-distribution-of-stargazers (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/8aadbba5-65b0-b561-9065-d2dd19deacbc.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8sとMobyのスターゲイザーの地理的な分布}}$$


### スターゲイザーの雇用分布
下図は、K8s（赤）とMoby（紺）のスターゲイザーの雇用主を示したものです。両者のスターゲイザーは幅広い業種で働いており、Google、Tencent、Microsoftといった大手ドットコム企業が多いのが特徴です。違いは、K8sのスターゲイザーの上位2社が米国のGoogleとMicrosoftであるのに対し、Mobyの上位2社は中国のTencentとAlibabaである点です。
![employment-distribution-of-stargazers (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/819e7f3b-b37e-a27a-1f18-5d9b38cbb583.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8sとMobyのスターゲイザーの雇用分布}}$$


### コーディング活性度
2つのGitHubプロジェクトのコーディング活力を比較するために、プルリクエスト（PR）の増加傾向、PR、コミット、プッシュの月間件数、開発者の貢献時間のヒートマップなど多くのメトリクスを使用します。
### コミット数およびプッシュ数
下の棒グラフは、K8s （上） と Moby （下） の開始後の各月のコミット数とプッシュ数の推移を表しています。一般に、K8s は Moby よりもプッシュとコミットの数が多く、その数は2020 年まで安定的に増加し、その後減速しています。Mobyの月別プッシュ数とコミット数は、2015年から2017年にかけて微増し、2018年以降はほとんど増えていません。
![monthly-pushes-and-commits (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/9aa16bd8-d041-9eed-d56e-66377599a942.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8s （上） と Moby （下） の各月のコミット数とプッシュ数}}$$


### PR数
下の図は、2つのリポジトリの月間PR数および累積PR数の推移を示したものです。ご覧の通り、K8sは開設以来、安定した数のPRがあり、累積PR数も順調に伸びています。Mobyは、2017年後半までは多くのPRがありましたが、その後減少に転じました。その累積PR数は2017年に大きな変化が見られなくなり、その後もその状態が続いています。
![monthly-and-accumulated-pr-number (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/54ba1d42-83eb-ae7f-a21d-9f74d6965630.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8s （上）と Moby （下）の月間PR数および累積PR数}}$$


### 開発者の貢献時間
以下のヒートマップは、K8s（左）とMoby（右）の開発者の貢献時間を表しています。各四角は一日のうち一時間を表しています。色が濃いほど、その時間帯に多くの貢献があったことを意味します。K8sはMobyよりも濃い色の部分が多く、K8sのコントリビューションはほぼ1日24時間、週7日発生しています。K8sはMobyよりも間違いなくダイナミックなコーディング活動をしています。
![heat-map (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/fe51bb16-3024-f557-24c4-48bb721f0853.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{K8s（左）とMoby（右）の開発者の貢献時間ヒートマップ}}$$


これらの指標を総合すると、K8sとMobyの両方が世界で人気がある一方で、K8sはMobyよりも活気のあるコーディング活動を展開していることがわかります。K8sは継続的に人気とコーディングの活力を高めているのに対し、Mobyは時間の経過とともにその両方が低下しています。
人気度とコーディングの活力は、リポジトリを比較するための2つの次元に過ぎません。もっといろいろなことを知りたい、あるいは他のプロジェクトと比較したいという場合は、[比較のページ](https://ossinsight.io/analyze/pingcap/tidb)にアクセスして自分で調べてみてください。
もちろん、このページでGitHubプロジェクトを詳しく調べ、その最新の情報を得ることもできます。主要なメトリクスとそれに対応する変更点が、パノラマビューで表示されます。PRサイズごとのグループやPRラインごとのコード変更など、より詳細な分析も可能です。自分で調べてみると、きっと驚くことでしょう。楽しんでください。
![panoramic-view-of-key-github-metrics (1) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/66005f26-1c0b-3c41-6697-ee4189982147.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{GitHubの主要メトリクスのパノラマビュー（例：K8s）}}$$



![total-pr-number-each-month-and-pr-groups (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/c8876574-58d5-bf69-7de9-e7df9cd068ab.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{月間総PR数/PR グループス（例：K8s）}}$$


![number-of-lines-of-code-change-each-month (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/8e752f3e-d68e-beed-e074-7ced9afe4b47.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{毎月のコード変更行数（例：K8s）}}$$


### オープンソースの主要な洞察
OSSInsight.ioは、リポジトリの探索や比較だけではありません。オープンソースの[過去のリアルタイム、そしてカスタムな洞察](https://ossinsight.io/database/deep-insight-into-open-source-databases/)を提供します。このセクションでは、オープンソースのデータベースとプログラミング言語に関する主要な洞察をいくつか紹介します。他の分野での洞察を得たい場合は、[Insights](https://ossinsight.io/database/deep-insight-into-open-source-databases/)ページをご自身で調べてみてください。
注：これらの分析結果を自分で得たい場合は、この[10分間のチュートリアル](https://ossinsight.io/blog/try-it-yourself/)に従って、TiDB Cloud上で各チャートの上にあるSQLコマンドを簡単に実行することができます。
### Rust：最もアクティブなプログラミング言語
Rustは2012年に初めてリリースされ、10年もの間、主要なプログラミング言語の一つとして君臨しています。執筆時点で合計103,047件のPRがあり、最も活発なリポジトリです。
以下は、SQLコマンドになります。
```
SELECT
    /*+ read_from_storage(tiflash[github_events]), MAX_EXECUTION_TIME(120000) */
    programming_language_repos.name AS repo_name,
    COUNT(*)      AS num
FROM github_events
         JOIN programming_language_repos ON programming_language_repos.id = github_events.repo_id
WHERE type = 'PullRequestEvent'
  AND action = 'opened'
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10 
```
![pr-number-of-pl-repos (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/396a9150-3963-9250-916a-22e80f705428.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{代表的なプログラミング言語のPR数}}$$


### Go: 新たな人気者となり、最も急速に成長しているプログラミング言語
[OSSInsight.io](https://ossinsight.io/)によると、10のプログラミング言語がオープンソースコミュニティを支配しています。Goは108,317のスターで最も人気があり、NodeとTypeScriptがそれに続いています。また、Goは最も人気のある急成長中の言語でもあります。
以下は、SQLコマンドになります。
```
WITH repo_stars AS (
    SELECT
        /*+ read_from_storage(tiflash[github_events]) */
        repo_id,
        ANY_VALUE(repos.name) AS repo_name,
        COUNT(distinct actor_login) AS stars
    FROM github_events
         JOIN programming_language_repos repos ON repos.id = github_events.repo_id
    WHERE type = 'WatchEvent'
    GROUP BY 1
), top_10_repos AS (
    SELECT
        repo_id, repo_name, stars
    FROM repo_stars rs
    ORDER BY stars DESC
    LIMIT 10
), tmp AS (
    SELECT
        /*+ read_from_storage(tiflash[github_events]) */
        event_year,
        tr.repo_name AS repo_name,
        COUNT(*) AS year_stars
    FROM github_events
         JOIN top_10_repos tr ON tr.repo_id = github_events.repo_id
    WHERE type = 'WatchEvent' AND event_year <= 2021
    GROUP BY 2, 1
    ORDER BY 1 ASC, 2
), tmp1 AS (
    SELECT
        event_year,
        repo_name,
        SUM(year_stars) OVER(partition by repo_name order by event_year ASC) as stars
    FROM tmp
    ORDER BY event_year ASC, repo_name
)
SELECT event_year, repo_name, stars FROM tmp1
```
![star-growth-trends-of-leading-programming-languages (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/fd273edb-7603-5edb-b695-4e006c5e1dc8.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{代表的なプログラミング言語のスターの増加傾向}}$$


### MicrosoftとGoogle：プログラミング言語の貢献者数トップ2
世界的に有名なハイテク企業であるMicrosoftとGoogleは、本稿執筆時点でそれぞれ1,443人と947人のコントリビューターを抱え、オープンソース言語コントリビューターの首位に立っています。
以下は、SQLコマンドになります。
```
SELECT
    /*+ read_from_storage(tiflash[github_events]), MAX_EXECUTION_TIME(120000) */
    TRIM(LOWER(REPLACE(u.company, '@', ''))) AS company,
    COUNT(DISTINCT actor_id)                 AS num
FROM
    github_events github_events
    JOIN programming_language_repos db ON db.id = github_events.repo_id
    JOIN users u ON u.login = github_events.actor_login
WHERE
    github_events.type IN (
        'IssuesEvent', 'PullRequestEvent','IssueCommentEvent',
        'PullRequestReviewCommentEvent', 'CommitCommentEvent',
        'PullRequestReviewEvent'
    )
    AND u.company IS NOT NULL
    AND u.company != ''
    AND u.company != 'none'
GROUP BY 1
ORDER BY 2 DESC
LIMIT 20;
```
![companies-who-contribute-the-most-to-programing-languages (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/4c5cfee6-8a72-e220-9335-0e73ce3c0e01.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{プログラミング言語に最も貢献している企業}}$$


### 最も注目を集めるElasticsearch
Elasticsearchは、最初のオープンソースデータベースの1つです。64,554のスターを持つ最も好かれたデータベースで、RedisとPrometheusがそれに続いています。2011年から2016年までは、ElasticseasrchとRedisがトップを分け合っていましたが、2017年にElasticsearchが抜け出しました。
以下は、SQLコマンドになります。
```
WITH repo_stars AS (
    SELECT
        /*+ read_from_storage(tiflash[github_events]) */
        repo_id,
        ANY_VALUE(repos.name) AS repo_name,
        COUNT(distinct actor_login) AS stars
    FROM github_events
         JOIN db_repos repos ON repos.id = github_events.repo_id
    WHERE type = 'WatchEvent'
    GROUP BY 1
), top_10_repos AS (
    SELECT
        repo_id, repo_name, stars
    FROM repo_stars rs
    ORDER BY stars DESC
    LIMIT 10
), tmp AS (
    SELECT
        /*+ read_from_storage(tiflash[github_events]) */
        event_year,
        tr.repo_name AS repo_name,
        COUNT(*) AS year_stars
    FROM github_events
         JOIN top_10_repos tr ON tr.repo_id = github_events.repo_id
    WHERE type = 'WatchEvent' AND event_year <= 2021
    GROUP BY 2, 1
    ORDER BY 1 ASC, 2
), tmp1 AS (
    SELECT
        event_year,
        repo_name,
        SUM(year_stars) OVER(partition by repo_name order by event_year ASC) as stars
    FROM tmp
    ORDER BY event_year ASC, repo_name
)
SELECT event_year, repo_name, stars FROM tmp1
```
![star-growth-trends-of-leading-programming-languages (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/3db2c129-af20-c37f-e7a1-b632c41147ac.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{代表的なデータベースのスターの増加傾向}}$$



### 中国：オープンソースデータベースのファン数No.1
データベースリポジトリのスターゲイザーが11,171人と最もオープンソースデータベースのファンが多いのは中国、次いでアメリカ、ヨーロッパとなっています。
以下は、SQLコマンドになります。
```
select upper(u.country_code) as country_or_area, count(*) as count, count(*) / max(s.total) as percentage
from github_events
use index(index_github_events_on_repo_id)
left join users u ON github_events.actor_login = u.login
join (
    -- Get the number of people has the country code.
    select count(*) as total
    from github_events
    use index(index_github_events_on_repo_id)
    left join users u ON github_events.actor_login = u.login
    where repo_id in (507775, 60246359, 17165658, 41986369, 16563587, 6838921, 108110, 166515022, 48833910, 156018, 50229487, 20089857, 5349565, 6934395, 6358188, 11008207, 19961085, 206444, 30753733, 105944401, 31006158, 99919302, 50874442, 84240850, 28738447, 44781140, 372536760, 13124802, 146459443, 28449431, 23418517, 206417, 9342529, 19257422, 196353673, 172104891, 402945349, 11225014, 2649214, 41349039, 114187903, 20587599, 19816070, 69400326, 927442, 24494032) and github_events.type = 'WatchEvent' and u.country_code is not null
) s
where repo_id in (507775, 60246359, 17165658, 41986369, 16563587, 6838921, 108110, 166515022, 48833910, 156018, 50229487, 20089857, 5349565, 6934395, 6358188, 11008207, 19961085, 206444, 30753733, 105944401, 31006158, 99919302, 50874442, 84240850, 28738447, 44781140, 372536760, 13124802, 146459443, 28449431, 23418517, 206417, 9342529, 19257422, 196353673, 172104891, 402945349, 11225014, 2649214, 41349039, 114187903, 20587599, 19816070, 69400326, 927442, 24494032) and github_events.type = 'WatchEvent' and u.country_code is not null
group by 1
order by 2 desc;
```
![geographical-distribution-database-stargazers (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/6477cdcc-b087-3f2b-9abf-68bbed7ac92b.png)
$$\style{align: center; font-family: "Helvetica Neue",Helvetica,"ヒラギノ角ゴ ProN W3","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,sans-serif}{\text{オープンソースデータベースのスターゲイザーの地理的分布}}$$

[OSSInsight.io](https://ossinsight.io/)では、2011年以降に作成されたGitHubリポジトリに対して、独自のカスタムインサイトを作成することも可能です。ぜひ、[Insightsのページ](https://ossinsight.io/)で詳細をご覧ください。
### TiDB Cloudで独自の分析を実行
OSSInsight.ioのすべての分析は、サービスとしてのフルマネージドデータベースである[TiDB Cloud](https://pingcap.co.jp/tidb-cloud/?utm_source=qiita&utm_medium=qiita_blog)によって提供されています。独自の分析を実行し、独自の洞察を得たい場合は、TiDB Cloudアカウントに[サインアップ](https://tidbcloud.com/signup?utm_source=ossinsight&utm_medium=referral)し、この10分間のチュートリアルでご自身で試してみてください。


PingCAPでは、定期的にウェビナーを開催しています。最新のトピックは[こちら](https://pingcap.co.jp/event/?utm_source=qiita&utm_medium=qiita_blog)からご覧ください。
また、2022年7月7日にユーザー企業様の体験を起点としたリアルとオンラインのハイブリッドイベント[「TiDB User Day」](https://pingcap.co.jp/tidb-user-day-2022/?utm_source=qiita&utm_medium=qiita_blog)を開催します。大手ユーザー企業の採用事例やパネルディスカッションを予定しておりますので、ぜひお気軽にお申し込みください。なお、イベントに登録すると先着200名様にAmazonギフト券1,000円分をプレゼントします。

https://youtu.be/Ia66MxXuGaI