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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
gyarasu
December 12, 2019
Technology
470
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RESTful Firebase with Vue.js
2019.12.12 Sendai Frontend Meetup #3
https://sfeug.connpass.com/event/156387/
gyarasu
December 12, 2019
More Decks by gyarasu
See All by gyarasu
QAエンジニア組織立ち上げはじめの一歩
gyarasu
0
93
Firebase Cloud Messaging のベストプラクティス を、探している
gyarasu
1
3.8k
Next.jsではじめるPWA
gyarasu
2
1.7k
doda AIジョブサーチ PWAとパフォーマンスの話
gyarasu
0
1.9k
副業時代のプロジェクトマネジメント
gyarasu
3
3.1k
PWA基礎_1
gyarasu
0
320
PWA基礎_2
gyarasu
0
210
PWA基礎_3
gyarasu
0
180
フロントエンドエンジニア (実稼働まで) ひとりでできるもん
gyarasu
0
2.8k
Other Decks in Technology
See All in Technology
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.4k
AICoEでAIネイティブ組織への進化
yukiogawa
0
170
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3.9k
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
0
190
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
220
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
8
3.7k
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
640
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.8k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
150
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
240
公式ドキュメントの歩き方etc
coco_se
0
110
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
2
3.7k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Writing Fast Ruby
sferik
630
63k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
300
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Google's AI Overviews - The New Search
badams
0
1.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Balancing Empowerment & Direction
lara
6
1.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
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
終