アプリ内検索に入力された検索ワードを調べたい

# はじめに

- [kintone Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kintone2 "kintone 2 Advent Calendar 2020") 3日目の記事です
- アプリ内検索がどのように使われているのかを知りたくてつくりました
- 昨年は [ケーキを選ぶアプリ](https://qiita.com/kentaro1sh11/items/552767ff3127aa1ae89a) をつくったんですが、1回しか使いませんでした・・・

# 自己紹介です
[![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/)

- ｲｼｲｹﾝﾀﾛｳです
- 刷毛をつくっている会社の兼業情シスです
- kintone認定資格は3つとも取得済です

![アソシエイト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/761a3907-f9f7-4da5-c5e9-9ae9e9d90e04.png)　![アプリデザイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/3fa2bf0c-e0f9-f8ea-a9fb-88611caa545b.png)　![カスタマイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/476db7b8-509f-a484-7913-2dd61afa63f2.png)

- その他にITストラテジストやシステム監査技術者などの国家資格をいくつか取得しています
- kintoneのカスタマイズは社内向けのみで、プラグインは作ってません（作れません）
- [kintone cafe japan](https://www.youtube.com/watch?v=qfENc7nUNbE&list=PLGct_FAzBY1AQWDsz47V5fZULjnlleR4n) のおかげさまで [標準機能で曜日自動計算](https://qiita.com/kentaro1sh11/items/90b8ed34c855d73b6bf7) をたくさん見ていただいて感謝です

# やりたいこと

アプリ内検索でどのような単語で検索されているのかを知りたい

# 考え方

- 残念ながら検索結果画面が表示されたときのイベントはありません
- 代替案として検索結果からレコード詳細画面を開いたときに、検索ワードとurlを別のアプリに新規登録して調べます
- ↓ の url 例だと「〇〇〇〇〇」が検索ワードにあたる部分です

```
https://XXXXX.cybozu.com/k/XXX/show#record=XXX&s.keyword=〇〇〇〇〇&s.app=XXX
```

# 完成！

![メディア1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/0fecee6b-40d6-32bf-7651-0444180b531c.gif)







# 検索対象アプリ

- なんでもいいのですが、質問を投稿し、コメントで回答するアプリにしました
- アプリ内検索は添付ファイルの中身（の一部）やコメントも検索してくれます

|フィールド名 / フィールドコード|フィールドタイプ|
|:----------------------------|:--------------|
|質問内容                     |文字列（複数行）|
|添付ファイル                 |添付ファイル    |


# アクセスログアプリ

- 1アクセスごとに1レコードを新規登録します
- 今回はシンプルにしましたが、検索ワード以外にもアプリIDを始めとした [kintoneの関数](https://developer.cybozu.io/hc/ja/articles/202738940) で取れる値ならなんでも取得できます
- 他には userAgent などの navigator オブジェクトのプロパティを取得しておくとのちのち便利かもです

|フィールド名 / フィールドコード|フィールドタイプ|
|:----------------------------|:--------------|
|keyword                      |文字列（1行）   |
|accessUrl                    |文字列（1行）   |



# 検索対象アプリに実装
アクセスログアプリのアプリIDだけ書き換えてください

``` javascript

// 関数本体
const postLog = async () => {

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

    // urlの取得
    const url = location.href;
        
    // keywordの抽出（「&s.keyword=」の次の文字から「&s.app」の手前の文字まで）
    let keyword = '';
    if (url.match(/s.keyword/)){
        const indexStart = url.indexOf('&s.keyword=') + '&s.keyword='.length;
        const indexEnd = url.indexOf('&s.app');
        keyword = decodeURI(decodeURI(url.substring(indexStart, indexEnd)));
    }

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

// レコード詳細表示イベントから呼び出す
kintone.events.on('app.record.detail.show', (event) => {
    postLog();
});



```



# おわりに

- 2回デコードしなければ検索ワードが出てこないということに気づくまで時間かかりました・・・
- 検索ワードとは関係なく、単なるアクセス解析として ``` app.record.index.show ``` や ``` portal.show ``` に書いても面白いですきっと
- そこからもうちょっと頑張れば一覧IDやカテゴリIDもとれる気がします（やってない）
- そしていつものですが、塗装用ローラーもつくってます

[![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/)