JavaScript
GitHub
GoogleAppsScript
TypeScript
GraphQL

Google Apps ScriptでGithub GraphQL API v4を叩く

やりたいこと

  • gasからGithub GraphQL API v4を叩きたい
  • GraphQLをどうやってリクエストにのせればよいのかわからない
  • わかった!

どうやったか

実際に動かしているのはこれです(typescriptで書いてます)
https://github.com/abeyuya/gas-slack-bot-aoba/blob/master/src/lib/github.ts

以下に関係する箇所を抜粋しておきます

const accessToken = process.env.GITHUB_ACCESS_TOKEN || "";
const endpoint = "https://api.github.com/graphql";

const graphql = `
{
  user(login: "abeyuya") {
    organizations(last: 5) {
      nodes {
        name
        url
        repositories(last:100) {
          nodes {
            name
            url
            pullRequests(last:30 states:[OPEN] ) {
              nodes {
                url
                title
                reviewRequests(last:10) {
                  nodes {
                    requestedReviewer {
                      ... on User {
                        url
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
`;

const buildRequestOption = (graphql: string) => {
  return {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization: `bearer ${accessToken}`,
    },
    payload: JSON.stringify({ query: graphql }),
  };
};


export const getAssignedPullRequests = () => {
  const option = buildRequestOption(graphql);
  const res = UrlFetchApp.fetch(endpoint, option);
  const json = JSON.parse(res.getContentText());
  return json;
};

graphql自体は こちら のexplorerで試行錯誤して書いて、その結果をコピペしてきました