フォーム読み込み中
AppSheetはGoogleのノーコード開発プラットフォームサービスです。専用の開発キットは不要で、Webブラウザから業務向けアプリケーションを開発できます。
Google Sheetsの各スプレッドシートを、データベースで言うところのテーブルとして使います。CRUDLに沿ったユーザインターフェースは自動で生成されます。
本記事では、一枚ではなく、複数のスプレッドシートを使い、またそれぞれを連携させて、アプリケーションが構築できるかどうかを確認したいと思います。スプレッドシート間の連携ができれば、ある程度規模の大きな開発にも耐えうると判断できるでしょう。
またビジネスロジックが組めるかも見たいと思います。
何を確認したいかを改めて明確にしておきましょう。
テーブルとみなすスプレッドシート同士の関連付けを、AppSheet側でそもそも実現できるのか、できる場合、どのようにリレーションを設定して管理するのかを理解することが主目的です。
具体的な確認事項は次の2点とします。
AppSheetが公開しているサンプルテンプレートに、目的の構成をとっていると思われるものがありました。こちらを利用させていただきます。
https://www.appsheet.com/templates/Create-orders-that-have-many-items-Track-items-that-have-many-orders?appGuidString=01c2ecc1-9cd5-4edc-8047-d5d9734b5
注文(オーダ)と、商品(アイテム)を管理するアプリケーションです。
説明文からも、注文と商品は多対多の関係になり、今回の目的に合致していることが読み取れます。
ページ内に2つのリンクがあります。それぞれ以下の違いがあります。
今回はリーディングが目的であるため、どちらでもかまいません。コピーすると任意に触れるため理解が早いかもしれません。
Webで稼働するシミュレータから、サンプルのアプリケーションの実際の動線も確認しておきましょう。
左から順に
1.Orderの一覧を表示
2.Orderを新規に作成
3.作成したOrderを確認
4.Itemを追加
使われているシート名も把握しておきましょう。
■ Orderテーブル
注文を管理 ※ビューあり
■ Order Itemsテーブル
OrderとItemの中間テーブル
■ Menu Itemsテーブル
商品となるアイテムを管理 ※ビューあり
Google Sheets上では下記のようになっています。
いよいよ、3つのテーブルのカラムの内部設計を追いかけていきます。
開発キット内に、3つのテーブルが表示されています。
ビューをもつOrderシートから、各カラムがどうなっているかを探っていきましょう。
同内容を下へも転記します。
スプレッドシート上では視認できないカラムもありますね。スプレッドシートから見えるカラムは太字にします。
Orderテーブル
NAME | TYPE | KEY? | LABEL? | FORMULA |
|---|---|---|---|---|
_RowNumber | Number | |||
Order ID | Text | ✔︎ | ||
Name | Name | ✔︎ | ||
Ordered Started | DateTime | |||
Your Order | List | REF_ROWS("Order Items", "Order ID") | ||
Total | Price | SUM([Your Order][Total Item Cost]) |
それぞれのカラムは何を意味しているのでしょうか。
● _RowNumber
さっそく不思議なカラム名です。
調べてみると、どのテーブルにも自動で加えられるシート上の行ナンバーのようです。機械的に管理、利用されているため、意識する必要はなさそうです。無視しましょう。
● Order ID
これがデータベースでいうところの主キーです。KEYにチェックが入っています。
● Name
オーダ名です。Nameという型があるようです。
LABELにチェックが入っています。テーブルを代表する値にフラグをつけます。AppSheetではビューが自動で作成されるます。ディフォルトとしてどのカラムデータを見せるかという役割をラベルが担います。任意の列にラベルは指定できます。
● Ordered Started
オーダした日時。
● Your Order
FORMULAにREF_FOWSという式が入っています。2つ引数を取り、データセットとカラムを指定します。ここでは、中間テーブルのOrder Itemsを、またそこのMenu Item IDが指定されています。それを外部キーとして、本データセットのKEYで指定したOrder IDを主キーとして、参照連動させるための式です。
型も複数形のListになっている理由も納得できます。
このカラムは、別テーブル側から、本テーブルを参照する外部キーを設定することで自動で挿入されます。手動でも設定できます。
● Total
ここがYour Order列を利用したビジネスロジック部分でしょう。なんとなく意味はわかりますが、使われている式(FORMULA式)の、特にカッコの意図する文法が分かりません。後回しにします。
Menu Itemsテーブル
NAME | TYPE | KEY? | LABEL? | FORMULA |
|---|---|---|---|---|
_RowNumber | Number | |||
Menu Item ID | Text | ✔︎ | ||
Name | Text | ✔︎ | ||
Price | Price | |||
Related Order Items | List | REF_ROWS("Order Items", "Menu Item ID") |
● _RowNumber
先と同じであるため説明省略。
● Menu Item ID
主キー。
● Name
アイテムの名前。
● Price
アイテムの価格。
● Related Order Items
中間テーブルであるOrder ItemsのMenu Item IDを外部キーとし、本データセットのKEYで指定したMenu Item IDを主キーとして、参照連動させるための式です。
Order Itemsテーブル
NAME | TYPE | KEY? | LABEL? | FORMULA |
|---|---|---|---|---|
_RowNumber | Number | |||
Order Item ID | Text | ✔︎ | ||
Order ID | Ref | |||
Menu Item ID | Ref | |||
Quantity | Number | |||
Total Item Cost | Number | [Quantity]*[Menu Item ID].[Price]
| ||
Item Name | Text | ✔︎ | [Menu Item ID].[Name] |
● _RowNumber
先と同じであるため説明省略。
● Order Item ID
主キー。
● Order ID
Ref型です。Ordetテーブルとの連携用の外部キーです。
参照先のテーブルの指定がないことを不思議に思いますが、Ref型を設定時にダイアログが表示され、テーブルを指定することになります。ダイアログ内のSource tableというリストから、Order Itemを選択します。
● Menu Item ID
Ref型です。Menu Itemsテーブルとの連携用の外部キーです。
● Quantity
注文数。
● Total Item Cost
何やら式が入っています。こちらもあとからまとめて見直します。
● Item Name
見直し予定。
3つのテーブルを見てきました。テーブルの連携は自由にできそうですね。
実データとしては管理されていない、ビジネスロジックを組み立てているFORMULA式のところの意味が分からずスキップしていました。最後にここを理解していきましょう。
AppSheet固有の4つの文法を覚えれば読み解けます。
① [列名]:指定列の一つの値
② テーブル名[列名]:指定テーブルの指定列の全データのリスト
③ [Ref列名].[列名]:参照先のデリファレンス(実体化)したROWの、指定した一つの値
④ [Ref列名][列名]:参照先のデリファレンス(実体化)したROWの、指定した列値のリスト
宿題にしていた式は3つありました。今ならルールに従い理解できると思います。
■ SUM([Your Order][Total Item Cost])
=> ④ルール
Your Orderは、Orderテーブル内でREF_ROWSを使い、Order Itemsテーブルとのリレーションを張っていました。そして、Order ItemsテーブルのTotal Item Costを指定しているので、そのリストが返ってきます。
SUMとはAppSheetが用意している加算用の数値関数です。SUM内のFORMULA式がリストである理由も納得いきますね。
■ [Quantity]*[Menu Item ID].[Price]
=> ①ルールと③ルールの積算
■ [Menu Item ID].[Name]
=> ③ルール
シート同士でリレーションを張った設計が可能か、またビジネスロジックは組めるのか、という視点でAppSheetを見てきました。
テーブルのリレーション設計は少しばかり難しさがあるでしょうか。ただしこれは、AppSheetというよりは、データベース固有の設計の難しさ由来だと思います。
いくつかFORMULA式を使い、テーブル内で新規列として保持させていました。テーブル内の列がそのままビジネスロジック用の置き場になっているということです。この辺りに何を求めるかが、本ノーコードツール利用可否の境界になりそうな気がします。
今回ビューについては触れませんでしたが少しだけ。CRUDLの何を有効にするかを画面からチェックボックスを入れていくだけ画面が取捨選択されていきます。デザインの自由度の制限はあるものの、統一された品質のアプリがノーコードでできるに偽りはなさそうです。
便利さの代償としての不便さはありますが、そこはトレードオフです。業務部門で利用する道具としては非常にいい道具ではないかと思います。
AppSheet は、ノーコードのアプリケーション開発プラットフォームサービスです。Google Workspace をはじめとする、さまざまなデータソースと接続し、コーディング不要で迅速なアプリケーション開発を可能にします。
条件に該当するページがございません