AppSheet は本格的なアプリ開発にも使えるのか?
サーバサイド開発経験者が初見で感じたこと

2023年3月14日掲載

AppSheet は本格的なアプリ開発にも使えるのか?

AppSheetはGoogleのノーコード開発プラットフォームサービスです。専用の開発キットは不要で、Webブラウザから業務向けアプリケーションを開発できます。

Google Sheetsの各スプレッドシートを、データベースで言うところのテーブルとして使います。CRUDLに沿ったユーザインターフェースは自動で生成されます。

本記事では、一枚ではなく、複数のスプレッドシートを使い、またそれぞれを連携させて、アプリケーションが構築できるかどうかを確認したいと思います。スプレッドシート間の連携ができれば、ある程度規模の大きな開発にも耐えうると判断できるでしょう。

またビジネスロジックが組めるかも見たいと思います。

目次

  • AppSheetでテーブル同士のリレーションシップを設定できるかを確認します
  • AppSheet上でのビジネスロジックの組み立て作法も見てみます
  • データベースの基礎的な知識があるとより読みやすい記事になっています

確認事項

何を確認したいかを改めて明確にしておきましょう。

テーブルとみなすスプレッドシート同士の関連付けを、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

AppSheet アプリ開発_テンプレート

注文(オーダ)と、商品(アイテム)を管理するアプリケーションです。 

説明文からも、注文と商品は多対多の関係になり、今回の目的に合致していることが読み取れます。

  • orders have many items
  • items have many orders. 
  • This is accomplished through an intermediate table.

ページ内に2つのリンクがあります。それぞれ以下の違いがあります。

  • Look Under the hood:リードオンリーのAppScriptの開発キットが起動
  • Copy and Customize:利用者のGoogle Drive環境へ各種ファイルを保存 そこをベースにAppScriptの開発キットが起動

今回はリーディングが目的であるため、どちらでもかまいません。コピーすると任意に触れるため理解が早いかもしれません。

Webで稼働するシミュレータから、サンプルのアプリケーションの実際の動線も確認しておきましょう。

AppSheet アプリ開発_サンプルアプリ

左から順に
1.Orderの一覧を表示
2.Orderを新規に作成
3.作成したOrderを確認
4.Itemを追加

 

使われているシート名も把握しておきましょう。

■ Orderテーブル
 注文を管理 ※ビューあり

■ Order Itemsテーブル
 OrderとItemの中間テーブル

■ Menu Itemsテーブル
 商品となるアイテムを管理 ※ビューあり

Google Sheets上では下記のようになっています。

AppSheetアプリ開発_Google Sheets上

テーブル設計

いよいよ、3つのテーブルのカラムの内部設計を追いかけていきます。

開発キット内に、3つのテーブルが表示されています。
ビューをもつOrderシートから、各カラムがどうなっているかを探っていきましょう。

AppSheetアプリ開発_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式の説明

実データとしては管理されていない、ビジネスロジックを組み立てている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

AppSheet は、ノーコードのアプリケーション開発プラットフォームサービスです。Google Workspace をはじめとする、さまざまなデータソースと接続し、コーディング不要で迅速なアプリケーション開発を可能にします。

おすすめの記事

条件に該当するページがございません