GitHub CLIでGraphQLのオプショナルな引数を扱う

2022-01-08GraphQLGitHub CLI


GitHubのCLIからGitHubのAPIをたたくことができる

最近知って便利でよく使っているが、GitHub CLIのオプションを使って特定のパラメータを渡す場合と渡さない場合どちらも同じGraphQLのクエリを使いたいというパターンの話

具体的に言うと件数が100件以上ある場合、GitHubのAPIだと100件が上限なので2回目以降のリクエストでendCursorの値を渡してafterに指定する必要がある

cursorの値を渡す場合と渡さない場合でもクエリは統一して扱いたい

  • projects.graphql
query($projectId: ID! $cursor: String){
  node(id: $projectId) {
    ... on ProjectNext {
      items(first: 100, after: $cursor) {
        pageInfo {
          hasNextPage
          endCursor
        }
        nodes{
          title
          id
          updatedAt
          fieldValues(first: 8) {
            nodes{
              value
              projectField{
                name
              }
            }
          }
        }
      }
    }
  }
}

値が必須かどうかは!をつけるかで変わる

この場合ID!となっているので$projectIdは必須パラメータ、$cursorはオプショナルなパラメータ(null許容)

実際のコマンドは下記(環境変数としてGITHUB_PROJECT_IDを定義済みの前提)

  • 引数あり(cursor付き)
gh api graphql -f query="$(cat projects.graphql)" -f projectId=${GITHUB_PROJECT_ID} -f cursor=hogehoge
  • 引数なし(cursorなし)
gh api graphql -f query="$(cat projects.graphql)" -f projectId=${GITHUB_PROJECT_ID}

どちらもエラーにならず結果が返ってくる