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

はじめてのB2B SaaSデータモデリング in Builderscon 2019

はじめてのB2B SaaSデータモデリング in Builderscon 2019

sasaki nobuya

August 30, 2019
Tweet

More Decks by sasaki nobuya

Other Decks in Programming

Transcript

  1. ͸͡Ίͯͷ B2B SaaS σʔλϞσϦϯά
    ʙ Builderscon2019 ʙ
    A1Aגࣜձࣾ
    ࠤʑ໦ Ԇ໵ @__mnc90
    1

    View Slide

  2. Name ࠤʑ໦ Ԇ໵
    Company A1Aגࣜձࣾ (ΤΠϫϯΤΠ)
    Career ৯΂ϩά → Speee → A1AΛڞಉ૑ۀ
    URL twitter.com/__mnc90
    manchose.hatenablog.jp
    About CTOͱͯ͠RFQΫϥ΢υͷσʔλϕʔεઃ
    ܭͱΠϯϑϥߏஙɺ૊৫ͮ͘ΓͳͲΛ୲౰
    !2

    View Slide

  3. B2BͷऔҾΛϫϯϥϯΫ্ʹ
    Vision
    !3

    View Slide

  4. B2BͷऔҾΛϫϯϥϯΫ্ʹ
    Vision
    A1A ʢ໊ࣾͷ༝དྷʣ
    !4

    View Slide

  5. ϓϨϛΞϦʔάͷڧ߽τοςφϜɾϗοτεύʔFCͷڳεϙϯαʔ
    !5

    View Slide

  6. ϓϨϛΞϦʔάͷڧ߽τοςφϜɾϗοτεύʔFCͷڳεϙϯαʔ
    ฐࣾ͡Ό͋Γ·ͤΜ
    !6

    View Slide

  7. A1A͸ΤΟϫϯψΤΟͰ͢
    AIA τοςφϜͷڳεϙϯαʔΛ͍ͯ͠Δ߳ߓͷอݥձࣾɻ
    ΤΠΞΠΤΠ
    A1A B2BΛϫϯϥϯΫ্ʹ͋͛ΔA1Aɻ
    ΤΟϫϯψΤΟ
    !7

    View Slide

  8. ελʔτΞοϓ͸೉͍͠
    !8

    View Slide

  9. 1. ͓͕ۚͳ͍
    ※3௶ͷΦϑΟεʹແཧ΍Γ6ਓͰೖΖ͏ͱͨ͠ͱ͖ͷγϡϛϨʔγϣϯ
    ஫ҙ) 60௶ͷΦϑΟεʹ11݄͔ΒҠస͠·͢
    !9

    View Slide

  10. 2. Α͘ᎍΊΔ
    ᎍΊ͍ͯΔ࠷தͷϦΞϧͳձ࿩ʢ૑ۀ౰࣌ʣ
    ஫ҙ) ࠓ͸ඇৗʹ݈શͰ͢
    !10

    View Slide

  11. 3. ଞʹ΋͍Ζ͍Ζ͋Δ
    1 ɹ՝୊͕ຊ౰ʹ͋Δ͔ͷݕূ͕ඞཁ
    2 ɹϓϩμΫτͰ՝୊ΛղܾͰ͖Δ͔ͷݕূ͕ඞཁ
    3 ɹਓख͕଍ΒͣΤϯδχΞ͕࢓༷΋٧ΊΔඞཁ͕͋Δ
    ɾ
    ɾ
    ɾ
    !11

    View Slide

  12. ࢿۚɾ࣌ؒͳͲͷଟ͘ͷ੍໿ͷ্Ͱ
    γεςϜΛ։ൃ͢Δඞཁ͕͋Δɻ
    ΍ͬͨ΄͏͕Α͍͜ͱͳΜͯ
    ΄ͱΜͲͰ͖ͳ͍ͱ֮ޛ͢Δɻ
    ελʔτΞοϓͷγεςϜ։ൃ
    !12

    View Slide

  13. ࠷΋ϨόϨοδͷޮ͘ϙΠϯτ
    ෆՄٯͳҙࢥܾఆʹ஫ྗ͢Δ
    ͡Ό͋Ͳ͜ʹ஫ྗ͢Δ͔
    !13

    View Slide

  14. ΍ͬͨ΄͏͕ྑͦ͞͏ͳ͜ͱ
    TDD
    E2E
    GraphQL
    React
    TypeScript
    Serverless
    Kubernetes
    GitOps
    Design
    System
    Atomic
    Design
    DDD
    σʔλ
    ϞσϦϯά
    !14

    View Slide

  15. ΍ͬͨ΄͏͕ྑͦ͞͏ͳ͜ͱ
    TDD
    E2E
    GraphQL
    React
    TypeScript
    Serverless
    Kubernetes
    GitOps
    Design
    System
    Atomic
    Design
    DDD
    σʔλ
    ϞσϦϯά
    ஫ҙ) σʔλϞσϦϯάҎ֎΍͍ͬͯͳ͍Θ͚Ͱ͸ͳ͍Ͱ͢
    !15

    View Slide

  16. “DBͷण໋͸ΞϓϦέʔγϣϯΑΓ௕͍”
    @soudai1025 ͞Μ
    DBͷॏཁੑ
    !16

    View Slide

  17. ෳ਺ճʹ෼͚ͨσʔλҠߦͳͲ
    σʔλϕʔε͸ϦϑΝΫλϦϯά͕ͮ͠Β͍
    DBͷॏཁੑ
    !17

    View Slide

  18. ΞϓϦέʔγϣϯͷઃܭ͸
    σʔλϕʔεͷઃܭʹҾ͖ͮΒΕΔɻ
    ج൫ͱͳΔσʔλϕʔεͷઃܭ͕ྑ͘ͳ͍ͱ
    ΞϓϦέʔγϣϯͷઃܭʹ΋ແཧ͕ੜ͡Δɻ
    DBͷॏཁੑ
    !18

    View Slide

  19. Horizontal SaaS
    ৬छɾػೳʹಛԽͨ͠SaaSɻSalesforce΍SmartHR
    ͳͲɺۀքΛ໰Θͣಉ͡৬छͰ͋Ε͹ར༻Ͱ͖ΔΑ͏ʹ
    ઃܭ͞ΕͨSaaS
    Vertical SaaS
    ۀքಛԽܕͷSaaSɻoctʢݐઃϓϩδΣΫτ؅ཧ
    SaaSʣ΍MusubiʢిࢠༀྺγεςϜͷSaaSʣͳͲɺ
    ಛఆͷۀքͰͷ࢖༻Λ૝ఆͨ͠SaaSɻ
    Horizontal SaaSͱVertical SaaS
    !19

    View Slide

  20. Vertical SaaS͸ۀքಛԽͰ͋ΔͨΊ
    Horizontal SaaSΑΓ͞Βʹਂ͍υϝΠϯ஌͕ࣝඞཁ
    σʔλϞσϦϯάͷॏཁੑ
    !20

    View Slide

  21. ੡଄ۀߪങ޲͚ݟੵࠪఆSaaS RFQΫϥ΢υΛجʹ
    ෳࡶͳυϝΠϯͷσʔλϞσϦϯάํ๏ͱɺ
    ϏδωεՁ஋ʹ௚݁͢Δઃܭํ๏Λઆ໌͠·͢ɻ
    ͜Ε͔Β࿩͢͜ͱ
    !21

    View Slide

  22. Agenda
    !22
    1 B2B SaaSͷσʔλϞσϦϯάͷਐΊํ
    2 [൪֎ฤ] υϝΠϯΤΩεύʔτͱ͏·͘΍ΔͨΊʹ
    3 [൪֎ฤ] υϝΠϯΛਂງ͢Δͱ͖ͷ஫ҙ఺

    View Slide

  23. B2B SaaSͷσʔλϞσϦϯάͷਐΊํ
    !23

    View Slide

  24. !24
    ੡଄ۀߪങ޲͚ݟੵࠪఆSaaS
    RFQΫϥ΢υ
    Product

    View Slide

  25. !25
    ϓϩμΫτ֓ཁ

    View Slide

  26. Topic
    !26

    View Slide

  27. 1 Multi Tenancyͳςʔϒϧઃܭ
    2 Ͱ͖Δ͚ͩNullΛڐՄ͠ͳ͍
    3 ΠϕϯτΛநग़͢Δ
    4 ֎෦Ωʔͷ࣋ͪํ͔ΒσʔλͷϥΠϑαΠΫϧΛߟ͑Δ
    !27

    View Slide

  28. 1. Multi Tenancyͳςʔϒϧઃܭ
    !28

    View Slide

  29. “ಉ͡γεςϜ΍αʔϏεΛෳ਺ͷޓ͍ʹແؔ܎ͳར༻
    ऀ͕ؒڞಉͰར༻͢ΔํࣜͰɺͦΕͧΕͷར༻ऀ͸Ξ
    Χ΢ϯτ໊ͳͲͷࢿ֨৘ใΛݩʹ۠ผ͞ΕɺͦΕͧΕ
    γεςϜ্ʹઐ༻ͷྖҬ΍ઃఆͳͲ͕༩͑ΒΕΔɻ”
    Multi Tenancyͱ͸
    ग़ల e-words.jp/w/Ϛϧνςφϯτ.html
    !29

    View Slide

  30. ར༻اۀ͔ΒݟΔͱ͕ࣗࣾγεςϜΛ
    ઐ༗ͯ͠ར༻͍ͯ͠ΔΑ͏ʹݟ͑Δɻ
    ࣮ࡍ͸ෳ਺ͷاۀʢςφϯτʣ͕
    1ͭͷγεςϜʹ૬৐Γ͍ͯ͠Δɻ
    !30
    Multi Tenancyͱ͸

    View Slide

  31. Single Tenancy
    !31
    Web
    DB
    Web
    DB
    ςφϯτA ςφϯτB
    ֤ࣾʢAɾBʣͦΕͧΕಠཱͨ͠ઐ༻ͷΠϯϑϥΛߏங

    B޲͚ͷγεςϜʹ͸͜ͷܗଶ͕ࠓ·Ͱଟ͔ͬͨ
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  32. Multi Tenancy
    !32
    Web
    DB
    ςφϯτA ςφϯτB
    ֤ࣾʢAɾBʣWebɾDBαʔόʔΛڞ༗ͯ͠ར༻͢Δ
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  33. Multi Tenancyͷ࣮ݱํ๏
    1 ςφϯτຖʹDatabase or SchemaΛ෼཭
    2 શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ
    !33

    View Slide

  34. Multi Tenancyͷ࣮ݱํ๏
    1 ςφϯτຖʹDatabase or SchemaΛ෼཭
    2 શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ
    SmartHR͞ΜͷൃදͰ
    migration࣌ؒͷര૿ͳͲ
    εέʔϥϏϦςΟʹ໰୊͕͋Δͱ
    !34

    View Slide

  35. (΄΅)શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ͢ΔMulti Tenancyͷ࣮ݱํ๏
    !35
    Tenants
    Quotations
    Aגࣜձࣾ
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢
    https://a-inc.a1a.com
    Users
    ᶃ subdomainΛجʹTenantsςʔ
    ϒϧͷIDΛಛఆ
    ᶄ ಉҰϦΫΤετத͸શςʔϒϧ΁
    ͷΫΤϦͷWHERE۟ʹऔಘͨ͠
    tenant_idͰͷߜΓࠐΈ͕ઃఆ͞ΕΔ



    View Slide

  36. Multi TenancyͷϝϦοτ
    !36
    1 σʔλ࿙ӮͷϦεΫ͕ݮΔɻςφϯτຖʹσʔλྖҬ
    Λ۠੾Δ͜ͱͰɺΞϓϦέʔγϣϯ։ൃऀ͕ςφϯτ
    Λҙࣝ͢Δඞཁ͕ͳ͘ͳΔɻ
    2 ސ٬اۀͷηΩϡϦςΟνΣοΫϦετΛಥഁ͠΍͢
    ͍ɻ

    View Slide

  37. ςφϯτؒͷ௨৴͕͋ΔMulti Tenancy
    !37

    View Slide

  38. RFQΫϥ΢υͰ͸ݟੵͷतड͕ൃੜ͢Δ
    !38
    Buyer Supplier
    RFQ
    (ݟੵґཔ)
    ݟੵճ౴

    View Slide

  39. ςφϯτ͸ͳʹ୯ҐͰ࡞੒͢Δʁ
    !39

    View Slide

  40. 1. όΠϠʔ୯ҐͰςφϯτΛ࡞੒͢Δ
    tenant_id: 1 tenant_id: 2 tenant_id: 3
    όΠϠʔA όΠϠʔB όΠϠʔC
    αϓϥΠϠD αϓϥΠϠE αϓϥΠϠD αϓϥΠϠG αϓϥΠϠF
    αϓϥΠϠF αϓϥΠϠH
    !40
    αϓϥΠϠʔ͸όΠϠʔͷςφϯτʹॴଐ͢Δ

    View Slide

  41. 2. αϓϥΠϠʔ΋όΠϠʔ΋ผςφϯτʹ͢Δ
    όΠϠʔA όΠϠʔB όΠϠʔC
    αϓϥΠϠF
    tenant_id: 1 tenant_id: 2 tenant_id: 3
    tenant_id: 4 tenant_id: 5 tenant_id: 6
    αϓϥΠϠD αϓϥΠϠE
    !41

    View Slide

  42. 1. σʔλͷॴ༗ऀ͔Βςφϯτͷ୯ҐΛߟ͑Δ
    !42

    View Slide

  43. B2B SaaSͰΑ͋͘Δཁ๬
    ୀձޙͷσʔλͷ෺ཧ࡟আ
    !43

    View Slide

  44. όΠϠʔ͕ղ໿ͨ͠ͱ͖αϓϥΠϠʔ͕ड৴ͨ͠ݟੵґཔ৘ใ͸࡟আ͢Δ΂͖ʁ
    ϝʔϧΛϝλϑΝʔͱͯ͠ߟ͑Δɻ
    ૹ৴ऀ͕ղ໿ͯ͠΋ɺड৴ऀͷ
    ϝʔϧϘοΫεʹ͸ϝʔϧ͕࢒Δɻ
    ୀձޙ΋αϓϥΠϠʔ͕ड৴ͨ͠
    ݟੵґཔ৘ใ͸࢒ͬͯཉ͍͠͸ͣɻ
    !44

    View Slide

  45. 2. Ϗδωενϟϯε͔Βςφϯτͷ୯ҐΛߟ͑Δ
    !45

    View Slide

  46. ಋೖͨ͠όΠϠʔ͕࿈Ε͖ͯͯ͘ΕΔαϓϥΠϠʔͱ͍͏ࢿ࢈
    !46
    όΠϠʔ
    αϓϥΠϠʔ
    αϓϥΠϠʔ
    αϓϥΠϠʔ
    αϓϥΠϠʔ αϓϥΠϠʔ
    όΠϠʔ͸ݟੵͷ΍ΓͱΓΛ͢ΔαϓϥΠϠʔͱ
    RFQΫϥ΢υΛ࢖༻͢ΔɻࣗಈతʹαϓϥΠϠʔ
    ͷΞΧ΢ϯτʢແྉʣ͕ൃߦ͞ΕΔ͜ͱʹͳΔɻ
    ࠓޙ͸͜ͷαϓϥΠϠʔʹ΋Ձ஋Λఏڙ͍ͯ͘͠
    ͜ͱͰϏδωε֦େͷՄೳੑ͕͋Δɻ
    ଟ͍ͱ͖͸਺ઍࣾ࿈Ε͖ͯͯ͘ΕΔ

    View Slide

  47. αϓϥΠϠʔʹՁ஋Λఏڙ͢ΔͨΊʹ͸ʁ
    !47
    ҟͳΔόΠϠʔͱ΍ΓऔΓ͢Δ৔߹Ͱ΋
    ಉ͡ΞΧ΢ϯτͰ΍ΓऔΓ͍ͨ͠ɻ
    όΠϠʔຖʹΞΧ΢ϯτΛൃߦ͢Δͱ
    αʔϏεମݧ͕ѱԽ͢Δɻ

    View Slide

  48. ςφϯτͷ୯Ґ
    1 αϓϥΠϠʔ͸όΠϠʔͷςφϯτʹॴଐ͢Δ
    2 αϓϥΠϠʔ΋όΠϠʔ΋ผςφϯτʹ͢Δ
    !48

    View Slide

  49. ςφϯτͷ୯Ґ
    1 αϓϥΠϠʔ͸όΠϠʔͷςφϯτʹॴଐ͢Δ
    2 αϓϥΠϠʔ΋όΠϠʔ΋ผςφϯτʹ͢Δ
    !49
    ͪ͜ΒΛ࠾༻

    View Slide

  50. 1 όΠϠʔͷୀձޙͷσʔλ࡟আͷରԠΛόΠϠʔςφϯτ
    ͷ࡟আͷΈͰ׬ྃ͢Δ
    2 اۀຖʹݸผͷΞΧ΢ϯτ؅ཧϙϦγʔΛద༻Ͱ͖Δ
    ※اۀຖʹϙϦγʔ͕ҟͳΔ͜ͱ͕ଟ͍
    3 αϓϥΠϠʔςφϯτ͕ॏෳ͠ͳ͍ͨΊαϓϥΠϠʔʹͱ
    ͬͯ΋σʔλͷҰݩ؅ཧ͕Ͱ͖Δͱ͍͏ϝϦοτΛఏڙͰ
    ͖Δ
    όΠϠʔɾαϓϥΠϠʔͰςφϯτΛผʹ͢ΔϝϦοτ
    !50

    View Slide

  51. RFQΫϥ΢υͰͷྫ
    ݟੵґཔʹରͯ͠ݟੵճ౴Λߦ͏
    !51

    View Slide

  52. accounts
    ID name tenant_id role
    1 ࠤʑ໦ 1 όΠϠʔ
    2 দຊ 1 αϓϥΠϠʔ
    3 ਅน 2 όΠϠʔ
    4 ๺໺ 2 αϓϥΠϠʔ
    1. όΠϠʔςφϯτʹαϓϥΠϠʔΞΧ΢ϯτ͕ॴଐ͢Δઃܭͷ৔߹
    !52
    ID name
    1 ձࣾA
    2 ձࣾB
    tenants
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  53. request_for_quotations(ݟੵґཔ)
    ID produce_number tenant_id sender_account_id receiver_account_id
    1 300 1 1 2
    2 60 2 3 4
    3 1200 1 1 2
    ID unit_price request_for_quotation_id tenant_id reply_account_id
    1 100 1 1 2
    2 90 2 2 4
    quotations(ݟੵճ౴)
    1. όΠϠʔςφϯτʹαϓϥΠϠʔΞΧ΢ϯτ͕ॴଐ͢Δઃܭͷ৔߹
    !53 ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  54. accounts
    ID name tenant_id
    1 ࠤʑ໦ 1
    2 দຊ 2
    3 ਅน 3
    2. όΠϠʔͱαϓϥΠϠʔʹͦΕͧΕಠཱͨ͠ςφϯτΛ࡞੒͢Δ৔߹
    !54
    ID name role
    1 ձࣾA όΠϠʔ
    2 ձࣾB αϓϥΠϠʔ
    3 ձࣾC όΠϠʔ
    tenants
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  55. request_for_quotations(ݟੵґཔ)
    ID produce_number tenant_id
    1 300 1
    2 60 3
    ID unit_price received_request_for_quotation_id tenant_id
    1 100 1 2
    2 90 2 2
    quotations(ݟੵճ౴)
    2. όΠϠʔͱαϓϥΠϠʔʹͦΕͧΕಠཱͨ͠ςφϯτΛ࡞੒͢Δ৔߹
    ID produce_number tenant_id
    1 300 2
    2 60 2
    received_request_for_quotations(डྖݟੵґཔ)
    ID unit_price request_for_quotation_id tenant_id
    1 100 1 1
    2 90 2 3
    received_quotations(डྖݟੵճ౴)
    !55
    ஫ҙ) ෼͔Γ΍͢͞Λॏࢹ͠ɺਖ਼֬ੑ͸͍͍ܽͯ·͢

    View Slide

  56. ςφϯτؒͷσʔλͷ΍ΓͱΓ
    ςφϯτΛ·͙ͨσʔλͷ΍ΓͱΓ͸
    σʔλΛίϐʔͯ͠ड͚౉͢͠Δɻ
    !56

    View Slide

  57. 2. Ͱ͖Δ͚ͩNULLΛڐՄ͠ͳ͍
    !57

    View Slide

  58. NullableͳΧϥϜ͕͋Δ৔߹
    ϥΠϑαΠΫϧͷҟͳΔσʔλ͕
    ಉ͡ςʔϒϧʹೖ͍ͬͯΔ͜ͱ͕ଟ͍
    NULLΛڐՄ͠ͳ͍ཧ༝
    !58

    View Slide

  59. RFQΫϥ΢υͰͷྫ
    !59

    View Slide

  60. materials
    ID name code
    1 ϒϥέοτ 391001
    2 εϥΠυϘοΫε NULL
    3 ݻఆۚ۩ 369221
    !60
    codeΧϥϜʹ͸NULL͕ೖΓ͏Δɻ

    View Slide

  61. materials
    ID name
    1 ϒϥέοτ
    2 εϥΠυϘοΫε
    3 ݻఆۚ۩
    ID material_id code
    1 1 391001
    2 3 369221
    material_codes
    ͱΓ͋͑ͣNULL͸ແ͘ͳͬͨʂ
    Ͱ΋ɺ͜ΕͰ͍͍ͷ͔ʁ
    !61

    View Slide

  62. ͳͥNULLؚ͕·ΕΔͷͩΖ͏
    !62

    View Slide

  63. 1 material_codeΛͦ΋ͦ΋؅ཧ͍ͯ͠ͳ͍اۀ͕͋Δ
    2 ࢼ࡞඼ͷஈ֊Ͱ͸material_codeΛൃ൪ͤͣʹݟੵґཔ
    Λߦ͍ɺίετͷ֓ࢉΛ֬ೝ͔ͯ͠ΒcodeΛൃ൪͢Δͱ
    ͍͏ۀ຿ϑϩʔ͕͋Δ
    !63

    View Slide

  64. 1 material_codeΛͦ΋ͦ΋؅ཧ͍ͯ͠ͳ͍اۀ͕͋Δ
    2 ࢼ࡞඼ͷஈ֊Ͱ͸material_codeΛൃ൪ͤͣʹݟੵґཔ
    Λߦ͍ɺίετͷ֓ࢉΛ֬ೝ͔ͯ͠ΒcodeΛൃ൪͢Δͱ
    ͍͏ۀ຿ϑϩʔ͕͋Δ
    ࢼ࡞඼ͷݟੵґཔۀ຿ͱ͍͏Ϣʔεέʔε͕ͬͦ͝Γൈ͚͍ͯΔ
    !64

    View Slide

  65. materials
    ID name
    1 ϒϥέοτ
    2 εϥΠυϘοΫε
    3 ݻఆۚ۩
    ID material_id code
    1 1 391001
    2 3 369221
    production_materials
    prototype_materials
    ID material_id
    1 2
    !65

    View Slide

  66. ֓೦͕ҟͳΔΤϯςΟςΟ͸ผΤϯςΟςΟʹ͢Δ
    !66
    ݱঢ়͸ಉ͡ϑΟʔϧυΛ͍࣋ͬͯͯ΋ຊདྷ֓
    ೦͕ҟͳΔΤϯςΟςΟͰ͋Ε͹ผΤϯςΟ
    ςΟʹ͢Δ΂͖ɻ
    ͞΋ͳ͍ͱϓϩμΫτͷਐԽʹ൐͍ͦΕͧΕ
    ͷΤϯςΟςΟʹඞཁͳΧϥϜ͕௥Ճ͞Ε
    NullableΧϥϜ͕Ͱ͖͕͋Δ͜ͱʹͳΔɻ

    View Slide

  67. Nullable͸ΤϯςΟςΟΛࠞಉ͍ͯ͠Δष͍
    !67

    View Slide

  68. 3. ΠϕϯτΛநग़͢Δ
    !68

    View Slide

  69. ΤϯςΟςΟʹ͸ϦιʔεͱΠϕϯτ͕͋Δɻ
    ϦιʔεͱΠϕϯτ
    !69

    View Slide

  70. ΤϯςΟςΟ໊+೔ͱݺΜͰҧ࿨ײͷͳ͍Τ
    ϯςΟςΟ͸Πϕϯτɻ
    Πϕϯτ
    !70

    View Slide

  71. ݟੵґཔͱ͔ݟੵճ౴ͱ͔ൃ஫ͱ͔
    Example
    !71

    View Slide

  72. Πϕϯτ͸ۀ຿ͷه࿥Ͱ͋Γɺ
    B2BγεςϜͷத৺తଘࡏɻ

    Πϕϯτ(ۀ຿)Λه࿥͢Δ͜ͱ͕
    B2BγεςϜͷ໾ׂͱ΋ݴ͑Δɻ
    Πϕϯτ
    !72

    View Slide

  73. ͦͷͨΊɺΠϕϯτ͸Πϛϡʔλϒϧͳσʔ
    λͱͯ͠ѻ͏΂͖ɻ
    ΠϛϡʔλϒϧσʔλϞσϧ
    !73
    ※͜ͷ͋ͨΓ͸ @kawasima ͞Μͷࢿྉ΍
    ʮָʑERDϨοεϯ ʯ͕͍͢͝ษڧʹͳΓ·͢

    View Slide

  74. Πϕϯτ͕ಈࢺͳͷʹର͠Ϧιʔε͸໊ࢺɻ
    Ϧιʔεͷߋ৽ॲཧΛΠϕϯτͱͯ͠நग़͢
    Δ͜ͱ͕Մೳɻ
    Ϧιʔε
    !74

    View Slide

  75. ͋ΒΏΔϦιʔεʹର͢Δߋ৽ΛΠϕϯτͱ
    ͯ͠நग़͢Δͱ࣮૷ίετ͕ߴ͘ͳΔɻ
    ղܾ͍ͨ͠υϝΠϯͷத৺ʹҐஔ͢Δۀ຿ͷ
    ΈΠϕϯτͱͯ͠ϞσϦϯά͢Δɻ
    Πϕϯτͷநग़ΛͲ͜·Ͱߦͳ͏΂͖͔ʁ
    !75

    View Slide

  76. RFQΫϥ΢υͰͷྫ
    αϓϥΠϠʔɺλάͷߋ৽ʹ͍ͭͯߟ͑Δ
    !76

    View Slide

  77. suppliers
    ID name rating updated_at
    1 औҾઌA 80 2019-05-16 09:10:11
    2 औҾઌB 35 2019-05-17 12:51:02
    suppliersςʔϒϧʹ͸αϓϥΠϠʔͷQCDධՁ͕ೖ͓ͬͯΓɺαϓϥΠ
    Ϡʔબఆʹ͓͍ͯॏཁͳ໾ׂΛ୲͏ɻ
    ͦͷͨΊɺ୭͕͍ͭͲͷΑ͏ʹมߋ͔ͨ͠ΛϢʔβʔ͕ӾཡͰ͖ΔΑ͏ʹ
    ͓͖͍ͯͨ͠ɻ
    !77
    αϓϥΠϠʔͷ৔߹

    View Slide

  78. suppliers
    ID name rating
    1 औҾઌA 80
    2 औҾઌB 35
    !78
    ID supplier_id name rating reason updated_at
    1 1 औҾઌA 75 ೥࣍ධՁͷͨΊ 2019-03-03 19:42:01
    2 1 औҾઌA 80
    ࠓظ͔Βઃඋ౤ࢿ͕େ෯ʹ૿
    ͑ڙڅ͕҆ఆ͖ͯͨͨ͠Ί
    2019-05-16 09:10:11
    supplier_updates
    αϓϥΠϠʔͷ৔߹

    View Slide

  79. !79
    αϓϥΠϠʔͷ৔߹
    ͜ͷέʔεͰ͸αϓϥΠϠʔߋ৽ΛΠϕϯτͱ
    ͯ͠நग़͢Δ͜ͱͰϢʔβʔʹߋ৽৘ใʢ୭͕
    ͍ͭͲͷΑ͏ʹߋ৽͔ͨ͠ʣΛӾཡͰ͖ΔΑ͏
    ʹͨ͠ɻ

    View Slide

  80. material_tags
    ID name
    1 Ξϧϛ
    2 εςϯϨε
    !80
    λάͷ৔߹
    λάͷઃఆ͸RFQΫϥ΢υͱ͍͏ϓϩμΫτ͕ఏڙ͢ΔՁ஋ͷத৺ʹ͸ͳ͍ɻ
    ͋͘·Ͱศརʹ࢖͏ͨΊͷػೳͰ͋Γɺ؂ࠪతͳূ੻΋ෆཁͳͨΊɺλάߋ৽ΛΠ
    ϕϯτͱͯ͠நग़͢Δඞཁ͸ͳ͍ɻ
    ΧελϚʔαϙʔτͰτϨʔε͢Δඞཁ͕͋Δ৔߹͸ผ్ϩάج൫Λ࡞ͬͯ౷ҰԽ
    ͢Δͱྑ͍ɻ

    View Slide

  81. ֎෦ΩʔΛ࣋ͭͱ͍͏͜ͱ͸ࢀরઌ
    ͷσʔλ͕ొ࿥͞Εͳ͍ݶΓɺࢀরݩ
    ͷσʔλΛొ࿥Ͱ͖ͳ͍ͱ͍͏͜ͱɻ
    4. ֎෦Ωʔͷ࣋ͪํ͔ΒσʔλͷϥΠϑαΠΫϧΛߟ͑Δ
    !81

    View Slide

  82. ֎෦Ωʔͷ࣋ͪํΛؒҧ͑ΔͱΞϓϦέʔγϣ
    ϯ͔Βͷσʔλొ࿥ॲཧ͕ෳࡶʹͳͬͨΓɺ
    Ϣʔβʔͷۀ຿ʹଇ͞ͳ͍ػೳʹͳΔ͜ͱͰ
    ϢʔβϏϦςΟͷ௿ԼΛট͘͜ͱʹͳΔɻ
    ֎෦Ωʔͷ࣋ͪํͷॏཁੑ
    !82

    View Slide

  83. Example
    ݟੵґཔ(request_for_quotations)ʹਤ໘
    (diagram_images)Λఴ෇ͯ͠ૹ৴͢Δɻ
    !83

    View Slide

  84. diagram_images
    ID name path request_for_quotation_id
    1 ਤ໘_ver1 /images/xxxx/sample.jpeg 1
    2 ਤ໘_ver2 /images/xxxx/sample2.jpeg 1
    3 ਤ໘_ver3 /images/xxxx/sample3.jpeg 2
    request_for_quotations
    ID produce_number
    1 300
    2 60
    !84

    View Slide

  85. diagram_images
    ID name path request_for_quotation_id
    1 ਤ໘_ver1 /images/xxxx/sample.jpeg 1
    2 ਤ໘_ver2 /images/xxxx/sample2.jpeg 1
    3 ਤ໘_ver3 /images/xxxx/sample3.jpeg 2
    request_for_quotations
    ID produce_number
    1 300
    2 60
    diagram_iamges͸ඞͣ
    request_for_quotationsͷ࡞
    ੒ޙʹొ࿥͢Δʁ
    !85

    View Slide

  86. ۀ຿Λߟ͑Δ
    1 ݟੵґཔ࡞੒લʹઃܭ෦໳͔Βਤ໘ϑΝΠϧ͚ͩڞ༗͞Ε
    Δͱ͍͏Ϣʔεέʔε
    2 ਤ໘ϑΝΠϧΛ౎౓ΞοϓϩʔυͤͣʹϚελʔͱͯ͠ొ
    ࿥͓͖ͯ͠ɺݟੵґཔ࣌ʹ͸ͦΕΛࢀরར༻͢Δͱ͍͏Ϣ
    ʔεέʔε
    !86

    View Slide

  87. ۀ຿Λߟ͑Δ
    1 ݟੵґཔ࡞੒લʹઃܭ෦໳͔Βਤ໘ϑΝΠϧ͚ͩڞ༗͞Ε
    Δͱ͍͏Ϣʔεέʔε
    2 ਤ໘ϑΝΠϧΛ౎౓ΞοϓϩʔυͤͣʹϚελʔͱͯ͠ొ
    ࿥͓͖ͯ͠ɺݟੵґཔ࣌ʹ͸ͦΕΛࢀরར༻͢Δͱ͍͏Ϣ
    ʔεέʔε
    ඞͣ͠΋ݟੵґཔ࡞੒ޙʹਤ໘Λొ࿥͢Δͱ͍͏Θ͚Ͱ͸ͳ͍
    !87

    View Slide

  88. diagram_images
    ID name path
    1 ਤ໘_ver1 /images/xxxx/sample.jpeg
    2 ਤ໘_ver2 /images/xxxx/sample2.jpeg
    3 ਤ໘_ver3 /images/xxxx/sample3.jpeg
    request_for_quotations
    ID produce_number
    1 300
    2 60
    ID diagram_image_id request_for_quotation_id
    1 1 1
    2 2 1
    3 3 2
    attached_diagram_images
    diagram_imagesͱ
    request_for_quotationsͷ
    σʔλొ࿥͸ॱෆಉʹͳͬͨ
    !88

    View Slide

  89. ·ͱΊ
    !89

    View Slide

  90. 1 ςφϯτؒͰ௨৴ͷ͋ΔMulti Tenancy͸σʔλͷॴ
    ༗ऀ͔Βߟ͑Δ
    2 NullableͳΧϥϜ͕Ͱ͖ͨΒຊདྷผςʔϒϧʹ͢΂͖
    ΋ͷ͕Ұॹʹͳ͍ͬͯΔ͜ͱΛٙ͏
    3 ΠϕϯτͱϦιʔεΛ੾Γ෼͚ɺϦιʔε͔ΒΠϕϯτ
    Λநग़͢Δ͔͸ۀ຿ཁ݅Λجʹ൑அ͢Δ
    4 ֎෦ΩʔΛอ࣋͢Δςʔϒϧ͸ࢀরઌʹڧ͘ґଘ͢Δ
    ͱ͍͏͜ͱΛೝࣝ͢Δ
    !90

    View Slide

  91. υϝΠϯΤΩεύʔτͱ͏·͘΍ΔͨΊʹ
    ൪֎ฤᶃ
    !91

    View Slide

  92. 1 ୟ͖୆ͱͳΔERDΛ࡞Δ
    2 ERDͷؔ࿈͝ͱʹυϝΠϯʹదͨ͠ྫΛ༻͍ͳ͕Β࣮ମΛ
    ൓өͰ͖͍ͯΔ͔υϝΠϯΤΩεύʔτʹ֬ೝ͢Δ
    3 ϢʔβʔετʔϦʔϚοϐϯά͕༗ޮ
    !92

    View Slide

  93. Example
    ֎෦Ωʔͷ࣋ͪํɺNULLͷՄೳੑɺςʔϒϧ
    ͷؔ࿈(1:n/1:1/n:n)ʹ͍ͭͯ1ͭͣͭྫΛग़
    ͠ͳ͕Βʮ○○͕ෳ਺ʹͳΔ͜ͱͬͯ͋Γ·͢
    ͔ʁʯͳͲͱ࣭໰͍ͯ͘͠ɻ
    !93

    View Slide

  94. Example
    diagram_images
    ID path request_for_quotation_id
    1 /images/xxxx/sample.jpeg 1
    2 /images/xxxx/sample2.jpeg 1
    3 /images/xxxx/sample3.jpeg 2
    request_for_quotations
    ID produce_number
    1 300
    2 60
    !94

    View Slide

  95. Example
    diagram_images
    ID path request_for_quotation_id
    1 /images/xxxx/sample.jpeg 1
    2 /images/xxxx/sample2.jpeg 1
    3 /images/xxxx/sample3.jpeg 2
    request_for_quotations
    ID produce_number
    1 300
    2 60
    ਤ໘ϑΝΠϧͬͯݟੵґཔΛϝʔϧͰ͢
    Δͱ͖ʹෳ਺ૹͬͯ·ͨ͠ʁ
    me
    !95

    View Slide

  96. Example
    diagram_images
    ID path request_for_quotation_id
    1 /images/xxxx/sample.jpeg 1
    2 /images/xxxx/sample2.jpeg 1
    3 /images/xxxx/sample3.jpeg 2
    request_for_quotations
    ID produce_number
    1 300
    2 60
    ݟੵґཔΛૹΔલʹਤ໘ϑΝΠϧ͚ͩଞ෦
    ໳͔Βڞ༗͞ΕΔ͜ͱ͸͋Γ·͔͢ʁ
    me
    !96

    View Slide

  97. ͋͘·ͰυϝΠϯΤΩεύʔτͷطଘۀ຿ͷதͷݴ༿Ͱ۩ମྫΛग़͢ɻ
    !97
    ✕ RFQʹରͯ͠ఴ෇ϑΝΠϧ͸ෳ਺͖ͭ·͔͢ʁ
    ̋ ͍··ͰݟੵґཔΛ͢Δͱ͖ɺϝʔϧʹਤ໘Λෳ਺
    ఴ෇ͯ͠ૹ৴ͯ͠·ͨ͠ʁ

    View Slide

  98. υϝΠϯΤΩεύʔτ΁ͷґཔͷ࢓ํ
    υϝΠϯΤΩεύʔτ͔Β͢Δͱɺʮͦͷࡉ͔
    ͍࣭໰ඞཁʁʯͱ͍͏ؾ࣋ͪʹͳΓ΍͍͢ɻ
    ͔ͩΒɺʮ૝ఆ֎ͷϢʔεέʔεʹؾͮ͘͜ͱ
    ͕ࠓޙͷγεςϜ։ൃͷεϐʔυΛ଎͘͢Δʯ
    ͱ͍͏͜ͱΛ఻͑ͯɺ͍ΖΜͳέʔεͷ૝૾Λ
    ๲Β·ͤͯ΋Β͏Α͏ʹ͢Δɻ
    !98

    View Slide

  99. ϢʔβʔετʔϦʔϚοϐϯά
    ڞ௨ݴޠ͕গͳ͍͔Βɺ͓ޓ͍ͷೝࣝ΍ཧղ౓
    Λ߹Θͤͯ࿙ΕΛ๷͙ͨΊʹϢʔβʔετʔϦʔ
    Ϛοϐϯά͕༗ޮ
    !99

    View Slide

  100. ϢʔβʔετʔϦʔϚοϐϯά
    !100
    ΦϑΟεͷนҰ໘ʹ෇ᝦͰ֤εςʔΫϗϧμʔͷؔΘΓํΛϢʔ
    βʔετʔϦʔϚοϐϯάͱͯ͠ચ͍ग़͍ͯ͠Δࣸਅ

    View Slide

  101. ׳Εͳ͍υϝΠϯΛਂງΓ͗ͨ͢͠ͱ͖ͷ஫ҙ఺
    ൪֎ฤᶄ
    !101

    View Slide

  102. ׳Εͳ͍ۀքͷۀ຿͸ਂງΓͯ͠Πϯϓοτ͢Δ
    ͷʹਫ਼ҰഋʹͳΓ͕ͪɻ
    ͦͷ݁ՌɺਂງΓͨ͠ۀ຿Λͦͷ··ϓϩμΫτ
    ͷػೳ΍σʔλϞσϦϯάʹ൓өͯ͠͠·͏ͱ͍
    ͏ϛεΛͨ·ʹ͢Δɻ
    طଘۀ຿Λͦͷ··ϞσϦϯάͯ͠͠·͏
    !102

    View Slide

  103. طଘۀ຿ΛਂງΓ্ͨ͠Ͱɺཧ૝ͷۀ຿Λߟ͑ͯ
    ͔ΒσʔλϞσϦϯάΛ͢Δ΂͖ɻ
    ͭ·Γɺ࡞Δ΂͖ػೳΛ
    ॴ༩ͷ΋ͷͱͯ͠ѻΘͳ͍͜ͱɻ
    طଘۀ຿Λཧղ্ͨ͠Ͱཧ૝ͷۀ຿Λߟ͑Δඞཁ͕͋Δ
    !103

    View Slide

  104. ඼໨(materials)ͷσʔλϞσϦϯά
    RFQΫϥ΢υͰͷྫ
    !104

    View Slide

  105. ੜ࢈؅ཧγεςϜͰ͸BOM(Bills of
    materials)ͱ͍͏෦඼ද͕͋Δɻ
    BOMʹ͸ੜ࢈ʹඞཁͳࡐྉ͸શͯొ࿥͞ΕΔɻ
    લఏ
    !105

    View Slide

  106. BOMͷ֓೦Λ΋ͱʹRFQΫϥ΢υʹ
    materialsςʔϒϧΛ࡞੒͕ͨ͠ɺࡐྉͷछྨʹ
    Αͬͯௐୡ୲౰΋มΘΔ͠ɺങ͍ํ΋มΘΔ͔Β
    ςʔϒϧ͕Ұॹ͸·͍ͣͷͰ͸ʁ
    ੜͨٙ͡೦
    !106

    View Slide

  107. ௐୡ඼ͷछผ͝ͱʹςʔϒϧΛผͰ࡞੒͢ΔΑ͏
    ʹมߋ͠Α͏ͱ͍͕ͯͨ͠ɺௐୡ඼ຖʹRFQΫ
    ϥ΢υ্ͷۀ຿͕มΘΔͷ͔Λߟ͍͑ͯͳ͍͜ͱ
    ʹؾ෇͍ͨɻ
    ௐୡ඼͝ͱʹςʔϒϧͷ෼཭Λߟ͕͑ͨ…
    !107

    View Slide

  108. ݱঢ়ͩͱௐୡ඼ʹΑͬͯϓϩμΫτͷػೳ͕มΘ
    Δ͜ͱ͸ͳ͔ͬͨɻ
    ͞ΒʹϓϩμΫτͷະདྷʹ͍ͭͯ΋ٞ࿦͕ͨ͠ɺ
    ౰໘͸ݱঢ়ͷςʔϒϧߏ੒Ͱ໰୊ͳͦ͞͏ͩͬͨɻ
    ϓϩμΫτͷະདྷʹ͍ͭͯߟ͍͑ͯͳ͔ͬͨ
    !108

    View Slide

  109. ΑΓྑ͍σʔλϞσϦϯάΛ͢ΔͨΊͷώϯτ͸ɺ
    ۀ຿ʢυϝΠϯ஌ࣝʣͱϓϩμΫτͷະདྷʹ͋Δɻ
    υϝΠϯ஌ࣝΛಘΔ͚ͩͰͳ͘ɺϓϩμΫτͷະདྷ
    ʢͭ·ΓPMʣʹ΋ੵۃతʹؔΘ͍ͬͯ͘΂͖ɻ
    σʔλϞσϦϯάʹ͸ϓϩμΫτͷະདྷ͕ॏཁ
    !109

    View Slide

  110. A1AͰ͸Dual Track AgileΛ࠾༻
    Ծઆݕূ(Prototyping)ͱ։ൃ
    (Develop)ͷαΠΫϧΛฒߦͯ͠·Θ
    ͢ਐΊํɻ
    ΤϯδχΞ΋PrototypingʹࢀՃ͢
    ΔʢΤϯδχΞࢹ఺ͰʣͨΊɺͦ͜Ͱ
    ͷϓϩμΫτͷະདྷΛٞ࿦͠ɺΑΓྑ
    ͍σʔλϞσϦϯάʹܨ͛ΔΑ͏ʹ͠
    ͍ͯΔɻ
    Dual Track Agile
    !110

    View Slide

  111. ൪֎ฤ·ͱΊ
    !111

    View Slide

  112. 1 υϝΠϯΤΩεύʔτʹ͸࣮ۀ຿ΛΠϝʔδͯ͠΋Β͍
    ͳ͕Β࣭໰͠Α͏
    2 ϢʔβʔετʔϦʔϚοϐϯά͕༗ޮ
    3 ΑΓྑ͍σʔλϞσϦϯάͷώϯτ͸υϝΠϯ஌ࣝͱ
    ϓϩμΫτͷະདྷʹ͋Δ
    !112

    View Slide

  113. We are hiring! A1A
    !113

    View Slide