レコードの削除

にメンテナンス済み

kintone は豊富な API を提供しており、これを活用することでアプリケーションのデータをプログラムから直接操作することが可能です。

特に、REST API は HTTP リクエストを通じて kintone のデータを操作するための強力なツールです。

このページでは、kintone の REST API を使用して、特定のレコードを 1 件更新する方法について詳しく解説します。

ちなみに、レコードの取得、追加、更新については、レコードを1件だけ取得する API と、複数件取得する API が分かれていますが、削除については、1 件の場合と複数件の場合で使用方法に変わりはありません。

kintone から利用する場合

kintone の JavaScript カスタマイズとして REST API を実行する場合、用意されている JavaScript API を使用することで、簡単に REST API を実行することができます。

JavaScript API のkintone.api.urlメソッドを使用することで、実行されるスペースを意識することなく、REST API のエンドポイントを取得することができます。

汎用的な関数の定義
/**
 * kintone REST APIを使用して、アプリにレコードを一括削除する
 *
 * @param { app: string | number; ids: number[]; revisions?: number[] } } params
 * @return { Promise<{}> } - 成功した場合は空のオブジェクト
 */
const deleteRecords = (params) => {
  return kintone.api(kintone.api.url('/k/v1/records.json', true), 'DELETE', params);
};

レコードを削除する際、多くの場合、特定の条件に一致するレコードを削除することが多いです。

そのため、指定した条件に一致するレコードを取得し、そのレコードを削除する部分まで一般化しても良いでしょう。

レコードの取得と削除
/**
 * kintone REST APIを使用して、指定した条件に一致するレコードを取得する
 *
 * @param { Object } params
 * @param { string | number } params.app - アプリID
 * @param { string[] } params.fields - 取得したいフィールドのフィールドコード
 * @param { string } params.query - レコードを取得する条件
 * @param { boolean } params.totalCount - 取得したレコードの総数を取得するかどうか
 * @return { Promise<{ records: Record<string, any>[]; totalCount: string | null }> } - レコード情報
 */
const getRecords = (params) => {
  const { app, fields, query, totalCount } = params;
  return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', {
    app,
    fields,
    query,
    totalCount,
  });
};

const deleteRecords = (params) => {
  /** 省略 */
};

/**
 * kintone REST APIを使用して、指定した条件に一致するレコードを取得する
 *
 * @param { Object } params
 * @param { string | number } params.app - アプリID
 * @param { string } params.query - レコードを取得する条件
 * @return { Promise<{}> } - レコード情報
 */
const deleteRecordsByQuery = async (params) => {
  const { app, query } = params;
  const fields = ['$id'];
  const { records } = await getRecords({ app, query, fields });

  const ids = records.map((record) => record.$id.value);

  return deleteRecords({ app, ids });
};

引数には、削除先のアプリ ID と、削除を行うための対象を指定する情報を指定します。

対象のレコード ID を配列としてidsプロパティに指定することで、削除対象を指定することができます。

また、revisionsプロパティに、削除対象のレコードのリビジョン番号を指定することで、期待するレコードのリビジョン番号と一致する場合のみ削除を行うことができます。

更新に成功した場合は、空のオブジェクトが返されます。

現在表示しているレコードの特定のフィールドを基にして、レコードを一括削除
(() => {
  const getRecords = (params) => {
    /** 省略 */
  };

  const deleteRecords = (params) => {
    /** 省略 */
  };

  kintone.events.on(['app.record.index.show'], async (event) => {
    const fieldCode = 'フィールドコード';
    const fieldValue = '削除したい値';
    const appId = kintone.app.getId();

    const query = `${fieldCode} = "${fieldValue}"`;
    const fields = ['$id'];
    const { records } = await getRecords({ app: appId, query, fields });

    const ids = records.map((record) => record.$id.value);

    await deleteRecords({ app: appId, ids });

    return event;
  });
})();

使用しているgetRecords関数については、以下のページを参照してください。

レコードの取得(複数件)
kintone REST APIを使用して、レコードを複数件取得する方法を紹介します。レコードIDを指定して、レコード情報を取得することができます。
ユーザーが指定したレコードを一括削除
(() => {
  const deleteRecords = (params) => {
    /** 省略 */
  };

  kintone.events.on(['app.record.index.show'], async (event) => {
    const recordId = prompt('削除するレコードのIDをカンマ区切りで入力してください');
    const appId = kintone.app.getId();

    const ids = recordId.split(',');

    await deleteRecords({ app: appId, ids });

    return event;
  });
})();

kintone 以外から利用する場合

kintone の REST API は、Excel や GAS、Node.js など、様々な環境から利用することができます。

REST API を使用することで、kintone 以外の環境から kintone のデータを使用して、アプリケーションを動作させることが可能です。

APIトークンを使用しましょう

kintone 以外の環境から kintone のデータを取得する場合、認証情報をリクエストに含める必要があります。

認証情報にはいくつかの種類がありますが、API トークンを選択することで、セキュリティを確保しつつ、簡単に認証情報を取得することができます。

最も簡単に使用できるのは ID とパスワードを使用した方法ですが、セキュリティ上のリスクがあるため、必要最小限の権限を付与した API トークンを使用することをおすすめします。

Node.js を使用した場合

Node.js から kintone の REST API を使用する場合、ブラウザで JavaScript を実行するのとほとんど同じコードで、HTTP リクエストを送信することができます。

/**
 * kintone REST APIを使用して、アプリにレコードを一括削除する
 *
 * @param { app: string | number; ids: number[]; revisions?: number[] } } params
 * @return { Promise<{}> } - 成功した場合は空のオブジェクト
 */
const deleteRecords = (params) => {
  const url = `https://__your_subdomain__.cybozu.com/k/v1/records.json`;
  const options = {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json',
      'X-Cybozu-API-Token': 'YOUR_API_TOKEN',
    },
    body: JSON.stringify(params),
  };
  const response = UrlFetchApp.fetch(url, options);
  return JSON.parse(response.getContentText());
};

__your_subdomain__の部分と、YOUR_API_TOKENの部分を、それぞれご自身の環境に合わせて変更してください。

引数として設定しても良いですが、関数内で直接設定しても問題ありません。

前述した kintone から利用するコードと異なり、参照先のアプリがゲストスペースである場合は、URL を変更する必要があります。

GAS を使用した場合

Google Apps Script (GAS) から kintone の REST API を使用する場合、UrlFetchAppクラスを使用することで、HTTP リクエストを送信することができます。

/**
 * kintone REST APIを使用して、アプリにレコードを一括削除する
 *
 * @param { app: string | number; ids: number[]; revisions?: number[] } } params
 * @return { Promise<{}> } - 成功した場合は空のオブジェクト
 */
const deleteRecords = (params) => {
  const url = `https://__your_subdomain__.cybozu.com/k/v1/records.json`;
  const options = {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json',
      'X-Cybozu-API-Token': 'YOUR_API_TOKEN',
    },
    payload: JSON.stringify(params),
  };
  const response = UrlFetchApp.fetch(url, options);
  return JSON.parse(response.getContentText());
};

制限事項

kintone でレコードを複数件更新する場合、以下の制限事項があります。

  • 1 回のリクエストで削除できるレコード数は最大 100 件

この制限を意識することなく追加する方法については、以下のページを参照してください。

POST, PUT, DELETEの上限
kintone REST APIには、GET, POST, PUT, DELETEそれぞれに、1度に操作できるレコードの上限が設けられています。今回は上記のレコード上限を気にすることなく、一括でレコードの作成ができる関数をご紹介します。RE
#kintone #JavaScript #TypeScript