GitHub APIでコミット履歴を取得する

# 概要

GitHub APIを利用して、コミット履歴を取得します。

publicリポジトリのコミット履歴を取得するので、認証についての考慮はしません。

## 利用するAPI

`https://api.github.com/repos/{owner}/{repo}/commits`
を利用します。（詳細は下記）
https://docs.github.com/en/github-ae@latest/rest/reference/repos#list-commits

###　やってみた

試しに[このリポジトリ](https://github.com/nannany/reading_memo)の2020年のコミットを1つ取得するために、下記のようなリクエストを投げてみました。

```
https://api.github.com/repos/nannany/reading_memo/commits?since=2018-01-01T00:00:00+0900&until=2018-12-31T23:59:59+0900&per_page=1
```

結果はこんな感じ。

```json
[
    {
        "sha": "d22d194dcb2392e97e56329f131fd184da9d0246",
        "node_id": "MDY6Q29tbWl0MTE5Mzg1NjY3OmQyMmQxOTRkY2IyMzkyZTk3ZTU2MzI5ZjEzMWZkMTg0ZGE5ZDAyNDY=",
        "commit": {
            "author": {
                "name": "nannany",
                "email": "ymym1990ymym@gmail.com",
                "date": "2018-12-30T04:59:34Z"
            },
            "committer": {
                "name": "nannany",
                "email": "ymym1990ymym@gmail.com",
                "date": "2018-12-30T04:59:34Z"
            },
            "message": "release",
            "tree": {
                "sha": "07f52b3055e8b92fca56bba10d3d09ae921ccef8",
                "url": "https://api.github.com/repos/nannany/reading_memo/git/trees/07f52b3055e8b92fca56bba10d3d09ae921ccef8"
            },
            "url": "https://api.github.com/repos/nannany/reading_memo/git/commits/d22d194dcb2392e97e56329f131fd184da9d0246",
            "comment_count": 0,
            "verification": {
                "verified": false,
                "reason": "unsigned",
                "signature": null,
                "payload": null
            }
        },
        "url": "https://api.github.com/repos/nannany/reading_memo/commits/d22d194dcb2392e97e56329f131fd184da9d0246",
        "html_url": "https://github.com/nannany/reading_memo/commit/d22d194dcb2392e97e56329f131fd184da9d0246",
        "comments_url": "https://api.github.com/repos/nannany/reading_memo/commits/d22d194dcb2392e97e56329f131fd184da9d0246/comments",
        "author": {
            "login": "nannany",
            "id": 14943122,
            "node_id": "MDQ6VXNlcjE0OTQzMTIy",
            "avatar_url": "https://avatars.githubusercontent.com/u/14943122?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/nannany",
            "html_url": "https://github.com/nannany",
            "followers_url": "https://api.github.com/users/nannany/followers",
            "following_url": "https://api.github.com/users/nannany/following{/other_user}",
            "gists_url": "https://api.github.com/users/nannany/gists{/gist_id}",
            "starred_url": "https://api.github.com/users/nannany/starred{/owner}{/repo}",
            "subscriptions_url": "https://api.github.com/users/nannany/subscriptions",
            "organizations_url": "https://api.github.com/users/nannany/orgs",
            "repos_url": "https://api.github.com/users/nannany/repos",
            "events_url": "https://api.github.com/users/nannany/events{/privacy}",
            "received_events_url": "https://api.github.com/users/nannany/received_events",
            "type": "User",
            "site_admin": false
        },
        "committer": {
            "login": "nannany",
            "id": 14943122,
            "node_id": "MDQ6VXNlcjE0OTQzMTIy",
            "avatar_url": "https://avatars.githubusercontent.com/u/14943122?v=4",
            "gravatar_id": "",
            "url": "https://api.github.com/users/nannany",
            "html_url": "https://github.com/nannany",
            "followers_url": "https://api.github.com/users/nannany/followers",
            "following_url": "https://api.github.com/users/nannany/following{/other_user}",
            "gists_url": "https://api.github.com/users/nannany/gists{/gist_id}",
            "starred_url": "https://api.github.com/users/nannany/starred{/owner}{/repo}",
            "subscriptions_url": "https://api.github.com/users/nannany/subscriptions",
            "organizations_url": "https://api.github.com/users/nannany/orgs",
            "repos_url": "https://api.github.com/users/nannany/repos",
            "events_url": "https://api.github.com/users/nannany/events{/privacy}",
            "received_events_url": "https://api.github.com/users/nannany/received_events",
            "type": "User",
            "site_admin": false
        },
        "parents": [
            {
                "sha": "b19ac18b72e63e7798a6dce5828fcdaf9ead86e7",
                "url": "https://api.github.com/repos/nannany/reading_memo/commits/b19ac18b72e63e7798a6dce5828fcdaf9ead86e7",
                "html_url": "https://github.com/nannany/reading_memo/commit/b19ac18b72e63e7798a6dce5828fcdaf9ead86e7"
            }
        ]
    }
]
```


## 感想

GitHub APIには多くのエンドポイントが用意されており驚きました。  
(OPEN API Specのファイルが６０,０００行弱ありました😲)