Slide 1

Slide 1 text

MVP͔Β͸͡ΊΑ otani (@canisterism)

Slide 2

Slide 2 text

ࢲ͸୭ʁ ɾotani (@canisterism) ɾϞόΠϧΞϓϦΤϯδχΞ @giftee.com ɾ࣮ʹ1೥൒ͿΓͷLT

Slide 3

Slide 3 text

͜ͷൃද͸͜Μͳਓʹ͓͢͢Ί ɾݸਓ։ൃʹڵຯ͕͋Δਓ / ΍ͬͨ͜ͱ͋Δਓ ɾϓϩμΫτ։ൃʹڵຯ͕͋Δਓ

Slide 4

Slide 4 text

ΞϓϦΛϦϦʔε͠·ͨ͠

Slide 5

Slide 5 text

β൛Ͱ഑৴த ։ൃظؒ͸໿6ϲ݄

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

ٕज़ελοΫ

Slide 10

Slide 10 text

FlutterɹɹɹFirebase 💛

Slide 11

Slide 11 text

ͳͥ࡞ͬͨͷ͔ʁ

Slide 12

Slide 12 text

ۚ ˞৑ஊͰ͢

Slide 13

Slide 13 text

৭ʑ͋Γ·͢

Slide 14

Slide 14 text

Flutter + FirebaseͰͳΜ͔࡞Γ͔ͨͬͨ

Slide 15

Slide 15 text

ࣗ෼͕ڳுͬͯ࡞ͬͨͱݴ͑Δ΋ͷ͕ཉ͔ͬͨ͠

Slide 16

Slide 16 text

Ͱ΋Ұ൪͸…ʁ །Ұࠓ·Ͱʹ࡞ͬͯੈʹग़ͨ͠΋ͷɿ

Slide 17

Slide 17 text

Ͱ΋Ұ൪͸…ʁ

Slide 18

Slide 18 text

ࣗ෼͕΄͍͠ͱࢥ͔ͬͨΒ࡞ͬͨ

Slide 19

Slide 19 text

https://w.atwiki.jp/gcmatome

Slide 20

Slide 20 text

https://w.atwiki.jp/gcmatome

Slide 21

Slide 21 text

https:// fi lmarks.com

Slide 22

Slide 22 text

ήʔϜ × ϨϏϡʔ

Slide 23

Slide 23 text

͍΍ɺ͕͢͞ʹ୭͔΍ͬͯΔͰ͠ΐ…

Slide 24

Slide 24 text

Slide 25

Slide 25 text

୭΋΍ͬͯͳ͔ͬͨ

Slide 26

Slide 26 text

͡Ό͋࡞Ε͹͍͍͡ΌΜʂ

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

ۤ࿑ͨ͜͠ͱ

Slide 29

Slide 29 text

ۤ࿑ͨ͜͠ͱ ɾϞνϕʔγϣϯͷ؅ཧ ɾFirestoreͷυΩϡϝϯτઃܭ ɹʢ༨༟͕͋Ε͹࿩͠·͢ʣ

Slide 30

Slide 30 text

ۤ࿑ͨ͜͠ͱ ɾϞνϕʔγϣϯͷ؅ཧ ɾFirestoreͷυΩϡϝϯτઃܭ ɹʢ༨༟͕͋Ε͹࿩͠·͢ʣ

Slide 31

Slide 31 text

ݸਓ։ൃͷϞνϕʔγϣϯ໰୊

Slide 32

Slide 32 text

※͜Ε͸ࣦഊஊͰ͢

Slide 33

Slide 33 text

͜ͷؒͣͬͱ1ਓͰ࡞Γଓ͚Δ(6ϲ݄)

Slide 34

Slide 34 text

ѹ౗తݽಠ

Slide 35

Slide 35 text

མͪΔϞνϕʔγϣϯ ɾ্ख࣮͘૷&ઃܭͰ͖ͳ͍… ͜Μͳͷ࡞ͬͯҙຯ͋Δ…ʁ ɾਐḿ͕ग़ͳ͍… ɾ͕࣌ؒऔΕͳ͍…

Slide 36

Slide 36 text

ਐḿ͕ग़ͳ͍ ↓ Ϟνϕʔγϣϯ͕Լ͕Δ ↓ ίʔυॻ͘ස౓͕ݮΔ ↓ ҎԼ܁Γฦ͠… ↓ ϗʔϜσΟϨΫτϦͷං΍͠.new()

Slide 37

Slide 37 text

ݸਓ։ൃऀ͸Ϟνϕʔγϣϯͷ௿Լʹ Ͳ͏ཱͪ޲͔͑͹Α͍ͷ͔ʁ

Slide 38

Slide 38 text

ɾεέδϡʔϧΛϒϩοΫͯ࣌ؒ͠Λ֬อ͢Δ ɾesaʹ࡞ۀϩάΛ͚ͭΔ͜ͱͰ୤ઢΛ๷͙ ɾϋʔυϧͷ௿͍࡞ۀ͔Β࢝ΊΔϧʔνϯΛ ɹ࡞Δ͜ͱͰ࡞ۀڵฃΛ׆͔͢ ɾ#mokumokuͰએݴ͢Δ ࢼͨ͠தͰ੒ޭͨ͜͠ͱ

Slide 39

Slide 39 text

ؒҧ͍Ͱ͸ͳ͍

Slide 40

Slide 40 text

͕

Slide 41

Slide 41 text

΋ͬͱ؆୯Ͱޮ཰తͳ΍Γํ͕͋Γ·͢

Slide 42

Slide 42 text

͍ͪૣ͘MVPΛ࡞Δ͜ͱ ͦΕ͸…

Slide 43

Slide 43 text

࣮༻࠷খݶͷϓϩμΫτ Minimum Viable Product

Slide 44

Slide 44 text

ͳͥMVPʁ ɾ͍ͪૣ͘ϑΟʔυόοΫΛಘΔͨΊ ɾސ٬͔ΒͷϑΟʔυόοΫ͸ ɹݸਓ։ൃʹ͓͚ΔϞνϕʔγϣϯ໰୊ͷ ɹେ൒Λղܾ͢Δ

Slide 45

Slide 45 text

otaniͷέʔε

Slide 46

Slide 46 text

credit: What is Minimum Viable Product And How To Make It Right (Oksana Kovalchuk)

Slide 47

Slide 47 text

ͭ·ΓԿΑʁ ɾ࠷௿ݶͷσʔλͱσβΠϯͱ࣮૷͚ͩΛ ɹܞ͑ͯ1ਓ໨ͷϢʔβʔΛݟ͚ͭΔ΂͖ ɾ1ਓ໨ͷϢʔβʔ͕͘ΕΔϑΟʔυόοΫ͸ ɹ͋ͳͨͷ։ൃΛԿഒʹ΋Ճ଎ͤͯ͘͞ΕΔ

Slide 48

Slide 48 text

஫ҙ఺ɿ ͋ͳͨࣗ਎͕ͷϓϩμΫτͷϢʔβʔͩͬͨͱͯ͠΋ɺ ඞͣMVPΛ࡞ͬͯ୭͔ʹ৮ͬͯ΋Β͍ͬͯͩ͘͞

Slide 49

Slide 49 text

How to Plan an MVP by Michael Seibel (YCͷCEO)

Slide 50

Slide 50 text

͏·͍ͬͨ͘͜ͱ Α͔ͬͨ͜ͱ

Slide 51

Slide 51 text

Α͔ͬͨ͜ͱ ɾ1ਓ໨ͷϢʔβʔΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ

Slide 52

Slide 52 text

@I-NO Special Thanks !

Slide 53

Slide 53 text

Special Thanks !

Slide 54

Slide 54 text

Α͔ͬͨ͜ͱ ɾ1ਓ໨ͷϢʔβʔΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ ɾٕज़ྗ͕਎ʹ͍ͭͨʁ ɹˠ ෼͔ΒΜɻ ɹɹٕज़Ҏ֎ͷେࣄͳؾ෇͖͸͍ͬͺ͍͋ͬͨ

Slide 55

Slide 55 text

·ͱΊ

Slide 56

Slide 56 text

·ͱΊ ɾMVP͸͍͍ͧ ɾ࣍ʹԿ͔Λ࡞Δ࣌͸ϋϦϘςΛ࡞ͬͯ ɹ୭͔ʹ౰ͯͯΈ͍ͯͩ͘͞ ɾ͖ͬͱ૝૾Ҏ্ͷֶͼ͕͋Γ·͢

Slide 57

Slide 57 text

Thanks.

Slide 58

Slide 58 text

͓·͚ɿFirestoreͱ͸

Slide 59

Slide 59 text

Google͕ఏڙ͢ΔNoSQL ɹυΩϡϝϯτࢦ޲σʔλϕʔε

Slide 60

Slide 60 text

RDBͱԿ͕ҧ͏ͷʁ

Slide 61

Slide 61 text

RDBͱͷҧ͍ ɾRDB͸ߦࢤ޲ͳͷʹରͯ͠ ɹNoSQL͸υΩϡϝϯτࢤ޲ ɾRDBͰ͸ϕετϓϥΫςΟεͱ͞ΕΔઃܭ͕ ɹNoSQLͰ͸ΞϯνύλʔϯʹͳͬͨΓ͢Δ

Slide 62

Slide 62 text

ΞϯνύλʔϯΛମݧ͠Α͏ ͦͷ̍ɿਖ਼نԽ

Slide 63

Slide 63 text

Q. /games/:id ͕֫ಘͨ͠ratingͷ߹ܭΛ ɹΞϓϦͰද͍ࣔͨ͠ɻͲ͏ઃܭ͢Δ͔ʁ amongUs: { title: “Among us” , reviews: [ { rating: 1, text: ”ਓؒෆ৴ʹͳΓ·ͨ͠ ” } , { rating: 5, text: ”໘ന͗͢ϫϩλ ” } ] }

Slide 64

Slide 64 text

A. ΞϓϦଆͰ/games/:id/reviews/Λ ɹશ෦औ͖ͬͯͯ߹ܭ͢Δ ࢒೦ʂ ͋ͳͨ͸RDB೴Ͱ͢ʂ

Slide 65

Slide 65 text

ਖ਼ղ͸… gameʹratingͷ߹ܭ஋Λ ॻ͖ࠐΜͰ͓͘ɹ

Slide 66

Slide 66 text

amongUs: { title: “Among us” , reviews: [ { rating: 1, text: ”ਓؒෆ৴ʹͳΓ·ͨ͠ ” } , { rating: 5, text: ”໘ന͗͢ϫϩλ ” } ] } BEFORE

Slide 67

Slide 67 text

amongUs: { title: “Among us” , ratingCount: 6, reviews: [ { rating: 1 , text: ”ਓؒෆ৴ʹͳΓ·ͨ͠” , } , { rating: 5 , text: ”໘ന͗͢ϫϩλ ” } ] } AFTER

Slide 68

Slide 68 text

ͳͥશ෦औͬͯ͘Δͷ͕ྑ͘ͳ͍ͷ͔ ɾલऀͷઃܭ͸શͯͷήʔϜʹରͯ͠ ɹશϨϏϡʔυΩϡϝϯτΛऔಘ͢Δ ɾFirestoreͷ՝ۚ͸ಡΈऔΓ਺Ͱൃੜ͢ΔͷͰɺ ɹΦʔόʔϔουͷ෼͚ͩແବʹ՝ۚ͞ΕΔ

Slide 69

Slide 69 text

ΞϯνύλʔϯΛମݧ͠Α͏ ͦͷ2ɿΨόΨόυΩϡϝϯτ

Slide 70

Slide 70 text

Q. Ϣʔβʔͷ৘ใΛFirestoreʹ֨ೲ͍ͨ͠ ɾϝʔϧΞυϨε ɾੜ೥݄೔ ɾχοΫωʔϜ ɾࣗݾ঺հ ɾetc…

Slide 71

Slide 71 text

A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ users: { otani: { eMail: “[email protected]” , birthDate: 1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }

Slide 72

Slide 72 text

A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ ࢒೦ʂ ͋ͳͨ͸RDB೴Ͱ͢ʂ

Slide 73

Slide 73 text

ਖ਼ղ͸… ಡΈऔΓͷݖݶͷൣғͰ υΩϡϝϯτΛ෼͚Δ

Slide 74

Slide 74 text

BEFORE users: { otani: { eMail: “[email protected]” , birthDate: 1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }

Slide 75

Slide 75 text

AFTER users: { otani: { eMail: “[email protected]” , birthDate: 1994-09-30 00:00:00 , } } , profile: { otani: { nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }

Slide 76

Slide 76 text

ͳͥ̍υΩϡϝϯτʹ ԡ͠ࠐΊΔͷ͸μϝͳͷʁ

Slide 77

Slide 77 text

ཧ༝ɿ ެ։ͯ͠͸͍͚ͳ͍৘ใ·Ͱެ։ͯ͠͠·͏ͨΊ

Slide 78

Slide 78 text

Firestore͸ηΩϡϦςΟϧʔϧͰσʔλΛอޢ͢Δ BEFOREɿ match /users/{uid} { allow get if true; // ୭Ͱ΋ݟΕΔ } users: { otani: { eMail: “[email protected]” , birthDate: 1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }

Slide 79

Slide 79 text

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: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }

Slide 80

Slide 80 text

ɹઃܭͷϓϥΫςΟε͕෼͔ͬͯͳ͍ͱ ɹσʔλ͕؆୯ʹյΕΔ&ηΩϡϦςΟ͕ΨόΔ

Slide 81

Slide 81 text

࣮ફ Firestore / ෱ా༟و גࣜձࣾΠϯϓϨεR&D