ノーコードツールにおけるデータベース構築について


# はじめに
本記事は<a href=https://qiita.com/advent-calendar/2022/life-is-tech-kanto>Life is Tech！Advent Calendar</a> 12日目の記事です！

今回は近年話題になっているノーコードツールを使ったアプリ開発をこれから始めてみようと思っている人に向けたノーコードにおけるデータベースの考え方や構築の観点についてまとめた記事になります。
今回はGlideというノーコードツールを例に解説します。

# Glideって何？

Glideは、ビジネスアプリやデータベースアプリを作成するためのノーコードツールです。
つまり、プログラミングの知識がなくても、簡単な操作でアプリを作成することができます。
Glideでアプリを作成するためには、まずExcelやGoogleスプレッドシートを使ってデータベースを構築します。
そして、Glideのデザインツールを使って、アプリのインターフェースや機能をカスタマイズすることができます。
作成したアプリは、スマートフォンややWebブラウザからアクセスすることができます。

<hr>


Glideにおいて最も大事なことがあります。
### データベースがアプリの全て
ということです。
Glideはデータベースの読み込み、書き込み、表示をアプリに起こす為のツールであり、データベースに記された以上のことはできません。


さて、その上でGlideの主な特徴として、以下のようなものが挙げられます。

・ノーコードでアプリを作成できるため、プログラミングの知識がなくても使いやすい
・ExcelやGoogleスプレッドシートをデータベースとして使用できるため、データの管理がしやすい
・Glide上でデータベースのデータを連携させることができるRelationという機能がある
・作成したアプリはモバイルデバイスやWebブラウザからアクセスできるため、アプリの活用が広がる

アプリ作成の手軽さとアプリ公開までの速さを兼ね備えたツールだということです。
一方で、Glideは下記のような難点を抱えています。

・カスタマイズ性の低さ
Glideのカスタマイズ機能には限度があり、アプリのインターフェースや機能を自由にカスタマイズすることができません。
特に、機能面についてはカスタマイズの幅が狭く、一切コードをかかずに追加できる機能には限りがあります。

・データベース構築の難しさ
一般的なプログラミングにおけるクラスのような機能をGlideは保持していません。
その為、データを呼び出すにはRelationやLookupといった別の機能を使う必要があり、それに向けてデータベースを構築する必要があります。

これらの難点はプログラミングの知識を有する人にとってはさほど障害にはなりませんが、初めてノーコードツールに挑戦する人にとっては、壁を感じる部分かもしれません。
今回の記事では上記の<b>データベース構築の難しさ</b>について初学者がアプリ開発をする為の解説をしていきます。







# データベース設計って何？
Glideでアプリを設計する上でデータベースは必要不可欠です。
先述したように、データベースがアプリの本体と言っても過言ではありません。

では、そもそもデータベースってどういうものなのでしょうか？
結論から話すと、データベースは<b>アプリに纏わるデータを整理して管理する場所</b>です。
そして、ノーコードツールにおけるデータベース格納されるデータは大きく分けて2種類あります。

<b>マスターデータ</b>と<b>個別データ</b>です。

先述したように、Glideはカスタマイズ性があまり高くありません。
なので、データベースを構築する際には、マスターデータを用意してそこから個別データに紐付けることを意識して構築しましょう。

##### 実践
下記は、冷蔵庫の中身を管理するアプリのデータベースです。
マスターありとマスターなしの2種類のデータベースを用意しました。
マスターあり
https://docs.google.com/spreadsheets/d/1PJlpdzOBeNJD1_fAj3ChvaEkG-kIFgZJAejiBD23gFE/edit?usp=sharing
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/21598182-d568-10e1-a5c9-aa11825c9ef9.png"><img width="160" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/4fc4fb76-f246-5d11-58dc-ace49e282427.png">



マスターなし
https://docs.google.com/spreadsheets/d/1Ts_E6JlScqcYqZyUWrUAuTweFoauG5G9aquRGcsYsOg/edit?usp=sharing
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/12620aaf-0019-3c87-1560-dfac31c1f9d1.png">



一見すると、同じデータを扱っているように見えますがマスターありとマスターなしでは大きく異なります。
解説として以下の画像を用意しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/eddaa622-71c3-f775-c7cf-c8a2e639cc30.png)
まず、マスターなしの方ですが、ユーザーが冷蔵庫の中身を追加しようとすると次の５つのことを入力する必要があります。
・食材名
・食材の画像
・食材のジャンル
・ジャンルの画像
・個数

画像まで一々入れていたら大変ですよね。
さらに、冷蔵庫からなくなって新たに買い直した場合、この動作を繰り返す必要があります。
冷蔵庫の中身の変動に合わせて毎回この入力をしていたらユーザーにとってはかなりの手間です。
このアプリを使いたいとは誰も思わないことでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/8415e633-2b37-addb-cbda-b2360691a6e4.png)


次に、マスターありの場合では、ユーザーが入力する情報は以下の2つのみです。
・食材名
・個数

他のデータについては、マスターから<b>Relation</b>という機能を使って取得します。
細かい説明は省きますが、大抵のノーコードツールには似たような機能がついており、特定のセルの中身が一致した場合、横の行のデータを全て持ってくることができます。
さらに、マスターありの場合では1度登録した食材についてはマスターに保存されるので画像の登録などは1度きりで良いです。
もっと言えば、外部から全ての食材データについて取得してアプリを作成すれば、ユーザーが新たな食材を登録する必要はありませんね。

上記のようにノーコードツールでは、アプリでユーザーが扱うデータを想定した上でデータベースを構築しましょう。

##### データベース構築に悩んだら？？
マスターデータと個別データをどう構築したらいいかわからない場合は以下の観点を参考に分けてみてください。
・ユーザーが共通で使用するデータはないか？
これは、冷蔵庫管理アプリでいうところの食材画像やジャンルです。
冷蔵庫管理アプリにおけるユーザー個別のデータは<b>「どの食材が何個あるか」</b>ということです。
人参は野菜ですし、牛肉をまさか野菜類だと思う人はいないはずです。

・複数のデータに共通するラベリングはないか？
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/b2574764-c459-759a-125c-02d6a43b7076.png">
画像のように、多くのデータは共通項によって括ることができます。
こうした階層構造をマスターとして設計しておくことで、人参というデータに「野菜類」「食材」「食品」といったラベルを付随させることが可能になります。

# 発展編
さて、ここからはある程度データベースが作れるようになった方へ向けた発展編になっていきます。
データベースをより良くするコツは主に<b>非入力データ</b>と<b>データ拡張性</b>の2つです。

### 非入力データ
非入力データとはデータベースにデータが増えていく際にユーザーが直接入力することなく取得することができるデータです。
例えば、入力した日時などがこれにあたります。
先ほどの冷蔵庫のアプリに戻ってみましょう。
先ほどのアプリで取得できる情報は<b>「個々の冷蔵庫の中身事情」</b>です。
人様の冷蔵庫事情を知ったところで私達自身には何の影響もないですよね。
それではこれがもし、これを使っているユーザーの情報も取得できるようになったらいかがでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/f4271339-2f50-6bac-6c7d-69be5322b447.png)

赤枠のユーザーから取得できることが増えるだけで、このアプリが蓄積するデータベースは大幅にその価値を向上させます。
例えば、お店の仕入れ担当の人にこのデータベースを見せれば、同じ地域の主婦層や学生層がよく購入する商品をデータとして可視化できます。
ノーコードでアプリを作ろうとすると、どうしてもユーザーが入力するデータに纏わることばかりを考えがちですが

#### データの多彩さ　＝　打ち手の多さ

データベースで様々な非入力データを取得しそれらのデータを相互に繋ぎ合わせることで思わぬ収穫や新たな気付きを得ることができます。
ユーザーが入力するデータ以外にも作成しようとしているアプリで取得できるデータは何か？次に繋がるデータ分析を行うにはどのようなデータが必要なのかを考えてみてください。


### データ拡張性
データ拡張性は既存のデータに新しいデータを加えようとした際の拡張性のしやすさを意味します。
例えば、冷蔵庫アプリでジャンルの上に新たに「食品類」と「雑貨類」という階層を増やし、分類するとします。
冷蔵庫アプリのマスターなしはスプレッドシートに列を追加した上でユーザーの入力項目がさらに増えます。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/c6c17066-1abf-7a68-ef68-a16e88509b36.png">

既存のものを書き換える必要がある他、これから先の入力も大変になり、これでは拡張性があるとは言えません。
一方、マスターありは階層を深くするタイミングで食材ジャンルに食品or雑貨を設定する必要がありますが、ユーザーの入力自体には変化がありません。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140459/9e3c3b29-76b0-d45b-4dca-52a3c243d79d.png">
逆に食品or雑貨の新たなシートを作ってあげることで出来ることが増えます。
例えば、ユーザー入力項目に値段という項目を増やすことで、食品にかける出費額と雑貨にかける出費額をそれぞれ算出することが出来るようになります。
また、データ拡張性はアプリが開発者の手元を離れた時に効果を発揮します。
データベースがそれぞれ何のデータを収集していて、どこのデータベースを変更するとどのような影響が出るのか、データを新たに増やす際にはどこに気を付ければいいのか。
アプリは常に発展していくものです。開発者以外の人がそのアプリをより発展させていく為には、後任がわかりやすくデータベースを拡張しやすい設計を心がけるとアプリをブラッシュアップしやすくなります。


<hr>

# 終わりに
以上、<b>ノーコードツールにおけるデータベース構築について</b>でした。
ノーコードツールの多くはGlideでいうRelationのような特殊なデータ連携機能を携えており、初心者にはイメージしづらい部分もたくさんあると思います。
今回はあくまでデータベースの構築についての記事なのでアプリ作成についてはほとんど触れませんでしたが、ツールによってアプリの向き不向きも異なります。
自分が構築したデータベースに対して適切なノーコードツールを選定する為にもまずはデータベースを綺麗に構築するところから始めてみてはいかがでしょうか。

明日は、つぼつぼが書いてくれるみたいです。
是非、ここまで読了された方は併せてご購読してみてください、私も楽しみにしています。