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

# はじめに
- ｲｼｲｹﾝﾀﾛｳですハケをつくっている会社の兼業情シスでkintoneを触る係をしてます
- kintone認定資格はスペシャリストまでの3つ取得です
- その他にITストラテジストやシステム監査技術者などの国家資格をいくつか取得しています
- kintoneのカスタマイズは社内向けのみで、プラグインは作ってません（作れません）
[![main_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/564c7de8-6fc7-61c7-a97f-f8d0a7c9943d.jpeg)](https://www.maru-t.co.jp/painting_brush/)
![associate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/0a8e56b0-b57c-607c-b89b-19e793c78717.png) ![appdesignsp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/12705b5d-9006-2e8c-f9de-56ec7a22b611.png) ![customization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/d318907a-f190-2542-82da-e6ee22e1498b.png)

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

https://www.youtube.com/watch?v=NdU3-IPComM

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

# アクセスログアプリ
- 最低限のアプリIDとアクセスurlだけで作ってみます

|フィールド名 / フィールドコード|フィールドタイプ|
|:----------------------------|:--------------|
|appId                        |数値           |
|accessUrl                    |文字列         |

# アクセスログを取得したい各アプリへの実装
- **アクセスログアプリのアプリID**だけ書き換えてください
- pc用とsp用それぞれjsをコピペ保存してuploadします

``` javascript: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();
});  
  
  
})();


```
``` javascript: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では動きません
- 似たような記事を[前にも書いてました](https://qiita.com/kentaro1sh11/items/eb8d03dabb82e4049c1e)忘れてた
- ↑に書いたように取ろうと思えばアプリIDとアクセスurlの他にもいろいろ取れます
- 一覧と詳細のイベント書きましたがどちらかでもいいし他のイベント追加してもいいです必要に応じ変えてください
- API実行は各アプリ側なのでアクセスログアプリへの登録数を気にしなくてもいいのが地味にうれしい作りになってます
- そして例によって塗装用ローラーもつくってます
[![main_image (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/d20f1b7b-355a-1524-829f-71fcd21bdfed.jpeg)](https://www.maru-t.co.jp/painting_roller/)