「Design doc とは何か」・「何を書けばよいのか」を説明するスライドです。
関連するプレゼンテーション「読みやすいコードの書き方」: https://gist.github.com/munetoshi/65a1b563fb2c271f328c121a4ac63571
© 2023 Munetoshi Ishikawa, supported by LINE corporation
Munetoshi IshikawaDesign Doc ͷॻ͖ํ
View Slide
͜ͷηογϣϯͷҙDesign doc ʹ༷ʑͳελΠϧํ๏͕͋Δ- ͜ͷηογϣϯͰհ͢Δ͜ͱ 1 ྫʹա͗ͳ͍- ΧελϚΠζ͕ඞཁʹͳΔ͔
ιϑτΣΞ։ൃͰΑ͋͘Δ- ࣮ऴྃؒࡍʹઃܭ্ͷ͕ൃ֮ → ΄΅࠷ॳ͔ΒίʔυΛॻ͖͠ - ݸʑͷϓϧϦΫΤετ LGTM → ίʔυશମͱͯͯ͠ҙຯෆ໌Design doc Λॻ͘͜ͱͰղܾͰ͖Δ͔
τϐοΫ- Design doc ͷ֓ཁ- Design doc ͷߏ- ӡ༻࣌ͷҙ- έʔεελσΟ
Design doc ͷ֓ཁ- Design doc ͱ- ʮԿΛʯॻ͔͘- ʮ͍ͭʯॻ͔͘- ৄࡉઃܭॻͱͷҧ͍
Design doc ͱ 1/2ιϑτΣΞઃܭॻͷҰछ- ʮͲ͏࣮͢Δ͔ʯ͕য- ։ൃऀʹΑͬͯॻ͔ΕΔ
Design doc ͱ 2/2࣮Λߦ͏લʹॻ͘υΩϡϝϯτ- ࣮લʹઃܭʹ͍ͭͯٞ- ࣮தΞοϓσʔτՄdesign doc ࣮“Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
Design doc ͷརੜ࢈ੑɾϓϩδΣΫτͷޭͷ্- ϑΟʔυόοΫαΠΫϧͷظؒԽ- ࣮લͷͷચ͍ग़͠- ίετݟੵΓͷώϯτ
Design doc ͷযʮͲ͏࣮͢Δ͔ʯʹযΛͯΔ- ͱղܾࡦͷ໌֬Խ- νʔϜϝϯόʔͱͷٞ- ίϯςΩετʢഎܠܦҢʣͷه
ؔ࿈͢ΔιϦϡʔγϣϯ 1/2Կɾͳͥ: ༷ɾతͷ໌֬Խ- PRD (Product Requirements Document)ͩΕɾ͍ͭ: λεΫɾϚΠϧετʔϯཧ- ΠγϡʔཧπʔϧɾϓϩδΣΫτཧπʔϧ
ؔ࿈͢ΔιϦϡʔγϣϯ 2/2৽ϝϯόʔ͚ࢿྉɾݱঢ়આ໌ - νϡʔτϦΞϧɾελʔτΨΠυɾΞʔΩςΫνϟจॻ
Design doc ͷϖʔδͯ͘ेϖʔδఔ- ͯ͘ࡁΉͳΒͦΕʹӽͨ͜͠ͱͳ͍- 20 ϖʔδҎ্ͷ߹ → λεΫɾϓϩδΣΫτΛׂ͢Δ
͍ͭ design doc Λॻ͖͔͘ʮԿΛ͢Δ͔ʯ͕͋Δఔܾ·͔ͬͯΒɺ࣮Λ։࢝͢ΔલதظతͳϓϩδΣΫτɾλεΫʹ͍ͭͯॻ͘- υΩϡϝϯτ࡞ࣗମΦʔόʔϔου = ؆୯ͳ 1 ߦͷόάमਖ਼Ͱॻ͔ͳ͍
͍ͭ design doc Λॻ͖͔͘ (cont.)Design doc Λॻ͘ج४ͷྫ:- 2 िؒҎ্͔͔ΔλεΫ- ෳͷϦϦʔεʹ·͕ͨΔϓϩδΣΫτ- ଟͷϞδϡʔϧɾΫϥεʹӨڹ͢Δमਖ਼
ΥʔλʔϑΥʔϧͱͷൺֱ: ڞ௨τοϓμϯͳΞϓϩʔν- ࣮ͷલʹઃܭ- จॻͷϨϏϡʔɾٞdesign doc ࣮+ϨϏϡʔɾٞ“Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
࣮ͱͷڥք͕ݫ֨Ͱͳ͍- ࣮୲ऀɾνʔϜʹΑͬͯॻ͔ΕΔ- ᘳͳৄࡉٻΊͳ͍: ੩తݕূͷলུɾ։ൃதͷΞοϓσʔτ- ΞδϟΠϧ։ൃʹద༻ՄೳΥʔλʔϑΥʔϧͱͷൺֱ: ૬ҧdesign doc ࣮୲ऀ“Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
Design doc ͷ֓ཁ: ·ͱΊ- Design doc ιϑτΣΞઃܭॻͷҰछ - ʮͲ͏ʯ࣮͢Δ͔ʹযΛ͋ͯΔ- தɾେنͳ࣮Λ࢝ΊΔલʹॻ͘- ࣮தʹߋ৽͠ಘΔ
Design doc ͷϑΥʔϚοτ߲ʹରͯ͠ʮݫີͳʯϑΥʔϚοτͳ͍͜ͱ͕ଟ͍- ඞཁेͳ߲ͰηΫγϣϯΛߏ͢Δ- ʮϑΥʔϚοτΛຒΊΔ͜ͱʯΛతԽ͠ͳ͍
యܕతͳ design doc ͷߏ- తɾΰʔϧʢ΄΅ඞਢʣ- എܠ- ઃܭͷ֓ཁ- ৄࡉઃܭ- ͦͷଞͷؔ৺ࣄτοϓμϯʹཧղͰ͖Δߏʹ͢Δ
యܕతͳ design doc ͷߏ- తɾΰʔϧʢ΄΅ඞਢʣ- എܠ- ઃܭͷ֓ཁ- ৄࡉઃܭ- ͦͷଞͷؔ৺ࣄ
తɾΰʔϧจͰʮԿΛ࣮ݱ͢Δͷ͔ʯΛఆٛ͢Δ- ʮ…ػೳΛ࣮͢ΔͨΊͷɺσʔλετΞͱͦͷϞσϧΛ࣮͢Δʯ- ʮ…ΛϓϩμΫτͰར༻Մೳʹ͢ΔϥΠϒϥϦΛ࡞͢Δʯ- ʮ…ΛϦϑΝΫλ͠ɺ…ͷػೳՃΛ༰қʹ͢Δʯ
తɾΰʔϧ: ҙ͘ॻ͖͗͢ͳ͍- ඞཁͳΒ PRD Λผ్༻ҙ- ʮ࣮͢ΔՁ͕͋Δ͔ʯجຊతʹ PRD ͰٞείʔϓΛ໌֬ʹ͢Δ- ඞཁʹԠͯ͡ʮout of scopeʯʮࠓޙͷ༧ఆʯΛ໌ه
എܠஈམҎͰ࣮͢Δཧ༝ɾલఏࣝɾ੍Λઆ໌- ͜ͷ࣮ɾϦϑΝΫλϦϯά͕ඞཁͳཧ༝ɾར- ༻ޠɾٕज़తഎܠ- ༏ઌ͖߲͢: ֦ுੑɾؤ݈ੑɾੑೳ…
എܠ: ҙ͘ॻ͖͗͢ͳ͍- ؔ࿈จॻʢPRDɾଞͷ design docʣͷϦϯΫΛར༻తɾΰʔϧͷޙʹॻ͘- ʮԿʹ͍͍ͭͯͯ͠Δ͔ʯΛઌʹཧղͤ͞Δ
എܠ: ҙ (cont.)ఆಡऀΛҙࣝ͢Δ- ͦͷػೳɾϓϩμΫτʹؔΘ͍ͬͯͳ͍ਓର͔ͦͷػೳͷ։ൃऀͦͷϓϩμΫτͷ։ൃऀಉ͡୲ྖҬ৬छͷ։ൃऀ“Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
ઃܭͷ֓ཁઃܭͷॏཁͳ෦ʹ͍ͭͯॻ͘ɾඳ͘- ࣮ͷجຊతͳΞΠσΟΞ- ؆ུԽͨ͠ΫϥεਤɾϞδϡʔϧߏਤ- ॏཁͳཁૉͷྻڍͱઆ໌
ઃܭͷ֓ཁ: جຊతͳΞΠσΟΞ࣮ࠔͳɾؾΛ͚ͭΔ͖ͷղܾ๏Λࣔ͢- ʮ…͕ະͰ͋ΔͨΊɺαΠζՄมͳ LRU ΩϟογϡΛ͏ʯ- ʮ…ͷ॥ґଘͷղܾʹ SeviceLocator Λ͏ʯ- ʮ…ͷಠཱੑͷ֬อͷͨΊʹ Layer A ͱ B Λ͢Δʯ
ઃܭͷ֓ཁ: ؆ུԽͨ͠ΫϥεਤॏཁͳΫϥεɾϞδϡʔϧͱͦͷؔੑΛࣔ͢- खඳ͖ɾ؆ུԽͨ͠ϑΥʔϚοτՄ
ઃܭͷ֓ཁ: ҙࡉ͔͘ॻ͖͗͢ͳ͍- ॏཁͰͳ͍ཁૉΛؒҾ͘- ಛʹҙ͢Δ͖͜ͱʹযΛͯΔ؆ུԽ
ৄࡉઃܭʮઃܭͷ֓ཁʯΛΑΓৄࡉʹॻ͘ɾඳ͘ཁૉ͝ͱɾݟΔ֯͝ͱʹηΫγϣϯΛ࡞Δ- ཁૉ͝ͱ: ϞδϡʔϧɾΫϥεɾίϯϙʔωϯτɾϨΠϠ- ݟΔ֯͝ͱ: ঢ়گ݅ɾλΠϜϥΠϯɾAPI
ৄࡉઃܭ: ߲ྫ- Ϟδϡʔϧ͝ͱͷ֓ཁઆ໌ɾΫϥεਤ- ϞσϧΫϥεɾσʔλߏͷҰཡ- API ͷϦετɾ༻ྫͷίʔυ- యܕతͳσʔλϑϩʔɾγʔΫΤϯεਤ- ٖࣅίʔυ
ͦͷଞͷؔ৺ࣄϓϩδΣΫτͷਐΊํɾӨڹൣғɾҙʹؔ͢Δิ
ͦͷଞͷؔ৺ࣄϓϩδΣΫτͷਐΊํɾӨڹൣғɾҙʹؔ͢Δิ- ୲ऀ- େ·͔ͳλεΫͷखॱ- ϦϦʔεɾϞχλϦϯάϓϥϯ
ͦͷଞͷؔ৺ࣄϓϩδΣΫτͷਐΊํɾӨڹൣғɾҙʹؔ͢Δิ- ະղܾͷɾ੍ݶ- ଞʹӨڹΛड͚ΔϞδϡʔϧ- ηΩϡϦςΟɾϓϥΠόγʔɾύϑΥʔϚϯε
Design doc ͷߏ: ·ͱΊඞཁेͳ߲Ͱߏ͢Δ- ʮతɾΰʔϧʯ΄΅ඞਢ - ֎෦ͷυΩϡϝϯτͳͲར༻ τοϓμϯʹཧղͰ͖Δߏʹ͢Δ - త → എܠ- ઃܭͷ֓ཁ → ৄࡉઃܭ
Ξϯνύλʔϯ 11. ʮᘳͳʯ design doc Λॻ্͖͛Δ2. ϨϏϡʔͷϛʔςΟϯάʹ 10 ਓҎ্ট3. ٞதʹઃܭͷ͕ൃ֮ 4. ࠷ॳ͔Β design doc Λॻ͖͢
ٞͷλΠϛϯάٞͱ design doc ࡞Λަޓʹߦ͏࠷ॳͷٞ…- ʮগਓͰʯ: ςοΫϦʔυͱͷ 1-on-1 ͔Β࢝ΊͯΑ͍- ʮղܾҊ͕ͳͯ͘ʯ: ٞͰղܾҊΛݟ͚ͭΕΑ͍- ʮ΄΅നࢴͰʯ: ٞࣄతʹ design doc Λॻ͘͜ͱ͕Ͱ͖Δ
Ξϯνύλʔϯ 21. Design doc ͷ࡞ɾϨϏϡʔ͕ྃ2. ࣮Λ։࢝ 3. ࣮தʹઃܭͷ͕ൃ֮ 4. ઃܭΛมߋ͠ͳ͍Α͏ʹ ͦͷ͠ͷ͗ͷղܾࡦΛ࠾༻
Design doc ߋ৽ͷλΠϛϯά࣮தʹઃܭΛมߋͯ͠Α͍͍αΠΫϧͰʮͲ͏ղܾ͢Δ͔ʯΛٞ͢Δ- ඞཁͳΒ design doc Λߋ৽͢Δ
Ξϯνύλʔϯ 31. ઃܭมߋͷʹ design doc Λߋ৽ 2. ʮελʔτΞοϓΨΠυʯͱ͠࠶ར༻ 3. ଟେͳίετ͕ඞཁʹͳΔ - ৽نϝϯόʔେྔͷ design doc ΛಡΉඞཁ͕͋Δ- ܰඍͳมߋͰେྔͷ design doc ͷߋ৽͕ඞཁʹͳΔ
Design doc ͷൣғDesign doc جຊతʹ͍ࣺͯ- 1 ϓϩδΣΫτͰ 1 design doc - ΞʔΧΠϒʮܦҢΛΔख͕͔ΓʯʹͳΔ - ଞͷબࢶΛߟྀ: ΞʔΩςΫνϟจॻɾPRDɾνϡʔτϦΞϧ
Ξϯνύλʔϯ 41. ػೳ։ൃͷϓϩδΣΫτ͕ྃ2. …Χ݄ޙ…3. ػೳՃͷϓϩδΣΫτ͕ൃ 4. Ҏલͷ design doc ͕୳ͤͳ͍
Design doc ͷτϨʔαϏϦςΟDesign doc ͷϦϯΫΛ׆༻- ϓϧϦΫΤετ͔ΒࢀরՄೳʹ- Πγϡʔνέοτ͔ΒࢀরՄೳʹDesign doc ͷϦετΛ࡞Δ- ख࡞ۀͰཧ͢ΔΑΓΈͰཧ
ӡ༻࣌ͷҙ: ·ͱΊ- ٞɾϨϏϡʔͷαΠΫϧΊʹ- ࣮தʹ design doc ߋ৽Մ- Design doc ʹʮଞͷׂʯΛՃ͠ͳ͍- ޙ͔Β design doc ΛࢀরͰ͖ΔΑ͏ʹ
έʔεελσΟʮઃఆը໘ʯͷϦϑΝΫλϦϯάͷґཔ௨ը࣭ઃఆΞχϝʔγϣϯ<< Φϯ >><< ߴը࣭ >><< ϑϧ >>
ґཔ࣌ͷϛʔςΟϯάґཔΛड͚Δ࣌ͰతഎܠΛ໌֬ʹ͢Δ
ϦϑΝΫλϦϯάରͷௐࠪݱࡏͷঢ়ଶΛѲɾͷચ͍ग़͠
ϦϑΝΫλϦϯάରͷௐࠪ (cont.)ݱࡏͷঢ়ଶΛѲɾͷચ͍ग़͠- తɾഎܠΛ۩ମԽ͢Δ
ઃܭํͷٞςοΫϦʔυͱͷ 1-on-1 ͳͲͰઃܭҊΛٞ͢Δ
Ճɾߋ৽ඞཁͳ߲ 1/2తɾഎܠ- ઃܭҊΛݩʹ۩ମԽλεΫϓϥϯ- ͲͷॱͰ࣮͢Δ͔- ϦϑΝΫλϦϯάதʹՃ͞Ε߲ͨͷऔΓѻ͍
Ճɾߋ৽ඞཁͳ߲ 2/2ςετ- ϢχοτςετͰݕূ͢Δ༰- ϦάϨογϣϯςετͷํ๏߲Ճ࣌ͷखॱ- αϯϓϧίʔυ
έʔεελσΟ: ·ͱΊٞͷ͍ͭͰʹॻ͘ͱָ
·ͱΊDesign doc: ιϑτΣΞઃܭॻͷҰछ- υΩϡϝϯτͷൣғΛ໌֬ʹ- ඞཁͳ߲Λඞཁͳ͚ͩॻ͘- ͍αΠΫϧ͕ॏཁ
Appendix 1: πʔϧڞಉฤूɾཤྺɾίϝϯτϨϏϡʔ͕Ͱ͖ΕԿͰྑ͍- Atlassian confluence, Notion- GitHub Gist, markdown in repository- Google docs, Dropbox Paper, Box notes
Appendix 2: Design doc ͷྫChromium design docs- https://www.chromium.org/developers/design-documentsBazel design docs- https://github.com/bazelbuild/proposals