0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bubbleのチュートリアル7:Defining a field as a list of things

Last updated at Posted at 2024-10-22

はじめに

Bubbleというノーコード/ローコードでアプリを作るサービスがあり、ちょっと言葉に癖があったりするので、チュートリアルをやってみる記録です。Bubble用語は、Bubbleのように網掛けします。
なるべく細かくキャプチャしていくので、見るだけでもBubbleってこうやるんだと感じていただければ。

これまでのチュートリアルをやってみた記事

  1. Saving data
    • 位置情報をDBへ登録して、地図にマーカーを表示
    • データのInsert
    • 地図
  2. Building a sign-up system
    • ユーザー登録とログイン、ログオフ
  3. Saving and modifying data
    • SNSっぽい、投稿といいね
    • Repeat Groupの利用
    • データのInsert、Update
  4. Building a slideshow
    • スライドショー形式のアプリ
    • Pluginの利用
  5. Sending data to pages
    • DataThings、DBのデータ)の共有
  6. Using conditions
    • 条件の利用
  7. Defining a field as a list of things <<今回>>
    • リストの利用

チュートリアルの記録

チュートリアルを選択

ログイン後のトップページ
> 左メニューのAcademy
> Learn your way
> By watching
> Interactive lessons
Defining a field as a list of things

今回のサブタイトルは、「Attach a list of things to the current user」です。
サブタイトルを読んでも、よくわからないですね。DBのテーブル(Type)のある列(filed)で、リスト形式を使うってことなんでしょうね。

Google BigQueryでも、列の定義にJSONを指定できるけど、扱い難しいもんなぁ。

どんなデータを入れられるのか、どう便利なのか、そしてどう扱うのか、今回は楽しみです。

image.png
image.png
リストを入れたくなる感じもわからないでもないけど、RDBでは第何だか忘れたけど正規化して、別テーブルにするというのが鉄板。それをやらない理由を、終わるときには理解していたいです。(まさかJoinできない!?)

購入するアイテムを入力するフォームを作成

image.png
image.png
image.png
Inputフォームを作って、プレイスホルダー。

image.png
image.png
保存ボタン。

image.png
image.png
ボタン押下時のWorkflow編集に入ります。

ボタン押下時の処理を追加

image.png
Data(Things)グループの、"Create new thing..."でデータを1件追加。

image.png
image.png
ここで作るデータは、商品ですね。買いたい商品、1つ。

image.png
image.png
"Shopping item"というデータを作ると言っていたので、そのように入力し、Confirm。(ここでチュートリアルがちょっとおかしくなるけど)

image.png
image.png
ここまででとりあえず、"Shopping item"テーブル(Type)にレコード(Entry)が1件できるけど、列(Field)がない(全Type共通の作成日時とかしかない)ので、次に定義していきます。

image.png
image.png
image.png
image.png
"Name"だと、あとで登場したときわかりづらいので、"ItemName"という列を作ります。

image.png
image.png
image.png
設定する値は、Input ItemのValueです。これまで何度か通った道です。

image.png
image.png
あ、私がいつも忘れる入力処理のリセット処理です。

image.png
image.png
ん?"Shopping Item"にレコードを追加して、それを購入予定リストに入れるんですね。"Shopping Item"はマスタ的な扱いなのかな。

image.png
image.png
先ほどのリセットの後に、処理が続きます。

ここから、今回の肝(ちょっと長め)です!

image.png
image.png
そういえばBubbleでは、"User"というテーブル(Type)は、デフォルトで作成されています。それをカスタマイズして、新しい列(Field)を追加するんですね。

image.png
image.png
image.png
image.png
"Shopping list"という列名で、型はさっき作った"Shopping item"。

image.png
で、それのリスト!

image.png
"Shopping item"リストに要素を追加するので、"add"で指定します。ここで出ているメニューは、リストに対する操作ばかり。

ちなみにリストでない場合は、"="とか、"in"とかだったかな。

image.png
image.png
設定する値は、"Result of step 1"!
step 1というのは、今回のトリガーのWhenから始まるWorkflowの、"step 1"なんですね。それを指定。

image.png
image.png
カレントユーザーの列"Shopping listに、アイテムを追加するからこれは、カートの中にアイテムを入れる感じですかね。あとで、実際に購入したら空にUpdateする感じで。

image.png
Designに戻って、リストを表示するそうです。

購入するアイテムリストを表示

image.png
繰り返しの表示といえば、"Repeating Group"ですね!

image.png
image.png
画面へ配置して、"Type of content"に"Shopping item"。これは繰り返しの1粒の型ですね。どの型を表示するのか。

image.png
image.png
そして"Data source"は、"Current User's Shopping list"!

なるほど。これまで何度か私は、この2つの違いの意味がピンと来ないと思っていましたが、"Type of content"は型で、"Data source"はそのデータの元でした。DBから直接取り出すときは違いがわからなかったけど、"Type of content"は型の定義文ですね。スッキリした!

この混乱の元はやはり、Bubble用語の揺れというか選択ミスのような気がしてならない。:thinking: "Type"、"Data"、"Things"のうちの、"Type"は、今回のことでちょっと区別できるようになりました。

image.png
image.png
OK。

繰り返す要素(テキスト)を追加

image.png
image.png
image.png
image.png
image.png
image.png
Textを追加して、Dynamic dataで"Current cell's Shopping item's ItemName"!

繰り返しの1つの要素の"ItemName"。

繰り返す要素(削除ボタン)を追加

image.png
アイコンで、削除ボタンを追加するようです。

image.png
ほしかったけどお母さんから雷が落ちたから消す、ということで雷アイコンにしましょう。

そしてWorkflowです。

繰り返しの削除ボタンを押したときの処理を追加

image.png
image.png
"Current User"の情報をUpdateします。

image.png
さっき、リストに追加したのと同じactionですね。

image.png
image.png
image.png
image.png
"Shopping list"から"remove"で~・・・(じらされてる感がある)

image.png
image.png
image.png
"Current cell's Shopping item"というのは、雷の削除アイコンがあるセルのアイテム、ということですね。

プレビューで確認!

image.png
もうちょっとやりたかった。購入まで。。これはカートに入れるところまでですね。

image.png
とりあえず2件登録しましたが、2.5mのぬいぐるみはさすがにお母さんに叱られたので消しましょう。

image.png
消えた。

・・・いやこれ、データ見ないと実際の動き、わからないでしょう!!

image.png
なのにこれ。
見せてもらえないんですよね。Read onlyで見せてほしい。。

たぶん、"User"の"Shopping Items"からは消えているけど、"Shopping Item"には、2.5mのぬいぐるみも残っている。もう一度まったく同じ、「クマのぬいぐるみ(2.5m)」を登録すると、"Shopping Item"では重複しているのでしょう。

まぁチュートリアルなので、それはそれでいいですよ。でも、そうだとしても、見ないとわからない!!

改造

image.png
というわけで、こんな感じでアレンジして・・・

image.png
やっぱそうだった。お母さんの雷が落ちて1度はあきらめた2.5mだけど、欲しさを再確認して登録した場面です。

Shopping Itemは、2回登録されっぱなしになってます。
ヨカッタヨカッタ。

もう少しちゃんとやるなら、まったく同じものがあったら登録しない、みたいな処理を追加すればいいですかね。"Shopping Item"はマスタテーブルとして扱うという意味で。

おわりに

リストの使い方はなんとなくわかりました。リストにすると、専用の"add"とか"remove"が使えるようになるんですね。表示は、"Repeating group"で表示。

でーもー、本来これは別のテーブルで定義してJOINしたいところ。ショッピングカートのような、"User"の属性ではないものならなおさら、別のテーブルにしたい。気持ち悪い~・・・。
別のテーブルにしたとき、PKとかFKはどうなるのか、どうやってJOINするのか。まだわからないけど、先にそういうチュートリアルがあるんでしょうかね。あってほしいな。アプリを作る上では必須だと思うから。

さて。そう言ったって、ないんだからしょうがない。今回はここまでです。

これ、非エンジニアがやるとして、こういうRDBのレコードの感覚とかどう思って扱うのか、疑問ではあります。どういうときに新しいTypeを作って、どういうときに既存のTypeに"List"型の列を作るのか。私はまだJOINの仕方がわからないけどわかったとして、今回のケースはListにはしなくて、その説明は難しいなぁ。

ではよきBubbleリピートライフを!

Next

Bubbleのチュートリアル8:Using external APIs

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?