setConfigとgetConfig

にメンテナンス済み

kintone プラグインを取り扱うための API として、プラグインの設定情報を保存、取得するための API が用意されています。

保存する情報のデータ型は、以下の形式である必要があります。

APIで保存される情報
type PluginConfig = {
  [key: string]: string;
};

JavaScript 標準の API であるlocalStorageを使用してブラウザへデータを保存する場合は、キーと値のペアで保存しますが、プラグインの設定情報は、上記のようにオブジェクト型で保存されます。 これは、kintone が標準でプラグイン設定情報のバリデーション機能を提供しているためです。

推奨されるオブジェクト構造

この仕様から、プラグイン設定情報は極力オブジェクトの階層構造が深くなることを避け、フラットな構造にすることが推奨されています。

しかし、プラグインが提供する機能によっては階層構造を避けられない場合もあります。

例えば、プラグインが複数の設定を提供し、それが配列で保存される場合などです。

配列で保存される設定情報
{
  'settings': [
    { 'config1': 'value', config2: 'value' },
    { 'config1': 'value', config2: 'value' },
    { 'config1': 'value', config2: 'value' }
    // ...
  ]
}

これらを無理やり均し、フラットな構造にすることも可能ですが、一般的なのは階層構造をそのまま保存することです。その際には、プロパティ毎にJSON.stringifyして保存し、取得時にJSON.parseする必要があります。

複雑な構造の設定情報を保存する
const config = {
  settings: [
    { config1: 'value', config2: 'value' },
    { config1: 'value', config2: 'value' },
    { config1: 'value', config2: 'value' },
    // ...
  ],
};

const configForSave = {
  settings: JSON.stringify(config.settings),
};

kintone.plugin.app.setConfig(configForSave);

これを都度意識するのは単純に手間になりますし、データの破損を招く可能性もあるため、関数を用意しておくと便利です。

今回はその部分を意識しなくてもデータをやり取りするための関数を用意したので、よろしければご活用ください。

プラグイン情報取得時

データの取得は設定画面、操作画面どちらでも利用できる API が用意されています。

/**
 * プラグインがアプリ単位で保存している設定情報を返却します
 */
const restoreStorage = (id) => {
  const config = kintone.plugin.app.getConfig(id);

  return Object.entries(config).reduce(
    (acc, [key, value]) => ({ ...acc, [key]: JSON.parse(value) }),
    {}
  );
};

プラグイン情報設定時

こちらは基本的に設定画面のみでの利用が多いかと思います。

/**
 * アプリにプラグインの設定情報を保存します
 */
const storeStorage = (target, callback) => {
  const converted = Object.entries(target).reduce(
    (acc, [key, value]) => ({ ...acc, [key]: JSON.stringify(value) }),
    {}
  );
  kintone.plugin.app.setConfig(converted, callback);
};
#JavaScript #kintone