AppSheet実践編シリーズ㉖~監査項目とデータ型「ChangeTimeStamp」について~
はじめに
こんにちは。ソシオネットの髭晩酌です。
もうすぐ12月です。
私がよく行くゴルフ場は、去年まで12月も冬季料金で少しお得だったのですが、今年から冬季料金は1-2月だけとなってしまいました。
12月はまだハイシーズンということみたいです。温暖化の影響ですかね~~😢。。
さて、今回のテーマは「監査項目」です。少しシステム管理寄りのお話になります。
いろいろな考え方や対応方法があるので絶対というわけではないですが、私(業界歴20年超)が今まで扱ってきたデータベースのテーブルには、ほとんどの場合で以下のような項目が存在していました。
作成者
作成日時
更新者
更新日時
まあ、更新者と更新日時だけだったり、作成日時と更新日時だけだったり、、といろいろケースバイケースではありましたが。。。
これらは、データの行レベルで「誰がいつ作ったデータか?」「誰がいつデータを更新したか?」を追跡するための項目です。
このような項目を「監査項目」と呼んだりします。そして、監査項目をテーブルに作成しておく目的としては、一般的に以下のようなことがあります。
トラブルや不正データ発生時の原因調査が容易になる
監査やコンプライアンスへの対応
弊社は、AppSheetを活用した市民開発の支援やAppSheet無料勉強会などを実施しておりますが、その際でも上記の理由により監査項目をテーブルに作成しておくことをオススメしています。
今回は、この「監査項目」の設定の仕方、および、関連するデータ型「ChangeTimeStamp」について扱っていきます。
超!基本の監査項目の設定
実際にAppSheetで監査項目を設定してみましょう。と言ってもやることは以下だけです。
テーブルに監査項目を追加する。
AppSheet上で設定を行う
1については以下の図の通り、実際のスプレッドシートなどのテーブルに監査項目を追加するだけです。なお、監査項目は業務用の項目ではなくシステム管理用の項目ですので、テーブルの一番端に追加されることが多いですが、特に決まりはありません。
2については、Dataメニューから以下の通りに設定してもらえればOKです。
見てわかる通り、作成者・作成日時はINITIAL VALUEに関数を設定し、更新者・更新日時はFORMURAに関数を設定しています。
作成者や更新者に設定している関数ですが、USERNAME()だと同姓同名の方がいる可能性があるため、USEREMAIL()を設定するのがオススメです。
そういえば、今までのブログで取り上げていなかったので、ここでINITIAL VALUEとFORMURAについて簡単に整理しておきます。
INITIAL VALUE:初期値。画面が最初に開かれたとき、つまり新規登録画面を開いたときに、設定された計算式に基づいて値がセットされる。ユーザは手で値を変更することが可能。
FORMURA:新規登録画面や更新画面を開いたとき、あるいは、設定された式で使われている値が画面上で変更されたときに、設定された計算式に基づいて値がセットされる。ユーザは手で値を変更することができない。
また、これらの監査項目はそもそもユーザにとって興味のある値ではありません。あくまで興味があるのはシステム管理者側のみです。
よって画面に表示しないように、Show?は一律チェックしないようにしています。
監査項目の設定については、たったのこれだけです。
これだけの手間で、トラブルやデータ関連の調査が発生した時の手がかりを得られると考えれば、各テーブルに監査項目を作成しておいて損はないと思いますがどうでしょう???
「ChangeTimeStamp」は監査項目として使えるか?
突然ですが、「ChangeTimeStamp」というデータ型はご存じでしょうか?名前からして更新日時として使えそうな雰囲気ですが。。。
ここでは、「FORMURAにNOW()を設定した項目」と「データ型をChangeTimeStampとした項目」とで動作を比較して、監査項目の更新日時として使えるかを確認してみたいと思います。
データ型をChangeTimeStampとする項目の設定については、以下の通りです。
また、画面上の見た目でわかりやすくするため、いずれの項目も、SHOW?のチェックをONにして比較してみます。
【実験1】新規登録画面で画面上、値を何も更新せずに保存した場合
【実験2】新規登録画面で画面上で値を更新して保存した場合
【実験3】更新画面を開いて保存した場合
このようになりました。
実験1の「何もデータを更新しない場合には何も保存されない」という動きが、なんとなく微妙な気がしますね。。。
実運用上、実験1のように何もデータを更新せずに新規登録することはほぼないと思われますが、万が一のことを考えると「ChangeTimeStamp」を監査項目として使うならば、作成日時の項目も別途用意しておいた方がよいかもしれません。
本領発揮!「ChangeTimeStamp」の真の力
ここまでで、行レベルの監査項目としてデータ型「ChangeTimeStamp」を使うのは微妙、ということが分かりました。
では、データ型「ChangeTimeStamp」は何の役に立つのでしょう?これについては、項目レベルでの変更を追跡することができる、ということになります。
では、早速見ていきましょう。
まずは以下の図の通り、データ型「ChangeTimeStamp」のType DetailセクションのColumnsに「主食」と設定してみます。
Save後、早速アプリを動かしてみます。前項の実験2と同様に、新規登録画面上でデータを変更してみた結果が以下です。
上記の画像では表現していませんが、実際のデータにも主食の値を設定した日時が保存されています。
また更新画面でも同様に、主食の値を変更したタイミングで、ChangeTimeStampの項目の値が更新されます。
さらに以下の図の通り、追加でType DetailセクションのValuesに「パン」と設定してみます。
Save後、アプリを動かしてみます。
ここまでの実験でわかるように、データ型「ChangeTimeStamp」を使うことにより、特定の項目が特定の値に変更された日時、を追跡することができます。これは冒頭でお話したような行レベルでの監査項目では実現することが不可能な内容になります。
ということで、項目レベルでの更新を追跡したいような、よりセンシティブな管理要件がある場合に「ChangeTimeStamp」というデータ型は使えると思いますので、そういう要件がある場合は是非試してみてください!
(注意・補足)USEREMAIL()が使えない場合
冒頭でご紹介した、監査項目の基本の設定のところでご紹介したUSEREMAIL()という関数ですが、これはサインインが必要なアプリでのみ利用可能です。
※サインインしないと、USEREMAIL()で誰のメアドを取ればよいのかわからないので、当たり前ですよね。。
ということで、サインイン不要で不特定多数の方に使わせるアプリで監査項目を考えている場合は、USEREMAIL()関数は使えないのでご注意ください。詳しくは以下のブログも参考にしてください~。
終わりに
本ブログでは、「監査項目」に関する基本的な説明と設定、および、データ型「ChangeTimeStamp」の使い方について説明しました。
まとめると以下です。
行レベルの作成者や作成日時は、INITIAL VALUEに関数を設定しよう
行レベルの更新者や更新日時は、FORMURAに関数を設定しよう
項目レベルで更新日時を追跡したい場合は、データ型「ChangeTimeStamp」を使おう
市民開発者の視点だと、このような管理項目の重要性についてはなかなか気づきづらいところもあると思いますが、いざトラブルが起きたときにありがたみが分かる場合もあるので、気になった方は是非ご自分のアプリに監査項目を追加してみてください!
ということで、今回のブログは以上となります。ではまた次回ブログでお会いしましょう!ルネッサーンス!!
AppSheet勉強会を開催しております
弊社主催のAppSheet勉強会を毎月開催しております。直近開催分のお申込みは以下からお願いいたします。
※初めての方は、初心者向けかんたんハンズオン勉強会から参加されることをお勧めします。
12/10(火)【毎月第2火曜開催】AppSheetを知ろう!初心者向けかんたんハンズオン勉強会! | Peatix
12/17(火)【毎月第3火曜開催】実践的なスキルが学べる!AppSheetアプリ開発ワークショップ | Peatix
IT内製化支援、Salesforceの運用・導入、DX化推進に関するご相談をお待ちしております
弊社では、ノーコード開発ツールを用いたIT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。お気軽に弊社お問い合わせサイトよりご相談などをお寄せいただければと思います。
ソシオネットHP:http://www.socionet.co.jp/
対話型定額制アプリ開発サービス「DXデビュー」:https://socionet.co.jp/dxdebut/
IT内製化支援支援サービス「DXオープンラボ」:https://socionet.co.jp/insourcing-support-service/
IT運用とDX化のワンストップサポートサービス「DXサポーターズ」:https://socionet.co.jp/dx-supporters/