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
NPOでのDevinの活用
codeforeveryone
0
900
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
23
9.6k
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
テスターからテストエンジニアへ ~新米テストエンジニアが歩んだ9ヶ月振り返り~
non0113
2
220
CDK引数設計道場100本ノック
badmintoncryer
2
480
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
1.1k
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
280
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
500
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
2
990
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
3
580
RailsGirls IZUMO スポンサーLT
16bitidol
0
200
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
15
5.6k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Optimizing for Happiness
mojombo
379
70k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Code Review Best Practice
trishagee
69
19k
Being A Developer After 40
akosma
90
590k
Code Reviewing Like a Champion
maltzj
524
40k
How GitHub (no longer) Works
holman
314
140k
Agile that works and the tools we love
rasmusluckow
329
21k
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