kintoneアプリ作成の留意事項
はじめに
kintoneはかなり柔軟にアプリを作れるが、逆に人によって出来上がるアプリにデータ構造やアプリ間のデータ連携の仕組みなどの観点で個人差が出る事が多い。
本エントリーでは、kintoneのアプリを作成する上で留意すべき事項を述べる。
主キーはレコード番号を使わず、プラグイン等で採番する
kintoneのレコード番号は、新規レコード登録時に自動で数値が採番されるので、例えばアプリを新しく作ってそこにデータを移行した場合、レコード番号は別のものになる可能性が高い。よって主キーは独自にプラグインなどを使って採番した方が、メンテナンス性が高いアプリになる。
こちらの記事も参照してください。
RDBの設計手法を出来るだけ応用する
kintoneはサブテーブルがあり、表形式のデータではなくなる場合もあるが、原則としてDB設計手法を用いて設計した方が、長期的に見てメンテナンス性の高いアプリを作れる。
また、これはkintoneに限らず、Salesforce等においても同様に応用出来る。
サブテーブル・正規化・非正規化を適切に使い分ける
kintoneのサブテーブルは、明細データなどを扱うのに便利である。これがRDBだと、正規化したらしたらで明細データを作るときには結合が必要になるし、非正規化すると重複したデータが発生してしまう。
しかし、サブテーブルを扱うにはプログラムを少し複雑に記述する必要がある事が多く、集計などではサブテーブルは使わない方が良い。(つまり非正規化する事になるのもやむを得ない場合もある。)(以前のエントリーも参照)
このように、kintoneではサブテーブルを使うか、または使わずに正規化・非正規化して使うかは状況に応じて使い分ける必要がある。
アプリ間のデータの流れは基本的に一方通行にする
アプリAとアプリBがあると仮定する。アプリAからアプリBにデータを送るような処理があり、また、その逆、すなわちアプリBからアプリAにデータを送るような処理がある場合、状態を管理する必要が出てくるので、データの管理が難しくなる。
基本的に(特に集計処理などでは顕著であるが)状態管理の必要性があるとアプリ作成の難易度が上がるため、出来る限り状態管理は行わず、古い情報はきれいに削除して、都度都度インプットを元にアウトプットを作成する方が良い。
ルックアップは、kintone標準のものを使うか、独自実装のプラグインを使うか適切に判断する
kintone標準のルックアップには、以下の不便な点がある。
ルックアップの項目にcsvでデータをインポートする際などには、参照先の項目に重複不可の設定がされている必要がある。
アプリのテンプレートを出力する際、ルックアップの参照先のアプリもテンプレートに含まれてしまう。これは別の環境でアプリをテンプレートから作るときに、場合によってはかなりたくさんのアプリが同時に作られてしまい不便に感じる事がある。
これらの問題を回避するために、弊社では独自実装のルックアッププラグインを作成している。これはkintoneのルックアップを使っていないので、キーになる値に重複があっても使え、テンプレートを出力しても参照先のアプリとの紐付けが発生しない。
kintone標準のルックアップと独自実装のルックアップは、それぞれ一長一短があるので、状況に応じて使い分ける必要がある。
カスタマイズは避け、出来るだけプラグインを用いる
カスタマイズは、プログラムを書ける人からすると、状況によってはプラグインを設定するより楽な事もあり、kintone標準機能で実現出来ない事を(特にプログラマは)ついついカスタマイズにて実現してしまうが、メンテンナンス出来る人が限定されてしまうので、多少面倒でもプラグインを用いた方が良い。
アプリ間でデータを転送する場合は、基本的に保存が完了した後に行う
kintoneには、ユーザが操作を行った際に発生するイベントが複数ある。その中にデータ保存前とデータ保存後のイベントがある。これはレコード編集後「保存」ボタンを押した際、保存が完了する前と後にそれぞれイベントが発生するため、それぞれ異なる処理を実行出来る。
アプリをkintoneの他のアプリや他システムと連携させ、処理を実行する場合は、データを保存した後にした方が良い。
これはデータ保存前に実行してしまうと、そもそもデータが保存できていない場合にも連携処理を実行されてしまうため、意図しないデータ連携が発生する可能性があるである。
以上より以下の事が言える。
データ保存前:主に入力チェック等データ保存前に実行すべき事を実行する。
データ保存後:入力が完了してから実行したい事を実行する。
文章にしてみると至極当たり前の内容である。
まとめ
以上にkintoneのアプリを作成する上での留意点を述べた。
比較的当たり前の事と言える内容が多いが、逆にこれ以外のkintoneのアプリ設計パターンはあまり無いように思う。
kintoneアプリ作成者には、参考にしていただければ幸いである。