この記事は、モバイルファクトリー Advent Calendar 2015 4日目の記事です
Githubの管理作業は他のWebサービスと同じく基本Webコンソールでできます。 ただ、Organizationとかを管理してる場合、ある程度以上規模が大きくなると、 定型的な管理作業が増えて、Webでぽちぽちやるには煩雑でつらくなってきます。
ここで怠惰エンジニア*1はどうにかこの定型作業を自動化/スクリプト化できないかなと考え始めます。 幸い、GithubにはAPIがあるので、これを利用して要件に合わせて、実装することができます。
ドキュメントは以下の場所にあるので、各APIの使い方などはそちらを参照してください。
apiアクセスを投げる
publicな情報を取得するには普通にcurlでGET発行するだけで、取得出来ます。
curl https://api.github.com/users/masasuzu/repos
が、これだけでは、privateな情報にアクセスできません。ので、Basic認証をしてアクセスをします。
curl -u ${USER}:${PASSWORD} https://api.github.com/orgs/some_privete/repos
ただ、この場合、このアカウントで出来ることが全て実行出来てしまうので、 下記のリンクからアクセストークンを発行して、権限を絞ってAPIにアクセスするのが望ましいです。 アクセストークンは作成時にしか見れないので、ちゃんと書き留めておくようにしましょう。
アクセストークンを使用した場合、下記の3つの方法で認証出来ます。
curl -u :${ACCESS_TOKEN} https://api.github.com/orgs/some_privete/repos curl -H 'Authorization: token ${ACCESS_TOKEN}' https://api.github.com/orgs/some_privete/repos curl 'https://api.github.com/orgs/some_private/repos?access_token=${ACCESS_TOKEN}'
ドキュメントに各API発行に必要なscope(権限)が書いてあるので必要なscopeだけ付与してあげると良いです。
perlでの選択肢
今までで、APIアクセスする手段を得ることはできましたが、シェルスクリプトで処理を組み立てるのは、 無謀なので、使い慣れてるプログラミング言語で実装したいところです。 当社ではPerlを使い慣れてるエンジニアが多いので、ここではPerlのクライアントを紹介します。 現在のところ以下の2つの選択肢があります。
私はPithubを使っています。使い始めた時期においてPithubの方が更新されてそうだったからです。 が、今見るとNet::Githubも更新されてるように見えます。
他の言語での選択肢
特にプログラミング言語にこだわりが無いのであれば、githubがメンテナンスしてるoctokitを使うと良いと思います。 RubyとObjective C、.Netに対応してます。たぶん鉄板だと思います。
(しかし、octokitのこのサンライズというかバンダイに怒られそうなデザインは大丈夫なのでしょうか?
まとめ
- 煩雑で定型的な作業はGithub APIで自動化すると良い
- Privateな情報の操作はアクセストークンを発行してAPIを発行する
- PerlにはPithubとNet::Githubのクライアントライブラリがある
- こだわりがなければ、クライアントはoctokit使うと良い
明日は、 @mihyaeru21 さんです。iOS回りの面白いエントリが見れそうです。