Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RESTful Firebase with Vue.js
Search
gyarasu
December 12, 2019
Technology
500
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
120
Firebase Cloud Messaging のベストプラクティス を、探している
gyarasu
1
5.9k
Next.jsではじめるPWA
gyarasu
2
1.8k
doda AIジョブサーチ PWAとパフォーマンスの話
gyarasu
0
1.9k
副業時代のプロジェクトマネジメント
gyarasu
3
3.2k
PWA基礎_1
gyarasu
0
330
PWA基礎_2
gyarasu
0
220
PWA基礎_3
gyarasu
0
200
フロントエンドエンジニア (実稼働まで) ひとりでできるもん
gyarasu
0
2.8k
Other Decks in Technology
See All in Technology
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
1.1k
野良MCPサーバーを排除せよ!MCPサーバーのガバナンス
yukiogawa
1
230
Agent × Maestro で始める モバイル E2E 端末準備からテスト実行・結果確認まで
sansantech
PRO
0
180
企画を Software Factory-ready にする——開発が高速になったとき、PdMの仕事はどう変わったか
yachibit
1
250
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
3
1.1k
背中から、背中へ ー 社外コミュニティで学んだ「雑に背中を押す」という恩送り ー / easygoing encouragement and pay forward to community
naitosatoshi
0
170
QAエンジニアがSoutherを使ってみたの〜10分でわかるSouther〜
mhlyc
0
110
AI時代のGraphQL
joere
3
380
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
5
1.5k
CloudWatch Logsのコスト最適化:どこまでAIに任せてどこから人間が承認すべきか
yama3133
0
180
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
11k
撮るだけでは終わらない。ソニーが挑むB2Bカメラソリューション開発
sony
0
110
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Building the Perfect Custom Keyboard
takai
2
920
Unsuck your backbone
ammeep
672
58k
Making the Leap to Tech Lead
cromwellryan
135
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Design in an AI World
tapps
1
360
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
750
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
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
終