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
650
MVPからはじめよ / start with MVP
tech bash(giftee社内の勉強会)で行ったLTです。
Hiroki Otani
April 12, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
Select API from Kotlin Coroutine
jmatsu
1
230
VS Code Update for GitHub Copilot
74th
2
620
童醫院敏捷轉型的實踐經驗
cclai999
0
210
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
600
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
160
Discover Metal 4
rei315
2
120
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
50
33k
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
11k
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
110
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
620
Porting a visionOS App to Android XR
akkeylab
0
350
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
510
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
524
40k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Speed Design
sergeychernyshev
32
1k
Building Applications with DynamoDB
mza
95
6.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
We Have a Design System, Now What?
morganepeng
53
7.7k
How to Ace a Technical Interview
jacobian
277
23k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
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