今回はサンプルコードではなく、kintoneアプリ構築の際の考え方を一つご紹介したいと思います。

多くはありませんが、「年齢や経過時間など、自動でフィールドが更新されるようにできないか」といったご相談をいただくことがあります。要は、デイリーで特定のフィールドを更新できないか、といったご要望です。

kintoneのデフォルト機能では、特定の日になったら通知を行うといった、日付フィールドに対するリマインダー通知等の条件通知は行えます。しかし、レコード保存のアクションなしで、フィールドの値を自動で更新させることはできません。

kintoneでデイリーで特定フィールドを更新させる方法

では、どうカスタマイズすれば年齢や経過時間といったフィールドを自動更新させられるか、と考えると、ぱっと2通りのアイデアが浮かびます。

a) 外部システムを利用してレコードを更新する

a) の方法は、例えば、Googleスプレッドシートとkintoneアプリを同期し、Googleスプレッドシート側で更新した年齢や経過時間を、再びkintoneアプリに同期し上書き更新させるといった方法になります。Googleスプレッドシートではなく、makeやYoomといったハブツールを利用する形でも対応できますね。

GASやハブツールには、トリガーや定期実行という機能があるので、「時間毎 / 毎日 / 毎月」何かを実行する、という処理が可能になります。

少しだけ小難しい話をすると、定期実行を行うにはサーバーサイドでの諸設定が必要になるのですが、kintone単体だと、サーバーサイドで定期実行を行うための設定は条件通知以外には用意されていません。

自動更新を行うには、サーバーが特定の時間に行うべきタスクを覚えている必要がありますが、不特定多数のアカウントで自動更新を複数設定したりすれば、その分、サーバーは覚えるべきタスクが増え、その時間になる度に働く必要が生じます。要は、サーバー負荷が増します。サーバー負荷が増加し過ぎると、例えばシステムが重たくなり、利用者全員の操作に影響が出ます。

Googleやハブツールはなんで大丈夫なのかというと、言わずもがなGoogleは世界最強クラスのサーバー群を用意していますし、ハブツールもそのような用途専用なので、しっかり強固なサーバー群を保有しているはずです。

と、かなり乱暴に説明しましたが、例えば何十万、何百人万以上の同時接続が行われてもいつでも安定するようなサーバーを用意するには、膨大なコストが必要になるわけです。

b) 「レコード詳細画面表示(app.record.index.show)」又は「レコード一覧画面表示(app.record.detail.show)」のタイミングでスクリプトを実行させる

できれば、kintoneだけで完結させたい、となった場合には b) の方法を取る必要があります。

フィールドを変更(app.record.edit.change.◯◯)したり、レコードを保存したタイミング(app.record.create.submit、app.record.edit.submit)でのスクリプト実行以外に、レコード詳細画面を表示したタイミングやレコード一覧画面を表示したタイミングでスクリプトが実行されれば、いちいち手動でレコード保存のアクションを行わなくとも、年齢や経過時間のフィールド値を更新させることができます。

ただ、レコード一覧画面が表示されたタイミングで、全レコードの処理を実行するようなスクリプトの場合、APIリクエストの上限には留意しなければなりません。また、処理時間も相当かかってしまうので、この辺りは工夫が必要です。

というわけで、デイリーで特定のフィールドを更新させる方法自体はあるので、このような小技を駆使して、ぜひ効率的なカスタマイズを行ってください!