Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はじめてのB2B SaaSデータモデリング in Builderscon 2019
Search
sasaki nobuya
August 30, 2019
Programming
4.6k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はじめてのB2B SaaSデータモデリング in Builderscon 2019
sasaki nobuya
August 30, 2019
More Decks by sasaki nobuya
See All by sasaki nobuya
エンジニアがプロダクトに向き合える組織づくり / Improve Product Development
mnc
6
4.4k
エンジニアがプロダクトに向き合うための意思決定カイゼン
mnc
4
2.4k
はじめてのB2B SaaSデータモデリング in 吉祥寺.pm#18
mnc
6
11k
AWSインフラ設計とDB設計からわかるB2B SaaSのおもしろさ
mnc
2
1.3k
B2B SaaS開発 Configurabilityとマルチテナントをがんばる α版編
mnc
2
740
本番データを安全に利用する
mnc
0
3k
Other Decks in Programming
See All in Programming
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
390
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
190
「人を評価する AI」の設計と実装
ryoyanara
0
220
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
220
5分で問診!Composer セキュリティ健康診断
codmoninc
0
1.1k
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
330
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
390
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
110
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
3.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Everyday Curiosity
cassininazir
0
290
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
800
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
870
Practical Orchestrator
shlominoach
191
12k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
370
Transcript
͡Ίͯͷ B2B SaaS σʔλϞσϦϯά ʙ Builderscon2019 ʙ A1Aגࣜձࣾ ࠤʑ Ԇ
@__mnc90 1
Name ࠤʑ Ԇ Company A1Aגࣜձࣾ (ΤΠϫϯΤΠ) Career ৯ϩά → Speee
→ A1AΛڞಉۀ URL twitter.com/__mnc90 manchose.hatenablog.jp About CTOͱͯ͠RFQΫϥυͷσʔλϕʔεઃ ܭͱΠϯϑϥߏஙɺ৫ͮ͘ΓͳͲΛ୲ !2
B2BͷऔҾΛϫϯϥϯΫ্ʹ Vision !3
B2BͷऔҾΛϫϯϥϯΫ্ʹ Vision A1A ʢ໊ࣾͷ༝དྷʣ !4
ϓϨϛΞϦʔάͷڧ߽τοςφϜɾϗοτεύʔFCͷڳεϙϯαʔ !5
ϓϨϛΞϦʔάͷڧ߽τοςφϜɾϗοτεύʔFCͷڳεϙϯαʔ ฐࣾ͡Ό͋Γ·ͤΜ !6
A1AΤΟϫϯψΤΟͰ͢ AIA τοςφϜͷڳεϙϯαʔΛ͍ͯ͠Δ߳ߓͷอݥձࣾɻ ΤΠΞΠΤΠ A1A B2BΛϫϯϥϯΫ্ʹ͋͛ΔA1Aɻ ΤΟϫϯψΤΟ !7
ελʔτΞοϓ͍͠ !8
1. ͓͕ۚͳ͍ ※3௶ͷΦϑΟεʹແཧΓ6ਓͰೖΖ͏ͱͨ͠ͱ͖ͷγϡϛϨʔγϣϯ ҙ) 60௶ͷΦϑΟεʹ11݄͔ΒҠస͠·͢ !9
2. Α͘ᎍΊΔ ᎍΊ͍ͯΔ࠷தͷϦΞϧͳձʢۀ࣌ʣ ҙ) ࠓඇৗʹ݈શͰ͢ !10
3. ଞʹ͍Ζ͍Ζ͋Δ 1 ɹ՝͕ຊʹ͋Δ͔ͷݕূ͕ඞཁ 2 ɹϓϩμΫτͰ՝ΛղܾͰ͖Δ͔ͷݕূ͕ඞཁ 3 ɹਓख͕ΒͣΤϯδχΞ͕༷٧ΊΔඞཁ͕͋Δ ɾ ɾ
ɾ !11
ࢿۚɾ࣌ؒͳͲͷଟ͘ͷ੍ͷ্Ͱ γεςϜΛ։ൃ͢Δඞཁ͕͋Δɻ ͬͨ΄͏͕Α͍͜ͱͳΜͯ ΄ͱΜͲͰ͖ͳ͍ͱ֮ޛ͢Δɻ ελʔτΞοϓͷγεςϜ։ൃ !12
࠷ϨόϨοδͷޮ͘ϙΠϯτ ෆՄٯͳҙࢥܾఆʹྗ͢Δ ͡Ό͋Ͳ͜ʹྗ͢Δ͔ !13
ͬͨ΄͏͕ྑͦ͞͏ͳ͜ͱ TDD E2E GraphQL React TypeScript Serverless Kubernetes GitOps Design
System Atomic Design DDD σʔλ ϞσϦϯά !14
ͬͨ΄͏͕ྑͦ͞͏ͳ͜ͱ TDD E2E GraphQL React TypeScript Serverless Kubernetes GitOps Design
System Atomic Design DDD σʔλ ϞσϦϯά ҙ) σʔλϞσϦϯάҎ֎͍ͬͯͳ͍Θ͚Ͱͳ͍Ͱ͢ !15
“DBͷण໋ΞϓϦέʔγϣϯΑΓ͍” @soudai1025 ͞Μ DBͷॏཁੑ !16
ෳճʹ͚ͨσʔλҠߦͳͲ σʔλϕʔεϦϑΝΫλϦϯά͕ͮ͠Β͍ DBͷॏཁੑ !17
ΞϓϦέʔγϣϯͷઃܭ σʔλϕʔεͷઃܭʹҾ͖ͮΒΕΔɻ ج൫ͱͳΔσʔλϕʔεͷઃܭ͕ྑ͘ͳ͍ͱ ΞϓϦέʔγϣϯͷઃܭʹແཧ͕ੜ͡Δɻ DBͷॏཁੑ !18
Horizontal SaaS ৬छɾػೳʹಛԽͨ͠SaaSɻSalesforceSmartHR ͳͲɺۀքΛΘͣಉ͡৬छͰ͋Εར༻Ͱ͖ΔΑ͏ʹ ઃܭ͞ΕͨSaaS Vertical SaaS ۀքಛԽܕͷSaaSɻoctʢݐઃϓϩδΣΫτཧ SaaSʣMusubiʢిࢠༀྺγεςϜͷSaaSʣͳͲɺ ಛఆͷۀքͰͷ༻Λఆͨ͠SaaSɻ
Horizontal SaaSͱVertical SaaS !19
Vertical SaaSۀքಛԽͰ͋ΔͨΊ Horizontal SaaSΑΓ͞Βʹਂ͍υϝΠϯ͕ࣝඞཁ σʔλϞσϦϯάͷॏཁੑ !20
ۀߪങ͚ݟੵࠪఆSaaS RFQΫϥυΛجʹ ෳࡶͳυϝΠϯͷσʔλϞσϦϯάํ๏ͱɺ ϏδωεՁʹ݁͢Δઃܭํ๏Λઆ໌͠·͢ɻ ͜Ε͔Β͢͜ͱ !21
Agenda !22 1 B2B SaaSͷσʔλϞσϦϯάͷਐΊํ 2 [൪֎ฤ] υϝΠϯΤΩεύʔτͱ͏·͘ΔͨΊʹ 3 [൪֎ฤ]
υϝΠϯΛਂງ͢Δͱ͖ͷҙ
B2B SaaSͷσʔλϞσϦϯάͷਐΊํ !23
!24 ۀߪങ͚ݟੵࠪఆSaaS RFQΫϥυ Product
!25 ϓϩμΫτ֓ཁ
Topic !26
1 Multi Tenancyͳςʔϒϧઃܭ 2 Ͱ͖Δ͚ͩNullΛڐՄ͠ͳ͍ 3 ΠϕϯτΛநग़͢Δ 4 ֎෦Ωʔͷ࣋ͪํ͔ΒσʔλͷϥΠϑαΠΫϧΛߟ͑Δ !27
1. Multi Tenancyͳςʔϒϧઃܭ !28
“ಉ͡γεςϜαʔϏεΛෳͷޓ͍ʹແؔͳར༻ ऀ͕ؒڞಉͰར༻͢ΔํࣜͰɺͦΕͧΕͷར༻ऀΞ Χϯτ໊ͳͲͷࢿ֨ใΛݩʹ۠ผ͞ΕɺͦΕͧΕ γεςϜ্ʹઐ༻ͷྖҬઃఆͳͲ͕༩͑ΒΕΔɻ” Multi Tenancyͱ ग़ల e-words.jp/w/Ϛϧνςφϯτ.html !29
ར༻اۀ͔ΒݟΔͱ͕ࣗࣾγεςϜΛ ઐ༗ͯ͠ར༻͍ͯ͠ΔΑ͏ʹݟ͑Δɻ ࣮ࡍෳͷاۀʢςφϯτʣ͕ 1ͭͷγεςϜʹ૬Γ͍ͯ͠Δɻ !30 Multi Tenancyͱ
Single Tenancy !31 Web DB Web DB ςφϯτA ςφϯτB ֤ࣾʢAɾBʣͦΕͧΕಠཱͨ͠ઐ༻ͷΠϯϑϥΛߏங
B͚ͷγεςϜʹ͜ͷܗଶ͕ࠓ·Ͱଟ͔ͬͨ ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
Multi Tenancy !32 Web DB ςφϯτA ςφϯτB ֤ࣾʢAɾBʣWebɾDBαʔόʔΛڞ༗ͯ͠ར༻͢Δ ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
Multi Tenancyͷ࣮ݱํ๏ 1 ςφϯτຖʹDatabase or SchemaΛ 2 શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ !33
Multi Tenancyͷ࣮ݱํ๏ 1 ςφϯτຖʹDatabase or SchemaΛ 2 શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ SmartHR͞ΜͷൃදͰ migration࣌ؒͷര૿ͳͲ
εέʔϥϏϦςΟʹ͕͋Δͱ !34
(΄΅)શςʔϒϧʹtenant_idΧϥϜΛ༻ҙ͢ΔMulti Tenancyͷ࣮ݱํ๏ !35 Tenants Quotations Aגࣜձࣾ ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢ https://a-inc.a1a.com Users
ᶃ subdomainΛجʹTenantsςʔ ϒϧͷIDΛಛఆ ᶄ ಉҰϦΫΤετதશςʔϒϧ ͷΫΤϦͷWHERE۟ʹऔಘͨ͠ tenant_idͰͷߜΓࠐΈ͕ઃఆ͞ΕΔ ᶃ ᶄ ᶄ
Multi TenancyͷϝϦοτ !36 1 σʔλ࿙ӮͷϦεΫ͕ݮΔɻςφϯτຖʹσʔλྖҬ Λ۠Δ͜ͱͰɺΞϓϦέʔγϣϯ։ൃऀ͕ςφϯτ Λҙࣝ͢Δඞཁ͕ͳ͘ͳΔɻ 2 ސ٬اۀͷηΩϡϦςΟνΣοΫϦετΛಥഁ͢͠ ͍ɻ
ςφϯτؒͷ௨৴͕͋ΔMulti Tenancy !37
RFQΫϥυͰݟੵͷतड͕ൃੜ͢Δ !38 Buyer Supplier RFQ (ݟੵґཔ) ݟੵճ
ςφϯτͳʹ୯ҐͰ࡞͢Δʁ !39
1. όΠϠʔ୯ҐͰςφϯτΛ࡞͢Δ tenant_id: 1 tenant_id: 2 tenant_id: 3 όΠϠʔA όΠϠʔB
όΠϠʔC αϓϥΠϠD αϓϥΠϠE αϓϥΠϠD αϓϥΠϠG αϓϥΠϠF αϓϥΠϠF αϓϥΠϠH !40 αϓϥΠϠʔόΠϠʔͷςφϯτʹॴଐ͢Δ
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
1. σʔλͷॴ༗ऀ͔Βςφϯτͷ୯ҐΛߟ͑Δ !42
B2B SaaSͰΑ͋͘Δཁ ୀձޙͷσʔλͷཧআ !43
όΠϠʔ͕ղͨ͠ͱ͖αϓϥΠϠʔ͕ड৴ͨ͠ݟੵґཔใআ͢Δ͖ʁ ϝʔϧΛϝλϑΝʔͱͯ͠ߟ͑Δɻ ૹ৴ऀ͕ղͯ͠ɺड৴ऀͷ ϝʔϧϘοΫεʹϝʔϧ͕Δɻ ୀձޙαϓϥΠϠʔ͕ड৴ͨ͠ ݟੵґཔใͬͯཉ͍ͣ͠ɻ !44
2. Ϗδωενϟϯε͔Βςφϯτͷ୯ҐΛߟ͑Δ !45
ಋೖͨ͠όΠϠʔ͕࿈Ε͖ͯͯ͘ΕΔαϓϥΠϠʔͱ͍͏ࢿ࢈ !46 όΠϠʔ αϓϥΠϠʔ αϓϥΠϠʔ αϓϥΠϠʔ αϓϥΠϠʔ αϓϥΠϠʔ όΠϠʔݟੵͷΓͱΓΛ͢ΔαϓϥΠϠʔͱ RFQΫϥυΛ༻͢ΔɻࣗಈతʹαϓϥΠϠʔ
ͷΞΧϯτʢແྉʣ͕ൃߦ͞ΕΔ͜ͱʹͳΔɻ ࠓޙ͜ͷαϓϥΠϠʔʹՁΛఏڙ͍ͯ͘͠ ͜ͱͰϏδωε֦େͷՄೳੑ͕͋Δɻ ଟ͍ͱ͖ઍࣾ࿈Ε͖ͯͯ͘ΕΔ
αϓϥΠϠʔʹՁΛఏڙ͢ΔͨΊʹʁ !47 ҟͳΔόΠϠʔͱΓऔΓ͢Δ߹Ͱ ಉ͡ΞΧϯτͰΓऔΓ͍ͨ͠ɻ όΠϠʔຖʹΞΧϯτΛൃߦ͢Δͱ αʔϏεମݧ͕ѱԽ͢Δɻ
ςφϯτͷ୯Ґ 1 αϓϥΠϠʔόΠϠʔͷςφϯτʹॴଐ͢Δ 2 αϓϥΠϠʔόΠϠʔผςφϯτʹ͢Δ !48
ςφϯτͷ୯Ґ 1 αϓϥΠϠʔόΠϠʔͷςφϯτʹॴଐ͢Δ 2 αϓϥΠϠʔόΠϠʔผςφϯτʹ͢Δ !49 ͪ͜ΒΛ࠾༻
1 όΠϠʔͷୀձޙͷσʔλআͷରԠΛόΠϠʔςφϯτ ͷআͷΈͰྃ͢Δ 2 اۀຖʹݸผͷΞΧϯτཧϙϦγʔΛద༻Ͱ͖Δ ※اۀຖʹϙϦγʔ͕ҟͳΔ͜ͱ͕ଟ͍ 3 αϓϥΠϠʔςφϯτ͕ॏෳ͠ͳ͍ͨΊαϓϥΠϠʔʹͱ ͬͯσʔλͷҰݩཧ͕Ͱ͖Δͱ͍͏ϝϦοτΛఏڙͰ ͖Δ
όΠϠʔɾαϓϥΠϠʔͰςφϯτΛผʹ͢ΔϝϦοτ !50
RFQΫϥυͰͷྫ ݟੵґཔʹରͯ͠ݟੵճΛߦ͏ !51
accounts ID name tenant_id role 1 ࠤʑ 1 όΠϠʔ 2
দຊ 1 αϓϥΠϠʔ 3 ਅน 2 όΠϠʔ 4 2 αϓϥΠϠʔ 1. όΠϠʔςφϯτʹαϓϥΠϠʔΞΧϯτ͕ॴଐ͢Δઃܭͷ߹ !52 ID name 1 ձࣾA 2 ձࣾB tenants ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
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 ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
accounts ID name tenant_id 1 ࠤʑ 1 2 দຊ 2
3 ਅน 3 2. όΠϠʔͱαϓϥΠϠʔʹͦΕͧΕಠཱͨ͠ςφϯτΛ࡞͢Δ߹ !54 ID name role 1 ձࣾA όΠϠʔ 2 ձࣾB αϓϥΠϠʔ 3 ձࣾC όΠϠʔ tenants ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
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 ҙ) ͔Γ͢͞Λॏࢹ͠ɺਖ਼֬ੑ͍͍ܽͯ·͢
ςφϯτؒͷσʔλͷΓͱΓ ςφϯτΛ·͙ͨσʔλͷΓͱΓ σʔλΛίϐʔͯ͠ड͚͢͠Δɻ !56
2. Ͱ͖Δ͚ͩNULLΛڐՄ͠ͳ͍ !57
NullableͳΧϥϜ͕͋Δ߹ ϥΠϑαΠΫϧͷҟͳΔσʔλ͕ ಉ͡ςʔϒϧʹೖ͍ͬͯΔ͜ͱ͕ଟ͍ NULLΛڐՄ͠ͳ͍ཧ༝ !58
RFQΫϥυͰͷྫ !59
materials ID name code 1 ϒϥέοτ 391001 2 εϥΠυϘοΫε NULL
3 ݻఆۚ۩ 369221 !60 codeΧϥϜʹNULL͕ೖΓ͏Δɻ
materials ID name 1 ϒϥέοτ 2 εϥΠυϘοΫε 3 ݻఆۚ۩ ID
material_id code 1 1 391001 2 3 369221 material_codes ͱΓ͋͑ͣNULLແ͘ͳͬͨʂ Ͱɺ͜ΕͰ͍͍ͷ͔ʁ !61
ͳͥNULLؚ͕·ΕΔͷͩΖ͏ !62
1 material_codeΛͦͦཧ͍ͯ͠ͳ͍اۀ͕͋Δ 2 ࢼ࡞ͷஈ֊Ͱmaterial_codeΛൃ൪ͤͣʹݟੵґཔ Λߦ͍ɺίετͷ֓ࢉΛ֬ೝ͔ͯ͠ΒcodeΛൃ൪͢Δͱ ͍͏ۀϑϩʔ͕͋Δ !63
1 material_codeΛͦͦཧ͍ͯ͠ͳ͍اۀ͕͋Δ 2 ࢼ࡞ͷஈ֊Ͱmaterial_codeΛൃ൪ͤͣʹݟੵґཔ Λߦ͍ɺίετͷ֓ࢉΛ֬ೝ͔ͯ͠ΒcodeΛൃ൪͢Δͱ ͍͏ۀϑϩʔ͕͋Δ ࢼ࡞ͷݟੵґཔۀͱ͍͏Ϣʔεέʔε͕ͬͦ͝Γൈ͚͍ͯΔ !64
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
֓೦͕ҟͳΔΤϯςΟςΟผΤϯςΟςΟʹ͢Δ !66 ݱঢ়ಉ͡ϑΟʔϧυΛ͍࣋ͬͯͯຊདྷ֓ ೦͕ҟͳΔΤϯςΟςΟͰ͋ΕผΤϯςΟ ςΟʹ͢Δ͖ɻ ͞ͳ͍ͱϓϩμΫτͷਐԽʹ͍ͦΕͧΕ ͷΤϯςΟςΟʹඞཁͳΧϥϜ͕Ճ͞Ε NullableΧϥϜ͕Ͱ͖͕͋Δ͜ͱʹͳΔɻ
NullableΤϯςΟςΟΛࠞಉ͍ͯ͠Δष͍ !67
3. ΠϕϯτΛநग़͢Δ !68
ΤϯςΟςΟʹϦιʔεͱΠϕϯτ͕͋Δɻ ϦιʔεͱΠϕϯτ !69
ΤϯςΟςΟ໊+ͱݺΜͰҧײͷͳ͍Τ ϯςΟςΟΠϕϯτɻ Πϕϯτ !70
ݟੵґཔͱ͔ݟੵճͱ͔ൃͱ͔ Example !71
ΠϕϯτۀͷهͰ͋Γɺ B2BγεςϜͷத৺తଘࡏɻ Πϕϯτ(ۀ)Λه͢Δ͜ͱ͕ B2BγεςϜͷׂͱݴ͑Δɻ Πϕϯτ !72
ͦͷͨΊɺΠϕϯτΠϛϡʔλϒϧͳσʔ λͱͯ͠ѻ͏͖ɻ ΠϛϡʔλϒϧσʔλϞσϧ !73 ※͜ͷ͋ͨΓ @kawasima ͞Μͷࢿྉ ʮָʑERDϨοεϯ ʯ͕͍͢͝ษڧʹͳΓ·͢
Πϕϯτ͕ಈࢺͳͷʹର͠Ϧιʔε໊ࢺɻ Ϧιʔεͷߋ৽ॲཧΛΠϕϯτͱͯ͠நग़͢ Δ͜ͱ͕Մೳɻ Ϧιʔε !74
͋ΒΏΔϦιʔεʹର͢Δߋ৽ΛΠϕϯτͱ ͯ͠நग़͢Δͱ࣮ίετ͕ߴ͘ͳΔɻ ղܾ͍ͨ͠υϝΠϯͷத৺ʹҐஔ͢Δۀͷ ΈΠϕϯτͱͯ͠ϞσϦϯά͢Δɻ Πϕϯτͷநग़ΛͲ͜·Ͱߦͳ͏͖͔ʁ !75
RFQΫϥυͰͷྫ αϓϥΠϠʔɺλάͷߋ৽ʹ͍ͭͯߟ͑Δ !76
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 αϓϥΠϠʔͷ߹
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 αϓϥΠϠʔͷ߹
!79 αϓϥΠϠʔͷ߹ ͜ͷέʔεͰαϓϥΠϠʔߋ৽ΛΠϕϯτͱ ͯ͠நग़͢Δ͜ͱͰϢʔβʔʹߋ৽ใʢ୭͕ ͍ͭͲͷΑ͏ʹߋ৽͔ͨ͠ʣΛӾཡͰ͖ΔΑ͏ ʹͨ͠ɻ
material_tags ID name 1 Ξϧϛ 2 εςϯϨε !80 λάͷ߹ λάͷઃఆRFQΫϥυͱ͍͏ϓϩμΫτ͕ఏڙ͢ΔՁͷத৺ʹͳ͍ɻ
͋͘·Ͱศརʹ͏ͨΊͷػೳͰ͋ΓɺࠪతͳূෆཁͳͨΊɺλάߋ৽ΛΠ ϕϯτͱͯ͠நग़͢Δඞཁͳ͍ɻ ΧελϚʔαϙʔτͰτϨʔε͢Δඞཁ͕͋Δ߹ผ్ϩάج൫Λ࡞ͬͯ౷ҰԽ ͢Δͱྑ͍ɻ
֎෦ΩʔΛ࣋ͭͱ͍͏͜ͱࢀরઌ ͷσʔλ͕ొ͞Εͳ͍ݶΓɺࢀরݩ ͷσʔλΛొͰ͖ͳ͍ͱ͍͏͜ͱɻ 4. ֎෦Ωʔͷ࣋ͪํ͔ΒσʔλͷϥΠϑαΠΫϧΛߟ͑Δ !81
֎෦Ωʔͷ࣋ͪํΛؒҧ͑ΔͱΞϓϦέʔγϣ ϯ͔Βͷσʔλొॲཧ͕ෳࡶʹͳͬͨΓɺ Ϣʔβʔͷۀʹଇ͞ͳ͍ػೳʹͳΔ͜ͱͰ ϢʔβϏϦςΟͷԼΛট͘͜ͱʹͳΔɻ ֎෦Ωʔͷ࣋ͪํͷॏཁੑ !82
Example ݟੵґཔ(request_for_quotations)ʹਤ໘ (diagram_images)Λఴͯ͠ૹ৴͢Δɻ !83
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
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
ۀΛߟ͑Δ 1 ݟੵґཔ࡞લʹઃܭ෦͔Βਤ໘ϑΝΠϧ͚ͩڞ༗͞Ε Δͱ͍͏Ϣʔεέʔε 2 ਤ໘ϑΝΠϧΛΞοϓϩʔυͤͣʹϚελʔͱͯ͠ొ ͓͖ͯ͠ɺݟੵґཔ࣌ʹͦΕΛࢀরར༻͢Δͱ͍͏Ϣ ʔεέʔε !86
ۀΛߟ͑Δ 1 ݟੵґཔ࡞લʹઃܭ෦͔Βਤ໘ϑΝΠϧ͚ͩڞ༗͞Ε Δͱ͍͏Ϣʔεέʔε 2 ਤ໘ϑΝΠϧΛΞοϓϩʔυͤͣʹϚελʔͱͯ͠ొ ͓͖ͯ͠ɺݟੵґཔ࣌ʹͦΕΛࢀরར༻͢Δͱ͍͏Ϣ ʔεέʔε ඞͣ͠ݟੵґཔ࡞ޙʹਤ໘Λొ͢Δͱ͍͏Θ͚Ͱͳ͍ !87
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
·ͱΊ !89
1 ςφϯτؒͰ௨৴ͷ͋ΔMulti Tenancyσʔλͷॴ ༗ऀ͔Βߟ͑Δ 2 NullableͳΧϥϜ͕Ͱ͖ͨΒຊདྷผςʔϒϧʹ͖͢ ͷ͕Ұॹʹͳ͍ͬͯΔ͜ͱΛٙ͏ 3 ΠϕϯτͱϦιʔεΛΓ͚ɺϦιʔε͔ΒΠϕϯτ Λநग़͢Δ͔ۀཁ݅Λجʹஅ͢Δ
4 ֎෦ΩʔΛอ࣋͢Δςʔϒϧࢀরઌʹڧ͘ґଘ͢Δ ͱ͍͏͜ͱΛೝࣝ͢Δ !90
υϝΠϯΤΩεύʔτͱ͏·͘ΔͨΊʹ ൪֎ฤᶃ !91
1 ୟ͖ͱͳΔERDΛ࡞Δ 2 ERDͷؔ࿈͝ͱʹυϝΠϯʹదͨ͠ྫΛ༻͍ͳ͕Β࣮ମΛ өͰ͖͍ͯΔ͔υϝΠϯΤΩεύʔτʹ֬ೝ͢Δ 3 ϢʔβʔετʔϦʔϚοϐϯά͕༗ޮ !92
Example ֎෦Ωʔͷ࣋ͪํɺNULLͷՄೳੑɺςʔϒϧ ͷؔ࿈(1:n/1:1/n:n)ʹ͍ͭͯ1ͭͣͭྫΛग़ ͠ͳ͕Βʮ◦◦͕ෳʹͳΔ͜ͱͬͯ͋Γ·͢ ͔ʁʯͳͲͱ࣭͍ͯ͘͠ɻ !93
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
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
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
͋͘·ͰυϝΠϯΤΩεύʔτͷطଘۀͷதͷݴ༿Ͱ۩ମྫΛग़͢ɻ !97 ✕ RFQʹରͯ͠ఴϑΝΠϧෳ͖ͭ·͔͢ʁ ̋ ͍··ͰݟੵґཔΛ͢Δͱ͖ɺϝʔϧʹਤ໘Λෳ ఴͯ͠ૹ৴ͯ͠·ͨ͠ʁ
υϝΠϯΤΩεύʔτͷґཔͷํ υϝΠϯΤΩεύʔτ͔Β͢Δͱɺʮͦͷࡉ͔ ͍࣭ඞཁʁʯͱ͍͏ؾ࣋ͪʹͳΓ͍͢ɻ ͔ͩΒɺʮఆ֎ͷϢʔεέʔεʹؾͮ͘͜ͱ ͕ࠓޙͷγεςϜ։ൃͷεϐʔυΛ͘͢Δʯ ͱ͍͏͜ͱΛ͑ͯɺ͍ΖΜͳέʔεͷ૾Λ Β·ͤͯΒ͏Α͏ʹ͢Δɻ !98
ϢʔβʔετʔϦʔϚοϐϯά ڞ௨ݴޠ͕গͳ͍͔Βɺ͓ޓ͍ͷೝࣝཧղ Λ߹Θͤͯ࿙ΕΛ͙ͨΊʹϢʔβʔετʔϦʔ Ϛοϐϯά͕༗ޮ !99
ϢʔβʔετʔϦʔϚοϐϯά !100 ΦϑΟεͷนҰ໘ʹᝦͰ֤εςʔΫϗϧμʔͷؔΘΓํΛϢʔ βʔετʔϦʔϚοϐϯάͱͯ͠ચ͍ग़͍ͯ͠Δࣸਅ
׳Εͳ͍υϝΠϯΛਂງΓ͗ͨ͢͠ͱ͖ͷҙ ൪֎ฤᶄ !101
׳Εͳ͍ۀքͷۀਂງΓͯ͠Πϯϓοτ͢Δ ͷʹਫ਼ҰഋʹͳΓ͕ͪɻ ͦͷ݁ՌɺਂງΓͨ͠ۀΛͦͷ··ϓϩμΫτ ͷػೳσʔλϞσϦϯάʹөͯ͠͠·͏ͱ͍ ͏ϛεΛͨ·ʹ͢Δɻ طଘۀΛͦͷ··ϞσϦϯάͯ͠͠·͏ !102
طଘۀΛਂງΓ্ͨ͠ͰɺཧͷۀΛߟ͑ͯ ͔ΒσʔλϞσϦϯάΛ͢Δ͖ɻ ͭ·Γɺ࡞Δ͖ػೳΛ ॴ༩ͷͷͱͯ͠ѻΘͳ͍͜ͱɻ طଘۀΛཧղ্ͨ͠ͰཧͷۀΛߟ͑Δඞཁ͕͋Δ !103
(materials)ͷσʔλϞσϦϯά RFQΫϥυͰͷྫ !104
ੜ࢈ཧγεςϜͰBOM(Bills of materials)ͱ͍͏෦ද͕͋Δɻ BOMʹੜ࢈ʹඞཁͳࡐྉશͯొ͞ΕΔɻ લఏ !105
BOMͷ֓೦ΛͱʹRFQΫϥυʹ materialsςʔϒϧΛ࡞͕ͨ͠ɺࡐྉͷछྨʹ Αͬͯௐୡ୲มΘΔ͠ɺങ͍ํมΘΔ͔Β ςʔϒϧ͕Ұॹ·͍ͣͷͰʁ ੜͨٙ͡೦ !106
ௐୡͷछผ͝ͱʹςʔϒϧΛผͰ࡞͢ΔΑ͏ ʹมߋ͠Α͏ͱ͍͕ͯͨ͠ɺௐୡຖʹRFQΫ ϥυ্ͷۀ͕มΘΔͷ͔Λߟ͍͑ͯͳ͍͜ͱ ʹؾ͍ͨɻ ௐୡ͝ͱʹςʔϒϧͷΛߟ͕͑ͨ… !107
ݱঢ়ͩͱௐୡʹΑͬͯϓϩμΫτͷػೳ͕มΘ Δ͜ͱͳ͔ͬͨɻ ͞ΒʹϓϩμΫτͷະདྷʹ͍͕ͭͯٞͨ͠ɺ ໘ݱঢ়ͷςʔϒϧߏͰͳͦ͞͏ͩͬͨɻ ϓϩμΫτͷະདྷʹ͍ͭͯߟ͍͑ͯͳ͔ͬͨ !108
ΑΓྑ͍σʔλϞσϦϯάΛ͢ΔͨΊͷώϯτɺ ۀʢυϝΠϯࣝʣͱϓϩμΫτͷະདྷʹ͋Δɻ υϝΠϯࣝΛಘΔ͚ͩͰͳ͘ɺϓϩμΫτͷະདྷ ʢͭ·ΓPMʣʹੵۃతʹؔΘ͍͖ͬͯ͘ɻ σʔλϞσϦϯάʹϓϩμΫτͷະདྷ͕ॏཁ !109
A1AͰDual Track AgileΛ࠾༻ Ծઆݕূ(Prototyping)ͱ։ൃ (Develop)ͷαΠΫϧΛฒߦͯ͠·Θ ͢ਐΊํɻ ΤϯδχΞPrototypingʹࢀՃ͢ ΔʢΤϯδχΞࢹͰʣͨΊɺͦ͜Ͱ ͷϓϩμΫτͷະདྷΛٞ͠ɺΑΓྑ ͍σʔλϞσϦϯάʹܨ͛ΔΑ͏ʹ͠
͍ͯΔɻ Dual Track Agile !110
൪֎ฤ·ͱΊ !111
1 υϝΠϯΤΩεύʔτʹ࣮ۀΛΠϝʔδͯ͠Β͍ ͳ͕Β࣭͠Α͏ 2 ϢʔβʔετʔϦʔϚοϐϯά͕༗ޮ 3 ΑΓྑ͍σʔλϞσϦϯάͷώϯτυϝΠϯࣝͱ ϓϩμΫτͷະདྷʹ͋Δ !112
We are hiring! A1A !113