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
MVPからはじめよ / start with MVP
Search
Hiroki Otani
April 12, 2021
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MVPからはじめよ / start with MVP
tech bash(giftee社内の勉強会)で行ったLTです。
Hiroki Otani
April 12, 2021
Other Decks in Programming
See All in Programming
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
What We Talk About When We Talk About XP
m_seki
2
630
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
270
AHC070解法紹介
eijirou
0
120
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
100
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
110
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
150
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
410
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
109
250k
How to Talk to Developers About Accessibility
jct
2
550
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
ラッコキーワード サービス紹介資料
rakko
1
4.9M
A designer walks into a library…
pauljervisheath
211
25k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
280
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Curse of the Amulet
leimatthew05
3
14k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building the Perfect Custom Keyboard
takai
2
870
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