MENU

第10章 ユーザーがツイートできるようにする

bubbleチュートリアルver1第10章 ユーザーがツイートできるようにする

目次-全章

第1章 bubbleについて(bubbleの基礎知識からアカウントの作成、アプリ開発まで)
第2章 かんたんなアプリケーションを作成
第3章 ページレイアウト(UIデザイン)を作成
第4章 データベースの設計
第5章 ユーザー登録、ログインを試してみる
第6章 ユーザーログイン時の処理を実装してみる
第7章 ユーザー情報を更新、削除(退会、解約)できるようにしてみる
第8章 メールアドレス認証を実装してみる
第9章 パスワードの再設定、パスワードリセット機能を実装してみる
第10章 ユーザーがツイートできるようにする
第11章 ユーザーのフォロー機能、タイムライン表示機能をつくってみる
まとめ
目次

10.1 タイムラインページで投稿を表示させる

いよいよ、簡易版Twitter本体の実装を行います。

homeの表示を設定する

自分の情報を設定する

最初に自分自身の表示を設定しましょう。

Group User、Group UserInfoにCurrent Userデータを設定します。

図10.1.1 Group UserにCurrent Userを設定
図10.1.2 Group UserInfoにCurrent Userを設定

Text UserNameはCurrent Userのnameカラムを表示させます。

図10.1.3 Text UserNameにParent group’s User’s nameを設定

User ImageにCurrent Userのimageを設定します。

図10.1.4 User imageにParent group’s User’s imageを設定

Conditional設定をコピー&ペーストする

また、第6章3で設定したように、画像がないとき固定の画像を表示するようConditionalタブで設定します。ここで、再度画像をアップロードしてしまうと第6章3で設定した画像とは別のものとして扱われ、ファイルストレージを余分に使用してしまうため、マイページの設定をコピーします。

ビジュアルエディタでマイページを表示し、User Imageを選択した状態で右クリックします。選択肢の中から「Copy with」→「Copy conditional expressions」を選択します。

図10.1.5 「Copy with」→「Copy conditional expressions」を選択

ビジュアルエディタでhomeページに戻り、User Imageを選択して右クリックします。今度は「Paste with」→「Paste conditional expressions」をクリックします。

図10.1.6 「Paste with」→「Paste conditional expressions」を選択

ここで、homeページのUser ImageのConditionalタブをみてみると、mypageページのUser ImageのConditionalタブと同じ設定になっていることが確認できます。

この方法で、Conditionalの設定をコピー&ペーストすることができます。複数の要素に対して同じ設定を行う場合に有用ですので覚えておきましょう。

図10.1.7 User ImageのConditionalを確認

タイムラインの情報を設定する

次に投稿を表示するタイムラインの設定を行います。

Repeating Group Tweet要素を選択し、プロパティエディタのData sourceを確認します。ページレイアウト作成時に設定した以下の内容になっているはずなので、そのまま利用します。

図10.1.8 RepeatingGroup TweetのData sourceの設定

投稿のユーザー名を表示するには、Text CreatorNameに Parent group’s Tweet’s Creator’s name を設定します。親要素であるGroup TweetがCurrent cell’s Tweetのデータを持っているため、このセルの投稿の作成者のnameカラムということになります。

図10.1.9 Text CreatorNameの設定

Link Creator(プロフィールを見る)の遷移先に users を設定します。usersのみだと検索ページになってしまうため、パラメータを設定します。

図10.1.10.1 Link Creatorの遷移先変更

これで「プロフィールを見る」のリンク先は https://(アプリ名).bubbleapps.io/users?user=(ユーザーID) となります。

リンクの後ろにパラメータが追加されており、データの選択の際に「Get data from page URL」でそのパラメータを得ることができます。今回であれば、keyをuserで指定することでそのパラメータを持つデータの絞り込みが可能になります。

図10.1.10.2 参考:後ほどこのようにparameterからデータを取ってくることができます。

投稿の表示欄「Tweet」には以下のように設定がされていますのでこのままにします。

図10.1.11 Tweetの設定

Creator Imageには投稿者の画像を設定したいので、Parent group’s Tweet’s Creator’s image とします。

図10.1.12 Creator ImageにParent group’s Tweet’s Creator’s imageを設定

また、Conditionalタブの設定をUser Imageからコピー&ペーストします。

図10.1.13 Creator ImageのConditionalを設定

このときWhenの内容にエラーが発生しています。もともとは「Parent group’s User’s image」でしたが、Creator Imageの親エレメントのデータはTweetのためエラーになっています。

赤色の文字をクリックして以下のように修正します。

図10.1.14 Creator ImageのConditional修正例

ページングを設定する

ここまでの設定で、タイムラインの設定は完了しましたが、Repeating GroupのLayout styleが「Fixed number of cells」となっているため5件しかデータを表示できません。

そこで、ページングの設定を追加していきます。

プラグインを追加する

便利なプラグイン「Toolbox」をインストールします。

Pluginsタブに遷移し、「+ Add plugins」をクリックします。

図10.1.15 Pluginsから+Add pluginsをクリック

候補が表示されるので、Filtersの検索欄に「toolbox」と入力し、検索します。Toolboxが見つかったら、Installをクリックします。

図10.1.16 Toolboxをinstall

インストールが完了したらDesignタブに戻り、Visual elementsを確認してください。いくつか新しいエレメントが追加されていることが確認できます。

図10.1.17 List of Numbersを選択

新しいエレメントの中から List of Numbers を利用します。

画面上のどこに配置しても構いませんが、他のelementの邪魔にならないPagingのグループの近くに置いておくのがいいかと思います。

List of Numbersとは

List of Numbersとは、その名の通り数字のリストを生成するエレメントです。このエレメントには、Tweetを1ページに5件表示した場合、全部で何ページ存在するか設定します。

エレメントそのものは画面に表示されません。

List of Numbersのプロパティエディタで、以下のように設定します。

Start number

数字リストの先頭の番号なので、1にします。

Length of list

数字リストの長さ。投稿数は変動的な値になるため、投稿数をページあたりの表示数で割った値になります。投稿数を取得するには、Repeating Group Tweet’s List of Tweets:count で取得できます。

たとえ、Repeating Groupで全てのデータを表示していなくても、Repeating Group Tweet’s List of TweetsでRepeating Groupに設定したデータ全てを指定できます。

Increment

数字リストの増加数。ページ番号のリストのため、1にします。

ここで、Length of listですが、計算式の後に:ceilingをつけることを忘れないでください。投稿数が5の倍数にならない場合、つまり割り切れなかった場合に切り上げをするためです。

図10.1.18 ListofNumbersの設定

RG Pagingに数字リストを設定する

List of Numbersでページ番号リストができたので、RG Pagingに数字リストを設定します。

RG PagingのData sourceに、List of Numbersの値を設定します。

List of Numbers’s listには先ほど設定した数字リストが保持されているので、この値を設定します。

図10.1.19 RG PagingのData sourceを設定

ページ切り替えのワークフローを追加する

最後に、Repeating Groupのページを切り替えるワークフローを追加します。「<」「>」「(ページ番号)」をクリックした場合にRepeating Groupのページを切り替えます。

「<」のワークフロー

まず現在表示されているページが1ページ目だった場合前のページは存在しないので、Conditionalタブでクリックできないように設定します。

図10.1.20 Icon PrevのConditional の設定

Repeating Group is on the first page は最初のページのことを指します。

クリックした時に前のページを表示させたいので、Icon Prevからワークフローを開始し、Element Actions > Show previous アクションを選択します。

ElementにはRepeatign Group Tweetを選択してください。

図10.1.21 Element Actions > Show previousを選択
「>」のワークフロー

Icon Prev(<)と同様に、最後のページを表示していた場合はクリック禁止にします。

図10.1.22 Icon NextのConditionalの設定

また、クリック時のワークフローでElement Actions > Show nextを選択します。

図10.1.23 Element Actions > Show nextを選択
ページ番号クリック時のワークフロー

ページ番号をクリックしたときは、現在クリックした番号のページに移動する処理になります。

Element Actions > Go to pageを選択し、現在のセル(Pagingの数字セル)の番号に遷移するように設定します。

図10.1.24 Element Actions > Go to pageを選択し、設定

また、Repeating Group Tweetで表示しているページ番号とRG Pagingのページ番号が異なるときに背景色が変わるように、Conditionalタブで表示を変更します。

図10.1.25 Text Numberの設定

Custom eventを利用してページ番号の表示を切り替える

ここまでの設定で、アイコンや数字をクリックしたときにRepeating Group Tweetの表示ページを切り替えられるようになりました。しかし今のままだとGroup Pagingの表示内容が変わらず、いつでも1〜7の数字になってしまいます。8ページ目以降があった場合、Group Pagingに8ページ以降の数字が表示されないことになります。

そこで、現在表示しているページ番号に応じて、Group Pagingの番号を切り替える処理が必要になります。この処理はアイコンをクリックしても、数字をクリックしても同様の処理を行う必要があります。このように複数のワークフローから同一の処理を行う場合、Custom eventというワークフローに処理を定義すると、複数のワークフローから呼び出すことができます。

Workflowタブに移動し、新しいトリガーとして Custom > Create a custom event…を選択します。

図10.1.26 Custom > Create a custom event…を選択

Custom eventにわかりやすい名称を設定しておきます。Event nameは英語にする必要があります。

図10.1.27 Event nameをpagingへ

ページ番号の表示については、現在表示しているページがページングの中心に来るようにします。ただし、1〜3ページ、最終ページ-3 〜最終ページの場合は位置を変えずに表示します。

1〜8ページで、3ページ目を表示中

1234567

1〜8ページで、5ページ目を表示中

2345678

1〜8ページで、7ページ目を表示中

2345678

従って以下のような条件で表示内容を切り分けます。

現在のページ – 3 ≦ 01〜7
0 < 現在のページ – 3 & 現在のページ + 3 ≦ 最終ページ現在のページ – 3 〜 現在のページ + 3
現在のページ + 3 < 最終ページ最終ページ – 6 〜 最終ページ
表10.1.1 ページ切り替えの関係

Custom eventにはデータを設定できますので、numberを設定します。このデータはCustom Workflow numberとしてワークフロー内で利用できます。Custom eventを実行するときに、現在のページ番号を渡すようにします。

図10.1.28 Type of thingsをnumberへ

Custom Statesを利用して、ページ番号を保持する

ここで、現在のページ -3、現在のページ + 3 の値などを計算し保持しておくためにCustom Statesを利用します。

Custom Statesとは、データベースに保持するのではなく、ページ上に一時的にデータを保持しておきたい場合に利用する変数のようなものです。ページやエレメントに定義することができます。ページが再読込された場合はデータが破棄されます。

ここでは、RG Pagingにfrom、toの2つのCustom Statesを作成します。

RG Pagingのプロパティエディタで i のアイコンをクリックすると、Element inspectorが表示されるので、Custom statesの「Add a new custom state」をクリックしてCustom Statesを作成します。

図10.1.29 Add a new custom stateをクリック

Custom Statesはテキストや数字だけでなく、User、Tweetといったテーブルのデータを持たせたり、リストになったデータを持たせることもできます。Create a new stateでState nameをfromと入力し、ここではページ番号を持たせるためnumberを選択します。toも同様に作成し、初期値としてそれぞれ1、7を設定します。

図10.1.30 Custom statesの設定

Repeating Groupのリストに、:until #(数字) と追加すると (数字)番目までの要素を指定することになります。:from #(数字)と追加すると (数字)番目からの要素を指定することになります。

このプロパティを利用して、RG PagingのData sourceを「List of Numbersの from から to まで」に変更します。

図10.1.31 Rg PagingのData sourceの設定

RG Pagingに表示する数字リストの指定ができたので、それぞれの条件のときにfrom、toの値を変更すれば良いことになります。

Custom Stateの値を変更するには、Element Actions > Set state アクションを利用します。

まず、最初の条件 現在のページ – 3 < 0 のときを設定します。Only whenに条件を設定しておけば、条件を満たさないときアクションは実行されません。

図10.1.32 Element Actions > Set stateを選択し、設定

このアクションをコピーして2,3番目のアクションも設定します。

数字リストの最大値を取得するには、(リスト):max を利用します。

図10.1.33 同様に2番目のアクションを設定
図10.1.34 同様に3番目のアクションを設定

Custom Eventを呼び出す

共通処理の実装が済んだところで、アイコンやページ番号をクリックした時にCustom Eventを呼び出します。Custom Eventを呼び出すには Custom Events > Trigger a custom event アクションを利用します。

Custom eventを選択して、Workflow thingにRepeating Group Tweetのページ番号を設定します。

図10.1.35 Repeating Group Tweetのページ番号を設定

同じアクションを、Icon Prev is clicked、Text Number is clickedにも設定してください。

以上でタイムライン、ページングの設定は完了です。

10.2 タイムラインページで投稿処理を実装

投稿処理を実装する

投稿処理を実装する

投稿の処理については、第2章3で実装しており、homeページは第2章3で実装したページをクローンしているためワークフローが残っています。

図10.2.1 ワークフローの状態

投稿するボタンをクリックしてTweetテーブルにデータを登録することはできていますが、現在はツイート欄が空でも投稿できてしまうので必須チェックを追加します。

投稿入力欄「Tweet」の「This input should not be empty」にチェックを入れてください。

図10.2.2 「This input should not be empty」にチェック

また、投稿するボタンに必須チェックを追加します。

図10.2.3 Save TweetのConditionalの設定

プレビューで確認する

それでは投稿して投稿を表示するところまで確認してみましょう。

ログインしてhomeページを表示します。投稿するボタンはクリックできないようになっています。

図10.2.4 homeのpreview画面

好きな文言を投稿してみましょう。

図10.2.5 投稿後の動作例

投稿と、ユーザー名・ユーザーアイコンが表示されていれば成功です。

10.3 投稿処理に画像添付機能を追加実装

テキストの投稿が確認できましたので、実際のTwitterと同様、画像を投稿できるようにしてみましょう。

画像添付を実装する

Picture Uploaderを追加する

投稿入力欄Tweet、投稿ボタンSave Tweetの間に Input forms > Picture Uploader を以下のように設置します。

図10.3.1 各エレメントの配置

ユーザーがPicture Uploaderをクリックすると、ファイルの選択ダイアログが表示されます。ファイルを選択した時点で、bubbleのファイルストレージに画像のアップロードが実行されます。

Tweetテーブルを変更する

Data > Data typesタブから、Tweetテーブルに画像の保存用カラムを追加します。

Tweetにimageカラムを追加しました。

図10.3.2 Tweetにimageカラムを追加

Workflowで画像を保存する

WorkflowタブでSave Tweet is clickedトリガーに画像の保存処理を追加します。

Create a new Tweetアクションで「+ Set another field」をクリックし、imageにPicture Uploaderの値を追加します。

もし、Picutre Uploaderに値がない時は空の画像が保存されます。

図10.3.3 Create a new Tweet…の設定

タイムラインに画像を表示させる

Group Tweet内にImageエレメントを追加します。Group TweetやTimeline、Bodyなどのエレメントの高さは適宜調整してください。

図10.3.4 各エレメントの配置

Tweet ImageのDynamic imageは、投稿の画像になるように設定します。

Run-mode renderingは Rescale にしてください。Rescaleにすると正方形でない場合、長い方の辺に合わせてエレメント内に画像が収まるよう、縮尺されます。

図10.3.5 Tweet imageの設定

また、画像が投稿されていないときは表示しないようにConditionalを設定します。

図10.3.6 Tweet imageのConditionalの設定

画像のみでも投稿できるようにする

第10章2で、入力がないと投稿できないように必須チェックを追加していましたので、テキストまたは画像があれば投稿できるように変更します。

投稿入力欄TweetのConditionalタブで、「PicutureUploaderの値が空でない場合は必須にしない」ように設定します。

図10.3.7 TweetのConditionalの設定

Save TweetのConditionalタブで、「Tweetの値とPicutureUploaderの値が空のときクリック不可」に変更します。

図10.3.8 Tweet’s value is empty and PictureUploader’s value is emptyに変更

プレビューで確認する

プレビューを表示し、画像を添付して投稿してみましょう。

図10.3.9 preview画面例

画像が添付されて投稿されたことが確認できます。

図10.3.10 動作後の状態例

10.4 最後に

第10章ではTwitterのメイン機能であるツイートの投稿を通して、テキストおよびデータベースへの登録を学びました。

また、複数のデータを表示するためのRepeating Groupの使い方、ページングの実装について実践しました。

実際のプロダクト開発において、特に業務アプリケーション開発では、データの一覧を表示することはよくあります。さらに検索や並べ替えといったエクセルでもよく利用される機能を実装していくこととなります。

そのためデータの一覧表示の基本である第10章は復習をしてすぐに使えるようにしておきましょう。

実際に働く社員とカジュアル面談しませんか?

【毎週金曜日開催中】カジュアル面談しませんか?


参加はこちら!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私たち株式会社ファンリピートは、ITを通じてお客様の課題解決を行うスタートアップベンチャーです。ノーコード・ローコードを用いたDX支援事業を主軸に、スピード感を持ってお客様のご要望にお応えしています。

2019年の創業から、出版業界・広告業界をはじめ、幅広い業界のデジタル施策を支援。財務管理・顧客管理などの基幹・業務システムから、新規Webサービスなど開発前検証フェーズのシステム導入支援まで、ワンストップでサポートを実施しています。この先も本質的なご提案を通じて、お客様の課題を解決し続けます。

コメント

コメントする

目次