見出し画像

kintone制限値チャレンジ3 – スペースの上限値。 「スペースは無限ではなく…そしてメッセージは青かった」

今回調べたこと

制限値を超えるスペース作成について

通常のスペースかゲストスペースかに関係なく、制限値を超えたスペースを作成しようとするとメッセージが表示されて作成が中止されることがわかりました。
但し、よく出てくる赤いエラーメッセージではなく、青いメッセージが表示されることがわかりました。

青いメッセージが出るのを初めて見ました。

通常のスペースとゲストスペースの制限値の関係について

通常のスペースとゲストスペースは、個別に管理されており、それぞれが上限値をチェックしていることがわかりました。
例えば通常のスペース数が上限に達しているとき、通常のスペース作成は行えないのですが、ゲストスペースなら作成できることがわかりました。

どちらか合わせて上限ではなくて、それぞれが上限まで作成できました。

調べた理由

kintoneのヘルプ「制限値一覧」では、
作成できるスペースの数に関する記載はありません。
制限値一覧をみただけでは、スペースの数に制限がないように見えます。

でもkintoneの料金ページで、スタンダードコースとライトコースを紹介する表に、「~500個」といった記載があります。やっぱり制限されてそう…

これだけでは、501個目のスペースを作成したときはどうなるのかや、通常のスペースが500個ある状態で、ゲストスペースを作成できるのかがわからないので、制限値を超えた場合の動作を確認することにしました。

確認方法

プログラムで通常のスペースを作成する

500個のスペースを手動で作成していたら、体力がもたないので、フィールドの制限値を調べた時と同様に、REST APIを使ったプログラムを実行してスペースを自動作成しました。使ったREST APIについては下記リンク先に詳細が記載されています。

今回用意したJavaScriptのプログラムは下記となります。

/**
 *
 * createSpace.js
 *
 **/
(() => {
  "use strict";
  kintone.events.on(["app.record.index.show"], (event) => {
    const mButton = document.createElement("button");
    mButton.id = "my_index_button";
    mButton.innerText = "スペース追加";
    mButton.onclick = btn_click;

    kintone.app.getHeaderMenuSpaceElement().appendChild(mButton);
  });

  async function btn_click() {
    for (let i = 0; i < 500; i++) {
      console.log("スペース作成" + i + "番目");
      const resp = await go_RestAPI(i.toString().padStart(3, "0"));
      if (resp == undefined) return;
    }
    alert("作成できました");
  }

  async function go_RestAPI(spaceNo) {
    // 下の「id: 3」は私の環境のスペーステンプレートのidです。
    // 他の環境でこのプログラムを動かすには、
    // 事前にスペーステンプレートを作成しておき、そのidを指定してください。
    const body = {
      id: 3,
      name: "スペース_" + spaceNo,
      members: [
        {
          entity:{
            type: "USER",
            code: "kanrisya001@gmail.com",
          },
          isAdmin: true,
        }
      ],
    }; // REST-APIに渡すパラメタ

    const resp1 = await kintone
      .api(kintone.api.url("/k/v1/template/space.json", true), "POST", body)
      .catch((error) => {
        console.log("error", error);
        alert(error.message);
        const resp1 = undefined;
      });
    return resp1;
  }
})();

このプログラムでは kintone のレコード一覧画面にボタンを配置し それをクリックすることで 500回の繰り返し処理を行っています。繰り返し処理の中身は以下のようなものです。

  1. 繰り返し回数に応じた連番を用意する。

  2. その番号でスペースの名前を準備する。

  3. REST-APIを使ってスペースを追加する。

  4. エラーが発生したら、その時点で処理を終了する。

なお、このプログラムを実行するには、事前にスペーステンプレートを用意しておく必要があります。下記のヘルプを参考に、スペーステンプレートを作成しておき、そのidを指定してください。

このプログラムをアプリに追加し、実行することで、約500個のスペースを作成することができました。(※使っていた環境にいくつかスペースがあったので、実際には500回手前でエラーが発生し、処理終了となりました。) その後、[スペース管理]画面でスペース数を確認するとちゃんと500個となっていました。手順は以下のような感じです。

ポータル画面のオプションメニューから[アプリを作成]メニューをクリック
kintoneアプリストア画面で、[はじめから作成]ボタンをクリック
アプリの設定画面でアプリ名を入力
[設定]タブに切り替え[JavaScript/CSSでカスタマイズ]ボタンをクリック
準備したJavaScriptファイルを登録し[保存]ボタンをクリック
[アプリを公開]ボタンをクリック
ログ確認の為、開発者ツールのコンソールを表示させておき、[スペース追加]ボタンをクリック
プログラムが繰り返しスペースを作成。上限に達した時点でエラーダイアログが表示された
[設定]メニューから[kintoneシステム管理]をクリック
[スペース管理]をクリック
ちゃんと、使用中のスペース数が500になってました。

確認 - 501個目のスペースを作成できるか

ここから制限値があるかどうか確認していきます。
ポータル画面からスペースの作成操作を行ったところ、[スペースの作成]ダイアログが表示される前に「スペースを追加できません。スペース数がライセンスの上限に達しています。」とメッセージが表示され、作成出来ないことが確認できました。
そして意外にもメッセージはエラー表示の赤ではなく、情報メッセージのような青い背景となっていました。メッセージは表示するけれどエラー扱いではないのかもしれません。

ポータル画面で[スペースを作成]メニューをクリックすると・・・
「スペースを追加できません。スペース数がライセンスの上限に達しています。」と表示されました。

確認 - ゲストスペースなら作成できるのか

通常のスペースが上限に達している状態で、ゲストスペースは作成できるのでしょうか?
ポータル画面からゲストスペースの作成操作を行ったところ、問題なくゲストスペースを作成することが出来ました。上限値は別々で管理しているようです。

まずは手作業。ポータル画面で[ゲストスペースを作成]メニューをクリック
[ゲストスペースの作成]ダイアログが表示された。作成できそう。[はじめから作る]をクリック
[基本設定]タブにスペースの名前を入力し、[保存]ボタンをクリック
通常のスペースが上限に達していても、ゲストスペースなら問題なく作成できました。

ゲストスペースも上限値チャレンジ

ゲストスペースが作れることが分かったので、ゲストスペースも上限まで作ることにします。
通常のスペースを作成するときに使ったプログラムを改造し、ゲストスペースも500個作成してみる事にしました。
結果、通常のスペースが500個、ゲストスペースが500個、合わせて1000個を作成する事が出来ました。

    // さきほどのスペース追加プログラムに一行追加。
    // 下記の「isGuest: true,」という1文を追加すればゲストスペースを作成してくれます。
    const body = {
      id: 3,
      name: "スペース_" + spaceNo,
      members: [
        {
          entity:{
            type: "USER",
            code: "kanrisya001@gmail.com",
          },
          isAdmin: true,
        }
      ],
      isGuest: true,
    }; // REST-APIに渡すパラメタ
通常のスペースを作成していたプログラムにパラメータ「isGuest: true」を追加すれば、ゲストスペースを作成できるみたいなので、上記のようにプログラムを修正。改めてJavaScriptとして設定し、プログラムを実行してみました。
問題なくゲストスペースを500個作成する事ができました!

確認 - 1001個目のゲストスペースを作成できるか

通常のスペースもゲストスペースも上限に達しました。
もう何も追加できないはずですが、念のため、ゲストスペースの追加をやってみました。
結果、[ゲストスペースの作成]ダイアログが表示される前に「スペースを追加できません。スペース数がライセンスの上限に達しています。」とメッセージが表示され、作成出来ないことが確認できました。
この場合もさきほどと同じくメッセージの背景色は赤ではなく青になっていました。

通常のスペースのときもゲストスペースの時もメッセージは同じものでした。

ちなみに通常のスペースとゲストスペースは上限数こそ別々で管理されていますが、IDは同じ番号体系を共有していました。通常のスペースのIDが500番まで振られていた時に、ゲストスペースを作成するとそこには501番のIDが振られます。

上限数だけはそれぞれで管理されているのですが、IDやスペース数は共有されているようです。考え方としてはスペースというものがあって、その種類として「通常」「ゲスト」の2種類があるって考えるとスッキリしますね。

確認後に行ったこと

プログラムで通常のスペースを削除する

アプリの時は、そのアプリを含むスペースを削除する事で、アプリの一括削除が出来たのですが、スペースの場合は良い策が思いつかず、削除するプログラムを用意する事にしました。使ったREST APIについては下記リンク先に詳細が記載されています。

今回用意したJavaScriptのプログラムは下記となります。

/**
 *
 * deleteSpace.js
 *
 **/
(() => {
  "use strict";
  kintone.events.on(["app.record.index.show"], (event) => {
    const mButton = document.createElement("button");
    mButton.id = "my_index_button";
    mButton.innerText = "スペース追加";
    mButton.onclick = btn_click;

    kintone.app.getHeaderMenuSpaceElement().appendChild(mButton);
  });

  async function btn_click() {
    for (let i = 0; i < 1000; i++) {
      console.log("スペース削除" + i + "番目");
      const resp = await go_RestAPI(i);
      //      if (resp == undefined) return;
    }
    alert("削除できました");
  }

  async function go_RestAPI(spaceNo) {
    const body = {
      id: spaceNo + 1,
    }; // REST-APIに渡すパラメタ id は作成結果に応じて適宜設定します。

    // 通常のスペースを削除するときとゲストスペースを削除するときのURLは異なるので注意。
    const resp1 = await kintone
      .api(kintone.api.url("/k/v1/space.json", true), "DELETE", body)
      .catch((error) => {
        console.log("error", error);
        alert(error.message);
        const resp1 = undefined;
      });
    return resp1;
  }
})();

このプログラムでは kintone のレコード一覧画面にボタンを配置し それをクリックすることで 1000回の繰り返し処理を行っています。繰り返し処理の中身は以下のようなものです。

  1. 繰り返し回数に応じたidを用意する。

  2. REST-APIを使い、ID指定でスペースを削除する。

  3. エラーが発生しても、繰り返し処理を継続する。

このプログラムを実行することで、通常スペースを削除することができました。繰り返し処理で指定したIDのスペースがゲストスペースの場合は、削除に失敗する為、エラーが発生しても繰り返し処理を止めないようにしました。

プログラムでゲストスペースを削除する

通常のスペースの削除と同様に、削除するプログラムを用意しました。使ったREST APIについては下記リンク先に詳細が記載されています。

今回用意したJavaScriptのプログラムは下記となります。URLのみゲストスペース用になっていますが、処理の流れは通常のスペースを削除するときと同じです。

/**
 *
 * deleteGuestSpace.js
 *
 **/
(() => {
  "use strict";
  kintone.events.on(["app.record.index.show"], (event) => {
    const mButton = document.createElement("button");
    mButton.id = "my_index_button";
    mButton.innerText = "Guestスペース追加";
    mButton.onclick = btn_click;

    kintone.app.getHeaderMenuSpaceElement().appendChild(mButton);
  });

  async function btn_click() {
    for (let i = 0; i < 1000; i++) {
      console.log("Guestスペース削除" + i + "番目");
      const resp = await go_RestAPI(i);
      //      if (resp == undefined) return;
    }
    alert("削除できました");
  }

  async function go_RestAPI(spaceNo) {
    const body = {
      id: spaceNo + 500,
    }; // REST-APIに渡すパラメタ id は作成結果に応じて適宜設定します。

    // 通常のスペースを削除するときとゲストスペースを削除するときのURLは異なるので注意。
    const resp1 = await kintone
      .api(
        kintone.api.url("/k/guest/" + body.id + "/v1/space.json", true),
        "DELETE",
        body
      )
      .catch((error) => {
        console.log("error", error);
        alert(error.message);
        const resp1 = undefined;
      });
    return resp1;
  }
})();

IDの採番を共有しているのから、ID指定だけで削除させて欲しいのですが、通常とゲストのURLが違うので、プログラムを組むのが少々面倒ですね。

さいごに

フィールドやアプリと同じように、スペースにも上限がありました。
(”上限値”と”制限値”はkintone上でなにか区別されているのかも…)

そして、メッセージの表示はなぜか「青」でした。

スペース=宇宙

だから、そこに地球があるように見せたくて青にしたのかも…。

この記事が気に入ったらサポートをしてみませんか?