【Glide】SwipeをRandomにできるか?→それらしいものはできた
![](https://assets.st-note.com/img/1657158504622-4hD3TGPkHQ.png?width=1200)
【作りたいもの】
かるたの読み上げ用アプリ
【要件】
・ランダムに表示させる
・一度表示したものはリセットするまで表示しない
・ログインとかは必要ない
完成図
![](https://assets.st-note.com/production/uploads/images/82180895/picture_pc_414c63556395c70fa377df6ecfbb7e66.gif?width=1200)
GlideはGoogleSheetをデータベースにしてお気軽にPWAがつくれるノーコードサービスだ。
えてしてノーコードは
「さくっと作れる便利さ」
「表現の制約多い」
これらセットで語られることが多いが、今回も例外ではなかった。
GlideのSwipeUIはランダム表示ができないのだ。
そんな…。
There is no controllable sort in the Swipe style layout. It always looks for the oldest swipe date and the row with the oldest date will be the next card it swipes to.
スワイプスタイルのレイアウトには、制御可能なソートがありません。常にスワイプした日付が最も古いものを探し、最も古い日付を持つ行が次のスワイプ先のカードとなります。
おいおい、フラッシュカードとかいろいろ作れそうなのになんで実装ないのや…。そういうとこやぞ!w
ということで今回は自分なりに考えたハックを紹介できればと思います。
作成手順
データを用意する
Glideでデータ読込&Glideテーブル作成
画面を作成
1.データを用意する
なんらかのかるたデータが必要になるので用意します。
今回は以下を参照に小倉かるたデータを用意します。
小倉百人一首かるたデータ|オープンデータ共有&ダウンロード|LinkData http://linkdata.org/work/rdf1s6834i
![](https://assets.st-note.com/img/1657159391078-fZ0AzsAQMI.png?width=1200)
スプレッドシートにデータを用意します。
・読み札(かな)
読み札の読み仮名。
・読み札
読み札(漢字)
・作者
読み札の著者
・スワイプ時間
後ほどスワイプしたタイミングを記録するカラム(列)。とりあえず空白で可。
・リセット時間
リセットしたタイミングで使用。空白で可。
2.Glideでデータ読込&Glideテーブル作成
![](https://assets.st-note.com/img/1657159454588-oOiUIPzONm.png)
![](https://assets.st-note.com/img/1657159460250-e2xiunyMhX.png)
![](https://assets.st-note.com/img/1657159464925-sLwDOZxsbm.png?width=1200)
![](https://assets.st-note.com/img/1657159470360-Xp3RB9y8gc.png?width=1200)
ここからの流れをざっくり言うと、 データタブからGlideテーブルを作成しランダムに表示されるテーブルを作成します。
![](https://assets.st-note.com/img/1657159551151-SuGWomqE2o.png?width=1200)
画面上部のデータベースのタブを選択し、左のメニューの「+」マークを押し、New empty tableをクリックしてください。今回テーブル名はわかりやすくかるた(Glide)としています。
![](https://assets.st-note.com/img/1657159575146-ukrZaZCo6p.png)
![](https://assets.st-note.com/img/1657159580962-5SNk66hl3A.png)
![](https://assets.st-note.com/img/1657159586068-wPWtm2OFAt.png)
以下のように6つのカラム(列)を作成していきます。
①Type→Single Value Get→Random From→元データの読み札
![](https://assets.st-note.com/img/1657159700947-qnZjpA2CP9.png)
②Type→Relation Relate to items where the value in→①のカラム Matches the value in→元データの読み札
![](https://assets.st-note.com/img/1657159711882-ea7X5RPrvN.png)
③Type→Lookup Relation column→②のカラムからスワイプ時間を選択
![](https://assets.st-note.com/img/1657159732633-lcZwDOej28.png)
④Type→Lookup Relation column→②のカラムから読み札(かな)を選択
![](https://assets.st-note.com/img/1657159752198-atGnuEQ0wk.png)
⑤Type→Lookup Relation column→②のカラムからリセット時間を選択
![](https://assets.st-note.com/img/1657159762448-TBzh46jYMK.png)
⑥Type→Rollup Summarize the values of→⑤の列 By calculating the→Latest
![](https://assets.st-note.com/img/1657159774322-KVf0vNBDGF.png?width=1200)
どういう仕組みを作ろうとしているのか?
特定のデータからランダムに1つデータ取得できるSingleValueを使い、リレーションして元データからデータをランダムに引っ張ってこようとする試みです。
ランダムに取得はしますが、SingleValueでダブりなくデータを取得することはできません。そのため元データが少ないほど、同じデータをダブって取得する可能性が高いです。
そこで、Swipeで表示させるデータに関しては被りがないように、一度出たデータを表示させないようにします。
Swipeしたタイミングで時間を取得し、Swipe時間がないデータまたは、(最後の)Swipe時間<今 のデータを表示させます。
また、リセットボタンを実装しますが、そのために Swipe時間<リセットボタンを押したときの時間 という設定もおこないます。
Glideには標準でランダムデータ取得がないためこういったややトリッキーな実装をしなければいけないのです。
3.画面を作成
UI設定へ戻ります。
![](https://assets.st-note.com/img/1657159930427-l3e9gzgVdC.png?width=1200)
![](https://assets.st-note.com/img/1657159949632-wb8FflKBfC.png?width=1200)
![](https://assets.st-note.com/img/1657159960927-Nv1O8b1bE5.png)
![](https://assets.st-note.com/img/1657159998458-XyZ6xBp6sG.png)
次にSwipeカードの中身を設定します。
![](https://assets.st-note.com/img/1657160012945-zxm6cMNQQY.png?width=1200)
次にリセットボタンです。
![](https://assets.st-note.com/img/1657160044280-UWPft0M5Jw.png?width=1200)
![](https://assets.st-note.com/img/1657160061523-tRHRcbS3JO.png)
![](https://assets.st-note.com/img/1657160079787-P2XaxtFUwY.png?width=1200)
最後に、Swipeしきった後、リセットができないままカードが消えてしまうため、 緊急リセットボタンをつくります。
左メニューのMENU内にTABを作成(今回は『全部消えてしまったとき』としてます)
![](https://assets.st-note.com/img/1657160111921-2DmZ80ldZ2.png?width=1200)
![](https://assets.st-note.com/img/1657160129728-YZGJeuIxfL.png)
![](https://assets.st-note.com/img/1657160145825-CmCdKwZq6j.png?width=1200)
完成したアプリは以下からお試しでアクセスできます。
![](https://assets.st-note.com/img/1657160288360-dyC5CNUGcE.png)
ちなみに今回は1人しか使わないのでかなり端折ってますが、複数人が使うアプリでランダム表示となるともう少しややこしそうです。
海外のGlide本家コミュニティですが、以下のURLを参照ください。
https://community.glideapps.com/t/random-swipe/41800