kintoneアプリのアクセス状況を調べたい


はじめに

  • イシイケンタロウですハケをつくっている会社の兼業情シスでkintoneを触る係をしてます
  • kintone認定資格はスペシャリストまでの3つ取得です
  • その他にITストラテジストやシステム監査技術者などの国家資格をいくつか取得しています
  • kintoneのカスタマイズは社内向けのみで、プラグインは作ってません(作れません)

やりたいこと

  • kintoneSIGNPOST「6-42 定期的な棚卸し」を実現するため、使われていないアプリを見つける準備としてアプリへのアクセスログを取得したい
  • 2021年のdaysでJALさんセッションでも触れられてたので需要あるかなと思って

考え方

アクセスログアプリを作成し、各アプリのindex.showやdetail.showイベントでアプリIDを含んだレコードを追加する

アクセスログアプリ

  • 最低限のアプリIDとアクセスurlだけで作ってみます
フィールド名 / フィールドコード フィールドタイプ
appId 数値
accessUrl 文字列

アクセスログを取得したい各アプリへの実装

  • アクセスログアプリのアプリIDだけ書き換えてください
  • pc用とsp用それぞれjsをコピペ保存してuploadします
pc.js

/*
  ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 
  ■                       pc.js
  ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 
*/

(() => {
  'use strict';

/*
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●                                                          
  ●                        function                                                                                   
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
*/
/*
  □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
    アクセスログアプリへ登録する関数
  □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
*/
const postAccessLog = async () => {

      // アクセスログアプリのアプリID
      const app = 0;

      // アクセスログアプリへの登録
      const paramPost = {
          'app': app,
          'record': {
              'appId': {
                  'value': kintone.app.getId()
              },
              'accessUrl': {
                  'value': location.href
              }
          }
      };
      const respPost = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', paramPost);
  }

/*
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
  ●                          イベント
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
*/
/*
  ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
    一覧画面表示時
  ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
*/
kintone.events.on('app.record.index.show', (event) => {
    postAccessLog();
});

/*
  ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
    詳細画面表示時
  ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
*/
kintone.events.on('app.record.detail.show', (event) => {
    postAccessLog();
});  


})();


sp.js
/*
  ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 
  ■                       sp.js
  ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 
*/

(() => {
  'use strict';

/*
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●                                                           
  ●                        function                                                                                     
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
*/
/*
  □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
    アクセスログアプリへ登録する関数
  □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
*/
const postAccessLog = async () => {

      // アクセスログアプリのアプリID
      const app = 0;

      // アクセスログアプリへの登録
      const paramPost = {
          'app': app,
          'record': {
              'appId': {
                  'value': kintone.mobile.app.getId()
              },
              'accessUrl': {
                  'value': location.href
              }
          }
      };
      const respPost = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', paramPost);
  }

/*
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
  ●                          イベント
  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
*/
/*
  ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
    一覧画面表示時
  ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
*/
kintone.events.on('mobile.app.record.index.show', (event) => {
    postAccessLog();
});

/*
  ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
    詳細画面表示時
  ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
*/
kintone.events.on('mobile.app.record.detail.show', (event) => {
    postAccessLog();
});  


})();

おわりに

  • IEでは動きません
  • 似たような記事を前にも書いてました忘れてた
  • ↑に書いたように取ろうと思えばアプリIDとアクセスurlの他にもいろいろ取れます
  • 一覧と詳細のイベント書きましたがどちらかでもいいし他のイベント追加してもいいです必要に応じ変えてください
  • API実行は各アプリ側なのでアクセスログアプリへの登録数を気にしなくてもいいのが地味にうれしい作りになってます
  • そして例によって塗装用ローラーもつくってます