@kyanny's blog

My thoughts, my life. Views/opinions are my own.

gq(): `gh api graphql` wrapper

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 からそのファイルを指定できると便利なはず。と思ってシェルのラッパー関数を書いた。

gist.github.com

これでだいぶやりやすくなった。

❯ 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"
          }
        ]
      }
    }
  }
}