Gitlab gem で GitLab API を使ってみる
趣味で GitLab も使ってみているのですが,GitLab API を使って issue や プルリクエストを Slack に通知したいなぁとふと思いました.
そこで octokit.rb のようなライブラリが GitLab にないかなぁと探してみたらやはりあるもんなんですね.今回は Gitlab gem の使い方についてまとめてみようと思います.
使い方
簡単に触ってみたのでこんなプロジェクト構成です.今回はプロジェクトにある issue を取得しようと思います.
gitlab-api-sample ├── .env ├── .gitignore ├── Gemfile ├── Gemfile.lock └── app.rb
Gemfile
# frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'gitlab' gem 'dotenv'
.env
GITLAB_TOKEN='GitLab のパーソナルアクセストークン' GITLAB_PRIJECT_ID='GitLab のプロジェクトID'
.gitignore
.env
app.rb
require 'dotenv' require 'gitlab' Dotenv.load Gitlab.configure do |config| config.endpoint = 'https://gitlab.com/api/v4' config.private_token = ENV["GITLAB_TOKEN"] end puts issues = Gitlab.issues(ENV["GITLAB_PRIJECT_ID"], { labels:'Today,緊急', state:'opened' }).inspect
Gitlab gem で何ができるのかが下記のドキュメントをご確認ください.
ただ,上記のコードにあるように特定の Label がついた issue を取得する方法を理解するのに少し詰まりました.今回は使った issues のドキュメントはこちらになるのですが,Label の条件をどうやって追加するのかがパット見でわかりません.しかし,よく見てみるとドキュメントに以下の記述とコードがあります.
Parameters:
project (Integer, String) (defaults to: nil) — The ID or name of a project.
options (Hash) (defaults to: {}) — A customizable set of options.
# File 'lib/gitlab/client/issues.rb', line 20 def issues(project = nil, options = {}) if project.to_s.empty? && project.to_i.zero? get('/issues', query: options) else get("/projects/#{url_encode project}/issues", query: options) end end
どうやらoptions
に query
を設定できることがわかります.
query
ってどう書くの?
さて,そこで query
はどう書くの!?という話になるのですが色々調べたり試してみた所,どうやら公式の Issues API にヒントがありました.
〜省略〜 GET /issues?labels=foo,bar 〜省略〜
どうやら,labels
というのをquery
として利用すれば良さそうであることがわかります.
app.rb
を改めて載せると下記のように Label の条件はハッシュで書くことで取得できます.state
など他の条件もハッシュで書いていきます.
app.rb
require 'dotenv' require 'gitlab' Dotenv.load Gitlab.configure do |config| config.endpoint = 'https://gitlab.com/api/v4' config.private_token = ENV["GITLAB_TOKEN"] end # Labelの条件は hash の形式で書く puts issues = Gitlab.issues(ENV["GITLAB_PRIJECT_ID"], { labels:'Today,緊急', state:'opened' }).inspect
実際に実行すると下記のようになります.
gitlab-api-sample - [master●] » bundle install 2020/06/29 19:54:11 Using bundler 2.1.4 Using dotenv 2.7.5 Using mime-types-data 3.2020.0512 Using mime-types 3.3.1 Using multi_xml 0.6.0 Using httparty 0.18.1 Using unicode-display_width 1.7.0 Using terminal-table 1.8.0 Using gitlab 4.15.0 Bundle complete! 2 Gemfile dependencies, 9 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. gitlab-api-sample - [master●] » ruby app.rb 〜ここに label が Today, State が opened の issue 表示される〜
まとめと所感
今回は Gitlab gem で Ruby で GitLab API を使ってみたことについてまとめてみました.今回を通して Gitlab gem で簡単に GitLab API を使えることがわかったのに加えて,query
の書き方を調べたことで,この手のライブラリの読み方についてさらにわかったきたように思いました.
API のドキュメントって読むのに少し慣れが必要だと前々から何となく思っていて,今回を通してほんの少し成長した気がします笑
今作っているツールも出来上がり次第,ブログに書いていこうと思います!!!