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
Firebaseをフル活用したサーバーエンジニアレス新規事業プロトタイピング
Search
hosomichi
March 28, 2018
Technology
1
2.4k
Firebaseをフル活用したサーバーエンジニアレス新規事業プロトタイピング
hosomichi
March 28, 2018
Tweet
Share
More Decks by hosomichi
See All by hosomichi
React_Nativeの_ルーティングばなし.pdf
hosomichi
0
2.2k
Elm is a good teacher
hosomichi
2
1.4k
改善React道
hosomichi
3
1k
ReactComponentのコンストラクタを追いかけて
hosomichi
8
3.6k
Other Decks in Technology
See All in Technology
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.4k
Unsafe.BitCast のすゝめ。
nenonaninu
0
200
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
新しいスケーリング則と学習理論
taiji_suzuki
10
3.8k
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
AWSマルチアカウント統制環境のすゝめ / 20250115 Mitsutoshi Matsuo
shift_evolve
0
110
アジャイルチームが変化し続けるための組織文化とマネジメント・アプローチ / Agile management that enables ever-changing teams
kakehashi
3
3.4k
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!事例のご紹介+座学②
siyuanzh09
0
110
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
350
Azureの開発で辛いところ
re3turn
0
240
RubyでKubernetesプログラミング
sat
PRO
4
160
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
850
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Music & Morning Musume
bryan
46
6.3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Code Reviewing Like a Champion
maltzj
521
39k
Bash Introduction
62gerente
610
210k
Automating Front-end Workflow
addyosmani
1366
200k
Transcript
Firebaseをフル活用した サーバーエンジニアレス 新規事業プロトタイピング 2018/03/27 by @jshosomichi
自己紹介 せきようすけ a.k.a "ほそ道" Fringe81所属 フロントエンドエンジニア 得意技:JavaScript / Elm /
TypeScript / ReactNative
事業企画 実現性検証 事業化Go! いつもはローンチ向け開発をやることが多いのですが ・事業化Go!が出た後の開発 ・拡張性があり安定運用出来る堅牢な基盤 ローンチに 向けた開発
本日お話する新規事業開発は下記、検証段階であります ・事業化Go!が出る前の開発 ・アイデアが事業としてモノになるか検証するためのアプリ ・品質的には最小機能で提供価値の検証が出来ればOK 事業企画 実現性検証 プロトタイピング 事業化Go! ここを 進めたい!
ローンチに 向けた開発
予選を勝ち抜いてきた、事業化の可能性がある3企画。 これらを2ヶ月以内に事業化Go!の判断が出来るよう 検証可能(実際に動く)なプロトタイプを開発せよ。 事業企画 事業企画 事業企画 今回のミッション 実現性検証 プロトタイピング 事業化Go!
まだ利益を生み出せるかが不確実な段階のため、 いったん少ない人数で3つのアプリ開発 in 2ヶ月を行うことに 各プロダクトの 企画者 プログラマ (ワタクシひとり) デザイナ 検証チーム
各プロダクトの 企画者 プログラマ (ワタクシひとり) デザイナ 検証チーム えっ まだ利益を生み出せるかが不確実な段階のため、 いったん少ない人数で3つのアプリ開発 in
2ヶ月を行うことに
プログラマ (ワタクシひとり) さて、3つのプロトタイプ、どうやって作ろう?
プロトタイプの設計時間/デザイン時間も考慮すると 実際コードを書ける時間はより限られてくる。 開発スピードを担保する為の戦略を考ねばなりません。 プログラマ (ワタクシひとり) さて、3つのプロトタイプ、どうやって作ろう?
プログラマ (ワタクシひとり) さて、3つのプロトタイプ、どうやって作ろう? フロントエンド開発 は得意なので 速く作る算段は 立つなぁ プロトタイプの設計時間/デザイン時間も考慮すると 実際コードを書ける時間はより限られてくる。 開発スピードを担保する為の戦略を考ねばなりません。
プロトタイプの設計時間も考慮すると 実際コードを書ける時間はより限られてくる。 開発スピードを担保する為の戦略を考ねばなりません。 プログラマ (ワタクシひとり) さて、3つのプロトタイプ、どうやって作ろう? バックエンドは 学習コストを 下げたいなぁ フロントエンド開発
は得意なので 速く作る算段は 立つなぁ
サーバエンジニアレス開発 with Firebase 強みを活かせる技術選定で戦を略そう!
モバイルアプリが強調されていますが、今回はブラウザです。 FirebaseはブラウザのWebアプリ開発まわりでも JavaScript SDKという形で同様に機能提供してくれています。 ちなみに公式ページのトップでは
今回は下記5つのfirebaseサービスを利用しました 今日はひとつずつ使いっぷりを紹介してまいります
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG Hosting
Hosting 指定したディレクトリ(省略時public/)配下のファイル群を コマンドひとつでWebサーバの配下に設置してくれます。 検証時にユーザがアクセス出来るURLも用意してくれます。
Hosting 過去にデプロイしたバージョンにもGUI操作で戻すことが出来ま す。
Hosting 自分で仕組みを作っていた ひと昔前の感覚に立ち返ると、 色々と戦を略すことができています。
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG Authentication 認証 ・サインアップ ・サインイン
・サインアウト
Authentication 色々な認証方法と、アクセス元の制御機能などを提供してくれてい ます。Slack認証などもカスタムでできます。
Authentication エラーコードが内容を細かく判定してくれているので、 ユーザーのメールアドレスが既に登録されているかなども 下記のようにして確認可能でした。
Authentication いちどサインインすると、その状態をブラウザに保存してくれ、 明示的なサインアウトをするまでその状態は保持され続けます。 ※サインイン状態の確認は非同期で行われるので、 画面遷移のハンドリングは自前でちょっと工夫が必要でした。 auth.onAuthStateChangedを呼んでおくと後でuser/errorが入ってくる仕組み
今回用意した認証システムは3プロトタイプでほぼ変更なしで使い回すことができました Authentication
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG Cloud Firestore 認証 ・サインアップ
・サインイン ・サインアウト DB ・インスタンス群の永続化
Cloud Firestore Databaseは2つの選択肢がありますが Uniposの開発時にRealtime Databaseを使った経験があったので 今回は新しく登場したFirestore(β版)を使ってみようと思いました。
Cloud Firestore にじみ出るパワーアップ感 プロトタイプ開発ならではの冒険しやすさ 公式ドキュメントの比較
Cloud Firestore コレクション-ドキュメント-フィールドの階層で値を保持する。 MongoDBのような構造。 ブラウザコンソール上でクエリを行う仕組みがいずれ出来ると嬉しいです。
Cloud Firestore batchというオブジェクトを引き回すことで、 アトミックトランザクションを行うことができます。 (commitするまではset/updateを繰り返しても保存されない。)
Cloud Firestore 新規にIDを払い出すこともできます。 非同期処理していないので、 完全な一意性を確認・担保しているわけではないと思いますが。 ID被りをフォローしておけば、とても便利に使えます。
Cloud Firestore バリデーションはクライアントサイドとセキュリティルールの合わせ技で行いました 例えば「Cityドキュメントのemailフィールドはユニークでなければならない」 というアプリケーション制約があれば、一度データを取得して有無を確認。 Firestore側にセキュリティルールを設定しておくと 違反時にはエラーを返して保存処理を防ぐことができます。
Cloud Firestore 永続化処理をクライアント側に担わせることで 更に色々な戦を略すことができました。
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG Cloud Storage 認証 ・サインアップ
・サインイン ・サインアウト ファイルサーバ ・動的画像保存 DB ・インスタンス群の永続化
Cloud Storage システム内で登録される動的画像はCloud Storageに保存。 ディレクトリを切ることも出来ます。
Cloud Storage アップロードするファイル名はクライアント側で 設定する必要があります。 今回はFireStoreを使ってIDを払い出して、 そのIDを画像ファイル名とするなどしていました。
Cloud Storage ダウンロード時、ファイルの場所を示すURLしか持っていない場合は 非同期APIで変換したURLでアクセスする必要があります。 tokenパラメータが付与されたURLが返される
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG Cloud Functions 認証 ・サインアップ
・サインイン ・サインアウト ファイルサーバ ・動的画像保存 DB ・インスタンス群の永続化 イベントフック処理 ・データ変更を監視して通知送信
Cloud Functions さまざまなトリガーに対して あらかじめデプロイしたJavaScriptコードを実行することが出来ます。 (直接HTTPリクエストを受けるトリガーも作れます)
Cloud Functions 今回のプロトタイプでは主に firestoreのデータ更新をトリガーとしてメールの通知を行っていました。
Cloud Functions 更新前後のデータにアクセスすることが出来るので 完了フラグの状態推移を見極めて、通知を送ることができ、便利です。
Cloud Functions 事前予想ではセットアップの手間がめんどくさいのでは。。などと思っていたので すが、 コマンド一発でデプロイしてすぐに使えるようになりました。簡単! local cloud functions JS
クライアント (ブラウザ) Webサーバ ・HTML ・CSS ・IMG この構成で3プロトタイプの全要件を満たすことができました! 認証 ・サインアップ ・サインイン
・サインアウト ファイルサーバ ・動的画像保存 DB ・インスタンス群の永続化 イベントフック処理 ・データ変更を監視して通知送信
これで、 JavaScript知識を中心とした Noサーバインスタンス Noサーバサイドエンジニア の世界が実現しました
ビュー ロジック IOロジック Firebase ラッパー Firebase サービス API コードの再利用についても戦を略しました① Firebaseアクセスの汎用パターンをラッパー化することで
プロトタイプAのコードをプロトタイプBで再利用 Firebase知識範囲
ビュー ロジック IOロジック Firebase ラッパー Firebase サービス API コードの再利用についても戦を略しました② 画面のロジックとFirebaseにアクセスする層を完全分離することで
ローンチ向け開発に移行した場合も、 ビューロジックはそのまま使うことができるようにしています。 外部アクセス知識範囲
略せる戦を略し倒し、 結果的にフロントエンジニアひとり体制で ・手を動かす時間は4週間 ・1プロジェクト目: 2週間 ・2プロジェクト目以降:1週間 3つのプロトタイプを構築しきることができました! かなり良いペース!(のはず)
Firebaseのおかげで これからのプロトタイプも 「任しとけ!」 と自信を持って言うことが出来そうです ありがとう、Firebase!