バナー画像

GtiHubのAPIについてまとめています。

GitHubのAPI(REST API)でウェブからgit操作が可能

GitHubには、git機能のREST APIが用意されています。ウェブアプリ等から、GitHubへのgit操作が可能です。

シンプルにGitHubのAPIを呼び出してみましょう。下記は、Linux(ubuntu)で実行した例です。ユーザoctocatの組織情報を取得します。curlコマンドに-Iオプションを指定しているため、ヘッダ情報も一緒に出力します。

関連)octocat (The Octocat) (ユーザoctocaのリポジトリ)

$ curl -I https://api.github.com/users/octocat/orgs
HTTP/2 200
server: GitHub.com
date: Fri, 25 Jun 2021 05:13:05 GMT
content-type: application/json; charset=utf-8
content-length: 5
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: "992aaf92b487506974e4305db4a64326866f3ed48b2ba424cef8fbe4e28f72b0"
x-github-media-type: github.v3; format=json
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
x-ratelimit-reset: 1624601585
x-ratelimit-resource: core
x-ratelimit-used: 1
accept-ranges: bytes
x-github-request-id: AC92:23F8:427FB7:4B5724:60D565E1

https://api.github.com/users/ユーザ名/orgsにアクセスすることで、指定したユーザの組織情報が取得できるんですね。ヘッダ情報によると、「content-type: application/json; charset=utf-8」とあり、utf-8文字コードで、データの形式はjsonです。

参考)GitHubのREST API – GitHub Docs

ユーザ認証つきで、GitHubのAPIにアクセスする

publicリポジトリにはパスワードなしでアクセス可能ですが、プライベートリポジトリへのアクセスにはユーザ認証が必要です。curlに-uオプションを指定すると、接続時にユーザ名とパスワードを指定可能です。

$  curl -i -u your_username https://api.github.com/users/octocat
Enter host password for user 'your_username':

しかし、アクセスするたびにパスワード入力するのは面倒ですね。そこで、個人アクセストークンを使って以下のようにアクセスすれば、パスワード入力は不要です。

$ curl -i -u username:$token https://api.github.com/users/octocat

 

GitHub公式サイトによれば、トークンはパスワードと同じ扱いのため、直接記述するのは避け、$tokenなどの環境変数に入れて使用することが推奨されています。

個人アクセストークンの取得方法は、こちらの記事を参照してください。

【関連記事】
GitHubのログイン時にパスワード入力を省略する httpsとssh接続を解説 

GitHubのAPIでリポジトリ情報を取得

REST APIで特定ユーザのリポジトリ情報を取得するには以下のように指定します。ユーザ名googleのリポジトリを取得しています。

$ curl https://api.github.com/users/google/repos
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     100  4348    0  4348    0   [
    {
0      "id": 170908616,
 7722     "node_id": "MDEwOlJlcG9zaXRvcnkxNzA5MDg2MTY=",
       "name": ".github",
  0     "full_name": "google/.github",
--:    "private": false,
--    "owner": {
:--      "login": "google",
 --      "id": 1342004,
:--:--      "node_id": "MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=",
 --:--:-      "avatar_url": "https://avatars.githubusercontent.com/u/1342004?v=4",
-        "gravatar_id": "",
7709      "url": "https://api.github.com/users/google",
      "html_url": "https://github.com/google",
      "followers_url": "https://api.github.com/users/google/followers",
      "following_url": "https://api.github.com/users/google/following{/other_
user}",
      "gists_url": "https://api.github.com/users/google/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/google/starred{/owner}{/re
po}",
      "subscriptions_url": "https://api.github.com/users/google/subscriptions
",
      "organizations_url": "https://api.github.com/users/google/orgs",
      "repos_url": "https://api.github.com/users/google/repos",
      "events_url": "https://api.github.com/users/google/events{/privacy}",
      "received_events_url": "https://api.github.com/users/google/received_ev
ents",
      "type": "Organization",
      "site_admin": false
    },
    "html_url": "https://github.com/google/.github",
 :
 :

特定のリポジトリのissuesを取得するには以下のようにします。リポジトリgoogle-research/google-researchのissuesを取得しています。

APIの最初の方には、リポジトリに関する情報が出力されており、続いてissuesが出力されています。

$ curl https://api.github.com/repos/google-research/google-research/issues 
 :
(リポジトリに関する情報)
 :
    "id": 929181867,
    "node_id": "MDU6SXNzdWU5MjkxODE4Njc=",
    "number": 743,
    "title": "UFlow Training on custom data set  failed with error : train_ds
 = train_datasets[0]   IndexError: list index out of range ",
    "user": {
      "login": "infi2021",
      "id": 86414621,
      "node_id": "MDQ6VXNlcjg2NDE0NjIx",
      "avatar_url": "https://avatars.githubusercontent.com/u/86414621?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/infi2021",
      "html_url": "https://github.com/infi2021",
      "followers_url": "https://api.github.com/users/infi2021/followers",
      "following_url": "https://api.github.com/users/infi2021/following{/othe
r_user}",
      "gists_url": "https://api.github.com/users/infi2021/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/infi2021/starred{/owner}{/
repo}",
      "subscriptions_url": "https://api.github.com/users/infi2021/subscriptio
ns",
      "organizations_url": "https://api.github.com/users/infi2021/orgs",
      "repos_url": "https://api.github.com/users/infi2021/repos",
      "events_url": "https://api.github.com/users/infi2021/events{/privacy}",
      "received_events_url": "https://api.github.com/users/infi2021/received_
events",
      "type": "User",
      "site_admin": false
    },
 :
 :

同様に、特定のリポジトリのプルリクエストのうち、ステータスがopenのもののみ取得するには、以下のようにします。

リポジトリgoogle-research/google-researchのプルリクエストのうち、state=openの情報が出力されます。

$ curl https://api.github.com/repos/google-research/google-research/pulls?state=open
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0[
  {
    "url": "https://api.github.com/repos/google-research/google-research/pull
s/741",
    "id": 675732821,
    "node_id": "MDExOlB1bGxSZXF1ZXN0Njc1NzMyODIx",
    "html_url": "https://github.com/google-research/google-research/pull/741"
,
    "diff_url": "https://github.com/google-research/google-research/pull/741.
diff",
    "patch_url": "https://github.com/google-research/google-research/pull/741
.patch",
    "issue_url": "https://api.github.com/repos/google-research/google-researc
h/issues/741",
    "number": 741,
    "state": "open",
    "locked": false,
    "title": "Update pendulum_collect_data.ipynb",
    "user": {
      "login": "katelynnashley95icloudcom",
      "id": 85616681,
      "node_id": "MDQ6VXNlcjg1NjE2Njgx",
      "avatar_url": "https://avatars.githubusercontent.com/u/85616681?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/katelynnashley95icloudcom",
      "html_url": "https://github.com/katelynnashley95icloudcom",
      "followers_url": "https://api.github.com/users/katelynnashley95icloudco
m/followers",
 :
 :

GitHub APIの使用例

GitHubのAPIを使ったサイトで有名なのは、github1s.comです。

参考)https://github1s.com/

vscodeのオープンソース版(code-oss)と、GitHub REST APIを組み合わせて作られており、ブラウザ上でvscodeを使ってGitHub上のコードを読みやすくするサービスです。

参考)github1s、恐ろしい子。githubのコードをVS Codeで開く、1秒で。 – Qiita

【関連記事】
GitHubをvscodeと連携 デフォルトエディタへの設定と拡張機能

GitHub APIのまとめ

ポテパンダの一言メモ
  • GitHubのREST APIは、git操作をウェブ経由で実行できる
  • GitHubのREST APIは、json形式、utf-8文字コードで出力される
  • github1s.comなどGitHub REST APIを使って作られたウェブサービスあり

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。