GitHub CLI から API を呼び出すと Authorization ヘッダを自動的につけてくれたりして便利だが、GraphQL API を呼び出すときにクエリを直接コマンドラインに書くのはちょっと使い勝手が悪いと感じていた。
$ gh api graphql --paginate -f query='
query($endCursor: String) {
viewer {
repositories(first: 100, after: $endCursor) {
nodes { nameWithOwner }
pageInfo {
hasNextPage
endCursor
}
}
}
}
'
GraphQL クエリは基本、長くなるので、シェルで直接やるのはトライ&エラーに不向きだ。やっぱりクエリはエディタで書いてファイルに保存し、gh api graphql からそのファイルを指定できると便利なはず。と思ってシェルのラッパー関数を書いた。
これでだいぶやりやすくなった。
❯ gq query.txt
+ gh api graphql -f 'query=query {
viewer {
login
repositories(first: 10, orderBy: {field: CREATED_AT, direction: DESC}, privacy: PUBLIC) {
nodes {
nameWithOwner
}
}
}
}'
{
"data": {
"viewer": {
"login": "kyanny",
"repositories": {
"nodes": [
{
"nameWithOwner": "kyanny/exiftool-web"
},
{
"nameWithOwner": "kyanny/alfred-workflow-time-duration-calculator"
},
{
"nameWithOwner": "kyanny/ruby.wasm"
},
{
"nameWithOwner": "kyanny/ruby-wasm-playground"
},
{
"nameWithOwner": "kyanny/caniuse-backup-utils"
},
{
"nameWithOwner": "kyanny/github-enterprise-releases.json"
},
{
"nameWithOwner": "kyanny/alfred-workflow-securerandom"
},
{
"nameWithOwner": "gm3dmo/the-power"
},
{
"nameWithOwner": "kyanny/get-title-of-page"
},
{
"nameWithOwner": "kyanny/cidr-to-ip-list"
}
]
}
}
}
}