Submit Search
Upload
【React×firebase】サービス開発入門ハンズオン
•
Download as PPTX, PDF
•
2 likes
•
474 views
H
HirokiTakatani
Follow
8/18、9/12にGVH OSAKAで開催した【React×firebase】サービス開発入門ハンズオンの解説スライドです。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 112
Download now
Recommended
Leap Motion入門ハンズオン
Leap Motion入門ハンズオン
Akira Hatsune
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
健一 辰濱
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
Yasuhiko Yamamoto
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Shinya Nakajima
【14-C-L】「開発手法は変えない」windowsフォームとまったく同じ手法でwebアプリを開発(森谷勝〔グレープシティ〕)
【14-C-L】「開発手法は変えない」windowsフォームとまったく同じ手法でwebアプリを開発(森谷勝〔グレープシティ〕)
Developers Summit
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
takeuchi-tk
基盤の改善から既存アプリケーションの改善
基盤の改善から既存アプリケーションの改善
T.R. Nishi
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
アシアル株式会社
Recommended
Leap Motion入門ハンズオン
Leap Motion入門ハンズオン
Akira Hatsune
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
健一 辰濱
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
Yasuhiko Yamamoto
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Shinya Nakajima
【14-C-L】「開発手法は変えない」windowsフォームとまったく同じ手法でwebアプリを開発(森谷勝〔グレープシティ〕)
【14-C-L】「開発手法は変えない」windowsフォームとまったく同じ手法でwebアプリを開発(森谷勝〔グレープシティ〕)
Developers Summit
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
takeuchi-tk
基盤の改善から既存アプリケーションの改善
基盤の改善から既存アプリケーションの改善
T.R. Nishi
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
アシアル株式会社
Bambooによる継続的デリバリー
Bambooによる継続的デリバリー
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
Shotaro Suzuki
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
Katsuya Shimizu
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
アシアル株式会社
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
Yoichiro Sakurai
デブサミ2011 LT大会【17-E-7】appengine ja night
デブサミ2011 LT大会【17-E-7】appengine ja night
bluerabbit777jp
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
Force.com開発基礎
Force.com開発基礎
Salesforce Developers Japan
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
Onsen UIが目指すもの
Onsen UIが目指すもの
アシアル株式会社
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
アシアル株式会社
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
Akira Hatsune
Laravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える
Hiroto Igarashi
5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)
Yuki Okamoto
WordPressサイトをスマホアプリにしちゃおう!
WordPressサイトをスマホアプリにしちゃおう!
Ryu Shindo
20120316 designerworkshoppublished
20120316 designerworkshoppublished
Yoichiro Sakurai
More Related Content
Similar to 【React×firebase】サービス開発入門ハンズオン
Bambooによる継続的デリバリー
Bambooによる継続的デリバリー
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
Shotaro Suzuki
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
Katsuya Shimizu
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
アシアル株式会社
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
Yoichiro Sakurai
デブサミ2011 LT大会【17-E-7】appengine ja night
デブサミ2011 LT大会【17-E-7】appengine ja night
bluerabbit777jp
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
Force.com開発基礎
Force.com開発基礎
Salesforce Developers Japan
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
Onsen UIが目指すもの
Onsen UIが目指すもの
アシアル株式会社
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
アシアル株式会社
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
Akira Hatsune
Laravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える
Hiroto Igarashi
5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)
Yuki Okamoto
WordPressサイトをスマホアプリにしちゃおう!
WordPressサイトをスマホアプリにしちゃおう!
Ryu Shindo
20120316 designerworkshoppublished
20120316 designerworkshoppublished
Yoichiro Sakurai
Similar to 【React×firebase】サービス開発入門ハンズオン
(20)
Bambooによる継続的デリバリー
Bambooによる継続的デリバリー
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
デブサミ2011 LT大会【17-E-7】appengine ja night
デブサミ2011 LT大会【17-E-7】appengine ja night
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
Force.com開発基礎
Force.com開発基礎
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Onsen UIが目指すもの
Onsen UIが目指すもの
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
Laravel5を使って開発してみた
Laravel5を使って開発してみた
小さく早い改善がスマホのサービス開発を変える
小さく早い改善がスマホのサービス開発を変える
5分で分かるmonaca pressproject(草案)
5分で分かるmonaca pressproject(草案)
WordPressサイトをスマホアプリにしちゃおう!
WordPressサイトをスマホアプリにしちゃおう!
20120316 designerworkshoppublished
20120316 designerworkshoppublished
【React×firebase】サービス開発入門ハンズオン
1.
1
2.
・今日やることの説明(15分) ・ハンズオンを始める前の準備(20分) ・アプリケーション作成(100分) ・アプリケーションのデプロイ(15分) ・クロージング(15分) 2
3.
3
4.
ReactとFirebaseとGitLabを使って 調整さんのコピーアプリケーションを作る (ハンズオン形式で) 4
5.
イベントの出欠表を 簡単に作成できるWebサービス https://chouseisan.com/ 5
6.
Facebookによって生み出されたUI用のJavaScriptライブラリ アプリケーション内のデータの変更を検知し 関連する部分のみ効率的に更新、描画できる。 6
7.
Googleが管理するウェブアプリやモバイルアプリの 開発プラットフォーム。 世界中で150万ものアプリから利用されている。 アプリケーション作成に必要な機能を提供するサービス。 開発者自身が0から構築・管理する手間を省き 素早くアイデアを形にすることができる。 7
8.
8
9.
9
10.
RealtimeDatabase クラウドホスト型データベースです。 データは JSON として保存され、接続されているすべてのクライアントと リアルタイムで同期される。 Hosting 本番環境レベルのウェブ
コンテンツ ホスティングです。 1 つのコマンドですばやくウェブアプリをデプロイすることができ 静的コンテンツを配信できる。 10
11.
GitLab 社が開発したウェブ型のGitリポジトリ Gitリポジトリの機能に加えて、CI/CD機能も備えている 11
12.
Firebase Hosting Firebase Realtime
Database 12 開発PC デプロイ push Reactアプリ配信 DBへ値格納・取得
13.
ハンズオン手順書に沿って進めます 作る前に簡単に解説 ↓ 手順書を見て実際に手を動かす ★手順書内にコード例として 完成済のコードを記載しています 13
14.
14
15.
15 ・GitLabで自分用のプロジェクト作成 ・ハンズオンで使う用のソースコード入手 ・アプリ内で利用するFirebaseへの接続設定を書く ・デプロイ先を設定する ・プロジェクトとアプリを紐付ける ・Realtime Databaseの読み書き制限を設定する ・Reactアプリの起動 ハンズオン用のアプリが Firebaseのプロジェクトへ接続済の状態で 起動するまで。
16.
16 GitLabで自分用のプロジェクトを作成します 手順書に書かれているリンクを押してください
17.
17 $git clone でForkしたプロジェクトから ソースコードを入手します
18.
18 FirebaseのSDKで利用する プロジェクトへ接続設定をfirebase.jsに追記する 👀『Firebaseのコンソール画面』
19.
19 デプロイ先を指定するため プロジェクトIDを.firebasercに記載する
20.
$firebase use --add 20 FirebaseのプロジェクトとReactのアプリを紐付ける What
alias do you want to use for this project? エイリアスを聞かれた場合は以下の通り入力 handson
21.
$firebase deploy --only
database 21 Realtime Databaseのデータ構造やデータへのアクセス制限を 設定する。今回は読み書きすべて許可する設定のみ
22.
$npm install $npm start 👀http://localhost:3000/ 22 Reactのアプリケーションを起動して、動作を確認する
23.
23
24.
主催者が開催するイベントを「イベント登録画面」で作成 参加者は「イベント詳細画面」で出欠を入力する 参加者の出欠状況は「イベント詳細画面」で確認できる 24
25.
・イベント登録画面 ◦イベント名や開催予定日等を登録する画面を作成します。 ・イベント詳細画面 ◦ イベント参加者の出欠予定一覧や出欠入力画面を作成します。 25
26.
26
27.
27 開催するイベントについての情報を 登録する画面。 ・画面作成 ・ DBへ値を書き込む処理作成 ・画面遷移処理作成 ★・画面作成は既に作成済です
28.
28 フォームやボタンなど 画面の要素を組み立てていく フォームに入力された値を React内の処理で扱えるようにする
29.
29 「出欠表を作る」ボタンを押すと フォームに入力された値がDBへ 登録される処理を作る Firebase Realtime Database 入力値を DBへ書き込む
30.
30 DBへ値を書き込む処理の後 次画面へ遷移する処理を作る https://〇〇〇.web.app/event/- Lxxxxxxxxxxxxxxx https://〇〇〇.web.app/event
31.
31
32.
32 ・『1-1.入力フォームを作ろう』←まずココ ・『1-2.入力フォームの内容をstateに反映しよう』 ・『1-3.入力フォームの内容をstateから取得して表示しよう』
33.
33 👀手順書『1-1入力フォームを作ろう』
34.
画面で見たいものをReactに伝えて画面を描画する render()関数 34 render() { return (JSXの記法で書く); } 【手順書『
1-1.入力フォームを作ろう』】
35.
React用のUIライブラリ 入力フォームやボタンなど Reactで作成済の 画面構成部品(コンポーネント)が提供され ている Ant Designのコンポーネントを組み合わ せて画面を作成する 35 入力フォームのコンポーネント ボタンのコンポーネント 【手順書『入力フォームを作ろう』】
36.
36 ・『1-1.入力フォームを作ろう』 ・『1-2.入力フォームの内容をstateに反映しよう』 ←次ココと ・『1-3.入力フォームの内容をstateから取得して表示しよう』 ←ココ
37.
37 【手順書『1-2入力フォームの内容をstateに反映しよう』】 フォームの入力値を Reactコンポーネント内で利用できるようにする 👀手順書『1-2入力フォームの内容をstateに反映しよう』
38.
38 Reactのコンポーネントはstateという状態管理用のプロパティを持っている stateに値を保持させたり、stateを参照することで フォームの入力値をReactコンポーネント内で利用できるようになる React コンポーネント state 入力値 【手順書『1-2入力フォームの内容をstateに反映しよう』】
39.
39 stateに保持された値を参照して DBに登録するための値や画面に表示するために利用する React コンポーネント state 保持している値 【手順書『1-2入力フォームの内容をstateに反映しよう』】
40.
setState()によってstateの値が更新されたら render()関数が呼ばれるため 最新のstateの値を画面に出すことができる 40 【手順書『1-3入力フォームの内容をstateから取得して表示しよう』】
41.
41 ここでstateから表示したい値は3種 ・eventName:イベント名フォームの値 ・description:説明フォームの値 ・candidateText:候補日程フォームの値 【手順書『1-3.入力フォームの内容をstateから取得して表示しよう』】
42.
42
43.
43 ・『 1-4.入力した値をRealtime Databaseに書き込もう』 -『1-4-1.入力した値を整形しよう』 -『1-4-2.Realtime
Databaseに整形した値を書き込もう』
44.
ボタンを押すと フォームに入力した値が Realtime Databaseに書き込む処理 44 Firebase Realtime
Database 入力値を DBへ書き込む
45.
45 ・stateの値を整形する (ハンズオン『1-4-1.JSONを整形しよう』) ・DBに値を追加する (ハンズオン『1-4-2.Realtime Databaseにデータを書き込もう』)
46.
46
47.
stateのcandidateText(候補日程)の値は 一続きの文字列になっている 文字列を日付ごとに分解して配列に格納する candidateDates: [ "12/29",
"12/30" ] candidateText: "12/29n12/30" 47 【手順書『 1-4-1.JSONを整形しよう』】 👀手順書『1-4.入力した値をRealtime Databaseに書き込もう』
48.
firebase.database.Referenceのインスタンスを作成 48 【手順書『 1-4-2.Realtime Databaseに整形した値を書き込もう』】 👀『
EventEntry.jsの6行目』
49.
firebase.database.Referenceのインスタンスを作成 作成したインスタンス.ref(‘パス’).push(書き込み対象のオブジェクト) パス(書き込み先)はeventsの中 49 firebaseDb.ref(‘パス’).push(書き込み対象のオブジェクト) 【手順書『 1-4-2.Realtime Databaseに整形した値を書き込もう』】
50.
firebase.database.Referenceのインスタンスを作成 書き込み対象のオブジェクトに 整形したstateの値を指定する DBに値が登録されると キーの値は自動生成される { candidateDates: [ “8/7(月)20:00-“, “8/8(火)20:00-“
], description: “送別会やります!”, eventName: “送別会" } 50 firebaseDb.ref(‘パス’).push(書き込み対象のオブジェクト) 【手順書『 1-4-2.Realtime Databaseに整形した値を書き込もう』】
51.
51 【手順書『 1-4.入力した値をRealtime Databaseに書き込もう』】 👀Firebaseの管理コンソールでDBに値が書き込まれていることを確認する 👀『Firebaseのコンソール画面』
52.
52
53.
53 ・『1-5.イベントIDを取得して画面遷移しよう』
54.
ボタンを押すと DBへの登録結果をもとに次画面へ遷移する処理 54 https://〇〇〇.web.app/event/- Lxxxxxxhttps://〇〇〇.web.app/event
55.
55 ・URLを一意にする ・DB登録時のIDを取得する方法 ・React Routerとは? (ハンズオン『1-5.イベントIDを取得して画面遷移しよう』)
56.
イベント詳細画面へ遷移する際のURLはイベント毎に一意な値にしたい。 イベント毎に一意な値として DBへ登録した際に自動で採番されたキー値を利用する 56 【手順書『1-5.イベントIDを取得して画面遷移しよう』】
57.
DBに値を登録する際に利用したpush()関数の戻り値に 自動生成されたIDが含まれる 自動生成されたIDのプロパティ名称はkey 57 firebaseDb.ref(‘パス’).push(オブジェクト).key 【手順書『1-5.イベントIDを取得して画面遷移しよう』】
58.
React用ルーティングライブラリ URLをアプリの画面状態と紐付けるために使う ブラウザの戻るボタンが使えるようになったり 特定のURLを打ち込むことで特定のページに直接アクセスできるようになる ★ React Routerの設定(どのURLでどの画面を表示するか)は用意しています。 58 【手順書『1-5.イベントIDを取得して画面遷移しよう』】
59.
App.js this.props.history.push(`/event/イベントID`); <BrowserRouter> (略) <Route exact path='/'
component={Home} /> <Route exact path='/event/' component={EventEntry} /> <Route exact path='/event/:id' component={Event} /> (略) </BrowserRouter> 59 【手順書『1-5.イベントIDを取得して画面遷移しよう』】
60.
60 【手順書『1-5.イベントIDを取得して画面遷移しよう』】 👀画面遷移して、URL欄のID部分が 自動で採番されたIDと一致していることを管理コンソール画面で確認 👀『Firebaseのコンソール画面』
61.
61
62.
62 ・参加者がイベントの出欠を登録できる ・参加者の出欠情報を一覧で見られる ★作るのはDBの値を取得し 画面に表示するまで 登録ボタンを押すとDBに値を書き込む 処理は前画面と同様の作業になるので 作成済です 【表示項目】 イベントタイトル イベント説明 出欠情報一覧 イベント開催候補日程(初期選択値は△)
63.
63 ・DBから値を取得する処理作成 ・データ表示する処理作成
64.
64
65.
65 ・『2-1.ダミーデータを確認しよう』 ・『2-2.Realtime Databaseからイベント情報を取得しよう』
66.
イベント登録画面で登録されたイベントを イベント詳細画面で表示する 66 登録したイベン トの情報を表示
67.
イベント登録画面で DBに書き込まれたデータを イベント詳細画面で表示する 67 Realtime Database DBの値を表示書き込み
68.
68 ・ダミーデータについて (手順書『2-1.ダミーデータを確認しよう』) ・DBの値を取得する (手順書『2-2.Realtime Databaseからイベント情報を取得しよう』) - DBの参照先を決める -
URLからイベントIDを取得する -コールバック関数を追加する -値の変更を検知する条件を指定する
69.
69 手元のコードは初期表示時に ダミーのデータを表示するようになっている ダミーデータからDBの値を見るよう修正する 👀『ダミーデータ』 【手順書『2-1.ダミーデータを確認しよう』】 👀『ダミーデータ利用箇所』 ダミーデータ state 画面に表示
70.
DBの状態をリアルタイムに 画面に反映するために 値の変更を監視する 70 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
71.
DBの参照先を決める ↓ DBの値に変更があった際に呼ばれるコールバック関数を追加する 71 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
72.
firebase.database.Referenceのインスタンスを作成 参照先のパスを指定する 72 firebaseDb.ref(‘パス’) 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
73.
取り出したいのはイベントID(-Lxxxxxxxxxxxxxxx)以下のオブジェクト パスは ‘events/-Lxxxxxxxxxxxxxxx’ { candidateDates: [ "12/29", "12/30"
], description: “忘年会やります!” eventName: "忘年会", } 73 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
74.
ReactRouterの機能によってURLの一部分を取得できる 74 this.props.match.params.id firebaseDb.ref(`events/${this.props.match.params.id}’) <BrowserRouter> (略) <Route exact path='/event/:id'
component={Event} /> (略) </BrowserRouter> 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
75.
参照しているDBの値を検知するイベントを指定します on()メソッド ここで指定するのはvalue 参照先の値の変更をすべて検知して コールバック関数が呼ばれます 75 firebaseDb.ref(`パス`).on(‘イベント’, コールバック関数) 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
76.
DBの値に変化があると呼び出される コールバック関数を登録します 登録するコールバック関数 76 firebaseDb.ref(`パス`).on(‘イベント名’, コールバック関数) snapshot =>
{ const json = snapshot.val(); } 【手順書『2-2.Realtime Databaseからイベント情報を取得しよう』】
77.
77 【手順書『 2-2.Realtime Databaseからイベント情報を取得しよう』】 👀ブラウザの開発者ツールから、コンソールログを確認 DBの値がコンソールに出ていることを確認
78.
78
79.
79 ・『2-3.取得したデータをstateに格納しよう』 ・『2-4.イベント名と説明文を表示させよう』 ・『2-5.候補日程を表示用に編集しよう』 ・『2-6.出欠表を表示させよう』
80.
ダミーデータ表示しているイベント詳細画面を DBから取得したデータを表示するよう修正する 80 Realtime Database DBの値を 取得 state 画面に表示 画面に合わせて 編集
81.
81 ・stateの構造を確認 (『2-3.取得したデータをstateに格納しよう』) ・DBから取得した値をstateに入れ、画面に表示する (『2-4.イベント名と説明文を表示させよう』) ・entries関数とmap関数で候補日程を編集する (『2-5.候補日程を表示用に編集しよう』)
82.
82 ・『2-3.取得したデータをstateに格納しよう(確認のみ)』 ←まずここ ・『2-4.イベント名と説明文を表示させよう』 ・『2-5.候補日程を表示用に編集しよう』 ・『2-6.出欠表を表示させよう』
83.
・イベント名:eventDetail.eventName ・説明文:eventDetail.description ・出欠表(テーブルの列):eventDetail.columns ・出欠表(データ):eventDetail.dataSource ・候補日程:participant.candidates this.state = { participant:
{ name: '', candidates: [] }, eventDetail: { eventId: this.props.match.params.id, eventName: '', description: '', dataSource: [], columns: [] } } 83 【手順書『2-3.取得したデータをstateに格納しよう(確認のみ)』】
84.
84 ・『2-3.取得したデータをstateに格納しよう(確認のみ)』 ・『2-4.イベント名と説明文を表示させよう』←次ここ ・『2-5.候補日程を表示用に編集しよう』 ・『2-6.出欠表を表示させよう』
85.
85 【手順書『2-4.イベント名と説明文を表示させよう』】 イベント名 説明文
86.
・イベント名:eventDetail.eventName ・説明文:eventDetail.description ・出欠表(テーブルの列):eventDetail.columns ・出欠表(データ):eventDetail.dataSource ・候補日程:participant.candidates this.state = { participant:
{ name: '', candidates: [] }, eventDetail: { eventId: this.props.match.params.id, eventName: '', description: '', dataSource: [], columns: [] } } 86 【手順書『2-3.取得したデータをstateに格納しよう(確認のみ)』】
87.
eventDetail.eventName eventDetail.description 87 【手順書『2-4.イベント名と説明文を表示させよう』】
88.
DBから取得した値を setState()を利用してeventDetailに格納 stateの値を TitleタグとParagraphタグ部分に表示させる 88 【手順書『2-4.イベント名と説明文を表示させよう』】 👀『イベント名と説明文stateに格納する』
89.
89 【手順書『2-4.イベント名と説明文を表示させよう』】 👀DBに書き込まれている値と 画面に表示されている値が一致していることを確認
90.
90 ・『2-3.取得したデータをstateに格納しよう(確認のみ)』 ・『2-4.イベント名と説明文を表示させよう』 ・『2-5.候補日程を表示用に編集しよう』←次ここ ・『2-6.出欠表を表示させよう』
91.
91 【手順書『2-5.候補日程を表示用に編集しよう』】
92.
・イベント名:eventDetail.eventName ・説明文:eventDetail.description ・出欠表(テーブルの列):eventDetail.columns ・出欠表(データ):eventDetail.dataSource ・候補日程:participant.candidates this.state = { participant:
{ name: '', candidates: [] }, eventDetail: { eventId: this.props.match.params.id, eventName: '', description: '', dataSource: [], columns: [] } } 92 【手順書『2-5.候補日程を表示用に編集しよう』】
93.
候補日程:participant.candidates participant.candidates:[ { id: 0, dateTime: "8/7(月)
20:00~", answer: '△' }, { id: 1, dateTime: "8/8(火) 20:00~", answer: '△' } ] candidateDates:[ "8/7(月) 20:00~", "8/8(火) 20:00~"] 93 【手順書『2-5.候補日程を表示用に編集しよう』】
94.
Object.entries() 配列の添字と値のペアを作る [ "8/7(月) 20:00~",
"8/8(火) 20:00~”] [ [ 0, " 8/7(月) 20:00~ " ], [ 1, " 8/8(火) 20:00~ “ ] ] 94 【手順書『2-5.候補日程を表示用に編集しよう』】
95.
Object.entries(candidateDates) .map(candidateDate => ({ id:candidateDate[0], dateTime:candidateDate[1], answer:'△' })) [ [
0," 8/7(月) 20:00~ " ], [ 1, " 8/8(火) 20:00~ “] ] 95 【手順書『2-5.候補日程を表示用に編集しよう』】
96.
候補日程:participant.candidates participant.candidates:[ { id: 0, dateTime: "8/7(月)
20:00~", answer: '△' }, { id: 1, dateTime: "8/8(火) 20:00~", answer: '△' } ] candidateDates:[ "8/7(月) 20:00~", "8/8(火) 20:00~"] 96 【手順書『2-5.候補日程を表示用に編集しよう』】
97.
97 【手順書『 2-5.候補日程を表示用に編集しよう』】 👀登録画面で入力した日程が一覧に表示されていて ◯△✕が行ごとに表示されていることを確認
98.
98 ・『2-3.取得したデータをstateに格納しよう(確認のみ)』 ・『2-4.イベント名と説明文を表示させよう』 ・『2-5.候補日程を表示用に編集しよう』 ・『2-6.出欠表を表示させよう』←次ここ
99.
99 【手順書『2-6.出欠表を表示させよう』】 AntDesignのテーブルを使うた めに値を編集する箇所です 本日のハンズオンの趣旨からは それるので、ここはコピー&ペ ーストで済ませてください。 👀『 2-6.出欠表を表示させよう』
100.
100 【手順書『 2-6.出欠表を表示させよう』】 👀候補日程欄で名前と出欠予定(〇△✕)を入力 出欠表に入力した値が表示されることを確認
101.
・イベント登録画面から改めてイベントを登録 ・Firebaseの管理コンソールで 登録されたイベントのデータを確認 ・画面遷移した際のURLに自動生成されたIDが 入っていることを確認 ・イベント詳細画面で参加者を追加、〇×△の予定を入力 ・Firebaseの管理コンソールで 登録されたイベントのデータを確認 101
102.
102
103.
Firebase CLIのコマンドを打って アプリをデプロイする。 ↓ GitLabにコードをgit pushすると GitLabが自動的にデプロイするよう設定する 103
104.
104 ・Firebase Hostingを利用してデプロイする (手順書『3-1.アプリケーションのビルドとデプロイ』) ・Firebase認証トークンの取得 (手順書『4-1.Firebaseトークンを取得する』) (手順書『4-2.FirebaseトークンをGitLab CI/CDに登録する』) ・GitLab
CI/CDの設定ファイル (手順書『4-3. .gitlab-ci.ymlを作成する』)
105.
Firebase Hosting コマンド1つで静的コンテンツを配信できるようになる。 デフォルトで以下2つのドメインにデプロイされる。 <プロジェクトID>.firebaseapp.com <プロジェクトID>.web.app 👀『3-1.アプリケーションのビルドとデプロイ』 105 【手順書『3-1.アプリケーションのビルドとデプロイ』】
106.
106 【手順書『3-1.アプリケーションのビルドとデプロイ』】
107.
Firebase CLIのコマンドを利用するには firebase loginコマンドでブラウザからGoogleアカウント へのログインを済ませないといけない。 GitLabでコマンド自動実行させるために 認証済であることを示すトークンを発行する。 107 $firebase
login:ci 【手順書『 4-1.Firebaseトークンを取得する』】 👀『 4-2.FirebaseトークンをGitLab CI/CDに登録する』
108.
GitLab CI/CDでは1つの作業(ジョブ)を定義する deploy-prodジョブ ・masterブランチにpushされた場合に自動実行する ・ビルド後、Firebase CLIでFirebase
Hostingへデプロイ 108 【手順書『 4-3. .gitlab-ci.ymlを作成する』】 👀『4-3. .gitlab-ci.ymlを作成する』
109.
image - CIのジョブを実行する環境の土台を指定している。 今回利用するのはFirebase CLIが使えるLinux環境。 only -
ジョブを実行するブランチ名を指定する script - 実行するコマンド 109 【手順書『 4-3. .gitlab-ci.ymlを作成する』】
110.
110 firebase use <プロジェクトID>
--token $FIREBASE_TOKEN $FIREBASE_TOKEN 手順4-2にてGitLabのコンソール画面で設定した 環境変数(取得したトークン)を参照している <プロジェクトID>の部分は 自分のFirebaseプロジェクトIDに置き換えて書く 管理コンソール→プロジェクトの設定で確認 【手順書『 4-3. .gitlab-ci.ymlを作成する』】
111.
111 【手順書『4-3. .gitlab-ci.ymlを作成する』】 【手順書『4-4.pushする』】
112.
Firebase Hosting Firebase Realtime
Database 112 開発PC デプロイ push Reactアプリ配信 DBへ値格納・取得
Editor's Notes
デプロイした際のドメインや格納されているデータ等より詳細な情報も管理コンソールから一目で見ることができる
これで最初に見てもらったこの構成が完成しました。 これで本日ハンズオンで作成するアプリは完成です。 お疲れ様でした
各章毎に書く必要があるコードは、手順書内に既に書いてあります。 次の解説が始まるまでに間に合わない場合は、コードをコピーして次にすすんでください。
この前準備でできることはハンズオン用のアプリがFirebase接続済の状態で起動するまで一緒に進めます
手順書に書いてあるリンを押してもらうとプロジェクトをforkする画面が出ます。 すでにフォーク済の人はここでやり直して
forkしたプロジェクトからクローン
ここ変数名を合わせておきたい
まず実際のコードを見て render関数の部分 通常のhtmlでは見慣れないタグを使っている部分の話をします
https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L20-27 https://ja.reactjs.org/docs/react-component.html#render https://preact.gitbooks.io/react-book/content/jsx/index.html 個人的にqiita https://qiita.com/Julia0709/items/3c3fc8d29fd2e56ed7a9
ochageでwindow.alartを書いて発火することを確認 value属性にstateを参照する記述を追記する setStateの記述をする render()とHTMLには存在しないタグについて確認
さきほど伝えたようにrender関数が呼ばれないと、Reactに画面に描画したい情報を伝えることができません。 stateに値を保持するsetStateすると、自動的にrender関数が呼ばれて最新のstateの情報を画面に反映することができます
Reactはstateの変更要求に従い値を変更し、 再度renderメソッドを呼び出して画面で見たいものを再生成する。 https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L156-158 https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L23 https://ja.reactjs.org/docs/react-component.html#setstate https://ja.reactjs.org/docs/faq-state.html#what-does-setstate-do
https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L20-27 https://ja.reactjs.org/docs/react-component.html#render https://preact.gitbooks.io/react-book/content/jsx/index.html
https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L20-27 https://ja.reactjs.org/docs/react-component.html#render https://preact.gitbooks.io/react-book/content/jsx/index.html
https://gitlab.com/tis-tiw/chousei-firebase/blob/feature/replace-to-firebase/docs/hands-on/01_%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B.md#L20-27 https://ja.reactjs.org/docs/react-component.html#render https://preact.gitbooks.io/react-book/content/jsx/index.html
候補日の区切りは改行で判断する仕様になっている
ここではコード例を確認する
★できたかどうかの確認はしたくない? ★key削除!!! ★RealTime Database管理コンソールを表示(手順書修正)
ボタンを押すとURLが変わって、次の画面に遷移する処理をつくります
イベント登録画面で様々なイベントが登録されても、遷移先のURLが被らず、一意になるようにしたい そのために自動で採番されたIDを使う
出欠を入力すると一覧に反映する処理は 前の画面を作成する際に触れたsetState ,firebase DBに値を登録する処理の組み合わせるだけなので 省略します
登録画面でDBに書き込まれたデータをイベント詳細画面で表示するよう修正する
みなさんのアプリはイベント詳細画面が表示された時に既に イベントの情報が表示されているかと思いますが それは、こちらで事前に用意したダミーデータです。 このダミー部分をDBから取って来た値に置き換えます
早速置き換えるために DBの値の取得方法を説明していきます ・RealTimeDBから値を取るにあたって、2つの手順で勧めます
ここまではDBにデータを登録する際と同じです DBのインスタンスを作成してパスを指定することでDBのどこに書き込まれている値を扱うかを指定します
ここでは、直前のイベント登録画面で自動生成されて 画面遷移時のURLにも利用したイベントのイベントIDを利用することで 前画面で登録されたイベント情報を取得します。
そのキーの値の取得方法を説明します 今回は、ReactRouter つまりURLに利用した情報からキーの値を取得します。 前画面で見てもらったように、ReactRouterの設定はevent/ のあとに何か値を入れたら遷移するようにしてました この何かの値を取得するにはthis.props.match.params.に続けて、今回だとid を指定することで取れるようになります ここで取ったキー値をパス部分にわたします
DBの値の変化を検知するイベントはいくつかあります 今回は一番シンプルな参照先の値全体の変更を検知するvalueイベントを利用します
最後にここで呼び出すコールバック関数を指定します。 関数の引数に、呼び出された時点のDBの値が渡されるので そこから値の取得、操作を行いましょう
AntDesignのコンポーネントは受け取る値って表示する値の形式が決まっており その形式に合わせるため DBから取って来た値を編集してからstateに格納、stateからコンポーネントに値を渡すことで 画面に表示します
ここでは手を動かさずに、stateの値を確認するだけで大丈夫です DBの値を編集して、これらのstateに入れるんだなーってことだけおさえておいてください
まずはイベント名と説明文を表示させます
ここでは手を動かさずに、stateの値を確認するだけで大丈夫です DBの値を編集して、これらのstateに入れるんだなーってことだけおさえておいてください
stateの値と、画面を対応づけるとこんな感じです
イベント名と、説明文は値の編集は不要でDBの値を そのまま保存するだけでOKです stateの値を、TitleタグとParagraphタグ部分に表示させます
イベント参加者がイベントの参加可否を答える場所です。 ここもコンポーネントを利用するためにDBから取った値を偏執する必要が有りますが シンプルなのでここは実際に書いてみてください。
ここでは手を動かさずに、stateの値を確認するだけで大丈夫です DBの値を編集して、これらのstateに入れるんだなーってことだけおさえておいてください
最終的に↑のデータベースの値を↓の形にしてstateに格納します
↑の値をObject.entries()の引数に与えてあげると 下の状態の値が返ってきます
map関数は配列の中の1要素ごとに処理を繰り返す関数です 今回は配列の 0番目をid 1番目をdateTime というキー名にしたObjectに組み替えていきます answerは初期値の△固定にしています 配列のすべての要素に対して 新しい配列を生成します。
最終的に↑のデータベースの値を↓の形にしてstateに格納します
候補日程を表示用に編集しようの部分が、participantsのみstateに保存して前のeventDetailを保存しなくなっている 一連で書いておかないと、コピペしたら消えちゃう 登録画面から正しく動作することを確認する RealtimeDatabaseに値が入っていることを確認する イベント詳細の確認
出欠表は AntDesignのテーブルを使うために値の操作をするのがとてもややこしい部分です Reactの知識もFirebaseの知識も関係ない部分になりますので 今回ここは、コピー&ペーストで次に進みましょう ★ここで一言、AntDesignのテーブルに合わせて値を編集する関数はこちらで独自に作成していて、ここのコピー箇所ではそれを利用しています 順序は候補日を先に作る
候補日程を表示用に編集しようの部分が、participantsのみstateに保存して前のeventDetailを保存しなくなっている 一連で書いておかないと、コピペしたら消えちゃう 登録画面から正しく動作することを確認する RealtimeDatabaseに値が入っていることを確認する イベント詳細の確認
ここの作業は一緒に進めていきましょう
これで最初に見てもらったこの構成が完成しました。 これで本日ハンズオンで作成するアプリは完成です。 お疲れ様でした
Download now