setConfigとgetConfig

にメンテナンス済み

kintone プラグインには、設定情報を保存・取得するための API が用意されています。

  • kintone.plugin.app.setConfig(config, callback): 設定画面で設定を保存する
  • kintone.plugin.app.getConfig(pluginId): 保存した設定を取得する(設定画面・アプリの画面どちらでも使える)

pluginId には、プラグイン内で参照できる kintone.$PLUGIN_ID を渡します。

保存できるのは「文字列のみ」

保存する情報は、キーも値も文字列のオブジェクトである必要があります。

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

数値・真偽値・配列・オブジェクトをそのまま値に入れて保存することはできません。

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

プラグインの設定は、できるだけ階層を浅く、フラットな構造にすることが推奨されています。

とはいえ、複数行の設定を持つプラグインなど、配列やネストを避けられないケースは珍しくありません。

配列で保存したい設定情報
{
  settings: [
    { config1: 'value', config2: 'value' },
    { config1: 'value', config2: 'value' },
    // ...
  ]
}

この場合は、プロパティごとに JSON.stringify して保存し、取得時に JSON.parse で復元します。

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

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

kintone.plugin.app.setConfig(configForSave);

変換を毎回書くのは手間で、書き忘れるとデータ破損の原因にもなるため、共通の関数にまとめておくと便利です。

設定を取得する関数

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

  return Object.fromEntries(
    Object.entries(config).map(([key, value]) => {
      try {
        return [key, JSON.parse(value)];
      } catch {
        // JSON として解釈できない値は文字列のまま返す("123" など JSON として有効な文字列は数値等に変換されます)
        return [key, value];
      }
    })
  );
};

// 使用例
const config = restoreStorage(kintone.$PLUGIN_ID);

設定が未保存の場合、getConfig は空のオブジェクトを返すため、config.settings は undefined になります。使う側で既定値を用意してください。

設定を保存する関数

保存は設定画面で行うのが一般的です。

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

// 使用例
storeStorage({ settings: [{ config1: 'a', config2: 'b' }] }, () => {
  // 保存完了後の処理
  history.back();
});
setConfig の注意点
  • setConfig は設定を丸ごと置き換えます。一部のキーだけを渡すと、渡さなかったキーは消えます。更新時は一度 getConfig で取得し、変更後の全体を保存してください。
  • 第 2 引数のコールバックを省略すると、保存後にアプリの設定画面(プラグイン一覧)へ自動で遷移します。保存後に別の処理をしたい場合はコールバックを指定します。
  • 保存できるサイズには上限があります。大量のデータは、プラグインの設定ではなくアプリのレコードに保存することを検討してください。

まとめ

  • プラグインの設定は文字列のみ保存できる
  • 配列やオブジェクトは JSON.stringify / JSON.parse で変換する
  • 変換処理は restoreStorage / storeStorage のような共通関数にまとめる
  • setConfig は上書き保存なので、更新時は全体を保存し直す
#JavaScript #kintone