Slide 1

Slide 1 text

Norikazu Muramoto Komercoࣄۀ෦ ಈ͖ग़ͨ͠ΫοΫύουͷ CtoCϏδωε

Slide 2

Slide 2 text

CtoCϏδωε

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ϞϊͰຖ೔ͷྉཧΛָ͘͢͠ΔϓϥοτϑΥʔϜ

Slide 6

Slide 6 text

ϞϊͰຖ೔ͷྉཧΛָ͘͢͠Δ ຖ೔ͷྉཧΛָ͠Έʹ͢Δ

Slide 7

Slide 7 text

ϞϊͰຖ೔ͷྉཧΛָ͘͢͠Δʁ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

ΫϦΤʔλʔ

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

EC

Slide 16

Slide 16 text

EC Media

Slide 17

Slide 17 text

EC Media cookpad

Slide 18

Slide 18 text

EC Media cookpad Product

Slide 19

Slide 19 text

EC Media cookpad Product Story

Slide 20

Slide 20 text

EC Media cookpad Product Story Recipe

Slide 21

Slide 21 text

͜ͷय़ϦϦʔε

Slide 22

Slide 22 text

Komercoͷ։ൃʹ࿩ΛਐΊ·͠ΐ͏

Slide 23

Slide 23 text

iOS Engineer Product owner Director 1 1 4 4 Designer 1 Our team Customer support 2 Creator scout

Slide 24

Slide 24 text

iOS Engineer Product owner Creator scout Director 1 1 4 4 Designer 1 Our team Customer support 2 αʔόʔαΠυͷΤϯδχΞ͕͍·ͤΜ

Slide 25

Slide 25 text

Serverless

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Why Firebase?

Slide 28

Slide 28 text

Why Firebase? ࢲͷਓੜͷࣦഊஊͱڞʹ͝આ໌͠·͢ɻ

Slide 29

Slide 29 text

2009 Node.js Rails ເΈ͕ͪͳཁ݅ఆٛ

Slide 30

Slide 30 text

2009 Node.js Rails ເΈ͕ͪͳཁ݅ఆٛ

Slide 31

Slide 31 text

2009 Node.js MEAN 2013 Rails ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝

Slide 32

Slide 32 text

2009 Node.js MEAN 2013 Rails ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝

Slide 33

Slide 33 text

2009 Node.js MEAN 2013 2015 Parse Rails ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝ mBaaSΛಋೖ REST APIͱܾผ

Slide 34

Slide 34 text

2009 Node.js MEAN 2013 2015 Parse Rails ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝ mBaaSΛಋೖ REST APIͱܾผ

Slide 35

Slide 35 text

2009 Node.js MEAN 2013 2015 Parse Rails 2016 Firebase ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝ Firebaseಋೖ mBaaSΛಋೖ REST APIͱܾผ

Slide 36

Slide 36 text

2009 Node.js MEAN 2013 2015 Parse Rails 2016 Firebase ເΈ͕ͪͳཁ݅ఆٛ νʔϜϏϧσΟϯά։࢝ 2018 Komerco mBaaSΛಋೖ REST APIͱܾผ Firebaseಋೖ

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

։ൃ͕͏·͍͔͘ͳ͍ͷ͸ͳͥʁ

Slide 39

Slide 39 text

։ൃ͕஗͍͜ͱ ॾѱͷࠜݯ

Slide 40

Slide 40 text

ԖචͰॻ͍ͯ ফ͠ΰϜͰফ͢ ૝͍ඳ͍ͨ͜ͱΛ͙͢ܗʹͰ͖Δ։ൃ

Slide 41

Slide 41 text

Full Managed Secure Quick Why Firebase?

Slide 42

Slide 42 text

Quick Firestore Cloud Functions App Read / Write Firebase

Slide 43

Slide 43 text

// SAVE let user: User = User() user.name = "1amageek" user.save() // GET User.get("user_id") { user, error in if let error = error { print(error) return } print(user) // UPDATE user?.name = "Norikazu Muramoto" user?.update() } @objcMembers class User: Object { dynamic var name: String? }

Slide 44

Slide 44 text

@objcMembers class User: Object, UserProtocol { dynamic var name: String? let groups: ReferenceCollection = [] } @objcMembers class Group: Object, UserProtocol { dynamic var name: String? let users: ReferenceCollection = [] }

Slide 45

Slide 45 text

@objcMembers class User: Object, UserProtocol { dynamic var name: String? let groups: ReferenceCollection = [] } @objcMembers class Group: Object, UserProtocol { dynamic var name: String? let users: ReferenceCollection = [] }

Slide 46

Slide 46 text

let user0: User = User() let user1: User = User() let group: Group = Group() // ૬ޓࢀর͢Δ user0.groups.insert(group) user1.groups.insert(group) group.users.insert(user0) group.users.insert(user1) // อଘ͢Δ group.save()

Slide 47

Slide 47 text

Secure Document Document App Firebase

Slide 48

Slide 48 text

service cloud.firestore { match /databases/{database}/documents { // user match /user/{userID} { allow read: if request.auth != null; allow write: if request.auth.uid == userID; } } }

Slide 49

Slide 49 text

service cloud.firestore { match /databases/{database}/documents { // user match /user/{userID} { allow read: if request.auth != null; allow write: if request.auth.uid == userID; } } }

Slide 50

Slide 50 text

Full Managed Auto Scale

Slide 51

Slide 51 text

·ͩ·ͩՃ଎Ͱ͖Δ

Slide 52

Slide 52 text

OpenSource

Slide 53

Slide 53 text

Give and Take

Slide 54

Slide 54 text

ͳͥOpenSourceʁ গਓ਺Ͱ඼࣭Λ୲อ͢ΔͨΊ ɾOpenSourceʹ͢Δͱ඼࣭͕޲্͢Δɻ ɾ֎෦ͷਓ͕ɺνʔϜͷϦιʔεʹͳΔɻ ɾ࠶ར༻Ͱ͖Δɻ

Slide 55

Slide 55 text

ͳͥOpenSourceʁ গਓ਺Ͱ඼࣭Λ୲อ͢ΔͨΊ ɾOpenSourceʹ͢Δͱ඼࣭͕޲্͢Δɻ ɾ֎෦ͷਓ͕ɺνʔϜͷϦιʔεʹͳΔɻ ɾ࠶ར༻Ͱ͖Δɻ

Slide 56

Slide 56 text

ͳͥOpenSourceʁ গਓ਺Ͱ඼࣭Λ୲อ͢ΔͨΊ ɾOpenSourceʹ͢Δͱ඼࣭͕޲্͢Δɻ ɾ֎෦ͷਓ͕ɺνʔϜͷϦιʔεʹͳΔɻ ɾ࠶ར༻Ͱ͖Δɻ

Slide 57

Slide 57 text

ͳͥOpenSourceʁ ɾOpenSourceʹ͢Δͱ඼࣭͕޲্͢Δɻ ɾ֎෦ͷਓ͕ɺνʔϜͷϦιʔεʹͳΔɻ ɾ࠶ར༻Ͱ͖Δɻ গਓ਺Ͱ඼࣭Λ୲อ͢ΔͨΊ

Slide 58

Slide 58 text

OpenSource Komercoͷٕज़Λެ։͍ͯ͠·͢ https://github.com/1amageek/Pring https://github.com/1amageek/pring.ts https://github.com/sgr-ksmt/Alertift https://github.com/sgr-ksmt/Lobster https://github.com/miuP/Algent https://github.com/miuP/Tsuchi https://github.com/starhoshi/Orderable https://github.com/starhoshi/Orderable.ts

Slide 59

Slide 59 text

Pring Orderable

Slide 60

Slide 60 text

Pring Firestore model framework ɾFirestoreͰεΩʔϚΛఆٛ ɾϦϨʔγϣϯγοϓΛఆٛ ɾෳ਺ϊʔυͷಉ࣌ߋ৽

Slide 61

Slide 61 text

// Shop let shop = Shop() shop.name = "͏ͭΘγϣοϓ" // Product let product = Product() product.name = "࣫ృΓͷث" product.hashtags = ["ث", "࣫ృΓͷث"] // SKU let sku = SKU() sku.stock = 10 sku.price = 2000 sku.shop.set(shop) sku.product.set(product) shop.products.insert(product) product.shop.set(shop) product.skus.insert(sku) shop.save()

Slide 62

Slide 62 text

Orderable Order processing framework ɾࡏݿΛ֬ೝɺมߋ ɾܾࡁػೳͱ࿈ܞ ɾܾࡁཤྺͷ࡞੒Λอଘ ɾϦτϥΠ

Slide 63

Slide 63 text

ߴ଎ʹ։ൃͰ͖ͦ͏͡Όͳ͍Ͱ͔͢ʁ

Slide 64

Slide 64 text

։ൃΛߴ଎Խͨ͠ઌʹ ͨͩૣ͘࡞Δ͜ͱʹҙຯ͕͋Δͷ͔

Slide 65

Slide 65 text

։ൃ͕ߴ଎Խ͞ΕΔ͜ͱͰ େ୾ͳઓུΛऔΕΔΑ͏ʹͳΓ·͢ ɾෳ਺ճͷ࢓༷มߋʹ΋ରԠͰ͖Δ ɾΤϯδχΞ͕ফ໣͠ͳ͍ ɾίϛχϡέʔγϣϯίετ͕͔͔Βͳ͍ ɾͨ͘͞Μࢼ͢͜ͱ͕Ͱ͖Δ

Slide 66

Slide 66 text

։ൃ͕ߴ଎Խ͞ΕΔ͜ͱͰ େ୾ͳઓུΛऔΕΔΑ͏ʹͳΓ·͢ ɾෳ਺ճͷ࢓༷มߋʹ΋ରԠͰ͖Δ ɾΤϯδχΞ͕ফ໣͠ͳ͍ ɾίϛχϡέʔγϣϯίετ͕͔͔Βͳ͍ ɾͨ͘͞Μࢼ͢͜ͱ͕Ͱ͖Δ

Slide 67

Slide 67 text

։ൃ͕ߴ଎Խ͞ΕΔ͜ͱͰ େ୾ͳઓུΛऔΕΔΑ͏ʹͳΓ·͢ ɾෳ਺ճͷ࢓༷มߋʹ΋ରԠͰ͖Δ ɾΤϯδχΞ͕ফ໣͠ͳ͍ ɾίϛχϡέʔγϣϯίετ͕͔͔Βͳ͍ ɾͨ͘͞Μࢼ͢͜ͱ͕Ͱ͖Δ

Slide 68

Slide 68 text

։ൃ͕ߴ଎Խ͞ΕΔ͜ͱͰ େ୾ͳઓུΛऔΕΔΑ͏ʹͳΓ·͢ ɾෳ਺ճͷ࢓༷มߋʹ΋ରԠͰ͖Δ ɾΤϯδχΞ͕ফ໣͠ͳ͍ ɾίϛχϡέʔγϣϯίετ͕͔͔Βͳ͍ ɾͨ͘͞Μࢼ͢͜ͱ͕Ͱ͖Δ

Slide 69

Slide 69 text

։ൃ͕ߴ଎Խ͞ΕΔ͜ͱͰ ɾෳ਺ճͷ࢓༷มߋʹ΋ରԠͰ͖Δ ɾΤϯδχΞ͕ফ໣͠ͳ͍ ɾίϛχϡέʔγϣϯίετ͕͔͔Βͳ͍ ɾͨ͘͞Μࢼ͢͜ͱ͕Ͱ͖Δ େ୾ͳઓུΛऔΕΔΑ͏ʹͳΓ·͢

Slide 70

Slide 70 text

ࣄ࣮͸զʑͷதʹͳ͍

Slide 71

Slide 71 text

ͨ͘͞Μࢼ͢ ࢼͨ͠ճ਺෼αʔϏε͸੒௕͍ͯ͘͠

Slide 72

Slide 72 text

·ͱΊ

Slide 73

Slide 73 text

ࠓ೥ͷय़ϦϦʔε༧ఆ

Slide 74

Slide 74 text

FirebaseͰ։ൃ͞Ε͍ͯ·͢

Slide 75

Slide 75 text

ςΫϊϩδʔΛެ։͍ͯ͠·͢

Slide 76

Slide 76 text

৽αʔϏεΛߴ଎Ͱ։ൃ͍͖ͯ͠·͢ɻ

Slide 77

Slide 77 text

ಈ͖ग़ͨ͠ΫοΫύουͷ Ϗδωεʹ͝஫໨͍ͩ͘͞

Slide 78

Slide 78 text

Thank you.