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
78k
256
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
技術的負債と向き合う
オープンセミナー2017@岡山での発表スライドです
Naoya Ito
May 15, 2017
More Decks by Naoya Ito
See All by Naoya Ito
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
4.3k
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
13
4.7k
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
21
8k
Functional TypeScript
naoya
19
6.9k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
77
38k
シェルの履歴とイクンリメンタル検索を使う
naoya
16
6.8k
20230227-engineer-type-talk.pdf
naoya
91
87k
関数型プログラミングと型システムのメンタルモデル
naoya
63
110k
TypeScript による GraphQL バックエンド開発
naoya
29
38k
Other Decks in Technology
See All in Technology
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
260
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
4
1.6k
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
150
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
280
Webとヘルスデータ
yukukotani
1
190
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
600
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.6k
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
160
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
110
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
330
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
160
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Navigating Weather and Climate Data
rabernat
0
510
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Amusing Abliteration
ianozsvald
1
290
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Building Applications with DynamoDB
mza
96
7.2k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
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
ؒͷॴײ • େ͖͍͔ΒΛഎ͚ͣϑΥʔΧε͢Δ – ͏ɺຊʹɻ͜Εສճ͙Β͍಄ͷதͰ࠶ੜͨ͠ – ʮԶେ͖ͳʹ͖߹ͬͯΔʯͱࢥͬͯͯɺແҙࣝʹେมͳΛආ͚ ͕֮ͯͯࣗͳ͍ •
͡Ό͋ސब࣌ʹ͍͖ͳΓҰ൪େ͖ͳʹ͔ͬͯͨΒΑ͔͔ͬͨͱ ͍͏ͱͦ͏ͱݴ͑ͳ͍ – ͍͖ͳΓΞʔΩςΫνϟʹखΛग़͍ͯͯ͠ɺՌͨͯ͠ޭ͔ͨ͠ ແཧήʔ – ղܾͷޭମݧΛੵΈॏͶ͖͔ͯͨΒͦ͜ɺΕΔಓے͕Έ͑ͨͱ͍͏ͷ ͋Δ
ཁ͢Δʹɺόϥϯεॏཁ 長々と喋った割に、いつもどおり、極めて無難な結論に達してしまいました
·ͱΊ • ٕज़తෛ࠴ͱ͖߹͖ͬͯͨؒ • ܧଓͯ͠ߟ͑ଓ͚Δ͜ͱ͕େࣄ • Λཧղ͢Δɺਖ਼͍͠ʹϑΥʔΧε͢Δ͜ͱ͕େࣄ • ͳΜ͔ͩΜͩͰɺόϥϯεॏཁ