ランサーズ(Lancers)エンジニアブログ > DevOps > githubのissue, pull request 検索をハックする!

githubのissue, pull request 検索をハックする!

上野諒一|2016年12月05日
DevOps

こんにちは、エンジニアの上野です。
ランサーズストア の開発責任者として日々奮闘中です。

今日は、エンジニアみんな大好きgithubの検索クエリをハックする!!と題して、検索クエリの解説をしようと思います。githubではissueやpull requestを検索するときにクエリを指定すると結構柔軟に条件を指定して調べることが出来ます。

自分自身、入社してから数え切れないリリースをしているので、しばしばこのクエリを用いて過去のissueなどを調べています。せっかくの機会ということで、「公式helpに沿ってルールのまとめ」と「普段使っているクエリの紹介」の2部構成でお届けします。

スクリーンショット 2016-12-05 16.04.45

 

githubのissue, PR検索用で使えるクエリ一覧

ここからは公式helpにある文法を日本語で解説していきます。
公式のhelpのまとめ方が少し冗長だなと感じる部分は項目を合体させてできるだけ簡潔に記述するようにしています。

元のヘルプはこちら
https://help.github.com/articles/searching-issues/

文法の基礎はこちらで確認できます
https://help.github.com/articles/search-syntax/

 

曖昧にキーワード検索する – hoge

titleやコメント、ユーザー名などでキーワードに引っかかれば表示されます(曖昧な検索)

リファクタリング
仕事検索

 

issue か pull request(PR)に限って検索する – type:pr

通常、issuesとPRの両方が表示されます。typeを指定することで片方を限定して表示することが出来ます

type:pr
type:issue

 

検索範囲を絞り込む – in:field名

キーワードの後に`in:field名`を指定することで、キーワードの検索範囲を絞ることが出来ます。複数指定したい場合はカンマ区切りにすることで絞込可能です

# タイトルにwarningがついている
warning in:title

 

# タイトル or 本文にerrorがついている
error in:title,body

 

# コメントにLGTMがついている
LGTM in:comments

 

リポジトリの公開ステータスを指定して検索する – is:private

githubを横断して検索する時にリポジトリの公開範囲を指定して絞り込むことが出来ます

is:public
is:private

 

関係している人を指定して検索する

githubでは関係している人を指定して検索する事ができます。関わり方によって幾つかの検索キーが用意されています

# そのissue or PRを作成した人
author:ryoichi-u

 

# アサインされている人
assignee:ryoichi-u

 

# コメントしている人
commenter:ryoichi-u

 

# メンションが飛んでいる人
mentions:ryoichi-u

 

# 関連している人(author or assignee or commenter or mentions)
involves:ryoichi-u

 

ステータスを指定して検索する – state:ステータス

open状態やclose状態のものだけを指定して検索することが出来ます。

state:open
state:closed
state:merged

 

ラベルを指定して検索する – label:ラベル名

ラベルを利用して絞込をかけることが出来ます。複数のラベルを指定するときは、複数個記述することでand条件で指定することが出来ます。
否定を表す時は`-label:`を指定することで検索することが出来ます。

# bugラベルがついている
label:bug

 

# bug, resolved両方のラベルがついている
label:bug label:resolved

 

# bugラベルなしでpriorityラベルがついている
-label:bug label:priority

 

マイルストーンを指定して検索する – milestone:マイルストーン名

milestone:”overhaul”

milestone:v3.1.0

 

〇〇が付与されていないという条件で検索する – no:項目名

ラベルやマイルストーン、アサインなどが付いていないissueやPRを検索するときは`no`キーを使うことで検索することが出来ます。

# マイルストーンが指定されていないissue
no:milestone type:issue

 

# javaが主言語のリポジトリでアサインされている人がいないissue
no:assignee language:java type:issue

 

# ラベルが付いていない
no:label

 

主要言語で検索する – language:主要言語

language:ruby
language:php

 

issueやPRの状態で検索する – is:状態名

# issue, PRがオープンである or クローズである

is:open
is:closed

 

# マージされている or されていない

is:merged

is:unmerged

 

# issueである or PRである

is:issue

is:pr

 

コミットのステータスで絞込んで検索する – status:commitステータス

コミットのステータスで絞り込んで検索する事ができます各種APIやCIを使っている場合、特に便利なキーです

# 待機中、失敗、成功
status:pending
status:failure
status:success

 

マージ先ブランチ、対象のブランチ名で絞り込む

branch名でも検索することが出来ます。
PRをブランチ名`fix_ref1234`(head)を`master`(base)にマージするpull requestと読み替えるとキーを指定しやすいと思います

# マージ先がmasterブランチ
base:master

 

# ブランチがfix_ref1234のPR
head:fix_ref1234

 

時刻を指定して検索する – イベント名:時刻

時刻を指定できる項目

4種類の時刻をキーに設定することが出来ます。

# 作成日
created:時刻

 

# 更新日
updated:時刻

 

# マージした日
merged:時刻

 

# クローズした日
closed:時刻

 

時刻指定の方法

時刻指定は`YYYY-MM-DD`の形式で行うことが出来ます。標準時のズレについては`+HH:MM:SS`で指定することが可能です。(日本なら`+09:00)
AからBの間は`A..B`で表現することが出来ます

# 2016年より前に作られていてまだopen状態のissue
created:<2016-01-01 state:open type:issue
created:*..2016-01-01 state:open type:issue

 

# 2016-12-01から今までの間で更新されているPR
updated:>=2016-12-01 is:pr
updated:2016-12-01..* is:pr

 

# 2016-04-01から2016-09-30までの間にマージされたPR
merged:2016-04-01..2016-09-30

 

コメント数で絞り込む – comments:数値

# コメントが100個以上ついてクローズしているもの
state:closed comments:>100

 

# コメントの数が500~1000個のもの
comments:500..1000

 

特定のコミットハッシュが含まれるもの – ハッシュ値(前方一致)

特定のコミットハッシュが含まれるPRを検索することが出来ます。
ハッシュ値をそのまま記述することで前方一致でそのハッシュを含むPRを検索することが出来ます。

# e1109abから始まるコミットを持つPR
e1109ab

 

# 0eff326d6213cから始まるコミットを持つマージされたPR
0eff326d6213c is:merged

 

表示順を指定する – sort:条件句

特定のキーワードを指定することで、順番を入れ替えて表示することが出来ます。
`ascending(昇順)`と`descending(降順)`を指定することも可能です。

# コメントが多い順
sort:”Number of comments”

 

# 作成日が新しい順
sort:”Date created”

 

# 作成日が古い順
sort:”Date created” asc

 

# 最新の更新順
sort:”Date of last update”

 

公式のhelpには載っていないが覚えておくと便利なTips

空白文字列がある場合

ダブルクォーテーションで囲むことで利用することが可能です `”hoge fuga”`

# タイトルに「ref 1234」という文字列が入っている
title:”ref 1234″

 

# タイトルにrefが入っていて、bodyなどのどこかかに1234が入っている
title:ref 1234

 

否定条件をつけたい場合

キーワードの場合は`NOT`をつけることで検索可能です。必ず大文字にしてください

# fixという文字列が入っていない
NOT fix

 

# notとfixという文字列が入っている
not fix

 

キーの場合には`-(マイナス)`をつけることで検索可能です。

# bugラベルがついている
label:bug

 

# bugラベルがついていない
-label:bug

 

キーワードの大文字小文字は区別されない

# 以下は全て同じ結果になる
fix
FIX
Fix

 

便利なgithub検索チートシート

文法の説明の前にとりあえずこれだけでも覚えておけば便利になりそうな検索用のクエリを紹介します。
この検索結果をブックマークやチャットの概要にしておくと便利です!

スクリーンショット 2016-12-05 3.47.32

 

bugラベルがついているissueを探す

is:issue label:bug

 

自分が関わっているissueやPRを探す

# 曖昧に自分が関わっているもの
involves:ryoichi-u

 

# アサインされている
assignee:ryoichi-u

 

タイトルにIR(In Review)がついているPRを探す

is:pr IR in:title

 

11月でランサーズストアに関わるissueも含めた課題の消化数を調べる

is:closed closed:2016-11-01..2016-11-30 label:lancers_store

 

11月にランサーズストアに関わる新しい課題を調べる

is:closed created:2016-11-01..2016-11-30 label:lancers_store

 

自分が担当したブランチの4~9月のmaster branchへのマージ数

これは半期の振り返りなどで使えます。自分がどのくらいリリースしていたか、どんなリリースをしたのかを振り返るときに役に立ちます

is:pr is:closed assignee:ryoichi-u merged:2016-04-01..2016-09-30 base:master

 

いかがだったでしょうか?
それぞれのプロジェクトのショートカットや振り返りをする時のissueリストの作成などに活用してもらえたらうれしいです。