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


はじめに

自己紹介です

  • イシイケンタロウです
  • 刷毛をつくっている会社の兼業情シスです
  • kintone認定資格は3つとも取得済です

  

  • その他にITストラテジストやシステム監査技術者などの国家資格をいくつか取得しています
  • kintoneのカスタマイズは社内向けのみで、プラグインは作ってません(作れません)
  • kintone cafe japan のおかげさまで 標準機能で曜日自動計算 をたくさん見ていただいて感謝です

やりたいこと

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

考え方

  • 残念ながら検索結果画面が表示されたときのイベントはありません
  • 代替案として検索結果からレコード詳細画面を開いたときに、検索ワードとurlを別のアプリに新規登録して調べます
  • ↓ の url 例だと「〇〇〇〇〇」が検索ワードにあたる部分です
https://XXXXX.cybozu.com/k/XXX/show#record=XXX&s.keyword=〇〇〇〇〇&s.app=XXX

完成!

検索対象アプリ

  • なんでもいいのですが、質問を投稿し、コメントで回答するアプリにしました
  • アプリ内検索は添付ファイルの中身(の一部)やコメントも検索してくれます
フィールド名 / フィールドコード フィールドタイプ
質問内容 文字列(複数行)
添付ファイル 添付ファイル

アクセスログアプリ

  • 1アクセスごとに1レコードを新規登録します
  • 今回はシンプルにしましたが、検索ワード以外にもアプリIDを始めとした kintoneの関数 で取れる値ならなんでも取得できます
  • 他には userAgent などの navigator オブジェクトのプロパティを取得しておくとのちのち便利かもです
フィールド名 / フィールドコード フィールドタイプ
keyword 文字列(1行)
accessUrl 文字列(1行)

検索対象アプリに実装

アクセスログアプリのアプリIDだけ書き換えてください


// 関数本体
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.showportal.show に書いても面白いですきっと
  • そこからもうちょっと頑張れば一覧IDやカテゴリIDもとれる気がします(やってない)
  • そしていつものですが、塗装用ローラーもつくってます