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
技術的負債と向き合う
Search
Naoya Ito
May 15, 2017
Technology
256
77k
技術的負債と向き合う
オープンセミナー2017@岡山での発表スライドです
Naoya Ito
May 15, 2017
Tweet
Share
More Decks by Naoya Ito
See All by Naoya Ito
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
20
6.2k
Functional TypeScript
naoya
15
6.4k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
72
35k
シェルの履歴とイクンリメンタル検索を使う
naoya
16
6.2k
20230227-engineer-type-talk.pdf
naoya
89
77k
関数型プログラミングと型システムのメンタルモデル
naoya
62
110k
TypeScript による GraphQL バックエンド開発
naoya
29
35k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
24k
「問題から目を背けず取り組む」 一休の開発チームが6年間で学んだこと
naoya
144
60k
Other Decks in Technology
See All in Technology
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
830
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
S3アクセス制御の設計ポイント
tommy0124
3
200
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
240
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
190
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
240
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
110
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
AWSで始める実践Dagster入門
kitagawaz
1
610
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
110
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
240
Agile PBL at New Grads Trainings
kawaguti
PRO
1
420
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Raft: Consensus for Rubyists
vanstee
140
7.1k
The World Runs on Bad Software
bkeepers
PRO
70
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Agile that works and the tools we love
rasmusluckow
330
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Transcript
ٕज़తෛ࠴ͱ͖߹͏ /BPZB*UP גࣜձࣾҰٳ$50
Ұٳͷհ ͔ΜͨΜʹ ্࣭ͳϗςϧཱྀؗϨετϥϯͷ༧Ϊϑτɻ॓ധ༧Ͱ༗໊Ͱ͕͢ɺ࠷ۙϨετϥϯ༧ओྗࣄۀنʹ
نײͳͲ • ैۀһ໊͘Β͍ɻ͏ͪΤϯδχΞ໊ఔ • ʹϩʔϯνɺ͋Ε͔Β – Ϩετϥϯ • αʔόʔఔ •
$ɺ7#ɺ1ZUIPOɺ+BWB4DSJQUɺ(Pɺ4XJGU – 8FCࠓͷͱ͜Ζ.JDSPTPGUςΫϊϩδ /&5$MBTTJD"41 – σʔλΤϯδχΞϦϯάपΓΠϯϑϥ1ZUIPOɺ/PEFɺ(P – 'BTUMZɺ"84 ɺ-BNCEB ɺ42-4FSWFS#JH2VFSZ3FETIJGU • ͨͩ͠ઈࢍҠߦதͰɺ·ͩΦϯϓϨ͋Δ
ΞδΣϯμ • ؒͷऔΓΈ – ٕज़ސͱͯ͠ܞΘͬͨؒ – $50ணҠߦͷ • ݹ͘ͳͬͨγεςϜͱͲ͏͖߹͖͔ͬͯͨ
ٕज़ސͷࠒͷͳ͠
Δ͜ͱલͷҰٳ h"ps://speakerdeck.com/kensuketanaka/modannaxian-chang-nisurutamenishi-jian-sitakoto
None
ٕज़ސͱͯ͠ܞΘΔ͜ͱʹ • ݄ʙ݄ • िʹҰɺ࣌ؒఔͷϛʔςΟϯά
݁Ռ • ΄ͲͰେ͖͘վળͨ͠ – (JU)VC'MPX – ίʔυϨϏϡʔ – (JU)VC +FOLJOTʹΑΔσϓϩΠͷࣗಈԽ
– 4FMFOJVN8FC%SJWFSʹΑΔ&&ςετ – 4MBDL 2JJUB5FBN
None
ͦͷޙվળΛଓ͚݄ͯࠒ $50ணલ • ϒϥϯνσϓϩΠڥ • 3VOOOJOHCFUBJOQSPEVDUJPO • ϩάͷՄࢹԽ4MBDL௨ʹΑΔΤϥʔݕ
None
͜Ε͡Ό͋ɺԿΛ࡞ͬͯΔ ͔Α͘Θ͔Βͳ͍ͷͰŋŋŋ QSPEVDUJPOʹݶΓͳ͍ۙ͘ %#ΛϨϓϦΧͯ͠ɺͦΕͰ ։ൃɻ %))ݴͬͯͨΑ
ΦϑΟεʹܝࣔ͢Δ͜ͱ Ͱɺো͕͋ͬͨΓ͢Δͱ ͙͢Θ͔Δ ログ環境とDevOps ~一休.comでの事例 h"ps://speakerdeck.com/shoichiron/roguhuan-jing-todevops-xiu-dot-comdefalseshi-li
݁Ռ • ϦεΫڐ༰ͷ্ˠՁఏڙεϐʔυͷ্ – ϦϦʔεස͕૿͑҆શʹͳͬͨ͜ͱͰɺมߋͷϦεΫ͕ݮͬͨ – ৫จԽʹେ͖͘ӨڹΛ༩͑ͨ • िΠν͔͠ϦϦʔεͰ͖ͳ͍ͷͰෆ۩߹Λग़͞ͳ͍Α͏ϐϦϐϦͯͨ͠Β͍͠ •
࠷ۙ࣌Ұ൪ϐϦϐϦ͍ͯͨ͠Ϧʔμʔ͕ʮͬͪΌ͑ΑʂʯΈ͍ͨͳ͍
None
一休.comのE2Eテスト事情 h"ps://speakerdeck.com/shotaakasaka/seleniumjp4-ikyu
None
ͦΜͳ͜ΜͳͰ͍Ζ͍Ζਐͨ͠Θ͚Ͱ͕͢ŋŋŋ • ࣄ͕͏·͘ਐΉͨΊʹେͩͬͨ͜ͱԿͩͬͨͷ͔ • ࣦഊͳ͔ͬͨͷ͔
ॏཁͩͬͨ͜ͱ • Λཧղ͠ɺཧ͢Δϓϩηεͷܧଓ • ʹ͍ͭͯܧଓతʹߟ͑ଓ͚Δश׳ ͦͦिʹ͔͠ߦͬͯͳ ͍ͷͰɺ࡞ۀ͠ͳ͍͠ɺ )PX5PΛৄࡉʹڭ͑ΒΕΔ Θ͚Ͱͳ͍
ࣄΛΒͳ͍֎ͷਓ͕นଧͪʹͳΔ͜ͱͰΛཧղ • ॳͷձ – Ұٳʮ(JU)VCͱ͔ςετͱ͔ͬͱϞμϯͳ։ൃ͕͍ͨ͠ΜͰ͢ʯ – OBPZBʮΔؾ͔࣋ͪΔ͕ɺ·ͣݱঢ়Λڭ͑ͯ͘Εʯ • ʙिʹҰͷϛʔςΟϯά –
"ʮࠓσϓϩΠपΓͷݱঢ়Λઆ໌͠·͢ʯ – OBPZBʮ͜͜ɺ͜͏͍͏͜ͱ ʯ – #ʮ͍ɺͦ͜͜Ε͜Ε͜͏͍͏ܦҢͰ͜͏ͳͬͯͯŋŋŋʯ – OBPZBʮͳΔ΄ͲɻͰͦΕແବͬΆ͍Ͷʯ – "ʮͦ͏Ͱ͢Ͷʯ
Λ၆ᛌతʹཧ͢Δ ͜ͷද͕େࣄͳͷͰͳ͘ɺ͜ΕΛ ࡞ΔϓϩηεͰͷཧղͱཧΛ ਐΊͨ͜ͱ͕େࣄ
ͦͦɺͳΜͰ͏·͍ͬͯ͘ͳ͔͔ͬͨ • ٕज़త՝Λු͖ூΓʹ͢Δଘࡏͷෆࡏ – ՝ͷݱঢ়ཧɺͷཧղΛਂΊΔϓϩηε͕͚͍ܽͯͨ – $50ෆࡏ DG3FCVJMEGN •
ܧଓతʹʹ͍ͭͯߟ͑ΔɾऔΓΉϓϩηε͕ͳ͔ͬͨ – Ұےೄʹ͍͔ͳ͍ଟ͍ˠܧଓతऔΓΈ͕ඞཁ – ݸʑਓͷҙ͚ࣝͩͰܧଓతʹऔΓΉͷ͍͠ ٕज़ސ͕ఆظతʹ๚ͯ͠ ͘Δɺͱ͍͏ͷ͕͜ΕΒΛղ ফ͢Δࡐྉͩͬͨͷ͔ͳͱ
Ұํɺࣦഊͨ͜͠ͱ • ݱঢ়൱ఆ͔Βೖͬͯ͠·ͬͨ͜ͱͰແ༻ͳۓுΛੜΜͩ – *4)*/ͱ͍͏ϓϩδΣΫτ໊ŋŋŋʮນ͞ΕΔଆ͔ͱࢥͬͨʯ • ݱߦγεςϜʹର͢ΔϦεϖΫτෆ – ࣗͨͪͷࠓ ച্ɺརӹɺڅྉ
͕ʮෛ࠴ʯʮϨΨγʔʯͱݺΜͰ ͍ΔͦΕ͔ΒੜΈग़͞Ε͍ͯΔ͜ͱΛΕ͍͚ͯͳ͍ – ͍ͬͯΕɺࣄۀతޭΛऩΊͨαʔϏε·ͣؒҧ͍ͳ͘ ϨΨγʔΛ๊͑Δ • ͦΕ͕વͳΜͩͱ͍͏લఏʹཱͭ ʮੋʑඇʑ͕ΤϯδχΞͷ࢟ Ͱ͠ΐʯਖ਼Ͱ͕͢ɺਓ ؒײͷੜ͖Ͱ͢
ֶΜͩ͜ͱ • ϐʔϓϧΣΞͷʮιϑτΣΞ։ൃ্ͷͷଟ͘ɺٕज़తͱ ͍͏ΑΓࣾձֶతͳͷͰ͋ΔɻʯΛͰ͍ͬͯͨ • ͷཧղٕज़తͳ)PX5P – ºʮ͜͏͋Δ͖Ͱ͠ΐʂʯ – ˓ʮͳͥͦ͏͋Δ͖ͷ͕ɺͦ͏ͳ͍ͬͯͳ͍ͷ͔ɻͦ͏ͳΒͳ
͔ͬͨͷԿͰͳͷ͔ʯͱ͍͏͍ • ͜ΕΛಥ͖٧Ί͍ͯ͘ͱɺٕज़ͷͰͳ͘ਓ৫ʹର͢ΔΞϓϩʔν͕ݟ ͑ͯདྷΔ
$50ணҎ߱ͷͳ͠
ࢁେ͖͔ͬͨ • ސͷؒͰ͍Ζ͍Ζਐḿͨ͠ͱࢥ͍͕ͬͯͨŋŋŋ • େ͖ͳۄ·͍ͩͭ͋ͬͨ͘ – Ͱ͢ΑͶ
• &MBTUJDJUZʹ͚ܽΔσʔληϯλʔΠϯϑϥ ΦϯϓϨϛε • ΦΦΧϛগԽ͍ͯ͠ΔΞϥʔτ௨ • ܦͰݹ͘ͳͬͨίʔυϕʔεɺΞʔΩςΫνϟ • ൿͷλϨԽͨ͠ɺۀʹߩݙ͍ͯ͠ΔϚʔέ༻ࣾ%#
• ະͩʹ"044-Խ͞Ε͍ͯͳ͍αʔϏε • ຑᙺ͍ͯͯ͠Α͘Θ͔Βͳ͘ͳ͍ͬͯΔॾʑ – ϕϯμʔʹࢧ͍ͬͯΔӡ༻อकྉͷଥੑ – ଓ͚Δඞཁ͕͋Δͷ͔ɺഇࢭ͍͍ͯ͠ͷ͔Θ͔Βͳ͍ϓϩηε – ΤϯδχΞ͕ͬͯΔಓ۩͕ݹΊ͔͍͠ – ͍ΖΜͳࡶ༻ʹΘΕΔ։ൃϚωʔδϟʔ
ͳͥސͷؒɺ͜ͷେ͖ͳʹखΛ͚ͭΒΕͳ͔ͬͨͷ͔ • ͦͷ͋ͨΓʹղ͖͕͋͘ΔͷബʑΘ͔͍ͬͯͨ • ਓؒຊೳతʹɺେ͖͗͢Δ͔ΒΛഎ͚Δੑ࣭ – ͍ࣗͬͪΐטΈͰ͖ͦ͏ͳ׆ൃʹٞ͞ΕΔ͕ɺઐత͔ ͭେ͖ͳʹ্Βͳ͍
վΊͯΛཧղ͠ɺཧ͢Δ͜ͱ͔Β࢝Ίͨ • ݱঢ়ΛௐࠪɻࢿྉʹαϚϦ͠આ໌Ͱ͖ΔϨϕϧ·ͰཧղΛਐΊΔ • ৽ਓͱͯ͠ͷΩϟονΞοϓͱͷҰੴೋௗ
None
None
None
γεςϜؔ࿈අ༻શͯ#*Ͱݟ͑ΔԽ
՝ײ͕Θ͔͖ͬͯͨͷͰ͍ͭͷΑ͏ʹཧͯ͠ŋŋŋ
ํΛ໌Β͔ʹͯ͠ɺల։
ඞཁͳΒ৫ͷܗม͑Δ͠ɺ෦ॺ࡞Δ %8)$3.ج൫ͳͲσδλϧ ϚʔέςΟϯάσʔλαΠΤϯ εʹඞཁͳج൫Λ։ൃɾӡ༻͢Δ νʔϜ
ࣄ͕ਐΈ͡ΊΔ • σʔληϯλʔˠΫϥυҠߦɻ͋ͱϲ݄Ͱྃ • େྔͷΞϥʔτˠϞχλϦϯάΛ࠶ߏͯ͠ཧ • ൿͷλϨ%#ˠ&NCVML EJHEBHͰ࠶ߏங • "044-Խˠྃ
• ຑᙺ͍ͯͯ͠Α͘Θ͔Βͳ͘ͳ͍ͬͯͨࣄฑ – ΤϯδχΞͷ੮ͷిˠશ෦औͬͬͨ – ࠪূͷͨΊ͚ͩͷνέοτˠ(JUͷཤྺͰ༻ͯ͠ࢭΊͨ – ӡ༻อकྉˠֹͷେ͖ͳͷΛਫ਼ࠪ͠ϕϯμʔͱՁ֨ަব – ΤϯδχΞͷಓ۩ˠ༧ࢉΛ֬อ͖ͯ͠ͳͷΛങ͑ΔϧʔϧΛ࡞ͬͨ – Ϛωʔδϟʔˠ։ൃνʔϜઐଐͷ૯Λޏͬͯશ෦ר͖औͬͯΒͬͨ
Γ͗͢Δਓͨͪ 曲面ディスプレイ 43インチ4Kモニタ 搬入時
Ͳ͏ΈͯήʔϛϯάΩʔϘʔυɻ ҰԠ੩ԻΒ͍͠Ͱ͢ŋŋŋ
ਓؾ&*;0ͷਖ਼ํܗϞχλ 'MFY4DBO&72ɻ 7JTVBM4UVEJPΛશը໘Խ͢Δͱ͢͜ ͿΔշదͩͦ͏Ͱ͢
എதΛԡ͢ • Πϯϑϥͷ৽͕ਐ·ͳ͔ͬͨͷ • ٕज़తʹࠔͳԿ͔ ن͕େ͖͗͢Δ • ˠಛघͰߴՁͳϋʔυΣΞΛ͍ͬͯͨͨΊɺͦΕΛࣺͯΔϦεΫ͕େ
͖͘ݱஅ͕͔ͬͨ͠ • ʮΠϯϑϥΛޙ·ͰʹΫϥυʹҠͯ͠ʯʮ͑ͬʯ – ํΛશࣾతʹ໌֬Խͨ͜͠ͱͰपลͷҙࢤܾఆʹྑ͍ • ৽͍͠ϓϩδΣΫτϚωʔδυαʔϏεΛར༻͢ΔલఏͰઃܭ͞ΕΔΑ͏ʹ ͦ͏͍ͨ͠ͱࢥ͍͚ͬͯͨͲɺ ୭͔͕എதΛԡ͞ͳ͍ͱඈͼࠐ Ίͳ͍ɺΈ͍ͨͳঢ়گΛଧ։
フォーカスすべき問題をクリアにすれば、あとはどういう物にすればいいかはエンジニアは知っている
ґଘؔΛղআ͢Δ • "044-Խ͕ਐ·ͳ͔ͬͨͷ • ΞϓϦέʔγϣϯΤϯδχΞΠϯϑϥଆͷ࡞ۀ͕େมͩͱࢥ͍ͬͯΔ • ΠϯϑϥଆΞϓϦέʔγϣϯΤϯδχΞ͕େมͩͱࢥ͍ͬͯΔ • ͓ޓ͍͕૬खͷ࡞ۀͪͩͱࢥ͍ࠐΈ
– ཁ݅Λཧͯ͠ɺґଘؔΛղআ͢Δ • ʮΞϓϦέʔγϣϯଆΛਐΊͯऴΘͬͨΒΠϯϑϥʹ࿈བྷͯ͠ʯ • ʮΞϓϦέʔγϣϯଆؾʹͤͣઃఆΛਐΊͯ࿈བྷ͕͋ͬͨΒΓସ͑ͯʯ • ͙͢ʹྃͨ͠ɻҰ෦αʔϏε'BTUMZͰ)551Խ
ӌճ࿏Λ௵ͯ͠ਖ਼໘ೖΓޱΛ։͚Δ • Ϛʔέ%#͕ൿͷλϨԽͯ͠͠·ͬͨͷ – ෳࡶͳཁ݅ ٕज़ͷબϛε ଐਓԽ –
ˠ୲͕ηΩϡϦςΟ্ͷࣄ͔Βᷖճ͢Δඞཁ͕͋Δŋŋŋͱࢥ͍ࠐΜͰͨ • جװ%#ԕ͍ˠ౿ΈͳͲͷᷖճ࿏Λܦ༝ͯࣾ͠ಧ͘&5- • ᷖճͷํ͕ಛघෳࡶͳ͍ͤͰ҉Խ • $*40ͱձ͠ɺ҆શ͕୲อ͞Εͨਖ਼໘ݰؔΛ࡞Δ – ͋ͱ&NCVML EJHEBHͰ&5- – 044Λૉʹ͏ – มΘͬͨ͜ͱͤͣɺγϯϓϧʹɻ
ຑᙺ͍ͯ͠Δ"T*Tͷ5P#FΛೝࣝͤ͞Δ • ΦΦΧϛগʹͳ͍ͬͯΔΞϥʔτϞχλϦϯά – ҟৗ͕ىͬͯ͜Δͷ͔ىͬͯ͜ͳ͍ͷ͔શવΘ͔Βͳ͍ – ϕςϥϯʮ͜Εεϧʔ͍͍ͯͭ͠ʯʮ͜Εμϝͳͭʯͱ͍͏҉ ͕͋ΔͷͰؾʹͳΒͳ͍ • ʮ͜Ε͜Ε͜͏͍͏ঢ়ଶʹ·Ͱ͍ͬͯͬͯཉ͍͠ʯͱ͍͏ظΛΫϦ
Ξʹ͢Δ
None
%BUB%PHͰϞχλϦϯάΞϥʔτΛ࠶ߏங • ணखͨ͠ΒͰ5P#Fͳঢ়ଶʹͳͬͨ – Կ͍··ͰͷܗͰͬͯͨͷԿͩͬͨΜͩײ
Γɺࣾձతͳ • ʮͳͥͦ͏͋Δ͖ͷ͕ɺͦ͏ͳ͍ͬͯͳ͍ͷ͔ɻͦͷݪҼԿ ͔ ʯ – ํ͕໌֬ʹͳ͍ͬͯͳ͍͜ͱ͕ϘτϧωοΫʹˠ໌֬ʹ͢Δ – ϧʔϧ͕Ұਓา͖ͯ͠ϘτϧωοΫʹˠࢥ͍ࠐΈΛऔΓআ͘ –
ෳࡶʹߟ͑͗ͯ͢ʮΕΔؾ͕͠ͳ͍ʯ͕ϘτϧωοΫʹˠγϯϓϧ ͳସҊΛఏࣔ͠τϨʔυΦϑΛڐ༰͢Δ
݁Ռ͕ग़࢝ΊΔ • ΫϥυҠߦͷ͓͔͛ͰώϧφϯσεΞλοΫͰམͪͳ͍ • &5-Λγϯϓϧʹ͓͔ͨ͛͛͠Ͱ%8)ߋ৽͕ྃޕޙˠૣேʹॖ͞ ΕΔ – ϚʔέςΟϯάࢪࡦͷճస্͕͕Δ • ΤϯδχΞͷୀࣾ࣌ࠁ͕ૣ͘ͳͬͨ
– ʮ͘Β͍લͬͯͳΜ͔ΈΜͳ͘·Ͱͬͯ·ͨ͠ΑͶʯʮ͔֬ʹŋŋŋͳΜ Ͱ͚ͩͬͨͬŋŋŋʯ
ྑ͔ͬͨྑ͔ͬͨŋŋŋͱݴ͍͍ͨͱ͜Ζ͕ͩ
• &MBTUJDJUZʹ͚ܽΔσʔληϯλʔΠϯϑϥ ΦϯϓϨϛε • ΦΦΧϛগԽ͍ͯ͠ΔେྔͷΞϥʔτ௨ • ܦͰݹ͘ͳͬͨίʔυϕʔεɺΞʔΩςΫνϟ • ൿͷλϨԽͨ͠ɺۀʹߩݙ͍ͯ͠ΔϚʔέ༻ࣾ%#
• ຑᙺ͍ͯͯ͠Α͘Θ͔Βͳ͘ͳ͍ͬͯΔॾʑ – ϕϯμʔʹࢧ͍ͬͯΔӡ༻อकྉͷଥੑ – ଓ͚Δඞཁ͕͋Δͷ͔ɺഇࢭ͍͍ͯ͠ͷ͔Θ͔Βͳ͍ϓϩηε • දྫŋŋŋࠪূͷͨΊͷ3FENJOFνέοτىථ – ͬͯΔಓ۩ ϋʔυ ͕ݹΊ͔͍͠ – ͍ΖΜͳࡶ༻ʹΘΕΔ։ൃϚωʔδϟʔ ʮҰ൪հͦ͏ͳͰ͚͢Ͳ͜ ΕͲ͏ͳͬͨΜͰ͢ ʯ ʮŋŋŋʯ
技術的負債 த৺ʹ͔͏΄Ͳਂࠁ͕ େ͖͍ͱ͢Δ
पล͔Γ͕ղܾ͞Ε͍ͯͯɺҰ൪େ͖ͳ͕ղܾ͞Ε͍ͯͳ͍ 技術的負債 レガシー アーキテクチャ 問題 (JU)VC σϓϩΠ ࣗಈԽ ϩάͷՄࢹ Խ
4MBDL ใڞ༗ ϏϧυύΠ ϓϥΠϯ
ল • ৫తίϯαϧతͳΞϓϩʔνʹཔΓ͖͗ͨ͢Β͍ – ݁Ռɺຊؙʹख͕͔ͭͳ͍ͱ͍͏ঢ়گʹ – େ͖ͳʹखΛग़͍ͯ͠ΔͭΓͰ͍͕ͨɺϚΫϩʹΓʮղ ͚ΔൣғͷΛղ͍͍ͯΔʯঢ়گΛ͍ͤͯͳ͔ͬͨ ʮଟ͘ͷࣾձతͰ͋Δͷ ΄Μ·ͳʙʯͱ͍͏ޭମݧ͕
अຐΛͨ͠
ਖ਼͢·Μ͔ͬͨɻͪΌΜͱ ٕज़ͷʹٕज़ͰΞϓϩʔ ν͢ΔͰ
͏ͻͱͭؾ͍ͮͨ͜ͱ • Ͳ͏Β$50Ͱ͋Δࢲͷ͋Μ·ΓΈΜͳؾʹͯ͠ͳ͍ͬΆ͍ – ࣄۀ෦ͷΤϯδχΞͷେ͖ͳΛϦϑΝΫλϦϯάʹ͏ͧʂͱͳΔͱͦΕ ͳΓͷઆಘίετ͕͔͔Γͦ͏ – ʮ$50͕͖ʹͬͯΔʯͱ͍͏ͷͲ͏Β୭ؾʹͯ͠ͳ͍ͬΆ͍
ŋŋŋͱ͍͏Θ͚Ͱɺٕज़తΞϓϩʔνΛ։࢝ • Ҏ্લʹϩʔϯνͯ͠ɺͣͬͱͦͷ··։ൃ͖ͯͨ͠ҰٳϨετϥϯ ࣄۀ৳ͼΓ – $MBTTJD"417#4DSJQU – 044ք۾Ͱ͍͏ͱੲͷ1)1Έ͍ͨͳײ͡ •
Ͳ͏͢Δ – /&5ʹҠߦ͢Δ $ͰϦϥΠτ͢Δ – 8JOEPXTϓϥοτϑΥʔϜ – ·ͣςετΛॻ͘ – όοΫΤϯυΛ"1*Խͯ͠Ϟμϯͳϑϩϯτͱ
ݸਓతͳաڈͷল͔Β • ए͔Γ͜͠Ζɺنײ՝ͳͲΛ͋·Γؾʹ͍͖ͤͣͳΓϦϑΝ ΫλϦϯά͔Βೖͬͨ͜ͱ͕͋ͬͨ – ͏·͍ͬͨ͘͜ͱ͋Δ – Ұํɺࣦഊͨ͜͠ͱ͋Δˠத్ͳͷ͕৽ͨͳෛ࠴ʹŋŋŋ
ࣗࣾͷաڈͷল͔Β • աڈʹओྗࣄۀͷେنͳγεςϜϦχϡʔΞϧ – ϏοάϦϥΠτ $MBTTJD"41͔Β/&5Ҡߦ – ϦχϡʔΞϧʹର͢Δظ͕ߴ·Γ͗ͯ͢ɺେখ͋ΒΏΔཁ͕݅ϦχϡʔΞϧ ʹدͤΒΕΔ
– ϓϩδΣΫτن͕େ͖͘ͳΓ͗͢ऩଋ·Ͱʹͱͯۤ࿑ͨ͠Β͍͠ • ΞʔΩςΫνϟඞཁΑΓෳࡶͳͷʹͳͬͯ͠·ͬͨ • ল͔Β – ԿͷΛղܾ͍ͨ͠ͷ͔ɺͦͷϑΥʔΧεΛ͖ͬΓͤ͞Δ – ؔ৺ࣄΛ໌֬ʹ͠είʔϓΛখ͘͞ɻ࠶ઃܭʹ,*44ݪଇΛΕͳ͍
ղܾࡦΑΓલʹ࣮ΛಡΈݱߦγεςϜͷ՝Λ໌Β͔ʹ͢Δ • ͬͺΓʮΛཧղ͢Δʯͱ͍͏جຊ่࢟͞ͳ͍ • Δؾ࣋ͪΛ͑ɺݱߦγεςϜੳΛͬ͘͡Γߦ͏ ʮԶͷ7JTVBM4UVEJPʯ BLB&NBDT ˞স͏ͱ͜ΖͰ͢
ಓʹίʔυϦʔσΟϯά • 6OJWFSTBMDUBHT IUUQTDUBHTJP Ͱλά͚ – ΞΫςΟϒʹϝϯς͕ଓ͍͍ͯΔDUBHT • BOZUIJOHZBFUBHTͱBOZUIJOHDNPDDVSTͰιʔείʔυΛΓา͘ –
ΠϯΫϦϝϯλϧʹγϯϘϧΛߜΓࠐΈ֘ՕॴʹδϟϯϓͰ͖Δ&NBDT֦ு – ϞμϯͳΤσΟλͰ͋Εಉ༷ͷػೳ͕͋Δͣ
ಡΈ࢝Ίͨྑ͍͕ɺԿΛख͕͔ΓʹݴޠԽ͢Δ͔ • ൺֱର͕ཉ͍͠ – ൺֱͳ͘ݱঢ়Λઆ໌͍ͯ͘͠ͷɺળ͠ѱ͠Θ͔ΓͮΒ͍ – ຊਓཧղͰ͖ͯपғͷਓʹઆ໌ͮ͠Β͍ •
ڞ௨ݴޠతͳͷͱൺֱ͢Δͷ͕ྑͦ͞͏ – અࢠɺͦΕʮύλʔϯʯ
ΠσΟΦϜɺσβΠϯύλʔϯɺΞʔΩςΫνϟύλʔϯ • ʮΞʔΩςΫνϟʯͷจ຺ͷύλʔϯͩͱओʹҎԼͷࡾ͔ͭ – ΞʔΩςΫνϟύλʔϯŋŋŋཻେ – σβΠϯύλʔϯŋŋŋத – ΠσΟΦϜ ϓϩάϥϛϯάύλʔϯ
ŋŋŋখ • ཻେ͖Ί͔Βੳ͍ͨ͠ – ΑͬͯɺΞʔΩςΫνϟύλʔϯͷΧλϩά͕͋Ε͍͍ – અࢠɺͦΕ1PG&"" ΤϯλʔϓϥΠζΞϓϦέʔγϣϯΞʔΩςΫνϟύλʔ ϯ ͕Α͘ΒΕͨද
1PG&"" 1BUUFSOTPG&OUFSQSJTF"QQMJDBUJPO"SDIJUFDUVSF ஶऀϚʔνϯɾϑΝϥʔ ʮͨͱ͑܅͕ͨͪͬͯΔ"DUJWF3FDPSE ͯͷ͜ͷຊͰղઆ͞Ε͍ͯΔύλʔϯͷҰ ͭͳΜͩΑɺ͑ͬΜʯ
ϨΠϠԽΞʔΩςΫνϟͷύλʔϯΧλϩάͷ၆ᛌਤ JEBTBLJDIZ͞ΜͷϒϩάΑΓ h"p://d.hatena.ne.jp/asakichy/20120611/1339366061
ύλʔϯͱ࣮Λൺֱ͠ͳ͕Βߏ՝Λ໌Β͔ʹ͢Δ パターンにはそれぞれ長所・短所がある。パターンを基準に分類していくと自分たちのシステムの構造的 な長所や短所を言語化しやすかった
͜͏ͯ͠ϨΠϠ͝ͱʹΛཧղ͠ͳ͕ΒݴޠԽ͍͖ͯ͠ŋŋŋ
Ճ͑ͯɺ՝͚ͩͰͳ͘ॴ໌Β͔ʹ͢Δ
ݱঢ়͕ݴޠԽͰ͖ͨΒ5P#Fߟ͑ͯΈΔ
ࠒ։ൃऀ͕ײ͡ΔετϨεͱͷϚοϐϯάΛߦ͏
υϝΠϯͷΑΓਂ͍ཧղฒߦͯ͠ߦ͏ • ࣄۀऀɺϚʔέςΟϯάɺӦۀͱͷձػձΛ૿͢ • ϓϩμΫτઓུ͓ΑͼϓϩμΫτϚωδϝϯτʹࣗՃΘͬͯυ ϝΠϯͷࣝΛ૿͢
ͷཧղ͕ਐΉʹͭΕݱ࣮తͳਐΊํ͕ݟ͑ͯ͘Δ • ϏοάϦϥΠτΛ͠ͳͯ͘গͣͭ͠ృΓସ͍͚͑ͯͦ͏ – ϖʔδίϯτϩʔϥ τϥϯβΫγϣϯεΫϦϓτͷΈ߹ΘͤͳͷͰϖʔδ ୯ҐͰͷ࣮ͷಠཱੑ͕ߴ͍ – σʔλϚούͰநԽ͢Δ͜ͱͰཧ σʔλϕʔε
ͦͷ··ɺ৽͍͠υ ϝΠϯΦϒδΣΫτΛಋೖͰ͖ͦ͏
ݴޠબఆݱࡏͷॴΛͳΔ͘อଘ͢Δ͜ͱΛඪʹͨ͠
৽͍࣮͠ബ͍ϑϨʔϜϫʔΫɺബ͍࣮Λࢦ͢ • ՝ʹ߹ΘͤΔ – σʔλߏΛڧ੍͢ΔϑϧελοΫͳͷ࠾༻ͮ͠Β͍ – ͱͱઃܭෳࡶͰͳ͍ɻෳࡶͳΞʔΩςΫνϟΛ࣋ͪࠐΉͷຊస – ബ͍࣮͕ϕετ •
ࢀߟʹͨ͠ͷŋŋŋ͍͖͞ΐ͏ͷ;ΕʔΉΘʔͯ͘ͳڭՊॻ – IUUQTXXXTMJEFTIBSFOFUDIPZBQDBTJB – IUUQTHJUIVCDPNIBUFOB)BUFOB5FYUCPPL
ࢀߟʹͨ͠ͷͲΜͳΞʔΩςΫνϟίϯηϓτ͔ • ಡΉίʔυ͕࠷খ ڞಉ։ൃͷͨΊʹ – ݶΓͳ͘ബ͍ϑϨʔϜϫʔΫ㲈ઃܭࢦŋŋŋಡΉίʔυ࠷খ – ڞಉ։ൃʹඞཁͳͷڞ௨ͷ࣮Ͱͳ͘ɺڞ௨ͷઃܭࢦ
• ҆શͰ͋Δ͜ͱ ৴པੑઃܭ – ةݥͳ͜ͱΛ͢ΔͨΊʹΑΓଟ͘ͷίετ͕ඞཁʹͳΔΑ͏ʹ • σϑΥϧτͰ҆શɻةݥͳ͜ͱΛ͢Δʹ໌ࣔతͳએݴ – 42-Ͱ*0͢Δͷίετ͕ඞཁͳ͜ͱˠ؆୯ʹҾ͚ΔΑ͏ʹ͗͢͠ͳ͍ • ίετ͕͔͔Δ͜ͱΛศརʹ͍͚ͯ͠ͳ͍ cf. ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく h"ps://www.slideshare.net/cho45/yapc-asia-2011
ϓϩτλΠϐϯάŋŋŋΛཧղ͢ΔɺԾઆݕূͷͨΊͷࢼ࡞ • 1ZUIPO – ΤίγεςϜ͕ࡢࠓͷτϨϯυ͋Γ׆ൃɻܧଓੑظͰ͖Δ – ֶशίετ͕͍ – ͍·ར༻͍ͯ͠Δݴޠͱɺಛੑ͕େ͖͘มΘΒͳ͍ –
8JOEPXTͰɺNBD04Ͱ։ൃͰ͖Δ • 'MBTL 3PVUJOH ΞϧϑΝఔͷখ͞ͳϑϨʔϜϫʔΫ • 03.ͳ͠ – %BUB.BQQFSͱɺ1MBJO0ME1ZUIPO0CKFDUͳυϝΠϯΦϒδΣΫ τ
モデル (データソース層、ドメイン層) データソースからユビキタス言語へのマッピングも
値オブジェクト Enum や namedtuple など標準でミニマムな機能で シンプルなオブジェクトとして表現する
コントローラ (Flask では "View") KISS ・・・ 凝ったことはしない
Plain なオブジェクトなのでテストも楽 実行も速い
ਐͲ͏Ͱ͔͢ • ࣮։͔࢝Βϲ݄ऑͰओཁͳը໘֓Ͷಈ͘Α͏ʹ – ϑϩϯτΤϯυผνʔϜ͕վળΛଓ͚͍ͯΔ • γϯϓϧͳΞʔΩςΫνϟײ৮ • ͜ͷ··1ZUIPOͰ͍͘ͷ
– ೝূपΓΛͳ͘طଘ࣮ͱڞଘͰ͖ͯɺ42-4FSWFSυϥΠόͷੑೳʹ ͕ͳ͚Εŋŋŋ – 1ZUIPOͷ5ZQF)JOUTͷಋೖΛݕ౼த
Ҿ͖ଓ͖ɺ͕ΜΔ͍ͧ
ओு
ٕज़తෛ࠴ͷ৫γεςϜʹݻ༗ͷͷ • ৫ɺγεςϜʹݻ༗ͷͷɻҰൠԽ͢Δͷ͍͠ – ࡞Γ͕͍͍͠ͷ͔ɺѱ͍ͷ͔ɻͲΜͳઃܭ͕͍͍ͷ͔ѱ͍ͷ͔Ұ֓ʹݴ͑ͳ͍ • υϝΠϯɺ๊͍͑ͯΔσʔλɺఀࢭແఀࢭɺ৫ͷέΠύϏϦςΟɺ͜Ε·ͰͷܦҢɺ͔͚ΒΕΔ ίετ ࣄۀঢ়گ ŋŋŋඇৗʹͨ͘͞Μͷม
– ͔ͩΒͦ͜ɺͦͷݻ༗ͷΛཧղ͢ΔݟۃΊΔ͜ͱ͕ॏཁ • Λਖ਼͘͠ཧղ͢Δલʹղܾ͢Δ͜ͱΛٸ͗͗͢ͳ͍ • ͦͷݻ༗ͷͱηοτͰߟ͑ͳ͍ͱγεςϜϓϩηεͷଥੑධՁͰ͖ͳ͍ – ˓˓ΛͬͯΔ͔Β͍͍ɺ˚˚Λͬͯͳ͍͔Βμϝͱ͍͏͜ͱͰͳ͍
ҰํɺྲྀߦσϑΝΫτελϯμʔυ͓ͬͯ͘ͱʹཱͭ • ੈͷதͰΑΓγϯϓϧͳΓํͰͦͷΛղܾ͢ΔΞΠσΞ͕ڞ༗͞Ε͍ͯΔ – ϕετɾϓϥΫςΟε – ͨͱ͑ɺ5IF5XFMWF'BDUPS"QQ • Βͣʹ࡞ΓࠐΉͱɺΞϯνύλʔϯΛ౿ΜͰෛ࠴ʹͳΓ͍͢ •
৫తʹਓࡐ͕ଟ༷ͩͱΑΓ෯͘ελϯμʔυΛΔ͜ͱ͕Ͱ͖Δ – -JOVY044ͳࢲ͕.JDSPTPGUͳҰٳʹ – ಛఆٕज़ʹͩ͜ΘΒͣਓࡐ࠾༻ͷ෯Λ֦͛ͨ
ʹ͍ͭͯߟ͑Δ͜ͱେࣄɺҰํɺͱ͖ʹେࣄ • ʹ͍ͭͯߟ͑͗ͯ͢಄Ͱ͔ͬͪʹͳΔͱͷ͝ͱ͕ਐ·ͳ͍ • खΛಈ͔ͨ͠΄͏͕ͷཧղ͕ૣ͍໘ͱͯଟ͍ – ϓϩτλΠϐϯάɺτϥΠΤϥʔ 図解・拙速は巧遅に勝る http://blog.kentarok.org/entry/2017/01/17/002401
ؒͷॴײ • େ͖͍͔ΒΛഎ͚ͣϑΥʔΧε͢Δ – ͏ɺຊʹɻ͜Εສճ͙Β͍಄ͷதͰ࠶ੜͨ͠ – ʮԶେ͖ͳʹ͖߹ͬͯΔʯͱࢥͬͯͯɺແҙࣝʹେมͳΛආ͚ ͕֮ͯͯࣗͳ͍ •
͡Ό͋ސब࣌ʹ͍͖ͳΓҰ൪େ͖ͳʹ͔ͬͯͨΒΑ͔͔ͬͨͱ ͍͏ͱͦ͏ͱݴ͑ͳ͍ – ͍͖ͳΓΞʔΩςΫνϟʹखΛग़͍ͯͯ͠ɺՌͨͯ͠ޭ͔ͨ͠ ແཧήʔ – ղܾͷޭମݧΛੵΈॏͶ͖͔ͯͨΒͦ͜ɺΕΔಓے͕Έ͑ͨͱ͍͏ͷ ͋Δ
ཁ͢Δʹɺόϥϯεॏཁ 長々と喋った割に、いつもどおり、極めて無難な結論に達してしまいました
·ͱΊ • ٕज़తෛ࠴ͱ͖߹͖ͬͯͨؒ • ܧଓͯ͠ߟ͑ଓ͚Δ͜ͱ͕େࣄ • Λཧղ͢Δɺਖ਼͍͠ʹϑΥʔΧε͢Δ͜ͱ͕େࣄ • ͳΜ͔ͩΜͩͰɺόϥϯεॏཁ