Slide 1

Slide 1 text

ΞδϦςΟΛߴΊΔͨΊͷ 
 Ϛϧνςφϯτઃܭઓུ 2022/04/20 #SaaS.tech ϝμοϓגࣜձࣾ @satoshicano

Slide 2

Slide 2 text

@satoshicano(஥দ ૱ ● ϝμοϓגࣜձࣾ d ) 
 ● ϑϩϯτΤϯυόοΫΤϯυ྆ํ৮Γ·͢ ● খதن໛ͷ1+ΦʔφʔΛ΍ͬͯ·͢ ● ϚϧνςφϯτΛѻ͏4BB4ͷ։ൃ͸ݱ৬͕ ॳΊͯ ࣗݾ঺հ

Slide 3

Slide 3 text

ܦӦ͔ΒɺපӃΛม͑Δɻ පӃ͔ΒɺҩྍΛม͑Δɻ Vision ɿ ҩྍͷՄೳੑΛɺ ςΫϊϩδʔͰ։์͢Δɻ Missionɿ ձࣾ঺հ ϝμοϓגࣜձࣾ

Slide 4

Slide 4 text

පӃಛԽܕ$3. େපӃͷͨΊͷސ٬؅ཧγεςϜ 
 (ΫϦχοΫͳͲ͔Βͷ঺հΛଅਐ) foro CRM

Slide 5

Slide 5 text

঺հೖӃσʔλͷ෼ੳ #*ػೳ μογϡϘʔυ ࿈ܞઌͷϔϧενΣοΫ $4$3. ΞΫγϣϯ࣮ࢪɾ؅ཧ 4'"." ࿈ܞઌϚοϓ ࿈ܞઌ؅ཧ Ξϥʔτ ΞΫγϣϯ෼ੳ HTMLϝʔϧ Point foro CRM ͷಛ௃ ϫϯετοϓͰ࣮ݱ͢Δ ػೳϥΠϯφοϓ ͜Ε·ͰͷපӃ޲͚πʔϧʹ͸ͳ͔ͬͨ පӃͷΦϖϨʔγϣϯʹಛԽͨ͠පӃͷ ҩࢣ৬һ͕࢖͍΍͍͢ػೳΛ౥ࡌ͠ɺ࿈ ܞ׆ಈʹॏཁͳ෼ੳ؅ཧڞ༗ػೳΛϫ ϯετοϓͰఏڙ͠·͢ɻ 02.

Slide 6

Slide 6 text

஍Ҭ࿈ܞΛ࣠ʹපӃܦӦʹ͓͚Δ͋ΒΏΔΦϖϨʔγϣϯͷ%9Λ࣮ݱ ࿈ܞઌ$3. ਓࡐ؅ཧ පচखज़ࣨ؅ཧ ձܭ؅ཧ ױऀ؅ཧ ஍Ҭ࿈ܞ ऩӹ෼ੳ#* ঺հঢ়؅ཧ Web༧໿ ࿈ܞઌ 
 ίϛϡχέʔγϣϯ ޙํ࿈ܞ Strategy ࣄۀ্ཱͪ͛ઓུ

Slide 7

Slide 7 text

foro CRMͷγεςϜߏ੒ foro-crm-api ● γεςϜߏ੒ 
 ○ όοΫΤϯυ ■ Ruby on Rails ■ MySQL/Redis ■ GCP(GAE) ○ ϑϩϯτΤϯυ 41" ■ React.js/TypeScript ■ Next.js ● Ϛϧνςφϯτͷ࣮ݱ 
 ○ Apartment gemΛར༻ foro-crm-spa Ϣʔβʔ ࣾ಺ͷผαʔϏε

Slide 8

Slide 8 text

ϚϧνϓϩμΫτઓུ ܦӦઓུ ϚϧνϓϩμΫτઓུ ্ɺ୹ظؒͰૉૣ͘ϓϩμ ΫτΛ্ཱ͍ͪ͛ͯ͘͜ͱ͕։ൃ૊৫ʹٻΊΒΕ͍ͯΔ ։ൃ૊৫͕֦େͯ͠΋ɺܧଓతʹՁ஋ΛఏڙͰ͖Δ૊৫࢓૊ΈΛ૑Γ͍ͨ

Slide 9

Slide 9 text

ݱঢ়ͷ՝୊ DBϚΠάϨʔγϣϯʹ͕͔͔࣌ؒΔ ● ಋೖςφϯτ਺ͷ૿ՃʹԠͯ͡ɺϚΠάϨʔγϣϯ͕࣌ؒ৳ͼ͍ͯ͘ݒ೦͕͋Δ ● ೔தͷσϓϩΠ͕ͮ͠Β͘ͳΔ ϚϧνςφϯτԽͯ͠Δ͕ނʹɺબ୒Ͱ͖Δٕज़ͷ෯͕ڱ·͍ͬͯΔ ● ࢀরͰ͖Δ஌ݟ͕ݶΒΕ͍ͯΔ ● ϚϧνςφϯτʹରԠ͍ͯ͠ΔϥΠϒϥϦͷগͳ͞ ٕज़ͷෳࡶੑ͕૿͢ ● ΩϟονΞοϓίετ ϚϧνςφϯτԽ͢΂͖΋ͷͱɺϚϧνςφϯτԽ͠ͳͯ͘Α͍΋ͷʹΘ͚Δ͜ͱͰ 
 ͜ΕΒͷ՝୊ͷӨڹൣғΛݶఆԽ͍ͨ͠ ہॴԽ͍ͨ͠

Slide 10

Slide 10 text

ཧ૝ XXXαʔϏε ঺հɾೖӃαʔϏε ● ϚϧνςφϯτͷہॴԽͷํ਑ ○ ঺հɾೖӃσʔλपΓΛηΩϡΞʹอ͍ͪͨ ○ ↑Ҏ֎ͷσʔλΛ୤ϚϧνςφϯτԽ͢Δ ● ࠷ऴతʹαʔϏεͱͯ͠GPSP CRMຊମ͔Β෼ׂ ○ foro CRMຊମͷऔΕΔٕज़ͷ෯͕޿͕Δ 
 ݱঢ় ཧ૝ foro-crm-api foro-crm-api

Slide 11

Slide 11 text

ϚϧνςφϯτͷہॴԽ ςφϯτ%#ˠύϒϦοΫ%#ͷσʔλҠߦ ● Ҡߦର৅ͷςʔϒϧʹUFOBOU@JEΧϥϜΛ෇ ༩͢Δ͜ͱͰςφϯτΛ۠ผ͢Δ ● ʮ঺հɾೖӃʯσʔλʹؔΘΔσʔλΛς φϯτ%#ʹ࢒ͭͭ͠ɺͦΕҎ֎ͷσʔλΛ ͢΂ͯύϒϦοΫ%#ʹҠߦ ΞϓϦέʔγϣϯ΋%#ʹ߹Θͤͯվम ● ύϒϦοΫ%#͔Βࢀর͢ΔΑ͏ʹमਖ਼ 
 ύϒϦοΫ%# ςφϯτ%# ςφϯτΛލ͍Ͱѻ͍͍ͨ ςʔϒϧ ςφϯτຖʹѻ͍ͬͯΔ 
 ςʔϒϧ ςφϯτΛލ͍Ͱѻ͍͍ͨ ςʔϒϧ 
 ςφϯτຖͷʮ঺հɾೖӃʯ Ҏ֎ͷςʔϒϧ ςφϯτΛލ͍Ͱѻ͍͍ͨ ςʔϒϧ 
 ςφϯτຖͷ 
 ঺հɾೖӃςʔϒϧ

Slide 12

Slide 12 text

ؾΛ͚ͭͨϙΠϯτ ● Primary Keyͷিಥ ● σʔλ࿙Ӯͷ๷͗ํ

Slide 13

Slide 13 text

ؾΛ͚ͭͨϙΠϯτ Primary Keyͷিಥ ● Primary Keyͷিಥ ○ ςφϯτ%#ͷ֤ςʔϒϧͷ1SJNBSZ Key ʹ͸Auto IncrementΛ࠾༻͍ͯͨ͠ҝɺύ ϒϦοΫDBʹͦͷ··Πϯαʔτ͢Δͱ ID͕িಥͯ͠͠·͏ ● ৽͘͠࠾൪͠௚͢͜ͱ΋ݕ౼͕ͨ͠ɺ͋·Γෳ ࡶͳΦϖϨʔγϣϯΛ΍Γͨ͘ͳ͔ͬͨ ↓ ● طଘσʔλͷ*%ʹରͯ͠ςφϯτຖʹ UFOBOU@JEʹ Λ͔͚ͨ஋Λ଍ͯ͠ id name … 1 foo 2 bar id nam e … 1 xxx 2 yyy tenant_db_1 tenant_db_2 public_db id tenant_id name … 100,001 1 foo 100,002 1 bar 200,001 2 xxx 200,002 2 yyy

Slide 14

Slide 14 text

ؾΛ͚ͭͨϙΠϯτ σʔλ࿙Ӯͷ๷͗ํ ● ύϒϦοΫ%#಺ͰશςφϯτͷσʔλΛ࣋ͭͨ Ίɺςφϯτؒͷσʔλ࿙ӮϦεΫ͕͋Δ ● PostgreSQLͰ͋Ε͹ Row Level SecurityͳͲͰ σʔλ࿙ӮΛ๷͙͜ͱ͕Ͱ͖Δ ↓ ● ہॴԽޙ͸ɺUFOBOU@JEͰඞͣߜΓࠐΉඞཁ͕ ͋Δ͜ͱΛ։ൃνʔϜ಺Ͱೝࣝ߹ΘͤΛߦͬͨ

Slide 15

Slide 15 text

࣮ࡍʹہॴԽΛߦͬͯͭΒ͔ͬͨͱ͜Ζ ● ֎෦αʔϏε͔Βͷ༧ظ͠ͳ͍ґଘ ● JSONܕͷσʔλͷߋ৽ ● ਺ճʹΘ͚ͯͷσʔλϚΠάϨʔγϣϯ

Slide 16

Slide 16 text

ͭΒ͔ͬͨͱ͜Ζ ֎෦αʔϏε͔Βͷґଘ ● ϝʔϧͷ։෧ΫϦοΫΠϕϯτΛ֎෦αʔϏε 4FOE(SJE ͔ΒͷXFCIPPLϦΫΤετͱͯ͠ ड͚औ͍ͬͯͨ ● ࣮͸XFCIPPLϦΫΤετͷத਎ʹ*%Λ࢖͍ͬͯ ͨ͜ͱ͕ޙ͔Β൑໌ ○ σʔλҠߦલʹૹ৴͞ΕͨϝʔϧͷΠϕϯ τΛܭଌͰ͖ͳ͍ঢ়ଶʹͳͬͯ͠·ͬͨ ↓ 
 ● IDͷنଇੑΛݩʹσʔλҠߦલʹૹ৴͞Εͨ ϝʔϧͷΠϕϯτΛܭଌͰ͖ΔΑ͏ʹϩδοΫ Λվम webhook͔Β։෧ɾΫϦοΫΠϕϯτΛड ͚औΓDBʹอଘ foro-crm-api

Slide 17

Slide 17 text

ͭΒ͔ͬͨͱ͜Ζ JSONܕͷΧϥϜͷมߋ ● JSONܕͷΧϥϜ಺ʹ΋Ҡߦର৅ͷςʔϒϧͷ ID͕อଘ͞Ε͍ͯͨ ● ౰વ͕ͩɺ+40/ܕͷத਎ʹ͸֎෦Ωʔ੍໿͕ ޮ͔ͳ͍ͷͰͪΐͬͱා͍ ● աڈʹૠೖ͞Εͨෆਖ਼ͳσʔλ͕͋Δ ○ ॻ͖ํʹΑͬͯ͸3VCZ͕ҙਤ͠ͳ͍஋ʹ Ωϟετͯ͠͠·͏৔߹͕͋ΔͷͰ஫ҙ͕ ඞཁͩͬͨ id content … 1 {“email_id”: 1} … 2 {“email_id”: “xxx”} … 3 {“email_id”: 3} … ਺஋͕ೖ͍ͬͯΔ΂͖߲໨ʹͳ͔ͥจࣈ ྻ͕ೖ͍ͬͯͨ

Slide 18

Slide 18 text

ͭΒ͔ͬͨͱ͜Ζ ਺ճʹΘ͚ͯͷσʔλϚΠάϨʔγϣϯ ● ౰વ͕ͩɺҰ౓ʹશςʔϒϧΛҠߦ͢Δͷ͸ϦεΫ΋େ͖͍ͨΊɺ͋Δఔ౓ͷখ͍͞մͷ୯ҐͰҠߦΛ ࣮ࢪ ● ӨڹൣғΛݶఆͰ͖͕ͨɺ 
 ΄΅ຖिϝϯςφϯεظؒΛઃ͚ͯσʔλϚΠάϨʔγϣϯΛߦ͏ͷ͕େมͩͬͨ ● ݁ՌɺճʹΘ͚ͯσʔλϚΠάϨʔγϣϯΛ࣮ࢪ ○ ໿ϲ݄͔͚࣮ͯࢪ

Slide 19

Slide 19 text

·ͱΊ(Ϛϧνςφϯτઃܭͷצॴ) ● ։ൃΞδϦςΟΛอͭͨΊʹϚϧνςφϯτͷہॴԽΛߦͬͨ ● Ϛϧνςφϯτઃܭͷצॴ ○ Ϣʔβʔ਺ͷ૿Ճʹ൐ͬͯɺ։ൃΞδϦςΟ͕Լ͕ͬͯ͠·͏ͷ͸ྑ͘ͳ͍ઃܭ ͱ͍͑ΔͷͰ͸ͳ͍͔ 
 ○ Ϛϧνςφϯτʹ͢΂͖ͱ͜Ζ͚ͩہॴԽͨ͠΄͏͕͍͍ ■ ηΩϡΞʹ࢓্͛Δͱ͜Ζͱɺ։ൃΞδϦςΟΛอ͍ͪͨͱ͜Ζ ○ σʔλྔ΍σʔλϕʔε਺͕૿͑ΔͱɺҠߦίετ΋૿͑ΔͷͰυϝΠϯڥք͕ ݟ͑ͨλΠϛϯάͰૣΊʹରԠ͢Δͷ͕ϕετ