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
4年の開発が積み重なったアプリへのリファクタリング手法
Search
Jun Ikeda
March 12, 2018
Technology
2
2.4k
4年の開発が積み重なったアプリへのリファクタリング手法
Jun Ikeda
March 12, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
【あのMCPって、どんな処理してるの?】 AWS CDKでの開発で便利なAWS MCP Servers特集
yoshimi0227
6
730
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
250
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
540
第64回コンピュータビジョン勉強会「The PanAf-FGBG Dataset: Understanding the Impact of Backgrounds in Wildlife Behaviour Recognition」
x_ttyszk
0
170
AWS CDKの仕組み / how-aws-cdk-works
gotok365
10
890
Reach American Airlines®️ Instantly: 19 Calling Methods for Fast Support in the USA
flyamerican
1
180
Four Keysから始める信頼性の改善 - SRE NEXT 2025
ozakikota
0
210
Delegating the chores of authenticating users to Keycloak
ahus1
0
180
VGGT: Visual Geometry Grounded Transformer
peisuke
1
620
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
2
220
freeeのアクセシビリティの現在地 / freee's Current Position on Accessibility
ymrl
2
280
Lakebaseを使ったAIエージェントを実装してみる
kameitomohiro
0
180
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
KATA
mclloyd
30
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Fireside Chat
paigeccino
37
3.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
980
Become a Pro
speakerdeck
PRO
29
5.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Transcript
ͷ։ൃ͕ੵΈॏͳͬͨ ΞϓϦͷϦϑΝΫλϦϯάख๏ :BIPP+"1"/ాಯ 1
w γεςϜͱνʔϜΛΔ w ͏ٕज़ΛܾΊΔ w औΓΜͰ͍Δઃܭख๏ w औΓΜͩ݁Ռ ࣍ 2
˞͋͘·Ͱख๏ઃܭͷҰྫͰ͢ɻ 3
γεςϜͱνʔϜΛΔ 4
w ݄ʹϦϦʔεͯ͠ܦ͍ͬͯΔ w .71.77.ͳͲͷΞʔΩςΫνϟະಋೖ w "DUJWJUZ'SBHNFOUʹϩδοΫ͕࣮͞Εͯ ͍ΔՕॴଟ͍ w ࣭ͱ։ൃεϐʔυͷ୲อ͕͍͠ঢ়ଶʹ :BIPPχϡʔεΞϓϦ
5
νʔϜͷঢ়گ w "OESPJEΤϯδχΞ໊ɻ w "͞Μɿ͘Β͍୲ w #͞Μɿ͘Β͍୲ w ࢲɿ݄͔Β୲ 6
w .71.77.ͳͲͷΞʔΩςΫνϟະಋೖ w 7JFXʹϩδοΫ͕࣮͞Ε͍ͯΔ w ਓͷதͩͱ͕ࣗҰ൪ઃܭͷܦݧ͋Δ ίʔυݹ͍͠ɺͬͦ͘͞ϦϑΝΫλͯ͠Δʂ 7
w ؒ.71.77.ͷΈͳ͠ w 7JFXʹϩδοΫ͕࣮͞Ε͍ͯΔ w ਓͷதͩͱ͚ࣗͩγχΞΤϯδχΞɺઃܭͷܦݧ͋Δ ίʔυݹ͍͠ɺͬͦ͘͞ϦϑΝΫλͯ͠Δʂ μϝ 8
͍͖ͳΓணख͠ͳ͍ w αʔϏεγεςϜͷ͜ͱΛΒͳ͍ͱྑ͍બ͕Ͱ͖ͳ͍ɻ w ։ൃνʔϜͰߦ͏ͷɻνʔϜϝϯόʔΛΔ͜ͱେɻ w ݱίʔυͰଟ͘ͷϢʔβʔʹͬͯΒ͍ͬͯΔ͠ɺ ച্্͍͛ͯΔɻಈ͍͍ͯΔίʔυʹͬͱϦεϖΫτΛɻ w ϲ݄͘Β͍։ൃۀΛߦ͍ͳ͕Β؍ͨ͠ɻ
9
؍ɿγεςϜΛΔ w ϩʔΧϧ%#ͷΩϟογϡ w هࣄछผͷ͕ࣝଟ͍ ΧςΰϦɾτϐοΫεɾ߸֎ w #''ͳ͘ɺෳͷ"1*Λୟ͍ ͯͭͷϦετΛ࡞Δ͜ͱඞ
ཁ γεςϜͷಛੑ 10
؍ɿγεςϜΛΔ w ϩʔΧϧ%#ͷΩϟογϡ w هࣄछผͷ͕ࣝଟ͍ ΧςΰϦɾτϐοΫεɾ߸֎ w #''ͳ͘ɺෳͷ"1*Λୟ͍ ͯͭͷϦετΛ࡞Δ͜ͱඞ
ཁ γεςϜͷಛੑ w σʔλऔಘઌΛநԽ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ͍ͨ͠ w ෳͷ"1*͔ΒඇಉظͰऔಘɺ ͪ߹ΘͤɺΈ߹Θͤ ղܾ͍ͨ͜͠ͱ 10
w ΞϓϦʹݶΒͣ χϡʔεαʔϏεͷ͕ࣝ๛ w 7JFXपΓͷ࣮͕ಘҙ w 3Y+BWB%*ͷܦݧ ͋·Γͳͦ͞͏ ؍ɿνʔϜΛΔ 11
w ΞϓϦʹݶΒͣ χϡʔεαʔϏεͷ͕ࣝ๛ w 7JFXपΓͷ࣮͕ಘҙ w 3Y+BWB%*ͷܦݧ ͋·Γͳͦ͞͏ ؍ɿνʔϜΛΔ w
ͷڥքਓʹஅ ͯ͠Β͓͏ w ະܦݧͷٕज़Λͨ͘͞Μಋೖ ͢Δͷֶशίετߴ͍ 11
͏ٕज़ΛܾΊΔ 12
ࢦ͢͜ͱΛ໌֬ʹ w ׳Εɾ؆୯ΑΓɺΈ͕γϯϓϧͰมߋʹڧ͍͜ͱ w ఆٛݪཧͷਖ਼͠͞ΑΓࣗͨͪʹ߹͏͜ͱ w Ϟμϯελϯμʔυͳٕज़ʹै͢Δ͜ͱ ઃܭٕज़બఆͷஅ࣠ 13
αʔϏεಛੑʹ߹͏ w σʔλऔಘઌΛநԽ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ͍ͨ͠ w ෳͷ"1*͔ΒඇಉظͰऔಘɺ ͪ߹ΘͤɺΈ߹Θͤ ؍ͯ͠ݟ͚ͭͨղܾ͍ͨ͜͠ͱ
14
αʔϏεಛੑʹ߹͏ w σʔλऔಘઌΛநԽ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ͍ͨ͠ w ෳͷ"1*͔ΒඇಉظͰऔಘɺ ͪ߹ΘͤɺΈ߹Θͤ ؍ͯ͠ݟ͚ͭͨղܾ͍ͨ͜͠ͱ
ϦϙδτϦύλʔϯ %%%ͷΦϒδΣΫτ 3Y+BWB ղܾͷͨΊͷٕज़ 14
͍͖ͳΓֶशίετΛ্͛͗͢ͳ͍ 3Y+BWB ະܦݧͩͱ͜ΕͭͰ ֶशίετߴ͍ -JWF%BUB %BUB#JOEJOH ·ͣ3Y+BWBʹ׳ΕͯΒ͏ %BHHFS ·ͣίϯετϥΫλΠϯδΣ Ϋγϣϯ͢Δ͜ͱʹ׳ΕͯΒ
͏ʢ,PUMJOͷσϑΥϧτҾʣ ࠾༻ ࠓճݟૹΓ 15
ܾΊͨཧ༝ΛυΩϡϝϯτʹ͢ w ࢦ͍ͯ͠Δ͜ͱ w αʔϏεͷಛੑ w ղܾ͍ͨ͜͠ͱ w ΞʔΩςΫνϟͷ֓ཁ w
࣮ͷͨΊͷϥΠϒϥϦͨͪ w ύοέʔδߏ w ଥڠͨ͠ w ࠾༻Λݟૹͬͨͷʢͱͦͷཧ༝ʣϦετ w ࢀߟʹͨ͠ॻ੶8FCϖʔδ ͳͥ͜͏ͳͬͯΔʁΛઆ໌ Ͱ͖Δ ٕज़ͷਐาʹ߹Θͤͯɺ ܧଓతʹมߋͰ͖ΔΑ͏ʹ͢ Δ 16
औΓΜͰ͍Δઃܭख๏ 17
.77. ϨΠϠʔԽ 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX w ΞʔΩςΫνϟ .77. ϨΠϠʔԽ
18
3FQPTJUPSZ w σʔλͷอଘͱऔಘ w 8FC"1*ͱϩʔΧϧʢ%# 1SFGFSFODFTʣΛநԽ 3FQPTJUPSZ %PNBJO 7JFX.PEFM
7JFX 19
%PNBJO w ϏδωεϩδοΫ%PNBJOʹด͡ࠐ ΊΔ w ,PUMJOͷEBUBDMBTTΛͬͯΦϒ δΣΫτΛ࣮ w ෭࡞༻ͷͳ͍ؔΛ࣋ͭ 3FQPTJUPSZ
%PNBJO 7JFX.PEFM 7JFX 20
7JFX.PEFM 7JFX.PEFM w දࣔͷͨΊͷঢ়ଶཧ w 7JFXΠϕϯτ͔Βඞཁͳॲཧ࣮ߦ 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX
21
7JFX w 7JFX.PEFM͔ΒྲྀΕ͖ͯͨσʔλʹ Ԡ͢Δ͚ͩɺϩδοΫΛ࣋ͨͳ͍ w JG จࣈྻ͕ۭ ͷΑ͏ͳఆϩδοΫΛ ॻ͍ͪΌͩΊ w
"DUJWJUZ$POUFYU7JFX͚ͩͰ͏ɺ 7JFXҎ֎"QQMJDBUJPO$POUFYU 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX 22
7JFX͔ΒϩδοΫΛണ͕͢ w ͜Ε·Ͱ7JFXʹϩδοΫ͕ॻ͔Ε͍ͯͯɺͦΕʹ׳Εͨঢ়ଶ ͩͬͨɻ w ॳาతͳ༰͕ͩɺ·ͣͱʹ͔͘7JFXͱϩδοΫΛ͢Δɻ 23
7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ %PNBJO 24
7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ 7JFX %PNBJO 24
େྔͷJT&NQUZ ఆ͕ϘσΟϒϩʔͷΑ͏ʹμϝʔδΛ༩͑Δɻɻɻ 7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ 7JFX %PNBJO 24
7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 25
7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 25
7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 7JFX 25
ίʔυཧͷεςοϓ 7JFX 26 ϩδοΫ" 7JFX 7JFX w 7JFXʹϩδοΫ͕ ॻ͔Ε͍ͯΔঢ়ଶ w
ಉ͡ϩδοΫ͕ෳͷը໘ ʹॏෳ͍ͯ͠Δ ϩδοΫ" ϩδοΫ" ϩδοΫ$ ϩδοΫ# ϩδοΫ#
7JFX 27 7JFX 7JFX ϩδοΫ$ ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ#
ίʔυཧͷεςοϓ
7JFX 27 w ཧͯ͠%PNBJOʹ ϩδοΫΛҠಈ %PNBJO %PNBJO 7JFX 7JFX ϩδοΫ$
ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ# ίʔυཧͷεςοϓ
৽7JFX 27 w ཧͯ͠%PNBJOʹ ϩδοΫΛҠಈ %PNBJO %PNBJO 7JFX 7JFX ϩδοΫ$
ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ# ίʔυཧͷεςοϓ w ͭͷը໘ͷ7JFXΛ ॻ͖͑Δ
ϩδοΫ" ϩδοΫ" ϩδοΫ# ৽7JFX 28 7JFX ϩδοΫ$ %PNBJO %PNBJO ϩδοΫ"
ϩδοΫ# ίʔυཧͷεςοϓ w ผͷը໘%PNBJOʹҠಈ ͨ͠ϩδοΫΛ͏Α͏ʹ ͢Δ 7JFX
৽7JFX 28 w 7JFXͷίʔυ͕ݮΔ 7JFX ϩδοΫ$ %PNBJO %PNBJO ϩδοΫ" ϩδοΫ#
ίʔυཧͷεςοϓ w ผͷը໘%PNBJOʹҠಈ ͨ͠ϩδοΫΛ͏Α͏ʹ ͢Δ 7JFX
৽7JFX 29 %PNBJO %PNBJO ϩδοΫ" ϩδοΫ# 7JFX ϩδοΫ$ ίʔυཧͷεςοϓ 7JFX
w ίʔυ͕ݮͬͨ7JFXΛ ॻ͖͑Δ
৽7JFX 29 w ը໘୯ҐͰϦϑΝΫλΛ ྃͤ͞ɺશମͷஔ͖͑Λ ࢦ͢ %PNBJO %PNBJO ϩδοΫ" ϩδοΫ#
৽7JFX 7JFX ϩδοΫ$ ίʔυཧͷεςοϓ w ίʔυ͕ݮͬͨ7JFXΛ ॻ͖͑Δ
ґଘؔ w 7JFX.PEFM͕7JFXΛΒͳ͍ Α͏ʹ͢Δ͜ͱ w %PNBJO͕ଞʹґଘ͠ͳ͍͜ͱ 7JFX.PEFM 7JFX 3FQPTJUPSZ %PNBJO
30
σʔλͷྲྀΕ %PNBJO4FSWJDF ΦϒδΣΫτ 7JFX.PEFM 7JFX 3FQPTJUPSZ 3Y+BWB4USFBN ؔݺͼग़͠ 31
σʔλͷྲྀΕ %PNBJO4FSWJDF ΦϒδΣΫτ 7JFX.PEFM 7JFX 3FQPTJUPSZ 3Y+BWB4USFBN ؔݺͼग़͠ w 3Y+BWBͷ4USFBNΛ4VCTDSJCF
͢Δͷ7JFXͷΈʹ੍ݶ w 4VCKFDU 1SPDFTTPS Θͳ͍ 3Y+BWBͷར༻ϧʔϧΛઃ͚ɺ ֶशίετԼϝϯςφϯεੑ ্Λࢦ͢ 31
औΓΜͩ݁Ռ 32
औΓΈͱ݁Ռ w ࠷ར༻ͷଟ͍τοϓը໘ΛϦϑΝΫλϦϯάྃ w ݕ౼ɾઃܭɾ։ൃ߹Θͤͯϲ݄͘Β͍ w େ͖ͳόάͳͲͳ͘ɺίʔυͷݟ௨͕͠ྑ͘ͳͬͨ w ։ൃ͍͢͠ঢ়ଶʹͳΓɺΤϯδχΞ͔Β৽ػೳͷఏҊ 33
νʔϜͷมԽ w ઃܭʹ͍ͭͯٞ͢Δස͕૿͑ͨɻ ڭ͑ΔڭΘΔ͔ؔΒ͓ޓ͍ʹֶΔؔͷมԽɻ w ݟૹͬͨ෦ଥڠʹରͯٙ͠ɺ࣍ʹऔΓΉ͖͜ͱ͕ݟ͖͑ͯͨɻ w ίϯετϥΫλΠϯδΣΫγϣϯݫ͘͠ͳ͍ʁ w ࣮ײ͢Δͷخ͍͠ʂ
34
͋Γ͕ͱ͏͍͟͝·ͨ͠ :BIPPχϡʔεΞϓϦͥͻ͝ར༻͍ͩ͘͞ 35