過去の設計・開発を振り返りながらソフトウェア設計を開発者だけで行ってはいけない理由を説明します。
։ൃऀ͚ͩͰιϑτΣΞઃܭΛ͍͚ͯ͠ͳ͍ཧ༝ೆभιϑτΣΞઃܭLabo vol.1 #ddd_labo܂ാӳࢿ
View Slide
ࣗݾհ• גࣜձࣾΞϥλφ• 2લ·Ͱ౦ژͷձࣾͰۈ• ݩֶઐ߈ʢʣ• ͖ͳݴޠɿHaskellͱ͔Scalaͱ͔• झຯɿεΩϡʔόμΠϏϯάɺΧϝϥ
μΠόʔؒɹืूதʂ
͓͜ͱΘΓ• աڈͷιϑτΣΞઃܭɾ։ൃͷܦݧஊ• ࣦഊͷࣄྫ͔Βֶͼ͍ͨ• ※͋͘·ͰݸਓͷײͰ͢
Agenda• എܠ• ͳͥ։ൃऀ͚ͩͰઃܭͨ͠ͷ͔ʁ• Կ͕ى͔ͬͨ͜ʁ• Կ͔ʁͲ͏͢ΕվળͰ͖ͨͩΖ͏͔ʁ• υϝΠϯۦಈઃܭͷಓ
എܠͱ͋ΔձࣾϚʔέςΟϯάπʔϧ(ASP)
ϚʔέςΟϯάπʔϧʁ
طଘϓϩμΫτͷঢ়ଶ• ॏͳΔཁٻΛগͣͭ͠Ճ࣮ͯ͠ϦϦʔε• طଘػೳͷվमσάϨ͕ාͯ͘Ͱ͖ͳ͍• ΄΅ಉ͡ػೳΛίϐϖͯᷖ͠ճίʔυͷྔ࢈• εύήςΟίʔυ ƅшƅ)řŵŖ• ֦ுੑͷݶք͕དྷ͍ͯΔ…ʂ
എܠ2ձࣾͬͱ͍ͨ͠ɻ ɹιϑτΣΞ։ൃࠓޙͲ͏͢ΕΑ͍͔ʁᶃগͣͭ͠ϦϑΝΫλϦϯά͢Δɻᶄ࣍ظόʔδϣϯͷ։ൃɾҠߦΛݕ౼͢ΔɻᶅͲ͏ʹͳΒͳ͍ɻݱ࣮ඇͰ͋Δɻ
എܠᶃճؼςετ͕ͳ͘ɺ༷ʹ͍ͭͯѲͰ͖͍ͯΔਓ͕͍ͳ͍ͨΊɺϦϑΝΫλϦϯάͷਖ਼͠͞Λ୲อͰ͖ͳ͍ɻᶄಉ͘͡ϝϯόʔ͕༷ʹ͍ͭͯ໌Δ͘ͳ͍ɻ ߋʹɺઐ༻γεςϜΧελϚΠζΛՃ͍͑ͯΔސ٬ଘࡏ͢ΔͨΊɺҠߦ͕Ͱ͖ͳ͍Մೳੑ͕ߴ͍ɻ
͑ᶅ͑ᶅ͑ᶅ
δϦශϓϩμΫτ͋Δ͋Δ
͜͜Ͱ੨ఱͷᯡᯧ
ͬͺΓ࣍ظόʔδϣϯΛ࡞ͬͯṢճ͢Δͧʂʂʂby Ғ͍ਓ at ࣾһ૯ձ
࣍ظόʔδϣϯͷ։ൃͦΜͳ͜ΜͳͰϓϩδΣΫτԽ͞Εͨಥવ
ͳͥ։ൃऀ͚ͩͰઃܭͨ͠ͷ͔ʁཁ݅ఆ͔ٛΒड͚ೖΕςετ·Ͱ։ൃͰߦ͏׳ྫվળཁόάใࠂཁ݅ఆٛઃܭ࣮ςετӡ༻
ͳͥ։ൃऀ͚ͩͰઃܭͨ͠ͷ͔ʁ෦ߏ։ൃऀ͔͠ཧղͰ͖ͳ͍(?)
ͳͥ։ൃऀ͚ͩͰઃܭͨ͠ͷ͔ʁ৽͍ٕ͠ज़࠷৽൛ͷػೳΛऔΓೖΕ͍ͨ7 or 8(6EOL)
ཁ͢Δʹ
։ൃ෦͚ͩͰ։ൃ͍ͯ͠Δͱ͍͏ࣗෛ
Կ͕ى͔ͬͨ͜ʁ• ΩοΫΦϑ&։ൃ߹॓• ཁ݅Λूதతʹٞʢͨͭ͠Γʣ• ཉ͍͠ػೳɾ͢ػೳɾফ͖͢ػೳΛ ։ൃऀࢹͰग़͚ͨͩͩͬͨ͠• େ෩࿊ෑΛ͕͛ͨ̎ϲ݄ޙʹফ͑ͨ
Կ͕ى͔ͬͨ͜ʁ• ͍͟։ൃελʔτͨ͠ͷͷ…• ·ͣಈ͘ͷΛ࡞ͬͯ։ൃͯ͠·͢Ξϐʔϧ• Ͱɺ୭ʹݟͤΕ͍͍ʁ• ͲΜͳػೳ͕ඞཁ͔୭͕ܾΊΔʁ• ϓϩμΫτΦʔφʔͷ࣮࣭తෆࡏ
Կ͕ى͔ͬͨ͜ʁ• ୭ͬͯ͘Εͳ͍ͷͰখنҊ݅ʹೖ(!)• ϕʔλ൛ͷͣͩͬͨͷʹ̍ܖ• ͳ่͠͠తʹػೳ֬ఆ͠ɺϦϑΝΫλෆೳʹ• ύονΞοϓσʔτͷ࢝·Γ• ڧͳطࢹײ
Կ͕ى͔ͬͨ͜ʁ• ӦۀʮͰɺطଘͷػೳA͑·͔͢ʁʯ• ൚༻ੑΛҙࣝͯ͠εϦϜʹղ͍ͯͨ͠• Έ߹ΘͤΕಉ͜͡ͱ࣮ݱͰ͖Δͣʁ• Ӧۀʮ͔Βͳ͍ʯʮސ٬ʹઆ໌Ͱ͖ͳ͍ʯ• Ӧۀ͚આ໌ॻΛ࡞Δඞཁ͋Γʁ
Կ͕ى͔ͬͨ͜ʁ• چόʔδϣϯ͔Βͷސ٬ͷҠߦՄೳ͔ʁ• ։ൃऀʮچver.ͷσʔλߏͷΛղܾ͢ΔͷͰ͋ΔͨΊҠߦۃΊͯࠔʯ• ӦۀʮεϜʔζʹҠߦͰ͖ͳ͍ͱചΕͳ͍ʯ• Ғ͍ਓʮҠߦඞਢɻͳΜͱ͔ͤΑɻʯ
Ͳ͏ͯ͜͠͏ͳͬͨʁʁʁ
ސ٬ͷۀͰ͏ͨΊͷπʔϧ։ൃͳͷʹސ٬ۀΛ͍ͬͯΔϝϯόʔ͕͍ͳ͍··ઃܭར༻ঢ়گΛ͖ͪΜͱѲ࣮͠ࡍͷސ٬ۀΛΔϝϯόʔͱϢʔεέʔεΛ࡞Δ͖
ސ٬ۀଟذʹΘͨΔͷͨΊࢥ͍ͭ͘৭ʑͳύλʔϯʹରԠͰ͖ΔΑ͏ʹ֦ுੑͱ൚༻ੑΛॏࢹͯ͠͠·ͬͨϢʔεέʔεʹݟ߹͏࠷খͷߏ͔Β࢝ΊΔ͖͍͔ͭ͘ͷέʔεʹର͢Δ࣮Λ͋ͱͰϦϑΝΫλ͢Εྑ͍
࠷খߏͷཁ͕݅Θ͔Βͳ͍ෆཁͳͷΛΈࠐΜͰͳ͍͔ఆͰ͖ͳ͍ۀΛཧղ͍ͯ͠ΔεςʔΫϗϧμʔΛཱͯΔ͖
چver.ͷػೳ໊ϫʔΫϑϩʔΛҙࣝͯ͠͠·͏͜ͱͰಉ͡ػೳΛম͖͠Ͱ࡞ͬͯ͠·͏چver.ͷ׳शతͳࣾ༻ޠΛཧຊདྷͷۀʹඞཁͳ༻ޠΛ͏
࣍ظόʔδϣϯͱฉ͍ͯಥͬΔΞϗʢࣗʣ̍ਓͰScala, AkkaͰ෦తͳػೳΛ࣮ؔܕActorϞσϧͷฒߦੑʹϋϚΔͱΓ͋͑ͣམͪண͚ࣗҎ֎ͰอकՄೳͳݴޠΛબͿ͖ʢͱ͍͑ݸਓతʹྑ͍ܦݧʣ
ͷυϝΠϯۦಈઃܭͷಓ• ʮ༻ޠཧʯΛ͍ͨ͠ɺͱ͍͏ཉٻ͔Β• ΩʔϫʔυʮϢϏΩλεݴޠʯ͔ΒDDD• ۀʹԊͬͯιϑτΣΞΛ։ൃ͢Δ֓೦ʹಉҙ• ݱࡏͷ։ൃͷ͕ஈʑݟ͑ͯ͘Δ
υϝΠϯۦಈઃܭͷಓ• ސ٬ͷۀΛΔਓΛҾ͖ࠐΉ ʢυϝΠϯΤΩεύʔτʣ• ۀͷ֓೦Λదʹදݱ͢Δݴ༿Λߏங͢Δ ʢϢϏΩλεݴޠʣ• ϓϩμΫτͷଟ༷ԽͱίϯςΩετͷղ
ํ๏Ͱͳ͍υϝΠϯۦಈઃܭ• ։ൃͰؕΓ͕ͪͳΛ໌֬ʹ͢ΔͨΊͷࢥߟํ๏ͷҰͭ• ͷલͷ࣮ࣗͷ୲ྖҬ͚ͩʹಛԽͨ͠࠷খྖҬͰकΓʹೖ͍͚ͬͯͳ͍• ۀʹଈͨ͠ʮՁͷ͋ΔϓϩμΫτʯΛಧ͚ΔͨΊͷ࠷దͳߏΛߟ͑Δ͖
·ͱΊ
Β୭ͷՁͷͨΊʹιϑτΣΞΛઃܭ͠։ൃ͢Δͷ͔
ࠓҰ͍ͦ͏