プリザンターは簡単？難しい？

# 概要
プリザンターに出会ってから約5年経ちます。その間プリザンターを利用したシステムの提案や開発を経験しました。その経験を踏まえ、プリザンターを初めて利用するユーザがどんなことに悩む（と想定される）のか、またプリザンターを利用してアプリを開発するユーザ、エンジニアに対してのアドバイスをつらつら書いてみたいと思います。
取り留めない内容ですが少々お付き合いを。


# プリザンターでどう画面を作る？・・・Excelの「表」＝一覧画面＆編集画面
例えば「Excelで管理しきれなくなったのでプリザンターに置き換えたい」という場合、Excelであれば、
1. 1行目のA列から管理したい項目を並べる
1. 2行目以降で管理したいデータを登録し、「表」が出来上がる
1. 項目の追加が必要になったら適当な列の間や最終列に項目を追加する  

のようにデータを入力する「表」を作成します。直観的ですね。
このExcelでの「表を作る、管理する」をプリザンターに置き換える際に一つ目のハードルがあると思います。
どうやったらプリザンターに置き換えできるのだろう？表形式で入力できるの？などなど・・・

プリザンターでのデータ入力は「管理したいデータは専用フォームで入力する」方式がイメージしやすいと思います。いわゆる「カード型データベース」みたいなものです。（余計わかりにくい？）
専用フォームがプリザンターでいう編集画面であり、表が一覧画面に該当します。
「表に直接データを入力するのではなく、いったん専用フォームで入力をする」をイメージできることがプリザンターの置き換えの第一歩です。

# 「リンク」＝リレーションシップ
Excelでの管理からプリザンターへの置き換えができそうですね。でも次に悩むのが複数の表をどうつなげたら良いか？ではないでしょうか。

## VLOOKUP
ExcelでVLOOKUP使ってますか？（最近はXLOOKUP？それともINDEXとXMATCH派ですか？）  
はい、使っているそこのあなた！それがリレーションシップです！  
Excelで作った発注表で商品IDを入力してVLOOKUPで別のシートの商品マスタから商品名、単価を取り出すような仕組みは、プリザンターでは「リンク」機能で実現することができます。プリザンターで置き換えると「発注表」「商品マスタ」の２テーブルをリンクさせることになります。なおプリザンターではExcelで「商品IDを入力」の箇所が「ドロップダウンリストで商品マスタを選択」となります。

## 基本情報と通勤経路と資格情報と・・・テーブルがいっぱい
例えば従業員の管理表を作ったとします。従業員の氏名、年齢、住所などの基本的な情報の他、通勤する経路と通勤費などの通勤経路情報、保有している資格情報など管理する項目は多数あると思います。これらの情報を1つの表で管理しようとすると列数が膨大になり、視認性も悪くなります。そんなときは基本情報、通勤経路情報、資格情報で別シート（もしくは別ファイル）に表を分けると見やすくなりますね。  
さて質問です。この3つの表のうち主となる表はどれでしょうか？   
そう、「基本情報」ですよね。基本情報があった上で通勤経路や資格などの付帯情報を管理することになります。  
では次の質問です。基本情報と通勤経路や資格情報はどのように紐付ければよいでしょうか？  
そうです。従業員IDやメールアドレスなど従業員個人を特定できる情報です。ここまで来たらわかりましたよね。この3つのテーブルも「リレーションシップ」です。このようなケースはプリザンターで置き換えると「基本情報」「通勤経路」「資格情報」の3テーブルを作成し、「基本情報」が親テーブルとなり、「通勤経路」および「資格情報」とそれぞれリンクさせます。すると「通勤経路」「資格情報」には従業員を選択するドロップダウンリスト項目が作成され、従業員を選択することでレコード同士の紐付けが行われます。

## リンクの使いどころの見極めは・・・・勘と経験？（度胸はいらない）
「テーブルを分けてリンクで関連付けるのが適切な例を教えてほしい」という声があった場合、どうしますか？身も蓋もないですが、勘と経験を生かしてとにかくやってみるしかないと思います。成功すれば経験値Upです。失敗してもプリザンターならすぐにやり直せますし、これも経験値UPです。
これで終わりにするとあんまりなので、具体的な例を。

* 例1）見積情報を管理したい。見積明細は5行あればOK。さてどうやってテーブルを作る？
  1. 1つのテーブルに見積番号、見積日、宛先などの情報と5行分の明細情報を並べる。
  1. 見積番号、見積日、宛先などを管理する「ヘッダ」テーブルと1行分の明細情報を管理する「見積明細」テーブルの2テーブルをリンクさせる。

* 例2） 勤怠情報を管理したい。日々の管理項目は出勤時間、退勤時間、休憩時間、稼働時間の4つ。さてどうやってテーブルを作る？
  1. 1つのテーブルに1～31日分の入力項目を並べる。
  1. 年月、氏名を登録する「ヘッダ」テーブルと1日分の管理項目を登録する「勤怠明細」テーブルの2つのテーブルをリンクさせる。

例1の場合、明細が5行であれば、1つのテーブルで管理しても良いかもしれません。ですが、今後明細行を増やしたい要望が見込まれる場合は、1つのテーブルで管理すると1行増えるたびに項目と追加する必要がありますので、明細の行数を自由に登録できる2の方法が最適だと思います。  
また例2の場合、出勤時間、退勤時間を日付項目を使用する場合、31日×1日当たり2個＝62個の日付項目が必要になります。プリザンターのComunity Editionの場合、各項目は最大26個までなのEnterprise Editionにしない限り、2の方法をとらざるを得ません。
このように利用するEditionによってもリンクにするジャッジが必要になる場合もあります。

# どうやって実現しよう？
ある程度プリザンターで画面を作れるようになったら、次は「自動計算したい」「別テーブルの値をセットしたい」「ワークフロー作りたい」等々色々な要件を実現したくなると思います。この時にどのように実現するのか？というのが次のハードルになると思います。
またこれは現場で利用するユーザだけでなく、開発するエンジニアやプリザンターを提案するプリセールスの方々にとっても課題の1つではないかと思います。

## 標準機能で実現できる！
プリザンターは日々機能が追加されています。私が4~5年前に開発案件に携わっていたころに比べると圧倒的に標準機能でできる範囲が広がりました。2023年夏には待望のダッシュボード機能の追加、直近の最新バージョンでは計算式で日付計算や条件分岐ができるようになったり、サーバスクリプトによるバッチ処理が実現できるようになったりとさらに機能追加がされています。
ですので、まずは **「標準機能で実現できるか」**  を最優先に判断してください。もちろんスクリプト／サーバスクリプトなど強力な拡張機能を駆使することでより細かい処理を実現できますが、スクリプト／サーバスクリプトでの実現は「プログラムを実装する」ことになりますので、設計、実装、テスト、運用後の保守メンテと多かれ少なかれシステム開発のプロセスに則った進め方が必要になります。特に運用後の保守メンテナンスになった際、「設計書がないので仕様がわからない／作った人がもういない」というシステム保守のあるある事例にハマる場合があります。その点標準機能で実現すれば設定内容を見れば内容が理解できます。標準機能で実現できない要件はあきらめてもらうことも一つの手だと思います。

## その要件本当に必要ですか？
「実現したいことは何か」をいつも念頭に置いてください。開発する機能は本当に必要な要件だけに絞り、細かい要望は一旦捨て置くなどの割り切りも必要です。これはプリザンターでのアプリ開発に限ったことではありませんが、特にプリザンターではスクリプト／サーバスクリプトを使えば細かい要望にも応えられるので、ついつい対応したくなりがちです。スクリプト／サーバスクリプトは前述の通り「プログラムの実装」になりますので、不具合のリスクが高まることや保守メンテで苦労する可能性も高まります。

## 実現方法は1つではない！
例えば、「組織Aに所属するユーザ以外は項目Aを読取専用にしたい」という要望に対してはプリザンターでは項目のアクセス制御で実現できますが、状況による制御でも実現できます。また「日付Aが日付Bの過去日だったら登録更新させない」のような独自に入力検証を追加したい場合はスクリプトで実装することもできますし、サーバスクリプトでも実装できます。
このように実現方法が複数ある場合は都度最適な方法を選択することが必要です。

## どの機能を使えば要件を実現できるか教えて！
一番知りたいことではないかと思います。私も前職時代に若手メンバーとの会話で
　若手）ドロップダウンリストを選択したらVLOOKUPみたいに情報取ってきたいんですけど。
　私）マニュアルに書いてあるよ 　
　若手）どこに書いてありますか？
　私）（ん・・・？？あっ！）「ルックアップ」で調べてみて。
　若手）あー、本当だ！でもこれ探せだせないですよ。 
なんてことがありました。
プリザンターのマニュアルはユーザ皆様にとってわかりやすい内容にするべく日々メンテナンスを行っております。ですがマニュアル自体がリファレンスの色合いが強く、要件を実現するためにどの機能を使えばよいのかが直観的に探しづらいと思います。この点については社内でも課題としており改善するべく動いています。


# 最後に
プリザンターはユーザ皆様のやりたいことが実現できるツールです。プリザンターそのものの使いやすさだけでなくマニュアルも整備し、より皆様に使っていただける魅力のある製品にするべく取り組んでいきますので、ぜひご期待ください。
来年もプリザンターをよろしくお願いします。