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
MVPからはじめよ / start with MVP
Search
Hiroki Otani
April 12, 2021
Programming
0
670
MVPからはじめよ / start with MVP
tech bash(giftee社内の勉強会)で行ったLTです。
Hiroki Otani
April 12, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
310
CSC305 Lecture 09
javiergs
PRO
0
300
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
360
Webサーバーサイド言語としてのRustについて
kouyuume
0
3.1k
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
120
開発生産性を上げるための生成AI活用術
starfish719
3
1.6k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
140
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.4k
Claude Agent SDK を使ってみよう
hyshu
0
1.3k
CSC305 Lecture 06
javiergs
PRO
0
270
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
6
3.3k
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.1k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.1k
Context Engineering - Making Every Token Count
addyosmani
7
280
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Music & Morning Musume
bryan
46
6.9k
Optimizing for Happiness
mojombo
379
70k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Building an army of robots
kneath
306
46k
Making Projects Easy
brettharned
120
6.4k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Producing Creativity
orderedlist
PRO
347
40k
Transcript
MVP͔Β͡ΊΑ otani (@canisterism)
ࢲ୭ʁ ɾotani (@canisterism) ɾϞόΠϧΞϓϦΤϯδχΞ @giftee.com ɾ࣮ʹ1ͿΓͷLT
͜ͷൃද͜Μͳਓʹ͓͢͢Ί ɾݸਓ։ൃʹڵຯ͕͋Δਓ / ͬͨ͜ͱ͋Δਓ ɾϓϩμΫτ։ൃʹڵຯ͕͋Δਓ
ΞϓϦΛϦϦʔε͠·ͨ͠
β൛Ͱ৴த ։ൃظؒ6ϲ݄
None
None
None
ٕज़ελοΫ
FlutterɹɹɹFirebase 💛
ͳͥ࡞ͬͨͷ͔ʁ
ۚ ˞ஊͰ͢
৭ʑ͋Γ·͢
Flutter + FirebaseͰͳΜ͔࡞Γ͔ͨͬͨ
͕ࣗڳுͬͯ࡞ͬͨͱݴ͑Δͷ͕ཉ͔ͬͨ͠
ͰҰ൪…ʁ །Ұࠓ·Ͱʹ࡞ͬͯੈʹग़ͨ͠ͷɿ
ͰҰ൪…ʁ
͕ࣗ΄͍͠ͱࢥ͔ͬͨΒ࡞ͬͨ
https://w.atwiki.jp/gcmatome
https://w.atwiki.jp/gcmatome
https:// fi lmarks.com
ήʔϜ × ϨϏϡʔ
͍ɺ͕͢͞ʹ୭͔ͬͯΔͰ͠ΐ…
…
୭ͬͯͳ͔ͬͨ
͡Ό͋࡞Ε͍͍͡ΌΜʂ
None
ۤ࿑ͨ͜͠ͱ
ۤ࿑ͨ͜͠ͱ ɾϞνϕʔγϣϯͷཧ ɾFirestoreͷυΩϡϝϯτઃܭ ɹʢ༨༟͕͋Ε͠·͢ʣ
ۤ࿑ͨ͜͠ͱ ɾϞνϕʔγϣϯͷཧ ɾFirestoreͷυΩϡϝϯτઃܭ ɹʢ༨༟͕͋Ε͠·͢ʣ
ݸਓ։ൃͷϞνϕʔγϣϯ
※͜ΕࣦഊஊͰ͢
͜ͷؒͣͬͱ1ਓͰ࡞Γଓ͚Δ(6ϲ݄)
ѹతݽಠ
མͪΔϞνϕʔγϣϯ ɾ্ख࣮͘&ઃܭͰ͖ͳ͍… ͜Μͳͷ࡞ͬͯҙຯ͋Δ…ʁ ɾਐḿ͕ग़ͳ͍… ɾ͕࣌ؒऔΕͳ͍…
ਐḿ͕ग़ͳ͍ ↓ Ϟνϕʔγϣϯ͕Լ͕Δ ↓ ίʔυॻ͘ස͕ݮΔ ↓ ҎԼ܁Γฦ͠… ↓ ϗʔϜσΟϨΫτϦͷං͠.new()
ݸਓ։ൃऀϞνϕʔγϣϯͷԼʹ Ͳ͏ཱ͔ͪ͑Α͍ͷ͔ʁ
ɾεέδϡʔϧΛϒϩοΫͯ࣌ؒ͠Λ֬อ͢Δ ɾesaʹ࡞ۀϩάΛ͚ͭΔ͜ͱͰઢΛ͙ ɾϋʔυϧͷ͍࡞ۀ͔Β࢝ΊΔϧʔνϯΛ ɹ࡞Δ͜ͱͰ࡞ۀڵฃΛ׆͔͢ ɾ#mokumokuͰએݴ͢Δ ࢼͨ͠தͰޭͨ͜͠ͱ
ؒҧ͍Ͱͳ͍
͕
ͬͱ؆୯ͰޮతͳΓํ͕͋Γ·͢
͍ͪૣ͘MVPΛ࡞Δ͜ͱ ͦΕ…
࣮༻࠷খݶͷϓϩμΫτ Minimum Viable Product
ͳͥMVPʁ ɾ͍ͪૣ͘ϑΟʔυόοΫΛಘΔͨΊ ɾސ٬͔ΒͷϑΟʔυόοΫ ɹݸਓ։ൃʹ͓͚ΔϞνϕʔγϣϯͷ ɹେΛղܾ͢Δ
otaniͷέʔε
credit: What is Minimum Viable Product And How To Make
It Right (Oksana Kovalchuk)
ͭ·ΓԿΑʁ ɾ࠷ݶͷσʔλͱσβΠϯͱ࣮͚ͩΛ ɹܞ͑ͯ1ਓͷϢʔβʔΛݟ͚ͭΔ͖ ɾ1ਓͷϢʔβʔ͕͘ΕΔϑΟʔυόοΫ ɹ͋ͳͨͷ։ൃΛԿഒʹՃͤͯ͘͞ΕΔ
ҙɿ ͋ͳ͕ͨࣗͷϓϩμΫτͷϢʔβʔͩͬͨͱͯ͠ɺ ඞͣMVPΛ࡞ͬͯ୭͔ʹ৮ͬͯΒ͍ͬͯͩ͘͞
How to Plan an MVP by Michael Seibel (YCͷCEO)
͏·͍ͬͨ͘͜ͱ Α͔ͬͨ͜ͱ
Α͔ͬͨ͜ͱ ɾ1ਓͷϢʔβʔΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ
@I-NO Special Thanks !
Special Thanks !
Α͔ͬͨ͜ͱ ɾ1ਓͷϢʔβʔΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ ɾٕज़ྗ͕ʹ͍ͭͨʁ ɹˠ ͔ΒΜɻ ɹɹٕज़Ҏ֎ͷେࣄͳؾ͖͍ͬͺ͍͋ͬͨ
·ͱΊ
·ͱΊ ɾMVP͍͍ͧ ɾ࣍ʹԿ͔Λ࡞Δ࣌ϋϦϘςΛ࡞ͬͯ ɹ୭͔ʹͯͯΈ͍ͯͩ͘͞ ɾ͖ͬͱ૾Ҏ্ͷֶͼ͕͋Γ·͢
Thanks.
͓·͚ɿFirestoreͱ
Google͕ఏڙ͢ΔNoSQL ɹυΩϡϝϯτࢦσʔλϕʔε
RDBͱԿ͕ҧ͏ͷʁ
RDBͱͷҧ͍ ɾRDBߦࢤͳͷʹରͯ͠ ɹNoSQLυΩϡϝϯτࢤ ɾRDBͰϕετϓϥΫςΟεͱ͞ΕΔઃܭ͕ ɹNoSQLͰΞϯνύλʔϯʹͳͬͨΓ͢Δ
ΞϯνύλʔϯΛମݧ͠Α͏ ͦͷ̍ɿਖ਼نԽ
Q. /games/:id ͕֫ಘͨ͠ratingͷ߹ܭΛ ɹΞϓϦͰද͍ࣔͨ͠ɻͲ͏ઃܭ͢Δ͔ʁ amongUs: { title: “Among us” ,
reviews: [ { rating: 1, text: ”ਓؒෆ৴ʹͳΓ·ͨ͠ ” } , { rating: 5, text: ”໘ന͗͢ϫϩλ ” } ] }
A. ΞϓϦଆͰ/games/:id/reviews/Λ ɹશ෦औ͖ͬͯͯ߹ܭ͢Δ ೦ʂ ͋ͳͨRDBͰ͢ʂ
ਖ਼ղ… gameʹratingͷ߹ܭΛ ॻ͖ࠐΜͰ͓͘ɹ
amongUs: { title: “Among us” , reviews: [ { rating:
1, text: ”ਓؒෆ৴ʹͳΓ·ͨ͠ ” } , { rating: 5, text: ”໘ന͗͢ϫϩλ ” } ] } BEFORE
amongUs: { title: “Among us” , ratingCount: 6, reviews: [
{ rating: 1 , text: ”ਓؒෆ৴ʹͳΓ·ͨ͠” , } , { rating: 5 , text: ”໘ന͗͢ϫϩλ ” } ] } AFTER
ͳͥશ෦औͬͯ͘Δͷ͕ྑ͘ͳ͍ͷ͔ ɾલऀͷઃܭશͯͷήʔϜʹରͯ͠ ɹશϨϏϡʔυΩϡϝϯτΛऔಘ͢Δ ɾFirestoreͷ՝ۚಡΈऔΓͰൃੜ͢ΔͷͰɺ ɹΦʔόʔϔουͷ͚ͩແବʹ՝ۚ͞ΕΔ
ΞϯνύλʔϯΛମݧ͠Α͏ ͦͷ2ɿΨόΨόυΩϡϝϯτ
Q. ϢʔβʔͷใΛFirestoreʹ֨ೲ͍ͨ͠ ɾϝʔϧΞυϨε ɾੜ݄ ɾχοΫωʔϜ ɾࣗݾհ ɾetc…
A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ users: { otani: { eMail: “
[email protected]
” , birthDate:
1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜҰҰ࣌ؒʂ ” } }
A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ ೦ʂ ͋ͳͨRDBͰ͢ʂ
ਖ਼ղ… ಡΈऔΓͷݖݶͷൣғͰ υΩϡϝϯτΛ͚Δ
BEFORE users: { otani: { eMail: “
[email protected]
” , birthDate: 1994-09-30
00:00:00 , nickname: “otani” , description: “ήʔϜҰҰ࣌ؒʂ ” } }
AFTER users: { otani: { eMail: “
[email protected]
” , birthDate: 1994-09-30
00:00:00 , } } , profile: { otani: { nickname: “otani” , description: “ήʔϜҰҰ࣌ؒʂ ” } }
ͳͥ̍υΩϡϝϯτʹ ԡ͠ࠐΊΔͷμϝͳͷʁ
ཧ༝ɿ ެ։͍͚ͯ͠ͳ͍ใ·Ͱެ։ͯ͠͠·͏ͨΊ
FirestoreηΩϡϦςΟϧʔϧͰσʔλΛอޢ͢Δ BEFOREɿ match /users/{uid} { allow get if true; //
୭ͰݟΕΔ } users: { otani: { eMail: “
[email protected]
” , birthDate: 1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜҰҰ࣌ؒʂ ” } }
FirestoreηΩϡϦςΟϧʔϧͰσʔλΛอޢ͢Δ AFTERɿ users: { otani: { eMail: “game@clip- games.com” ,
birthDate: 1994-09-30 00:00:00 , } } match /users/{uid} { //ΞΧϯτͷॴ༗ऀ͚͕ͩࢀরՄೳ allow get: if request.auth != null && request.auth.uid == uid ; } match /profiles/{uid} { allow get if true; // ୭ͰݟΕΔ } profile: { otani: { nickname: “otani” , description: “ήʔϜҰҰ࣌ؒʂ ” } }
ɹઃܭͷϓϥΫςΟε͕͔ͬͯͳ͍ͱ ɹσʔλ͕؆୯ʹյΕΔ&ηΩϡϦςΟ͕ΨόΔ
࣮ફ Firestore / ా༟و גࣜձࣾΠϯϓϨεR&D