Bubbleのチュートリアル９：Using the chart element

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

https://bubble.io/

## これまでのチュートリアルをやってみた記事
1. [Saving data](https://qiita.com/yo16/items/d77a5cf8df18419b079e)
    - 位置情報をDBへ登録して、地図にマーカーを表示
    - データのInsert
    - 地図
2. [Building a sign-up system](https://qiita.com/yo16/items/1ac9467ad5bb5ed6ba52)
    - ユーザー登録とログイン、ログオフ
3. [Saving and modifying data](https://qiita.com/yo16/items/449b9e0b15ff76ec9584)
    - SNSっぽい、投稿といいね
    - `Repeat Group`の利用
    - データのInsert、Update
4. [Building a slideshow](https://qiita.com/yo16/items/c015c2097ae53055bca0)
    - スライドショー形式のアプリ
    - `Plugin`の利用
5. [Sending data to pages](https://qiita.com/yo16/items/0b0a847b0e4fa382e07c)
    - `Data`（`Things`、DBのデータ）の共有
6. [Using conditions](https://qiita.com/yo16/items/57b9bef94122c59785db)
    - 条件の利用
7. [Defining a field as a list of things](https://qiita.com/yo16/items/eda7b609d12ac16cb205)
    - リストの利用
8. [Using external APIs](https://qiita.com/yo16/items/b99810f8d0262b9d0a1c)
    - Pluginの利用による、外部APIの呼び出し
9. **Using the chart element** ＜＜今回＞＞
    - グラフ

# チュートリアルの記録
## チュートリアルを選択
ログイン後のトップページ
＞ 左メニューのAcademy
＞ Learn your way
＞ By watching
＞ Interactive lessons
＞ **Using the chart element**

今回のサブタイトルは、「Use the chart element to display dynamic data」です。

"chart"というのは、だいたい日本でいうグラフのこと。とすると、グラフ用のプラグインを使って、データの更新があったらすぐ反映されるよというアプリかなぁ。
データの更新→即反映というのは、[チュートリアル５：Sending data to pages](https://qiita.com/yo16/items/0b0a847b0e4fa382e07c)など、いくつかでやってるけど、DBのデータをプラグインに渡すという練習かな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/6e8074cc-2b30-605d-abfd-787b2ee0a514.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/0cf47af0-08cb-bdcb-5e9f-41a8a7a53b7a.png)

うーん、目的がちょっとピンと来ないけど、やってみましょう。Start！

## データの点を登録する入力フォームを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/035ccdbb-c895-658b-0170-263b3e78c1f5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/a50e3683-5034-8033-dfe5-0e7064d75536.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/d623f497-24f8-1aa1-15a7-7fa16b23d8e0.png)
プレイスホルダーを"Label..."にして、必須項目であるためのチェックボックスにチェック。

この入力に依存するワークフローは、空の場合は実行されませんというのは、どういうことなんでしょうね。ボタンを押したとき必須項目が入っていないと、ボタンが押されたことにならないという感じでしょうか。
OnClickが発動しないとなると、便利なような、気持ち悪いような。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/f9c02cf0-04ad-0245-28ed-99d541067d99.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e4363f39-77e7-78f1-7aa0-076d67e9dabf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/c9490304-8631-c428-8612-02e17ef4cf01.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/6cf4a3a9-aef6-22ec-d194-fc52185b2e00.png)
次はY軸用の値。数値なので、"Decimal"（整数）型にします。

X軸の値は、Valueなのかな。英語圏の用語？

## 登録ボタンを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/edd5d8eb-1a62-bf65-e3a6-05aabc01ffc8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/26039b76-9617-6caf-1835-1031e33ebd9e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/d59512ae-9909-c5cd-c31d-f5db8a87b319.png)
ボタンに表示される文字を変更して、押下時の処理に入ります。

## 登録ボタン押下時の処理を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/ea54fc15-5452-b35d-b879-4f85f3c9fb46.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/1db002cc-71f3-ea19-0deb-778ab969f116.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/f4aea082-ae15-c95e-48f8-ed0c817e3010.png)
あ、Whenの欄に条件を入れるのかな！？と思ったら、actionでデータを作るんですね・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/47ec7409-14ab-a163-853d-3fef7c2ed101.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/8dce5714-f505-2c5e-73f6-8915efaf8b66.png)
"Data Point"型を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/ef342dc8-db72-e62e-cf40-c0da57fd1280.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/1e60a107-43df-c1fe-3b9d-c21eb5304249.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/c3125581-1390-158f-3aed-271fa2632979.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/da63affa-0f9c-add4-96fd-04bddb8f8126.png)
`field`として、"Label"と"Value"を作って、それぞれの入力フォームの値を設定。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/84c00067-447a-e12a-8826-2075255b26c7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/c3c1af4c-4732-c7e7-71c3-ad24b5e7ae2e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e8ee1342-8ef3-9eb6-c32f-19da2ede9396.png)
登録後は、入力フォームのリセットを忘れずに。

入力フォームは、どの要素か、指定するところがないんだけど、ここで使ったラベルも値も両方クリアされるのかな。ちょっと疑問。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/ba77b4bf-fc94-6ec1-d9fc-5ef311726f4f.png)
`Design`画面に戻ります。

## グラフを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/f814ca8e-acf2-ec1c-659b-9e681c5696d4.png)
Bubble製のグラフライブラリがあるそうで、それをインストールして使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e5af5fcb-723e-f91b-2e93-b6dbb4046b35.png)
スクロールしたらすぐあった。ものすごい数のアプリで使われてますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e9ec1e34-1d4f-2c37-7f2e-88467a147c8c.png)
インストールして、`Design`に戻ると、`Visual Elements`の中に"Line/Bar Chart"が追加されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/75cd75d5-79dc-69e3-eef3-1f377101bd23.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/1273dc73-e12c-6182-d4e6-9641cca92b8c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/7122493a-c729-61c9-043b-2d70f4d85fd4.png)
（いつもそういうけど）大きく配置。

ページの幅にっていうから、素直にそうしておきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/0855e91e-4329-43f4-a2d2-304b62004237.png)
線グラフ（折れ線？曲線？）になっているから、棒グラフに。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/f56c335f-585c-d35f-7e1e-6e9edb9b9192.png)
選択肢がちょっと独特。

レーダーチャート！（折れ線グラフ、棒グラフの次！？）
円グラフとドーナツ！（同じでしょ！）
Scatter（散布図）がない！（ほしいし簡単でしょ！）

まぁいいや。

あ、そうか。"Label"と"Value"を入力するのは、棒グラフの棒の意味と、その高さ、という感じですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/c5b7208c-9fbc-4e4a-4890-b60dd4713a03.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/19d3064b-f13b-f8ee-ea5a-318ef08a6653.png)
"the list of data points"というのは、さっき処理で作った、"Data Point"型のデータ群のことかな。data pointsって英単語として言っているのか、型の名前として言っているのか区別できない。せめて、型を"DataPoints"とかスペース抜きにするとか、""でくくるとかしてほしい所存。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/61e5988f-e9ac-b41e-d633-c210cc3bdb6c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/fd36f13b-6fc0-4f1c-f36b-3b623855457a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/8af34463-5fbc-5e84-5633-8e8b8bfcf67d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/938db039-c223-963f-63cf-04d0d13c874e.png)
"Data source"は、"Data Point"テーブルから取ってくるという設定。（Search for）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/8c6e91f7-82fa-95d6-7b35-59a71acd91ff.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/d9fc7820-b99e-3f2d-9504-484b16a7e8e6.png)
テーブルから取ってくるときのwhere句はないという意味ですね。

次は、フィールドの定義。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e0aabd5b-d3d0-b237-4754-e541084d88f8.png)
この入力欄の
- "Value expression"へ"Current point"の"Value"を設定
- "Label expression"へ"Current point"の"Label"を設定
します。
項目名（ダイアログの左）の"Value"と"Label"は、このプラグインの中の用語ですね。右で自分で選択するのは、テーブルの列名（`field`）。同じ名前なの、わかりづらいわー。

あと、"Current point"というのはプラグインの用語。"point"っていうけど、自分で名付けた"Data Point"とは別。ややこしいー。

と、私は思うんですが、どうなんですかね。別の名前つける方がややこしいわっていう話もなくはないけど、うーん。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/a11fdba6-0d92-a51b-3f7b-d28c74a3fe20.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/44bc4dae-28d9-e378-d624-d88043703360.png)
見栄えをちょっと変更して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/580dca24-b40a-5fac-b5a3-52b3d89eccf6.png)
プレビュー！

## プレビューで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/018db5de-3171-d48b-c60f-fa1a16904293.png)
まぁ予定通りというか、名前と値を入れると、その棒グラフが出ます。データを登録するたびに棒が細くなっていって、グラフの幅に棒の幅を合わせる感じ。
2024/10/9に衆議院が解散され、10/27に選挙という時期（今日は10/24）なので、解散前の議席数を入れてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/5caf5e07-8a9e-a9f1-9c4e-1fb97d2069bc.png)
マウスホバーで、吹き出しも出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/35c2540e-6874-e070-81af-37d0b6496766.png)
数値を入れずに"Save"ボタンを押すと、"Value"のところへフォーカスが移り、枠が赤くなります。

## 改造：円グラフも追加してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/874ec7db-7867-cdf8-db55-8123f084904c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/14acde0b-2e58-e7a9-95bb-aef15d4ca028.png)
なんとなく円グラフも見たくなるので、棒グラフに重ねて円グラフも作ってみました。
作り方はほとんど同じですね。使いやすい。

でも、Legend（凡例）とか、円グラフの中の固定の数字とかは入れられないみたい。細かな点ですので、なくてもいいかもです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/dc9e73ec-d175-1007-9200-553078af6af4.png)
円グラフも重ねて、円グラフの立憲民主党にマウスホバーしてみたところです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/fdc54bc3-6688-a933-6be5-2ff4154fe1db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/3e08c6fe-3adf-3e1a-7139-9296771ef511.png)
さらにドーナツにして、真ん中にTextを置き、"Search for Data Points: each items's Value:sum"としたら、Valueの合計が出ました:grinning: 円もドーナツもいっしょやろと思ったけど、ドーナツはこういう使い方がしやすいですね。

合計値は、いじってたら出ました。こういうのは、ノーコードならではの簡単さです。

### 改造してると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/9c55dfbd-e183-3b5d-b17b-2324b7fe17a1.png)
ちなみに、どんどん改造してると、アプリとしてあなたのアカウントにコピーしておいてあげようか？って言われます。

このダイアログを閉じずに無視して改造し続けるんですが、コピーすると、自分のアプリとすることができます。

無料枠は、作れるアプリは１つまでで、しかもそれをリリースできないという制限があります。無料すでに１つ作っている人は、ここでコピーすると２つ目になって、２つ目のアプリについて、２週間の無料期間に入り、有料枠に入っていきます。
アプリごとの課金なので、１つ目のアプリは無料、２つ目のアプリは課金の無料期間、という形です。

# おわりに
今回は、グラフの`Plugin`を使う回でした。

始める前に予想した通りで、DBへ登録したら、すぐにグラフで使われるよというサンプルでした。改造で、同じテーブルを読む別のグラフもできたりして、やはり使い勝手はよいです。

でも今回は、あまり得るものはなかった気がする。新しいことばかりではなく、すでに知っていることでも繰り返して身に着けるという練習ですね！

ではよきBubble＆選挙ライフを！（若者が投票に行かないと、老人優遇措置ばかりになりますよ～）

# Next
[Bubbleのチュートリアル１０：Login with Facebook](https://qiita.com/yo16/items/a4f76c6cf70392822be2)