話題のPWA作成サービスGlideでのカテゴリー設定について

GoogleSpreadSheet上のデータをあっという間にリッチなアプリにしてくれる話題のサービスGlide。
所詮WEBページテンプレート的なものだろうとタカをくくっていたのですが、チョチョっと触っただけで素晴らしいインターフェースのアプリが完成し、驚愕しました。こんなに綺麗なアプリを自分が一から作るとなると相当な時間がかかります。そもそもデザインセンスがない。

その簡便さと出来栄えは本当に素晴らしいのですが、スプレッドシートのデータを表示するので、ちょっと？？？な部分も出てきました。RDでないので素のままのスプレッドシートでは単純に行データを表示するだけです。まだまだ痒いところに手が届くというわけではない。

ここではカテゴリー分け、そして更にサブカテゴリーまでの絞り込みをどうやって行うか、[公式YouTubeチャンネル](https://www.youtube.com/channel/UCoPJeYPmYF_5CX9gbPHAG3Q)を参考にしつつやってみました。結構試行錯誤してしまいました。公式ドキュメントがないので果たしてこれで正しいのかどうかわかりませんが、一応できているのでだいたいは合っていると思います。
***

###題材として
北海道ラーメンMAPという架空のアプリを作ります。
インターフェースの流れは
都市選択=>味のカテゴリー選択=>店舗選択=>店舗詳細表示
となります。TOPページから都市を選択するとそれぞれの都市のラーメン店のサブカテゴリー（味のカテゴリー）が表示され、そのカテゴリー名をタップすると該当する店名が表示されるという流れです。
 ***
こういう店舗データをスプレッドシートで作成すると通常は
<img width="350" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/e2b069d2-61b5-39aa-5a45-5d831b647aa8.png">

のような形式でデータを保持していると思います。複数ある味のカテゴリーは一つのセルにカンマ区切りで複数の値を保持するか、セルを詰めながら右セルに一つづつ埋めていくという形かと思います。

この形式だけならGlideでは店舗一覧とその詳細のみしか表示されません。Componentsを選択する画面で以下のようなInline ListやList Reference、つまり関連レコードを表示するComponentsが出てこないのです。
<img width="194" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/04b54d43-0718-7533-d607-8bcb66deef18.png">
<img width="233" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/5f3fc2e9-b74b-6559-0ce4-38170d4c1de3.png">

最初公式のビデオにはあるのに自分のには出てこないので色々調べたらそういうことでした。

都市分類の先に更にサブカテゴリーとして味のカテゴリーといういわゆる大分類・小分類形式の場合、少々スプレッドシートの加工をしないと表示されません。

##大分類としての都市データ

まず大分類としての都市ごとにデータを分割してそれぞれ都市別のシートに分割します。
札幌のラーメン店
小樽のラーメン店
旭川のラーメン店
とシートを分けます。

##中間テーブル

次に中間テーブルとして都市名_カテゴリーシートを作成します。これも都市分の3シート作成します。
札幌\_カテゴリー
小樽\_カテゴリー
旭川\_カテゴリー

##TOP画面

そしてTop画面用シートを作成し、そこにはまず都市への参照用のセルを作成します。[参考YouTube](https://www.youtube.com/watch?v=o9rxMmN2KrM)
関連レコードを表示させるにはセルのタイトルを以下のようにして参照します。
<img width="966" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/ddfc41f4-3620-6e79-dcbd-b2721a9b5458.png">

札幌=札幌_カテゴリー:都市:Multiple
左から「札幌」は表示させたいセル名に該当します。
=札幌_カテゴリー:都市
で札幌_カテゴリーというシート名を指定し、: で区切ってその中の都市という列を指定します。
最後のMultipleは値が複数ある場合に使います。
そしてその列の1行目の値には「札幌」を入力します。
要するに札幌カテゴリーシートの都市名「札幌」のデータを参照するように指定します。
同様に小樽・旭川も指定します。
Componentsの選択はこんな感じでInlineListが出現するので各都市を選択、
<img width="247" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/53a5cea4-88d5-b7fd-314d-a951b5461426.png">

そうするとこういう画面になり、各都市へのリンクができます。
ちなみにこの__Top画面はList形式ではなくDetail__型です。
<img width="384" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/bd69f593-6987-1367-7d19-ce5d311207bc.png">

##小分類としての味カテゴリーの持たせ方

次に各都市から味カテゴリーへと続く参照指定ですが、この複数カテゴリーの選択が少々癖があり、店舗ごとの味カテゴリーデータの持たせ方を以下のようにしないといけません。

札幌のラーメン店シート
<img width="549" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/9e277e77-9e02-2be4-0d1e-9a5055bc5e84.png">
セルの名前はCategory1,Category2,,,とカテゴリーの総数分ナンバリングしてカラムを作成します。そしてそれぞれのカラムに固有の値を設定。
これを小樽のラーメン店シート,旭川のラーメン店シートそれぞれで同じように設定します。
[公式ビデオ参照](https://www.youtube.com/watch?v=QFG4Z9HuC30&t=217s)

小樽のラーメン店シート
<img width="549" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/cf386fa5-bea9-8fa9-f7a6-07882cbbb252.png">

このデータを札幌の場合は中間テーブルである札幌_カテゴリーシートから札幌のラーメン店シートを参照するわけですが、
<img width="1184" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/8374d604-f699-8f20-8a9a-9e5003960273.png">

表示したい列名としての
塩
=札幌のラーメン店:Category:Multiple
とします。注意として__カラム名のCategoryの後に先ほどつけたナンバリングは付けません。__
そしてセルの値はここでは塩を。
その他の味カテゴリーも同様に設定します。

これで札幌のラーメン店のCategory[number]カラムに該当する行をそれぞれ参照できるようになります。それぞれのカテゴリーの参照Componentsが選択できるようになりました。
<img width="311" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/70c53193-3102-09f3-2e47-63863d03ab22.png">

以下のように札幌のラーメン店シートのカテゴリー毎の件数が参照できています。

<img width="374" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/054eb41e-124f-24da-a9ee-8842c21889a1.png">

塩カテゴリーをタップすると
<img width="375" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171037/1a828852-ec11-e5a8-0d45-ff50f59f0c00.png">
ちゃんと絞り込まれています。
***

とここまでですが、公式ドキュメントが見つからないので試行錯誤しながら絞り込み表示をやってみました。ビジュアルに関しては簡単に写真や地図を表示できるので、あっという間に綺麗な画面を誰でも作れます。そして公開まで一瞬です。
まだおや？という面もありますが、これから色んな機能が追加されるでしょうし、GASとの連携ができるようになれば強力でしょう。

自分はFileMaker使いなのでGoogleスプレッドシートへはAPIを叩いてデータを出し入れするのですが、このGlideを使うとさながらFileMakerのデータをサクッとアプリ化している感じです。ServiceWorkerの効果でしょうが、FileMakerGoを使って同じデータを見るより高速で動きもスムーズです。
FileMaker上のデータ自体もGoogleMapのAPI使いまくりなのでGoogle依存度がますますUPしますが。

正直PWAのなんたるかを全く知らなかったのですが、このサービスのおかげで詳しく知ることができました。ネイティブアプリと全く同じ動きをするのでUX的に素晴らしいですね。実際に作って体感して驚きました。

公式BlogによるとGlideの裏側はこれもGoogleのFirestoreを使っているようですね。

***
##追記
と書いた直後に[本家YoutTube](https://www.youtube.com/watch?v=cjeNkS3xfLo)チャンネルに同じような大分類小分類の表示のさせ方がアップされました。
ここでは大分類と小分類を"+"で繋いで新たにカラムを作成して表示させています。この方がシートを分けなくていいですね。もっと早く教えて。