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
UMLなんて今更必要ないと思っていた…
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yatakeke
July 20, 2024
220
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UMLなんて今更必要ないと思っていた…
Scrum Fest Kanazawa 2024
Yatakeke
July 20, 2024
More Decks by Yatakeke
See All by Yatakeke
キャンプ好きから登山にハマり出して ギアを集め直している話
yatakeke
0
180
Agile CoEとして 組織にアジャイルなマインドを普及するための メンバー探しと根回しのリアルな裏側
yatakeke
0
160
目の前の課題に真摯に向き合おう
yatakeke
0
49
10分交替のモブプロがコンテクストと集中を高める
yatakeke
0
170
1つのメソッドに、関心事が複数あると何が辛いのか?
yatakeke
0
850
アジャイル系カンファレンスでの5つの寸劇作りを通して得た、本当に価値のあるプロダクトの作り方
yatakeke
2
170
スキル差があるペア_モブプロで効果的な_ドライバーナビゲータ以外のロールの分け方.pdf
yatakeke
14
4.3k
わかった気になるエンジニア流寸劇の作り方
yatakeke
0
82
勉強会運営から考える継続できるチーム
yatakeke
0
230
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.7k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
640
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Transcript
UMLͳΜͯ ࠓߋॻ͘ඞཁͳ͍ͱࢥ͍ͬͯͨ… Scrum Fest Kanazawa 2024 ΫϦΤʔγϣϯϥΠϯɹాਐ೭հ 1
ࣗݾհ { ँࡑ: “جௐߨԋͷԻτϥϒϧͷݪҼࢲͰ͢ɻਃ͠༁͋Γ·ͤΜͰͨ͠ɻ”, ໊લ: {໊: ాɹਐ೭հ, ϩʔϚࣈ: Yata Shinnosuke,
X: @yatakeke”}, ॅॴ: [“ࡾՏ”, “ࡳຈ”, “ߔͷޱ”, “ֶܳେֶ”, “ࡾՏ”, ”ྲྀࢁ”], ձࣾ: “ΫϦΤʔγϣϯϥΠϯגࣜձࣾ”, ৬ۀ: [“σʔλαΠΤϯςΟετ”, “ΞϓϦέʔγϣϯΤϯδχΞ”], ݴޠ: {Python: “8”, JavaScript: “3”, Java: “2”}, ڵຯ: [“ϖΞɾϞϒϓϩ”, “ϦϑΝΫλϦϯά”, “ΦϒδΣΫτࢦ”, “ܶஂCL”], ෆ҆: “ΦϒδΣΫτࢦք۾ͷਓͨͪɺා͍͔ΒԌ্͠ͳ͍͔ͳ…” } 2
νΣοΫΠϯ 3 ※ϗςϧͷνΣοΫΠϯͰ͋Γ·ͤΜ UnsplashͷMar Ko͕ࡱӨͨࣸ͠ਅ
Q1. UMLΛ͍ͬͯ·͔͢ʁ 1. ଘࡏ͍ͬͯΔ͚Ͳ΄ͱΜͲͬͨ͜ͱͳ͍ 2. աڈʹͬͨ͜ͱ͕͋Δ͚Ͳɺࠓ͍ͬͯͳ͍ 3. ΓΓ࣮ۀͰ͍ͬͯΔ 4
Q2. Ͳ͏ͬͯઃܭ͍ͯ͠·͔͢ʁ 1. ࣮͠ͳ͕ΒઃܭΛߟ͑Δ 2. ॳख࣮ʂԾ࣮Λͨ͠Β࠶ઃܭ࣮ͯ͢͠Δ 3. ιʔείʔυΛݟͳ͕ΒɺϝϞͱ͔ʹॻ͖ग़͢ 4. UMLͱ͔ΫϥεਤΛॻ͍ͯϞσϦϯά͍ͯ͠Δ
5. ্هҎ֎ͷԿ͔ 5
͜ͷηογϣϯʹ͍ͭͯ λʔήοτͱΞτΧϜ • ීஈɺ։ൃͰUMLΛ͍ͬͯͳ͍ਓ͕UMLΛॻ͖࢝ΊΔɻ • ීஈɺ࣮͠ͳ͕Βઃܭ͍ͯͨ͠ਓ͕ϞσϦϯάͷੈքҰา౿Έͩ͢ɻ ͞ͳ͍͜ͱ • ͋͘·ͰࣗͷܦݧஊͳͷͰɺ٬؍తࣄ࣮ͱֶज़తͳݟͰͳ͍ •
UMLͱݴͬͯɺجຊతʹclass diagramͷ͔͠͠·ͤΜ 6
ΞδΣϯμ • νΣοΫΠϯ • Ҏલ·ͰͷUMLͷΠϝʔδͱࣗͷ࣮ελΠϧ • UMLΛॻ͖࢝ΊΔ͖͔͚ͬ • UMLͱϞσϦϯάͷੈքΛ౿ΈೖΕΔ •
ͬͯΈͯΘ͔ͬͨ͜ͱ • νΣοΫΞτ 7
Ҏલ·ͰͷUMLͷΠϝʔδͱ ࣗͷ։ൃελΠϧ 8
UML͍ͬͯ·͔͢ʁˠ Ҏલ1Ͱͨ͠ ଘࡏ͍ͬͯΔ͚Ͳ΄΅ͬͨ͜ͱ͕ͳ͔ͬͨ • ϦϦʔεલೲલͳͲͷ۠ΓͰॻ͚͘Ͳ݁ہಡ·Εͳ͍ҹ • ҹͷछྨʢू/Ҡৡ/ܧঝʣͱ͔ه๏͕֮͑ΒΕͳ͍ • Ұ͚ͩɺGoogle Drive
ͷdraw.ioΛͬͨ͜ͱ͋Δ͕… • ϖΞϞϒϓϩͰ࣮͠ͳ͕Βઃܭ͍ͯ͠ΔͷͰඞཁੑΛײ͡ͳ͍ 9
Ͳ͏ͬͯઃܭʁˠ2ϝϞॻ͖+࣮த৺Ͱઃܭ ͕ࣗ։ൃ͢Δ࣌ͷ͓͓·͔ͳྲྀΕ(TDDʹ͍ۙ) 1. ৽͘͠Ճ͍༷ͨ͠Λཧղ͢Δ 2. ඞཁͳΫϥεΛ໊લఔͰચ͍ग़͠ʢMiroϑΝΠϧʹॻ͘ʣ 3. צͱܦݧͰϢχοτςετΛॻ͘ 4. ࣮͠ͳ͕ΒઃܭΛߟ͑ͯɺϦϑΝΫλϦϯάςΫΛۦ͍ͯ͘͠
10
ͳͥ͜ͷελΠϧʁ • ص্ͷٞͰઃܭ͢ΔΑΓίʔυΛॻ͖ͳ͕Βઃܭ͍ͯͬͨ͠ํ͕ ໌֬Ͱۭதઓগͳͯ͘ɺ݁Ռతʹૣ͍ͱߟ͍͔͑ͯͨΒ • ϦϑΝΫλϦϯάຊͷςΫχοΫΛਖ਼࣮͘͠ફ͍ͯ͠Ε҆શʹมߋ ͠ͳ͕ΒઃܭΛҭ͍͚ͯͯΔͱߟ͍͔͑ͯͨΒ • IDEΛͬͨ։ൃͱίʔσΟϯάʹ׳Ε͍ͯΔͨΊɺਤΛॻ͘ΑΓ ίʔσΟϯάͪ͠Όͬͨํ͕ૣ͍ͱߟ͍͔͑ͯͨΒ
11
ͨͩ͠ɺͨ·ʹى͜Δ͜ͱ • Ϋϥε͕૿͑ͯ͘ΔͱɺίʔυΛॻ͖ͳ͕Βઃܭ͢Δ࣌ʹ ʮ͋ͷΫϥεͲΜͳҾ͚ͩͬʁʯΈ͍ͨͳखΓ͕૿͑Δ • ϦϑΝΫλϦϯάʹཔΓ͍͗ͯ͢Δ͕ނʹɺͲ͜·ͰΔ͔ʹΑͬͯ ઃܭͷ࣭͕มΘͬͯ͘ΔͷͰ fi ndAndDoAnotherΈ͍ͨͳࡶͳϝιου͕ ੜ·Ε͕ͪɻ
12
UMLΛॻ͖࢝Ί͖͔͚ͨͬ 13
͖͔͚ͬ̎ͭͷࣾ֎Πϕϯτ ΦϒδΣΫτࢦΧϯϑΝϨϯε ʢҎԼɺOOCʣ ΦϒδΣΫτࢦͷ͜͜Ζ ಡॻձ 14
ΦϒδΣΫτࢦͷ͜͜Ζ, ΞϥϯɾγϟϩΣΠ ୈ2ষ UML౷ҰϞσϦϯάݴޠ, P39 “UMLʹɺઃܭΛ࿅Γ্͛Δͱͱ ʹɺίϛϡχέʔγϣϯΛԁʹ͢Δ ͱ͍͏త͕͋Γ·͢ɻਤͷʮਖ਼͠ ͍ʯඳ͖ํʹ͍ͭͯɺ͋·Γؾʹ͠ ͳͯ͘ߏ͍·ͤΜɻ”
15 จ๏͋·Γؾʹ͠ͳͯ͘Α͍
ΦϒδΣΫτࢦͷ͜͜ΖΛಡΜͩ͜ͱͰ จ๏ͬͯͦΕ΄Ͳॏཁ͡Όͳ͍ 16 ϓϩάϥϜͱҧͬͯΤϥʔ͕ग़ΔΘ͚Ͱͳ͍͠ͳ͋
ΦϒδΣΫτࢦΧϯϑΝϨϯεͰͷֶͼ ࣗͷཱͪҐஔ͕·ͩ·ͩͰ͋Δ͜ͱʹؾͮ͘ɻϞσϦϯάͰදهΛ౷ Ұ͍ͨ͠ͷͰ͋ΕUML͕ແɻͨͩ͠ɺࡉ͔͍ه๏ؾʹ͠ͳ͍ 17 ΦϒδΣΫτࢦͷϦɾΦϦΤϯςʔγϣϯ 3ͱ4ͷؒ 1ͱ2ͷؒ
UMLΛॻ͖࢝Ί͖͔͚ͨͬ UMLΛਖ਼͘͠ॻ͘͜ͱ << ϞσϦϯάΛ͢Δ ʹ͖͚ͮͨ 18
UMLͱϞσϦϯάͷ ੈքΛ౿ΈೖΕΔ 19
ϞσϦϯάͷ࿅शΛ࢝ΊͯΈͨ ৗੜ׆ʹ͋ΔͷΛϞσϦϯάͯ͠ΈΔͱ࿅शʹͳΔͱ͍͏Λฉ͍ ͯɺษڧձͷҰͱͯͬͯ͠Έͨ ͬͨ͜ͱɺίʔσΟϯάͤͣʹUMLͰΫϥεਤΛॻ͚ͩ͘ 20 ࣗಈվࡳػ ΤΞίϯ Πϕϯτϒʔε
ஏ͔͍͚ͣ͠Ͳ࿅शͷՌͷҰ෦Λެ։ʂ 21 OOCͷεϙϯαʔϒʔεͷϞσϦϯά • ࢀՃऀશһελϯϓΧʔυ͕ΒΕΔ • ϒʔεΛ๚ΕΔͱελϯϓ͕Β͑Δ • ΦϑΟγϟϧϒʔεͱεϙϯαʔϒʔε͕͋Δ •
ελϯϓ͕6ݸஷ·Δ͝ͱʹܠΨνϟ 3݄࣌ͳͷͰࠓͳΒͬͱ্ख͘… X͔Βऔಘ͕ͨ͠ɺͲͳ͔ͨͷࣸਅ͔͕Θ͔Βͳ͘ͳΓ·ͨ͠ɻ͢Έ·ͤΜ
ϞσϧΛඳ͍ͨ͜ͱͰ࣮Πϝʔδ͕มΘͬͨ 22 ϞσϦϯά͔ΒಘΒΕͨؾ͖ͮ • ΫϥεͰͳͯ͘ɺ;Δ·͍ʹର͢ΔϢχοτς ετΛ͔͜͜Βॻ͜͏ͱ͍͏ࣗ৴͕࣋ͯͨ ɹˠ εϙϯαʔϒʔεʹߦ͘ͱελϯϓ͕Β͑Δ • ׂͷҠৡ͕Ͱ͖͍ͯͦ͏ͳײ͡
ɹˠ ελϯϓΧʔυͷ ɹɹɾελϯϓΛԡͤΔ͔ ɹɹɾΨνϟ͕ճͤΔ͔ • ֓೦͔͠ߟ͑ΒΕͳ͍ͷͰ໋໊͕͍ͭΑΓγϯ ϓϧʹͳͬͨ ϞσϦϯάͤͣʹ࣮ͨ͠Βҧ͏݁ՌʹͳΓͦ͏
ͬͯΈͯΘ͔ͬͨ͜ͱ 23
ΦϒδΣΫτࢦͷ͜͜Ζ, ΞϥϯɾγϟϩΣΠ ୈ8ষ ࢹΛ͛Δ, P105 “ΦϒδΣΫτΛඋ࣮͑ͨମͰ͋Δͱఆٛ Ͱ͖·͢ɻ͜͏͍ͬͨʹΑͬͯɺΦϒδΣ ΫτͷৼΔ͍͕ఆٛ͞ΕΔͷͰ͢ɻ·ͨɺ ߹ʹΑͬͯɺΦϒδΣΫτಛఆͷৼΔ͍ Λอ࣮࣋ͨ͠ମͰ͋Δͱߟ͑ΒΕ·͢ɻ͜͏
͍ͬͨఆٛʹΑͬͯɺΦϒδΣΫτ͕Ͳ͏࣮ ͞ΕΔͷ͔Ͱͳ͘ɺΦϒδΣΫτ͕ԿΛ࣮ߦ ͢Δ͔ʹணͰ͖ΔΑ͏ʹͳΔΘ͚Ͱ͢ɻ” 24 ͦͦʮϞσϦϯά͢Δʯͱʁ
ϞσϦϯάͱઃܭͷҧ͍ 25 ͬͯΈͯײͨ͡ ※͋͘·Ͱݱ࣌ͷࣗͷ·ͱΊͨͷ
ઃܭ͢Δ ≠ ϞσϦϯά͢Δ • ʮઃܭ͢ΔʯͲ͏࣮͢Δ͔Λߟ͑ɺΓίʔυͰ͋Δ • ʮϞσϦϯά͢ΔʯɺͲ͏࣮ߦ͢Δ͔Λߟ͑ɺΓ૬ޓؔͷ ΞΠσΞͰ͋Δ 26 ൃදऀओ؍ͷݴޠԽͰ͕͢
ʮઃܭʯϞσϦϯάͬΆ͍Կ͔Λแ͍ͯ͠Δ͕ ʮϞσϦϯάʯʮઃܭʯʹஔ͖ΘΒͳ͍
ϞσϦϯάͨ͠Β͜͏ͳΔʢͣʣ 27 astah iPadͰઃܭɺϞσϦϯάͷҧ͍͚ͩʹணͯ͠
UMLΛॻ͘͜ͱͷҙࣝͷมԽ • ϦϦʔεલೲલͳͲͷ۠ΓͰॻ͚͘Ͳಡ·Εͳ͍ҹ ɹɹˠ ࣮ޙͰͳ͘ɺ࣮લʹϞσϦϯά͢ΔͨΊʹॻ͍ͨ΄͏͕Α͍ • ҹͷछྨʢू/Ҡৡ/ܧঝʣͱ͔ه๏͕֮͑ΒΕͳ͍ ɹɹˠ ϞσϦϯά͢Δ্Ͱ͋·ΓʹͳΒͳ͍ •
ҎલGoogle Drive ͷdraw.io͔ͬͨ͜͠ͱͳͯ͘… ɹɹˠ ࣗPlantUMLΛ͏ͷ͕͘͢͝ϑΟοτ͍ͯ͠Δɻastah iPadαΫαΫ͔͚Δ • ϖΞϞϒϓϩͰ࣮͠ͳ͕Βઃܭ͍ͯ͠ΔͷͰඞཁੑΛײ͡ͳ͍ ɹɹˠ ϞϒϓϩͰͰ͖ΔͷͰɺͬͯΈ͍ͨʂ 28
ͬͯΈ͔ͨΒΘ͔ͬͨ͜ͱ ͜Μͳ͔Μ͕͡ཧత͔ʂ 29 ͨΓલͰ͕͢ςετ࣮ʹؚ·Ε·͢
༨ஊɿ PlantUML͍͍͢ class TrainGate { +work() -enter(Ticket t) -enter(ElectricMoney e)
-open() -close() } TrainGate *-right- ICReader TrainGate *-left- TicketReader class TicketReader { +enter(Ticket t) +exit(ticket t) } TicketReader o-- Ticket abstract class Ticket { +getStartPlace() +getPrice() +isSeasonTicket() } Ticket <|-- PriceTicket: imp Ticket <|-- RideTicket: imp Ticket <|-- SeasonTicket: imp class PriceTicket { startPlace price +getStartPlace() +getPrice() +isSeasonTicket() } class RideTicket { startPlace endPlace +getStartPlace() +getPrice() +isSeasonTicket() } class SeasonTicket { startPlace endPlace +getStartPlace() +getPrice() +isSeasonTicket() } class ICReader { +enter(ElectricMoney m) +exit(ElectricMoney m) } Interface ElectricMoney { } ICReader o-- ElectricMoney • جຊతʹίʔυ͚ͩॻ͚Α͍ • ϩʔϧόοΫͰ͖Δ • ஔΛ͋·Γؾʹ͠ͳͯ͘Α͍ 30 ։ൃऀͳΒΉͣʂ
࣮Ͱཱ͍ͬͯΔ͜ͱ • ࣮·࣮ͩۀͰUML·ͰΛॻ͍͔ͯΒ࣮͢ΔɺͰ͖͍ͯͳ͍ • θϩ͔ΒઃܭΛߟ͑ΔΈ͍ͨͳ͜ͱ͕ͳ͔ͬͨͷͰ…(͜Ε͔Βػ ձ͕;͑Δ) • ͨͩɺUMLϞσϦϯάΛ࿅श͢Δ͜ͱͰɺ૬ޓ࡞༻ʹର͢Δҙ͕ࣝม Θͬͯঃʑʹ࣮͕มΘ͖ͬͯͨ(͜Ε·ͨͲ͔͜ͷػձͰ) 31
͜ͷηογϣϯʹ͍ͭͯ λʔήοτͱΞτΧϜ • ීஈɺ։ൃͰUMLΛ͍ͬͯͳ͍ਓ͕UMLΛॻ͖࢝ΊΔɻ • ීஈɺ࣮͠ͳ͕Βઃܭ͍ͯͨ͠ਓ͕ϞσϦϯάͷੈքҰา౿Έͩ͢ɻ ͞ͳ͍͜ͱ • ͋͘·ͰࣗͷܦݧஊͳͷͰɺ٬؍తࣄ࣮ͱֶज़తͳݟͰͳ͍ •
جຊతʹɺclass diagramͷ͔͠͠·ͤΜ 32
ͬͨ͜ͱ͕ͳ͍ਓͷϝοηʔδ • ཧղͰͳ͘ɺ࣮Λॿ͚ΔͨΊʹUMLΛॻ͘ • ਖ਼͍͠จ๏ͷUMLΛॻ͘ << ϞσϦϯάΛ͢Δ • ʢຊ࣮Ͱͬͨ΄͏͕͍͍͚ͲʣࣄҎ֎ͰUMLϞσϦϯά Λ࿅शͯ͠ΈΔ͚ͩͰ࣮ͷ෯͕͕ΔΑʂ
33
End 34
35 ຊୈ3൛
Ҿ༻TBD “σʔλՄࢹԽʮσʔλΛݟ͘͢ ͢ΔֆΛඳ͚ͩ͘ͷ࡞ۀʯͱࢥΘΕ ͕ͪͰ͕͢ɺ࣮ࡍʹͦ͜·Ͱͷॲ ཧมɺ͞Βʹશମతͳཧ ؚΊͯਖ਼͍͠ղऍҙࢥܾఆΛߦ͏ ͜ͱ͕ਅͷతͰ͔͢Βɺʢུʣ” 36 ՄࢹԽͷҙਤͱཧղˠߦಈʹܨ͛Δ ʮਤΛॻ͘ʯ㲈ʮσʔλՄࢹԽʯͱଊ͑Δͱ
·ͱΊ • ਖ਼͍͠จ๏ͷUMLΛॻ͘ << ϞσϦϯάΛ͢Δ • UML ͷclass diagramΛॻ͖ͳ͕Β࣮Λߟ͑Δ͚ͩͰ ࣗવͱϞσϦϯάʹͳ͍ͬͯ͘
• ʢຊ࣮ͰΓ͍͚ͨͲʣ࿅शͰԿݸ͔UMLϞσϦϯάͯ͠Έ Δ͚ͩͰߟ͑ํͷ෯͕͕ΔΑʂͥͻҰาΛʂ 37
ਤͱͳΜͷͨΊʹ͋Δͷ͔ʁ 38 ൃදऀओ؍
UML (class diagram) Λॻ͘͜ͱͷؾ͖ͮ • ̏࣍ݩʢΦϒδΣΫτ໊ɺϝιου໊ɺΫϥεͷؔੑʣʹযΛ ஔ͍ͯՄࢹԽ͞ΕΔͷͰϞσϦϯά͍͢͠ • PlantUML͘͢͝ॻ͖ͯ͘͢ɺߟ͑Δ͜ͱʹूதͰ͖Δ •
UMLͷจ๏ͷਖ਼͠͞ɺϞσϦϯά͢Δ্Ͱؔͳ͍ɻ ͕ࣗΘ͔͍ͬͯΕΑ͍ 39 ൃදऀओ؍
ΦϒδΣΫτࢦͷ͜͜Ζ • Certi fi ed Scrum Developer(CSD)ݚम Ͱ͓͢͢Ί͞Εͨ • σβΠϯύλʔϯͷཧղͱͱʹ
ΧϓηϧԽʹؔ͢Δଊ͑ํ͕มΘΔຊ • CSDݚमˠΦϒδΣΫτࢦͷ͜͜Ζ ͓͘͢͢͢͝Ίʂ 40