アプリの追加プラグイン一覧取得APIを使うよ

こんにちは、ジョイゾーでkintoneプラグインの開発エンジニアをやっている小林です。

今回は、アプリの追加プラグイン一覧取得APIを利用して何かできないかな、にチャレンジしてみます。
アプリに追加されているプラグインの一覧を取得する

kintoneでは業務に関係するいくつかのアプリをスペースにまとめて運用し、業務システムの管理者はそのスペースを管理するという図式はそれなりにあると思います。ここではスペースポータルに所属するアプリのプラグイン利用状況を掲示する、とかしてみたいと思います。
管理者以外のユーザがポータルで毎度見たい、かというツッコミはさておき。

弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。

   kintoneのアプリ開発はこちら <相談無料>    

まずはAPIの説明から

GETのみなので非常にシンプルです。

アプリの追加プラグイン一覧を取得する

その名の通り、アプリに追加されたプラグインの一覧を取得することができるAPIです。複数アプリへの対応はないので、1アプリずつの対応になります。

こんな感じのJSプログラムを書いてみると、、

kintone.api(kintone.api.url('/k/v1/app/plugins.json', true), "GET", {
app: APP_ID
}).then(resp => console.log(resp)).catch(err => console.error(err));

このようなレスポンスが返ってきました!

スペース掲示用のプラグイン利用状況アプリを作る

スペース内各アプリの利用状況をレコードとして持つ「アプリプラグイン利用状況アプリ」を作ります。フォーム構成はシンプルな感じでこちら

さてこのアプリに以下のカスタマイズを入れておきます。
AIで簡単クッキングできてしまうこの時代。痺れますねぇ

  • 一覧画面に「アプリプラグイン利用状況取得」ボタンを配置
  • 「アプリプラグイン利用状況取得」ボタンを押下した際は
    アプリプラグイン利用状況アプリが所属するスペースのIDを用いて、スペース内に存在するすべてのアプリ一覧をkintone api(/k/v1/space.json)で取得
  • 取得されたアプリ毎にkintone api(/k/v1/app/plugins.json)で利用プラグイン情報を取得。取得した情報をアプリの当てはまるフィールドに埋めてレコード登録。キーはアプリIDとし、既に存在する場合UPSERTで
(function () {
  "use strict";

  const APP_ID = kintone.app.getId();
  const SPACE_ID = '79'; // ここは環境に合わせて
  const APP_RECORD_API = '/k/v1/record.json';
  const PLUGIN_API = '/k/v1/app/plugins.json';
  const SPACE_API = '/k/v1/space.json';

  const FIELD_CODES = {
    appId: 'app_id',
    appName: 'app_name',
    pluginList: 'plugin_list'
  };

  function createButton(label, id) {
    const button = document.createElement('button');
    button.id = id;
    button.innerText = label;
    button.className = 'kintoneplugin-button-normal';
    return button;
  }

  async function fetchAppsInSpace(spaceId) {
    const params = { id: spaceId, includeApps: true };
    const resp = await kintone.api(SPACE_API, 'GET', params);
    return resp.attachedApps;
  }

  async function fetchPluginList(appId) {
    try {
      const resp = await kintone.api(PLUGIN_API, 'GET', { app: appId });
      return resp.plugins.map(p => p.name).join(', ');
    } catch (e) {
      console.warn(`アプリID: ${appId} のプラグイン取得失敗`, e);
      return '';
    }
  }

  async function upsertRecord(appData) {
    const query = `${FIELD_CODES.appId} = "${appData[FIELD_CODES.appId].value}"`;
    const searchResp = await kintone.api('/k/v1/records.json', 'GET', {
      app: APP_ID,
      query: query,
      fields: ['$id']
    });

    if (searchResp.records.length > 0) {
      // レコード更新
      const recordId = searchResp.records[0].$id.value;
      await kintone.api('/k/v1/record.json', 'PUT', {
        app: APP_ID,
        id: recordId,
        record: appData
      });
    } else {
      // レコード追加
      await kintone.api(APP_RECORD_API, 'POST', {
        app: APP_ID,
        record: appData
      });
    }
  }

  async function fetchAndSaveAllPluginData() {
    const spaceId = SPACE_ID;
    if (!spaceId) {
      alert('スペースIDがURLから取得できませんでした。');
      return;
    }

    const apps = await fetchAppsInSpace(spaceId);
    for (const app of apps) {
      const pluginList = await fetchPluginList(app.appId);
      const record = {
        [FIELD_CODES.appId]: { value: app.appId.toString() },
        [FIELD_CODES.appName]: { value: app.name },
        [FIELD_CODES.pluginList]: { value: pluginList }
      };
      await upsertRecord(record);
    }
    alert('当該スペース内アプリのプラグイン情報を取得・保存しました。');
  }

  kintone.events.on('app.record.index.show', function (event) {
    if (document.getElementById('fetch-plugin-info-button')) return;

    const header = kintone.app.getHeaderMenuSpaceElement();
    const button = createButton('アプリプラグイン利用状況取得', 'fetch-plugin-info-button');
    button.onclick = fetchAndSaveAllPluginData;
    header.appendChild(button);

    return event;
  });
})();

設定完了。プラグイン利用状況を抽出

では「アプリプラグイン利用状況取得」ボタンをポチッとな。

取れた!

スペースポータルにアプリ配置

ここまで来たら業務スペースのポータルにアプリを配置するだけ。

できました!
最新状況を更新したい場合、アプリまで行ってボタンで再抽出がシステムとしてネックですが、細かいことは気にしない;

おわりに

なかなか利用シチュエーションに悩むAPIではありますが、どうだったでしょうか?
定期的なプラグインの棚卸しや、利用状況の把握に役立てる、、かもしれないですよね!


※ APIの詳細が知りたい方は公式APIドキュメント developer network をご確認ください。

弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。

   kintoneのアプリ開発はこちら <相談無料>    

同じカテゴリーの記事