kitak blog

Kみたいなエンジニアになりたいブログ

Github APIのシンプルなラッパー Octokit gemを触ってみた

こんにちは。来年から会社に入ってくる後輩に「きたけーさんってブログかいてるんですか? みたことないんすけど」と言われてちょっとしょんぼりしたきたけーです。(結果がすべてだから、これは僕のせいです)

先日、GithubがOctokitというGithub APIの簡単なラッパーを公開しました。RubyとObjective Cのふたつから選べるようです。
最近、考えているアイディアで使えそうだったのでRuby版を簡単に触ってみました。

導入

Ruby版はgemとして公開されているのでgem installから簡単に入れることができます。

gem install octokit

ドキュメントをみてみよう

基本的にドキュメントを読めば、自分のやりたいことが見つかるとおもいます。
...

無責任感がはんぱないので、いくつか利用例をみてみましょう。

リポジトリのissuesを取得する

require 'octokit'

issues = Octokit.list_issues("sferik/rails_admin")

puts issues[0]["title"] # issuesのタイトルを表示
puts issues[0]["number"] # issues番号を表示

# 取得した複数のissuesのタイトルを表示
issues.each do |i|
  puts i["title"]
end

ひとつひとつのissuesのオブジェクトはHashっぽく見えますが、実は内部でHashieという便利gemをつかっているので以下のようにアクセスできます。

puts issues[0].class # Hashie::Mesh
puts issues[0].title
puts issues[0].number

プライベートなリポジトリで認証が必要な場合は、 いったんクライアントオブジェクトをつくってからアクセスします。

@client = Octokit::Client.new(login: YOUR_NAME, password: YOUR_PASSWORD)
issues = @client.list_issues("himitsu/acco")

issuesのコメントを取得

issuesの一覧から絞り込んで、今度はあるissuesのコメントを取得してみましょう。 issues_commentsのふたつめの引数『1』がissuesの番号です。 これはissuesオブジェクトのnumberメソッドから取得できます。

comments = @client.issue_comments("himitsu/acco", 1)

一回の呼び出しで取得できるコメントは最大30件です。コメントは投稿の古いものから順に(Githubのページだと上から順に)取得します。続きを取得したい場合はpageオプションを渡します。
※ issuesも最大取得件数は30件で、同様にpageオプションで続きを取得します。

comments = @client.issue_comments("himitsu/acco", 1, page: 2)

# コメントの一覧を表示
comments.each do |c|
  puts c.body
end

# 一番新しい投稿で...
puts comments[-1].created_at # いつ投稿されたか表示
puts comments[-1].user.login # 投稿したユーザのログイン名を表示
puts comments[-1].html_url # コメントのURLを表示

便利ですね。

APIの呼び出し回数について

Github APIには時間あたりの呼び出し回数の上限があるので、アプリを開発する際は頭に入れておきましょう。

# 非認証
Octokit.ratelimit # 時間あたりの呼び出し回数の上限
Octokit.ratelimit_remaining # 残り何回呼び出すことができるか

# 認証
@client.ratelimit 
@client.ratelimit_remaining 

まとめ

Github APIのシンプルなラッパー Octokit gemを触ってみました。けっこう簡単に使えてよいですね。
考えているアイディアも簡単に実装できそうです。
ドキュメントをみると他にも色々な情報にアクセスできるようなので遊んでみたらいかがでしょうか。