krewSheetが重い!遅い!今すぐできるパフォーマンス改善チェックリスト

kintoneのデータをExcelライクに表示することができるkrewSheetは非常に便利なプラグインではありますが、運用の変化にあわせてアプリの改善・修正を加えていくなかで、最初は気にならなかった一覧表示完了までの時間が、いつの間にか遅くなっていることがあります。

「krewSheet、なんだか最近遅い感じがする。」
「表示が重いな・・・。こんなに待たなきゃいけなかったっけ?」

もしそう感じているなら、原因は「表示するデータ量」「数式」「条件付き書式」のいずれかにある可能性が非常に高いです。保存後の再描画時間も重いと感じる要因の一部なので、「保存処理が遅い」ことへの改善にもつながります。(実際は保存が遅いのではなく、保存後の再描画に時間がかかっている可能性があります。)

本記事では、これまでkrewSheetを使ってアプリ構築を行ってきた視点から、パフォーマンス低下を招く3つの主要因を分析し、それに対する具体的な改善チェックリストをまとめました。

この記事を最後まで読むことで、krewSheetの設定を最適化し、業務効率を最大化するための具体的なアクションプランが明確になるはずです。

Information

本記事では、「sheetモード」の場合のパフォーマンス改善についてをまとめています

なぜ遅くなる?krewSheetのsheetモードが重くなる3大要因

krewSheetには大量データを扱う場合のパフォーマンスガイドラインが設定されています。ガイドラインでは、次の3点がパフォーマンスに影響を与える可能性として記載されています。

  • 画面上に表示する(画面内に見えている)セル数が多い場合
  • 数式および数式を条件とする条件付き書式が多数含まれている場合
  • 大量の列数が存在し、かつ列幅の自動調整が有効になっている場合
パフォーマンスガイドラインより引用

要因①:一度に表示・計算する情報が多すぎる

画面上に表示する(画面内に見えている)セル数が多いほど、画面描画するデータの量が多くなります。表示するデータの量が多ければ多いほど、一覧表示完了まで時間がかかり、その結果待ち時間が長くなり、重いと感じてしまいます。

セル数は、「フィールド(列)数」 × 「レコード数」で算出。

kintone標準の一覧表示では1ページの表示件数は最大で100件ですが、krewSheetでは最大500件まで表示させることができます。kintone標準の一覧に比べると5倍のデータを一覧上に表示させることができるため、多く表示できる分、処理時間がかかることになり、結果として重く感じることがあります。

さらに、集計行を表示する設定をしている場合、一覧表示後に集計処理が入るため、その分だけさらに時間がかかります。

要因②:数式や数式を条件とする条件付き書式が多数

krewSheetでは独自の数式フィールドを定義できますが、この数式フィールドが表示速度に影響します。

Excelのように様々な関数が用意されていることはkrewSheetの魅力の1つですが、便利な反面、中には計算負荷が高い関数もあります。これら計算負荷の高い関数は何か操作をするたびに再計算が実行されるため、このような数式フィールドの数が多ければ多いだけ処理が動き、その結果表示完了まで時間がかかり遅くなる要因となります。
また、セルの値変更のタイミングでも再計算が入るため、表示速度だけではなく、行の追加をした時の「若干重い」と感じる要因の1つにもなります。

条件付き書式についても、パフォーマンスに影響する要因の1つになります。多くのセルに対して書式を設定していたり、数式フィールドを使用した複雑な条件が設定されているような場合、その分だけ判定処理に時間がかかりますので、結果的に「遅い」「重い」に影響してきます。

要因③:大量の列に対して列幅の自動調整が有効になっている

krewSheetでは、各フィールド(列)に対して列幅を自動調整するかどうかを選択できるようになっています。

ここをONにすることで一覧表示時に自動調整処理が入り、その分表示完了までの待ち時間が増加します。

krewSheetのsheetモードの場合は「列幅自動調整する」のチェックボックスはデフォルトではOFFとなっていますので、基本はデフォルトのままチェック無しが良いでしょう。

krewSheetパフォーマンス改善チェック前にまず確認すること

krewSheetを使用したkintoneアプリの一覧表示が「遅い」「重い」と感じた場合、まずは、数式と条件付き書式を使用しない場合はどれぐらいの表示速度なのかを測定することが効果的です。
次のような確認をすることで、速度改善に向けた目安となる表示速度を知ることができます。(この速度が目標値となるでしょう)

速度改善後の目安速度の確認方法

  1. アプリの設定画面から、運用で使用しているkrewSheet用のビュー定義をコピーし、別名を付ける。(ここでは「速度検証用」ビューとする)
  2. 元ビューで使用されているkrewSheet設定を、「速度検証用」ビューに対して設定する。
  3. 「速度検証用」ビューで設定している数式フィールドと条件付き書式をすべて削除する
  4. 「速度検証用」ビューの表示速度を確認する。

これを実際に行ってみるとわかるのですが、krewSheetで「数式フィールド」も「条件付き書式」も使用せずフィールドをそのまま表示した場合は、表示速度は特に問題がないことがわかります。(表示しているフィールド数が極端に多い場合を除く)

つまり、「数式フィールド」「条件付き書式」がパフォーマンスに大きく影響していることがここで確認できます。

次のステップでは、どこを見直せば改善につながるのかを1つ1つ見ていくことになります。

【基本】まずはこれ!データ量を最適化する簡単テクニック

まずは、「要因①:一度に表示・計算する情報が多すぎる」に対する改善を行い、表示が遅い現象の改善を狙っていきます。チェックポイントは次の2点です。

表示が遅いを解消するための基本チェック

  1. 不要な「列」は表示しない
  2. 一度に表示する「レコード」を減らす

チェック1:不要な「列」は表示しない

krewSheetで表示するフィールド(列)をまずは見直します。必要なフィールドのみ表示するようにすることで、列数を必要最低限にするように見直します。

表示したいフィールドが多く一覧が横長になっているような場合、1つのビューで完結させるのではなく、ビューを分けることを考えてもよいかと思います。例えば、「〇〇用」「△△用」のように、用途や部署によってビューを分けてそれぞれのビューに必要なフィールドのみ表示させるようにすることで、1ビュー内のフィールド数を減らすようにするとよいでしょう。

チェック2:一度に表示する「レコード」を減らす

krewSheetでは1ページに最大500件まで表示できるため、ページ切り替えを減らす目的でページサイズを500で設定していることが多いかもしれません。

一覧表示が遅いような場合、このページサイズを減らすことでどの程度改善されるかを確認します。

現状のページが500件となっている場合、200に変えるだけでも一覧表示対象データが2/5になりますので、大きな表示速度の改善を期待できます。ページサイズを500⇒200⇒100と変えていけばいくほど表示速度は改善し重さは感じなくなりますが、1ページに表示されるレコード数が減るため、アプリの使い勝手が下がってしまうかもしれません。アプリの使い方やユーザーの意見も踏まえたうえで検討し、適切なページサイズを設定しましょう。

そのほかには、絞り込みによって表示対象となるレコード数を減らすことが効果的です。初期表示段階で絞り込みしたいような場合は、ビューを事前にいくつか定義しておき、用途によって切り替えしてもらうような形がよいでしょう。

【応用】数式と条件付き書式を見直す

次に、「要因②:数式や数式を条件とする条件付き書式が多数」「要因③:大量の列に対して列幅の自動調整が有効になっている」に対する改善を行い、重さの改善を狙っていきます。チェックポイントは次の3点です。

表示が重いを解消するための応用チェックポイント

  1. 数式フィールドを見直す
  2. 不要な条件付き書式を削除し適用範囲を最小限に絞る
  3. 列幅の自動調整を無効にする

チェック3:数式フィールドを見直す

数式フィールドの利用が多い場合は、フィールド数を見直す、または、数式フィールド内で使用している関数を見直すことが効果的です。

特に、複数行の値を元に計算するような関数(SUMIF、COUNTIFなど)を多用している場合や、それらを複雑にネストして使用しているような場合は、表示の重さに直結する可能性が大きいので、別の方法で同様の処理ができないかを検討します。

関数の見直し例

  • krewSheetの数式フィールドではなく、kintone標準の計算フィールドに置き換えできないか
  • 別の関数を使用して同様の処理を実現できないか
  • ネストした数式をシンプルにできないか
  • 数式フィールドではなくJavaScriptで処理させることで改善が見込めるか

チェック4:不要な条件付き書式を削除し適用範囲を最小限に絞る

krewSheetを使用したアプリであるあるなのは、活用度が増えてくると条件付き書式がどんどん増えていくということです。この条件付き書式は表示速度に影響する部分であるため、改めて整理して不要な条件付き書式は削除することが有効です。

条件付き書式がどの程度処理速度に影響しているのかや、どの書式がネックとなっているのかは実際に調べないとわからないため、検証用のビューを作成したうえで、次のように段階的に確認していくのが良いでしょう。

条件付き書式の見直し手順

  1. 現状の表示速度を確認する。
  2. 条件付き書式を全て消した場合の表示速度を確認する。
  3. 不要な条件付き書式を削除し、表示速度を確認する。
  4. 関数や数式フィールドを使用しているようなものを削除または変更できないかを検討する。

特に、処理に時間がかかるような関数を使用していたり、IF文で数式フィールドを使用しているようなものが多数含まれている場合は遅くなるようなので、そのような書式は見直し対象となります。

チェック5:列幅の自動調整を無効にする

各フィールドに対して、「列幅自動調整する」にチェックがあるかどうかを確認します。

sheetモードの場合は「列幅自動調整する」のチェックボックスはデフォルトではOFFとなっていますので、基本的には意識する必要はありません。しかし、場合によっては意図的に自動調整する設定に変更していることもあるため、すべてのフィールドを確認し、自動調整しない設定に変更します。

【その他】それでも改善しない場合の切り分け

基本編・応用編で解説した「データ量」「数式」「条件付き書式」を見直しても、まだ動作が重い。そんな時は、もう少し視野を広げて、問題の根本原因を探る必要があります。

他のプラグインやJavaScriptカスタマイズを一時停止して確認

表示速度が遅い原因がkrewSheetの設定そのものではなく、kintoneアプリ全体や他の設定に起因しているケースがあります。その1つが他プラグインやJavaScriptとの競合の可能性です。

krewSheetを利用しているアプリにおいて、他のプラグインや独自のJavaScriptカスタマイズを利用している場合は、それらを削除(または無効化)した上で表示速度がどうなるかを確認してみましょう。もしかするとここがネックとなり全体の動作を遅くさせている可能性があります。

速度が改善した場合、無効化したプラグインやカスタマイズの中に、原因となっているものが含まれています。一つずつ有効に戻しながらテストし、どの要素が影響しているのかを特定しましょう。

Warning

どうしても本番運用中のアプリで確認する必要がある場合は、事前にユーザーに周知するか、夜間などの業務時間外に作業するとよいでしょう。

kintoneのアクセス権設定の確認

セキュリティのために設定した「アクセス権」が、思わぬパフォーマンスの低下を招いていることがあります。

アクセス権の確認ポイント

  • レコードのアクセス権: 「作成者と所属組織だけが閲覧できる」のような、条件が複雑な設定が多用されていないか
  • フィールドのアクセス権: 「役職が部長以上のユーザーしかこのフィールドは見られない」といった設定が、多くのフィールドに適用されていないか
  • プロセス管理との連携: プロセス管理のステータスとアクセス権を複雑に組み合わせていないか

セキュリティとのトレードオフにはなりますが、もしアクセス権が原因で表示が重くなっているような場合は、アクセス権の設定をシンプルにできないか検討するとよいでしょう。

一覧表示時の条件の確認

krewSheet用の一覧の絞り込み条件が複雑になっていないかを確認します。特に「いずれかの条件を満たす」を使用して条件をしている場合は対象データが増えるため、重くなっている要因の一つになっているかもしれません。条件を指定しない場合と指定した場合でどれだけ表示速度が変わるかを確認し、違いがあれば条件の修正を見直すとよいでしょう。

まとめ

Excelライクな操作感でkintoneを飛躍的に便利にするkrewSheet。しかし、その便利さゆえに、いつの間にか設定が複雑化し、動作が重くなってしまうのは「krewSheetあるある」とも言える現象です。

この記事では、その「重さ」の原因となりやすい「表示するデータ量」「数式」「条件付き書式」いう3つのポイントに絞って、具体的な改善策を解説しました。表示速度は、単なる待ち時間の問題ではなく、業務の生産性や、ツールに対するユーザーの信頼感にも直結するため、やれるところは定期的に見直して改善をしていきましょう。

今回ご紹介したチェックリストが、皆様のアプリ改善のきっかけとなれば幸いです。いきなり全てを試す必要はありません。まずは原因を切り分けるための「速度検証用ビュー」を作成し、ボトルネックを探ることから始めてみてください。

関連記事