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
490
MVPからはじめよ / start with MVP
tech bash(giftee社内の勉強会)で行ったLTです。
Hiroki Otani
April 12, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
460
What We Can Learn From OSS
inouehi
0
430
Let's learn code review
riofujimon
2
570
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
150
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
Ruby GitHub Packages
bkuhlmann
0
640
禅の心を手に入れよ
eltociear
1
290
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
240
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
400
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
720
VS Code をプロダクトにどう取り込むか
onomax
1
650
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
900
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
238
11k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Designing for Performance
lara
602
67k
Into the Great Unknown - MozCon
thekraken
14
1k
4 Signs Your Business is Dying
shpigford
176
21k
Practical Orchestrator
shlominoach
183
9.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
How to name files
jennybc
65
93k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
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