nocodeを使ってトークテーマ作成ツールを作った

# はじめに
サービスを作るときに
・UI面で試行錯誤したいものの、実際に割くことができる工数が限られていて多くのパターンを試すことができない
・新規事業のサービスでフルスクラッチで作るには人的リソースが足りない


こんな悩みがあると思います。
今回はそんな悩みを解決できるのか検証するべく、昨今よく耳にするnocodeについて学ぶために実際にnocodeのサービスを使ってツールを作ってみました。


# bubbleとは
bubuleはnocodeサービスの一つです。
無料プランから使うことができて、ビジュアルプログラミングを通してコードを書かずにWEBサービスを構築することができます。

https://bubble.io/

# 作成するツール
今回はミーティングのブレイクタイムなどでトークテーマを決めてくれる「トークテーマビルダー」を作成したいと思います。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/aeb5ccf3-525e-cb79-3a0b-78d5811a2b75.gif)

作成する機能は以下の4つです。
・テーマの登録
・テーマの一覧
・テーマの削除
・登録されたテーマをランダムで出力


# 作成手順
まずはプロジェクトの立ち上げからみていきましょう。
ホーム画面からMyappsタブの画面にあるNew applicationを押して新しいアプリケーションを作成します。
![スクリーンショット 2021-04-09 15.57.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/861bec5e-e60a-b685-bca9-495180f13265.png)
するとアプリケーションの名前や用途の設定を行うフォームが表示されるので、質問に従って入力してください。
![スクリーンショット 2021-04-09 15.57.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/f04f17fc-6979-0a9d-39c9-a0724967eb2f.png)
フォームの入力が完了すると、新しいアプリケーションがボイラープレートで作成されます。
左側に表示されているNew Application Assintantは文字通りアプリケーションの開発を助けてくれる設定をいくつかしてくれるので必要に応じて設定を行いましょう。
![スクリーンショット 2021-04-12 19.50.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/60726ee2-85b5-e665-65ac-73bb4faebf55.png)

今回は全部自分で構築してみたいので、ボイラープレートは全て削除して真っさらな画面を用意します。
左のスクロールバーにあるのが、UIを構築するためのUI Builderです。必要な部品をドラッグ＆ドロップして画面に配置していきます。
![スクリーンショット 2021-04-14 14.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/95af2ba1-16bc-27e4-eb85-30ffcde0d1e3.png)

まず登録画面を構築してみます。ヘッダーをのぞいてこの画面で利用した部品は以下の三つです
・Text
　・Repeating Groupの上に設置。上のセルから登録が新しいトークテーマのタイトルを表示する。
・Button
　・トークテーマを作成するボタン。ワークフローを登録してボタンを押下した時にデータが保存されるようにする。
・Repeating Group
　・トークテーマをデータソースとしてトークテーマをリストで表示できるように土台を作る。

![スクリーンショット 2021-04-12 21.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/f59a6e2e-cf61-f779-f648-d543a5d520b1.png)

UIの設置が完了したら、次は実際の登録処理を構築していきます。
左のメニューバーからWorkflowを選択します。
これは
「when x is clicked, do y」
のようにあるエレメントにイベント駆動で処理を追加できるものです。
今回はトークテーマを保存ボタンがクリックされた時に
・フォームに入力された値でトークテーマのレコードを新規追加する
・フォームに入力された値をリセットする
を設定しました。これで実際にデータが登録できるようになりました。
![スクリーンショット 2021-04-14 14.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/ba129285-3b0c-d873-fc5e-bfc49dfffaf2.png)

続いて削除機能です。
部品のiconを画面にドラックしてiconタイプの中から×マークを選びます。
![スクリーンショット 2021-04-14 14.20.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/87fad5ae-70b0-a236-5146-f6c063bd1038.png)
こちらも同様に×マークがクリックされたらその行のトークテーマを削除したいのでワークフローを設定していきます。
![スクリーンショット 2021-04-14 14.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/10a91296-5794-946c-e967-a07faef3ab68.png)

最後にトークテーマ生成機能です。
これは新たに別ページで構築していきます。
ここでは以下の3つのエレメントを使用しました。
・text
 ・トークテーマの表示
 ・説明文
・image
 ・マイクアイコンの表示
 ・スロット風gifアニメーションの表示
・button
 ・まわす/とめる/もういちどのボタン
![スクリーンショット 2021-04-14 14.25.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/7a4bbc73-c3b1-0487-460e-23b755bdc7a3.png)
ここでも同様に各ボタンにワークフローを定義していきます。
![スクリーンショット 2021-04-14 14.28.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/c034ff9c-7e0e-85dd-467d-88f5297ce9ff.png)
内容としては
「スタート画面」→「スロット画面」→「結果出力画面」
になるようにボタン/画像/テキストの表示を切り替えを設定していきました。

これでサービスの構築はほとんど終わりです。
アイコン横のpreview機能で実際に動かしてみてUIの微調整をしていきます。
![スクリーンショット 2021-04-14 14.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/9b47d9d5-4c50-2e8b-0c5e-5dbb86487618.png)

調整が完了したら本番環境にdeployを行います。
savepointとあるように好きなタイミングでアプリケーションのバージョンを管理することも可能です。
![スクリーンショット 2021-04-14 14.34.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/0f77d28a-4c3a-5af7-4365-3f105a38faf3.png)

デプロイが完了すると晴れてbubbleのドメインで作ったサービスが動かせるようになりました。
![スクリーンショット 2021-04-14 14.40.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185396/60f1aff0-d6ed-02ff-12c5-2698ae0b8ad7.png)




# 所感
操作性としてはphotoshopやDTMに近く、直感的にUIを構築することができます。
tutorialやtool作成を行ってみて、基本的なwebサービスで実装される機能はnocodeでも実現することができそうです。
またバージョン管理やdeployなどのサポートも手厚く、このプラットフォームのみで完結してサービスを作ることができますし、足りない部分に関しては外部APIやpluginを追加することで機能を実装することが可能です。
個人開発等で実はこんなことしたいのだけど時間がないなあと思ってた方は、ぜひbubbleを使って自分のやりたいことを短時間で実現していってください。