Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RESTful Firebase with Vue.js
Search
gyarasu
December 12, 2019
Technology
1
390
RESTful Firebase with Vue.js
2019.12.12 Sendai Frontend Meetup #3
https://sfeug.connpass.com/event/156387/
gyarasu
December 12, 2019
Tweet
Share
More Decks by gyarasu
See All by gyarasu
QAエンジニア組織立ち上げはじめの一歩
gyarasu
0
34
Firebase Cloud Messaging のベストプラクティス を、探している
gyarasu
1
2.5k
Next.jsではじめるPWA
gyarasu
2
1.5k
doda AIジョブサーチ PWAとパフォーマンスの話
gyarasu
0
1.6k
副業時代のプロジェクトマネジメント
gyarasu
3
2.8k
PWA基礎_1
gyarasu
0
290
PWA基礎_2
gyarasu
0
170
PWA基礎_3
gyarasu
0
150
フロントエンドエンジニア (実稼働まで) ひとりでできるもん
gyarasu
0
2.5k
Other Decks in Technology
See All in Technology
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
2
690
ソフトウェア開発における「パーフェクトな意思決定」/Perfect Decision-Making in Software Development
yayoi_dd
2
1.9k
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
300
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
190
組み込みアプリパフォーマンス格闘記 検索画面編
wataruhigasi
1
180
スケールし続ける事業とサービスを支える組織とアーキテクチャの生き残り戦略 / The survival strategy for Money Forward’s engineering.
moneyforward
0
100
クレカ・銀行連携機能における “状態”との向き合い方 / SmartBank Engineer LT Event
smartbank
2
110
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
210
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
510
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
170
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.5k
3年でバックエンドエンジニアが5倍に増えても破綻しなかったアーキテクチャ そして、これから / Software architecture that scales even with a 5x increase in backend engineers in 3 years
euglena1215
11
3.9k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Six Lessons from altMBA
skipperchong
27
3.5k
How STYLIGHT went responsive
nonsquared
96
5.2k
The Invisible Side of Design
smashingmag
299
50k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Testing 201, or: Great Expectations
jmmastey
41
7.1k
Faster Mobile Websites
deanohume
305
30k
A Modern Web Designer's Workflow
chriscoyier
693
190k
A Tale of Four Properties
chriscoyier
157
23k
How to Ace a Technical Interview
jacobian
276
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Transcript
RESTful Firebase with Vue.js 2019/12/12 Sendai Frontend Meetup #3 吉次
洋毅
誰? • 吉次洋毅(ヨシツグヒロキ) • 1991年生まれ(28歳) • 経歴 ◦ 某レストラン検索サイトでバックエンドエンジニアなど ◦
某HR会社でエンジニアをしつつ ◦ フリーランスで受託開発&他社さんの開発やプロジェクトマネジメントのお手伝い • 趣味 ◦ 一人旅 & 写真 & スーパー銭湯 ◦ スマブラ(VIPボーダー周辺をウロウロ・ゼロサムユーザ) ◦ ポケモン(約20年ぶりにはじめました) @gyarasu
今日はFirebaseとVue.jsのお話 ✕
話すこと • SPAとFirebaseによるサーバレス開発 • Firebaseへの依存とサービスグロース • RESTful Firebase • まとめ
• CORSとの戦い(時間あれば)
Chapter. 1 SPAとFirebaseによる サーバレス開発
サーバレスでアプリケーションを作れる! Frontend Backend
Firebaseの良いところ • 必要なものがだいたい揃ってる ◦ 認証 ◦ 関数の実行 ◦ データベース(NoSQL) ◦
ファイルストレージ • 低コスト ◦ お金 ◦ 導入する手間(firebase-toolsでの操作) ◦ 学習コスト
Vue.jsの良いところ • vue cliで簡単にバックエンドから独立したSPAの プロジェクトが作れる • 学習コストが低い • 成熟したエコシステム •
豊富なドキュメント
新規サービスのスタートアップには最適! ✕
最高!...なのか??
Chapter. 2 Firebaseへの依存と サービスのグロース
そのSPA、切り離せますか? Frontend Backend
サービスグロースで起こりうること • 短い時間単位で大量の書き込み ◦ Firestoreで耐えうるか? • コードベースの肥大化 ◦ それに耐えうるアーキテクチャ設計ができているか? •
パフォーマンス問題の顕在化 ◦ Cloud Functionsのコールドスタート問題など
結果的にどうなるか?
それぞれ別のものに置換される可能性がある Frontend Backend
Chapter. 3 RESTful Firebase
Firebase Cloud Functionの呼び出し方 • onCall(とても便利) ◦ 呼び出し可能関数では、Firebase Authentication と FCM
トークンが 使用可能な場合、自動的にリクエストに追加されます。 ◦ functions.https.onCall トリガーは、リクエスト本文を自動的に逆シリア ル化し、認証トークンを検証します。 ◦ 使えるメソッドはPOSTのみ • onRequest(すこし頑張る必要あり) ◦ HTTP 関数のイベント ハンドラは onRequest() イベントをリッスンしま す。このイベントは、Express ウェブ フレームワークによって管理され るルーターとアプリをサポートします。
onCallは諸刃の剣(ただ、とても楽) APIの実装に依存 クライアントの実装に依存 チームの人「グロースしてきたからAPIはgolang×k8sで作り直そうか」
こうなっていると、 そう簡単には切り離せない
バックエンドとフロントエンドのつ ながりを標準的な インターフェースにして それぞれのポータビリティを確保 したい
なので、 onRequestベースで作る。
RESTful Firebase(Cloud Functions) https://github.com/gyarasu/express-ts-cloud-functions • Express.js • TypeScript • Cloud
Functions最適化 →URL設計への制約 • POSTメソッド以外も使え る(標準的なHTTPメソッ ド、ステータスコード) • Clean Architectureに基 づく関心の分離 • CORS対応
標準化による疎結合化 REST API
Chapter. 4 まとめ
まとめ • スタートアップは高速に! ◦ SPAやFirebaseは大いに活用すべき • サービスグロースを視野に入れた設計を! ◦ 切り離せる?捨てやすい?代替可能? ◦
できるだけ標準的な仕組みで作ろう
Chapter. 5 (番外編)CORSとの戦い
onRequestベースのAPIで起こること • CORS(Cross-Origin-Resource-Sharing) ◦ サーバサイドでのCORS対応が必要 ◦ クライアントサイドでのsimple request化(preflightを飛ば さない) •
Firebase Authの認証トークンを自前で管理 • onCallを使ってると、そのへんをよしなにやってく れる
単純リクエストでのやり取り • クロスオリジンにConetnt−Type: appllication/jsonのリクエスト をするとpreflightを引き起こす • preflightにより、正しくクロスオリジンへのリクエストが通るかを 確認する • サーバ側でのCORS対応によらず、preflightは発生する
単純リクエストでのやり取り appllication/json appllication/x-www-for m-urlencoded 実装 プラグイン/ミド ルウェア form object json
object vue-axios-cors Express.js リクエスト
開発者が意識する実装部分は RESTful。プラグインと middlewareで吸収。
axiosを拡張したvueプラグイン https://github.com/gyarasu/vue-axios-cors • axios(HTTPクライアン ト)のVue向けプラグイン • POST / PUTの場合に自 動的に単純リクエストに
変換 • preflightを避ける (Authorizationヘッダつ いてる場合は不可避)
Express.jsでのjsonへの変換 https://expressjs.com/en/api.html 一応、上記のようなドキュメントがあるが、明示的に書かなく てもやってくれるようす。
FirebaseでRESTfulに作って開 発スピードとポータビリティの両 立を試みよう!
単純リクエスト補足 • Authroizationヘッダを付与している場合、 appllication/x-www-form-urlencodedに変換してもpreflightは 飛びます • どうしてもpreflightを避けたい場合は認証情報をbodyに含め るなどすると一応実現はできる(あまり一般的ではない) • Cloud
FunctionsはFirebase Hostingと連携してカスタムド メインを使えるので、そもそもCORSにしないのが一番シンプ ル(いろいろやったけど結局これが結論...)
参考リンク • https://firebase.google.com/docs/functions/callabl e-reference?hl=ja • https://firebase.google.com/docs/functions/http-ev ents • https://developer.mozilla.org/ja/docs/Web/HTTP/C ORS
終