Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVPからはじめよ / start with MVP

MVPからはじめよ / start with MVP

tech bash(giftee社内の勉強会)で行ったLTです。

15ea8d31e84f0b229ebd4aea87f02d30?s=128

Hiroki Otani

April 12, 2021
Tweet

Transcript

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

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

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

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

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

  6. None
  7. None
  8. None
  9. ٕज़ελοΫ

  10. FlutterɹɹɹFirebase 💛

  11. ͳͥ࡞ͬͨͷ͔ʁ

  12. ۚ ˞৑ஊͰ͢

  13. ৭ʑ͋Γ·͢

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

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

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

  17. Ͱ΋Ұ൪͸…ʁ

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

  19. https://w.atwiki.jp/gcmatome

  20. https://w.atwiki.jp/gcmatome

  21. https:// fi lmarks.com

  22. ήʔϜ × ϨϏϡʔ

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

  24. ୭΋΍ͬͯͳ͔ͬͨ

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

  26. None
  27. ۤ࿑ͨ͜͠ͱ

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

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

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

  31. ※͜Ε͸ࣦഊஊͰ͢

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

  33. ѹ౗తݽಠ

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

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

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

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

  38. ؒҧ͍Ͱ͸ͳ͍

  39. ͕

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

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

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

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

  44. otaniͷέʔε

  45. credit: What is Minimum Viable Product And How To Make

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

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

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

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

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

  51. @I-NO Special Thanks !

  52. Special Thanks !

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

  54. ·ͱΊ

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

  56. Thanks.

  57. ͓·͚ɿFirestoreͱ͸

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

  59. RDBͱԿ͕ҧ͏ͷʁ

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

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

  62. Q. /games/:id ͕֫ಘͨ͠ratingͷ߹ܭΛ ɹΞϓϦͰද͍ࣔͨ͠ɻͲ͏ઃܭ͢Δ͔ʁ amongUs: { title: “Among us” ,

    reviews: [ { rating: 1, text: ”ਓؒෆ৴ʹͳΓ·ͨ͠ ” } , { rating: 5, text: ”໘ന͗͢ϫϩλ ” } ] }
  63. A. ΞϓϦଆͰ/games/:id/reviews/Λ ɹશ෦औ͖ͬͯͯ߹ܭ͢Δ ࢒೦ʂ ͋ͳͨ͸RDB೴Ͱ͢ʂ

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

  65. amongUs: { title: “Among us” , reviews: [ { rating:

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

    { rating: 1 , text: ”ਓؒෆ৴ʹͳΓ·ͨ͠” , } , { rating: 5 , text: ”໘ന͗͢ϫϩλ ” } ] } AFTER
  67. ͳͥશ෦औͬͯ͘Δͷ͕ྑ͘ͳ͍ͷ͔ ɾલऀͷઃܭ͸શͯͷήʔϜʹରͯ͠ ɹશϨϏϡʔυΩϡϝϯτΛऔಘ͢Δ ɾFirestoreͷ՝ۚ͸ಡΈऔΓ਺Ͱൃੜ͢ΔͷͰɺ ɹΦʔόʔϔουͷ෼͚ͩແବʹ՝ۚ͞ΕΔ

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

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

  70. A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ users: { otani: { eMail: “game@clip-games.com” , birthDate:

    1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }
  71. A. 1ͭͷυΩϡϝϯτʹ֨ೲ͢Δ ࢒೦ʂ ͋ͳͨ͸RDB೴Ͱ͢ʂ

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

  73. BEFORE users: { otani: { eMail: “game@clip-games.com” , birthDate: 1994-09-30

    00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }
  74. AFTER users: { otani: { eMail: “game@clip-games.com” , birthDate: 1994-09-30

    00:00:00 , } } , profile: { otani: { nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }
  75. ͳͥ̍υΩϡϝϯτʹ ԡ͠ࠐΊΔͷ͸μϝͳͷʁ

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

  77. Firestore͸ηΩϡϦςΟϧʔϧͰσʔλΛอޢ͢Δ BEFOREɿ match /users/{uid} { allow get if true; //

    ୭Ͱ΋ݟΕΔ } users: { otani: { eMail: “game@clip-games.com” , birthDate: 1994-09-30 00:00:00 , nickname: “otani” , description: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }
  78. 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: “ήʔϜ͸Ұ೔Ұ࣌ؒʂ ” } }
  79. ɹઃܭͷϓϥΫςΟε͕෼͔ͬͯͳ͍ͱ ɹσʔλ͕؆୯ʹյΕΔ&ηΩϡϦςΟ͕ΨόΔ

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