LoginSignup
18

More than 5 years have passed since last update.

Github APIを使ってラベルのセットアップをする

Posted at

はじめに

Githubのissueを使ってプロジェクトのタスクを管理している会社は多いと思いますが、それぞれ自社独自のラベル設定があるのではないでしょうか。
この記事では、Githubに新しくリポジトリを作成した際に、自社独自のカスタムラベルのセットをコマンド一発で作成します。

手順

アクセストークンを取得する

まずはAPIを使用するためのアクセストークンを取得します。アクセストークンはパスワードの代わりに使用してリポジトリの情報をいろいろと操作します。

トークンの取得方法は下記を参照。
https://help.github.com/articles/creating-an-access-token-for-command-line-use/

以下の様なトークンが取得できます。
これをAPIへのアクセス時にパラメータとして使用します。

1234abcd5678efgh9012ijkl3456mnop7890rstu

CurlでAPIへアクセスする

以下、{xxxxxx} となっている箇所は実際の値に置き換えてください。
たとえば {repo} だったらリポジトリ名に置き換えます。

どんなAPIがあるか調べる

https://developer.github.com/v3/
ここにドキュメントもあるので、別にコマンドで調べる必要はありませんが、APIでも確認できます。

コマンド
curl https://api.github.com
実行結果
$ curl https://api.github.com
{
  "current_user_url": "https://api.github.com/user",
  "current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}",
  "authorizations_url": "https://api.github.com/authorizations",
  "code_search_url": "https://api.github.com/search/code?q={query}{&page,per_page,sort,order}",
  "emails_url": "https://api.github.com/user/emails",
  "emojis_url": "https://api.github.com/emojis",
  "events_url": "https://api.github.com/events",
  "feeds_url": "https://api.github.com/feeds",
  "followers_url": "https://api.github.com/user/followers",
  "following_url": "https://api.github.com/user/following{/target}",
  "gists_url": "https://api.github.com/gists{/gist_id}",
  "hub_url": "https://api.github.com/hub",
  "issue_search_url": "https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}",
  "issues_url": "https://api.github.com/issues",
  "keys_url": "https://api.github.com/user/keys",
  "notifications_url": "https://api.github.com/notifications",
  "organization_repositories_url": "https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}",
  "organization_url": "https://api.github.com/orgs/{org}",
  "public_gists_url": "https://api.github.com/gists/public",
  "rate_limit_url": "https://api.github.com/rate_limit",
  "repository_url": "https://api.github.com/repos/{owner}/{repo}",
  "repository_search_url": "https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}",
  "current_user_repositories_url": "https://api.github.com/user/repos{?type,page,per_page,sort}",
  "starred_url": "https://api.github.com/user/starred{/owner}{/repo}",
  "starred_gists_url": "https://api.github.com/gists/starred",
  "team_url": "https://api.github.com/teams",
  "user_url": "https://api.github.com/users/{user}",
  "user_organizations_url": "https://api.github.com/user/orgs",
  "user_repositories_url": "https://api.github.com/users/{user}/repos{?type,page,per_page,sort}",
  "user_search_url": "https://api.github.com/search/users?q={query}{&page,per_page,sort,order}"
}

今回は repository_url を利用すれば良さそうです。

Labelsの情報にアクセスするAPIを調べる

ここからは認証が必要なので、-u {user}:{token} オプションを付けます。

コマンド
curl https://api.github.com/repos/{owner}/{repo} -u {user}:{token}
実行結果
$ curl https://api.github.com/repos/kung-fu/labels-sample -u kung-fu:{token}

:

"labels_url": "https://api.github.com/repos/kung-fu/labels-sample/labels{/name}",

:

labels_url を利用します。
URLの最後に {/name} をつけなければ全labesが取得できそうです。

登録されているラベルを取得

リポジトリ作成時にデフォルトで登録されているラベルを取得します。

コマンド
curl https://api.github.com/repos/{owner}/{repo}/labels -u {user}:{token}
実行結果
$ curl https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token}
[
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/bug",
    "name": "bug",
    "color": "fc2929"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/duplicate",
    "name": "duplicate",
    "color": "cccccc"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/enhancement",
    "name": "enhancement",
    "color": "84b6eb"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/help%20wanted",
    "name": "help wanted",
    "color": "159818"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/invalid",
    "name": "invalid",
    "color": "e6e6e6"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/question",
    "name": "question",
    "color": "cc317c"
  },
  {
    "url": "https://api.github.com/repos/kung-fu/labels-sample/labels/wontfix",
    "name": "wontfix",
    "color": "ffffff"
  }
]

現在、登録されているラベルの一覧が取得できました。デフォルトのものですね。

デフォルトのラベルを削除

デフォルトのラベルをすべて削除してから独自のラベルを登録してみます。
ループで回せばいいのですが、名前も数も決まってるので、今回は1件ずつ削除してしまいます。

コマンド
curl -X DELETE https://api.github.com/repos/{owner}/{repo}/labels/{name} -u {user}:{token}
実行結果
$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/bug -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/duplicate -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/enhancement -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/help%20wanted -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/invalid -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/question -u kung-fu:{token}

$ curl -X DELETE https://api.github.com/repos/kung-fu/labels-sample/labels/wontfix -u kung-fu:{token}

ラベルを追加

ラベル追加のAPIはPOSTパラメータにjsonを渡す必要があります。
curlでjsonをpostするには以下のようにします。
なお、1ラベルずつしか作成できないようです。

コマンド
curl -X POST https://api.github.com/repos/{owner}/{repo}/labels -u {user}:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"{ラベル名}","color":"{カラーコード}"}' 

ラベル名が日本語の場合はunicodeエスケープしてください。

実行結果
$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"0:\u672a\u5bfe\u5fdc","color":"dbefff"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"1:\u5bfe\u5fdc\u4e2d","color":"bbdefb"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"2:\u52d5\u4f5c\u691c\u8a3c","color":"90caf9"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"3:\u958b\u767a\u5b8c\u4e86","color":"2196f3"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"4:\u78ba\u8a8d\u6e08\u307f","color":"1976d2"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"5:\u672c\u756a\u53cd\u6620\u6e08","color":"0d47a1"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"8:\u4fdd\u7559","color":"CCCCCC"}'

$ curl -X POST https://api.github.com/repos/kung-fu/labels-sample/labels -u kung-fu:{token} -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"9:\u5bfe\u5fdc\u3057\u306a\u3044","color":"666666"}'

結果

適当にシェルスクリプトにしてみる

setup_labels.sh
#!/bin/sh

API_URL="https://api.github.com/repos"

if [ $# -ne 4 ]; then
  echo "[usage]" 1>&2
  echo "setup_labels.sh {owner} {repo} {user} {token} " 1>&2
  exit 1
fi

curl -X DELETE $API_URL/$1/$2/labels/bug -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/duplicate -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/enhancement -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/help%20wanted -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/invalid -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/question -u $3:$4
curl -X DELETE $API_URL/$1/$2/labels/wontfix -u $3:$4

curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"0:\u672a\u5bfe\u5fdc","color":"dbefff"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"1:\u5bfe\u5fdc\u4e2d","color":"bbdefb"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"2:\u52d5\u4f5c\u691c\u8a3c","color":"90caf9"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"3:\u958b\u767a\u5b8c\u4e86","color":"2196f3"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"4:\u78ba\u8a8d\u6e08\u307f","color":"1976d2"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"5:\u672c\u756a\u53cd\u6620\u6e08","color":"0d47a1"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"8:\u4fdd\u7559","color":"CCCCCC"}'
curl -X POST $API_URL/$1/$2/labels -u $3:$4 -H "Accept: application/json" -H "Content-type: application/json" -d '{"name":"9:\u5bfe\u5fdc\u3057\u306a\u3044","color":"666666"}'
実行!
$ ./setup_labels.sh {owner} {repo} {user} {token}

ぎりぎりコマンド一発です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18