📄

google app script から kintone のレコードを抽出(複数)

2025/01/18に公開

kintoneのデータを、クエリを使って複数件取得するスクリプトです。

はじめに

以下の環境で動作しています。

  • google app script … Chrome V8ランタイム利用
  • kintone … クラウド最新版(2025年1月時点)

用意するもの

1件取得する場合と同じく、google app script → プロジェクトの設定 → スクリプトプロパティ に、以下3つのプロパティを作成します。
それぞれ取得元のアプリにあわせてください。

プロパティ名 値(例) 備考
subdomain myDomain アドレス欄https://domainName.cybozu.comにあるdomainName部分
appId 123 取得対象のアプリID
appToken ABCDEFG1234567 取得対象アプリで作成したAPIトークン。
「レコード閲覧」の権限が必要。

スクリプト

getRecords.gs
/**
 * サンプルスクリプト
 */
function sampleScript() {
  // 任意の検索条件を指定する
  const getRecords = getRecords('lastName = "山田"')
  Logger.log(getRecords)
}

/**
 * スクリプトプロパティに設定したアプリからレコードを複数件取得
 */
function getRecords(query) {
  const subDomain = scriptProperties.getProperty('subdomain')
  const appId = Number(scriptProperties.getProperty('appId'))
  const appToken = scriptProperties.getProperty('appToken')

  if (!query || typeof query !== 'string') {
    throw new TypeError('queryは文字列で指定してください。');
  }

  const _query = encodeURIComponent(query)
  const url = `https://${subDomain}.cybozu.com/k/v1/records.json?app=${appId}&totalCount=true&query=${_query}`;
  const options = {
    method: 'GET',
    headers: {
      'X-Cybozu-API-Token': appToken,
    },
    muteHttpExceptions: true,
  };

  try {
    const resp = UrlFetchApp.fetch(url, options);
    if (resp.getResponseCode()!==200) {
      throw new Error(`レコード取得エラー:\n HTTPステータス:${resp.getResponseCode()}\n レスポンス :${resp.toString()}`);
    }
    return JSON.parse(resp.getContentText());
  } catch (error) {
    throw new Error(error.message);
  }
}

説明

スクリプトプロパティから秘匿した設定を取得

part of getRecords.gs
  const subDomain = scriptProperties.getProperty('subdomain')
  const appId = Number(scriptProperties.getProperty('appId'))
  const appToken = scriptProperties.getProperty('appToken')

コピペしづらい&セキュリティ上よろしくないので各設定値はハードコーディングせず、スクリプトプロパティに格納しておき、その内容を取得します。
これで、getRecords()を別のGASスクリプトから利用したいとなった場合も安全に処理できます。


パラメータ・リクエストヘッダの作成

part of getRecords.gs
  const _query = encodeURIComponent(query)
  const url = `https://${subDomain}.cybozu.com/k/v1/records.json?app=${appId}&totalCount=true&query=${_query}`;
  const options = {
    method: 'GET',
    headers: {
      'X-Cybozu-API-Token': appToken,
    },
    muteHttpExceptions: true,
  };

上で取得したスクリプトプロパティをパラメータとリクエストヘッダに設定します。
設定方法は下のページを参考にしました。
https://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/

様々シチュエーションに応じたパラメータの設定方法が記載されていますが、今回のスクリプトではAPIトークンを利用する方式です。
またqueryについては、そのままリクエストURLにあてはめられないため、encodeURIComponent()を使ってエンコードしています。

APIトークン以外の認証方式を利用する場合は、以下ページに認証方式の一覧があるので参考にしてください。
https://cybozu.dev/ja/id/d509b956c8f84c45e1e129ae/#request-headers


リクエストする

part of getRecords.gs
  try {
    const resp = UrlFetchApp.fetch(url, options);
    if (resp.getResponseCode()!==200) {
      throw new Error(`レコード取得エラー:\n HTTPステータス:${resp.getResponseCode()}\n レスポンス :${resp.toString()}`);
    }
    return JSON.parse(resp.getContentText());
  } catch (error) {
    throw new Error(error.message);
  }

GASスクリプト標準のHTTPリクエストUrlFetchApp.fetchを使って外部(kintone)にHTTPリクエストします。
レスポンスコードが200以外はエラーになるので、その場合にはエラーをthrowするようにしています。

Discussion