Upgrade to Pro — share decks privately, control downloads, hide ads and more …

4年の開発が積み重なったアプリへのリファクタリング手法

E2f9709e8a21a708eb2f2d690b00e232?s=47 Jun Ikeda
March 12, 2018

 4年の開発が積み重なったアプリへのリファクタリング手法

E2f9709e8a21a708eb2f2d690b00e232?s=128

Jun Ikeda

March 12, 2018
Tweet

Transcript

  1. ೥ͷ։ൃ͕ੵΈॏͳͬͨ ΞϓϦ΁ͷϦϑΝΫλϦϯάख๏ :BIPP+"1"/஑ాಯ 1

  2. w γεςϜͱνʔϜΛ஌Δ w ࢖͏ٕज़ΛܾΊΔ w औΓ૊ΜͰ͍Δઃܭ΍ख๏ w औΓ૊Μͩ݁Ռ ໨࣍ 2

  3. ˞͋͘·Ͱख๏΍ઃܭͷҰྫͰ͢ɻ 3

  4. γεςϜͱνʔϜΛ஌Δ 4

  5. w ೥݄ʹϦϦʔεͯ͠೥ܦ͍ͬͯΔ w .71΍.77.ͳͲͷΞʔΩςΫνϟ͸ະಋೖ w "DUJWJUZ΍'SBHNFOUʹϩδοΫ͕࣮૷͞Εͯ ͍ΔՕॴଟ͍ w ඼࣭ͱ։ൃεϐʔυͷ୲อ͕೉͍͠ঢ়ଶʹ :BIPPχϡʔεΞϓϦ

    5
  6. νʔϜͷঢ়گ w "OESPJEΤϯδχΞ໊ɻ w "͞Μɿ೥͘Β͍୲౰ w #͞Μɿ೥͘Β͍୲౰ w ࢲɿ೥݄͔Β୲౰ 6

  7. w .71΍.77.ͳͲͷΞʔΩςΫνϟ͸ະಋೖ w 7JFXʹϩδοΫ͕࣮૷͞Ε͍ͯΔ w ਓͷதͩͱࣗ෼͕Ұ൪ઃܭͷܦݧ͋Δ ίʔυݹ͍͠ɺͬͦ͘͞ϦϑΝΫλͯ͠΍Δʂ 7

  8. w ೥ؒ.71΍.77.ͷ࢓૊Έͳ͠ w 7JFXʹϩδοΫ͕࣮૷͞Ε͍ͯΔ w ਓͷதͩͱࣗ෼͚ͩγχΞΤϯδχΞɺઃܭͷܦݧ͋Δ ίʔυݹ͍͠ɺͬͦ͘͞ϦϑΝΫλͯ͠΍Δʂ μϝ 8

  9. ͍͖ͳΓணख͠ͳ͍ w αʔϏε΍γεςϜͷ͜ͱΛ஌Βͳ͍ͱྑ͍બ୒͕Ͱ͖ͳ͍ɻ w ։ൃ͸νʔϜͰߦ͏΋ͷɻνʔϜϝϯόʔΛ஌Δ͜ͱ΋େ੾ɻ w ݱίʔυͰଟ͘ͷϢʔβʔʹ࢖ͬͯ΋Β͍ͬͯΔ͠ɺ
 ച্΋্͍͛ͯΔɻಈ͍͍ͯΔίʔυʹ΋ͬͱϦεϖΫτΛɻ w ϲ݄͘Β͍։ൃۀ຿Λߦ͍ͳ͕Β؍࡯ͨ͠ɻ

    9
  10. ؍࡯ɿγεςϜΛ஌Δ w ϩʔΧϧ%#΁ͷΩϟογϡ w هࣄछผͷ஌͕ࣝଟ͍
 ΧςΰϦɾτϐοΫεɾ߸֎  w #''͸ͳ͘ɺෳ਺ͷ"1*Λୟ͍ ͯͭͷϦετΛ࡞Δ͜ͱ΋ඞ

    ཁ γεςϜͷಛੑ 10
  11. ؍࡯ɿγεςϜΛ஌Δ w ϩʔΧϧ%#΁ͷΩϟογϡ w هࣄछผͷ஌͕ࣝଟ͍
 ΧςΰϦɾτϐοΫεɾ߸֎  w #''͸ͳ͘ɺෳ਺ͷ"1*Λୟ͍ ͯͭͷϦετΛ࡞Δ͜ͱ΋ඞ

    ཁ γεςϜͷಛੑ w σʔλऔಘઌΛந৅Խ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ໿͍ͨ͠ w ෳ਺ͷ"1*͔ΒඇಉظͰऔಘɺ ଴ͪ߹Θͤɺ૊Έ߹Θͤ
 ղܾ͍ͨ͜͠ͱ 10
  12. w ΞϓϦʹݶΒͣ
 χϡʔεαʔϏεͷ஌͕ࣝ๛෋ w 7JFXपΓͷ࣮૷͕ಘҙ w 3Y+BWB΍%*ͷܦݧ͸
 ͋·Γͳͦ͞͏ ؍࡯ɿνʔϜΛ஌Δ 11

  13. w ΞϓϦʹݶΒͣ
 χϡʔεαʔϏεͷ஌͕ࣝ๛෋ w 7JFXपΓͷ࣮૷͕ಘҙ w 3Y+BWB΍%*ͷܦݧ͸
 ͋·Γͳͦ͞͏ ؍࡯ɿνʔϜΛ஌Δ w

    ੹຿ͷڥք͸ਓʹ൑அ
 ͯ͠΋Β͓͏ w ະܦݧͷٕज़Λͨ͘͞Μಋೖ
 ͢Δͷ͸ֶशίετߴ͍ 11
  14. ࢖͏ٕज़ΛܾΊΔ 12

  15. ໨ࢦ͢͜ͱΛ໌֬ʹ w ׳Εɾ؆୯ΑΓ΋ɺ࢓૊Έ͕γϯϓϧͰมߋʹڧ͍͜ͱ w ఆٛ΍ݪཧͷਖ਼͠͞ΑΓࣗ෼ͨͪʹ߹͏͜ͱ w Ϟμϯελϯμʔυͳٕज़ʹ௥ै͢Δ͜ͱ ઃܭ΍ٕज़બఆͷ൑அ࣠ 13

  16. αʔϏεಛੑʹ߹͏ w σʔλऔಘઌΛந৅Խ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ໿͍ͨ͠ w ෳ਺ͷ"1*͔ΒඇಉظͰऔಘɺ ଴ͪ߹Θͤɺ૊Έ߹Θͤ
 ؍࡯ͯ͠ݟ͚ͭͨղܾ͍ͨ͜͠ͱ

    14
  17. αʔϏεಛੑʹ߹͏ w σʔλऔಘઌΛந৅Խ͍ͨ͠ w ಛఆൣғͷؔ৺ࣄΛՕॴʹू ໿͍ͨ͠ w ෳ਺ͷ"1*͔ΒඇಉظͰऔಘɺ ଴ͪ߹Θͤɺ૊Έ߹Θͤ
 ؍࡯ͯ͠ݟ͚ͭͨղܾ͍ͨ͜͠ͱ

    ϦϙδτϦύλʔϯ %%%ͷ஋ΦϒδΣΫτ 3Y+BWB ղܾͷͨΊͷٕज़ 14
  18. ͍͖ͳΓֶशίετΛ্͛͗͢ͳ͍ 3Y+BWB ະܦݧͩͱ͜ΕͭͰ΋
 ֶशίετߴ͍ -JWF%BUB %BUB#JOEJOH ·ͣ͸3Y+BWBʹ׳Εͯ΋Β͏ %BHHFS ·ͣ͸ίϯετϥΫλΠϯδΣ Ϋγϣϯ͢Δ͜ͱʹ׳Εͯ΋Β

    ͏ʢ,PUMJOͷσϑΥϧτҾ਺ʣ ࠾༻ ࠓճݟૹΓ 15
  19. ܾΊͨཧ༝ΛυΩϡϝϯτʹ࢒͢ w ໨ࢦ͍ͯ͠Δ͜ͱ w αʔϏεͷಛੑ w ղܾ͍ͨ͜͠ͱ w ΞʔΩςΫνϟͷ֓ཁ w

    ࣮૷ͷͨΊͷϥΠϒϥϦͨͪ w ύοέʔδߏ੒ w ଥڠͨ͠఺ w ࠾༻Λݟૹͬͨ΋ͷʢͱͦͷཧ༝ʣϦετ w ࢀߟʹͨ͠ॻ੶΍8FCϖʔδ ͳͥ͜͏ͳͬͯΔʁΛઆ໌
 Ͱ͖Δ ٕज़ͷਐาʹ߹Θͤͯɺ
 ܧଓతʹมߋͰ͖ΔΑ͏ʹ͢ Δ 16
  20. औΓ૊ΜͰ͍Δઃܭ΍ख๏ 17

  21. .77. ϨΠϠʔԽ 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX w ΞʔΩςΫνϟ͸
 .77. ϨΠϠʔԽ

    18
  22. 3FQPTJUPSZ w σʔλͷอଘͱऔಘ w 8FC"1*ͱϩʔΧϧʢ%#  1SFGFSFODFTʣΛந৅Խ 3FQPTJUPSZ %PNBJO 7JFX.PEFM

    7JFX 19
  23. %PNBJO w ϏδωεϩδοΫ͸%PNBJOʹด͡ࠐ ΊΔ w ,PUMJOͷEBUBDMBTTΛ࢖ͬͯ஋Φϒ δΣΫτΛ࣮૷ w ෭࡞༻ͷͳ͍ؔ਺Λ࣋ͭ 3FQPTJUPSZ

    %PNBJO 7JFX.PEFM 7JFX 20
  24. 7JFX.PEFM 7JFX.PEFM w දࣔͷͨΊͷঢ়ଶ؅ཧ w 7JFXΠϕϯτ͔Βඞཁͳॲཧ࣮ߦ 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX

    21
  25. 7JFX w 7JFX.PEFM͔ΒྲྀΕ͖ͯͨσʔλʹ൓ Ԡ͢Δ͚ͩɺϩδοΫΛ࣋ͨͳ͍ w JG จࣈྻ͕ۭ ͷΑ͏ͳ൑ఆϩδοΫΛ ॻ͍ͪΌͩΊ w

    "DUJWJUZ$POUFYU͸7JFX૚͚ͩͰ࢖͏ɺ 7JFX૚Ҏ֎͸"QQMJDBUJPO$POUFYU 3FQPTJUPSZ %PNBJO 7JFX.PEFM 7JFX 22
  26. 7JFX͔ΒϩδοΫΛണ͕͢ w ͜Ε·Ͱ͸7JFXʹϩδοΫ͕ॻ͔Ε͍ͯͯɺͦΕʹ׳Εͨঢ়ଶ
 ͩͬͨɻ w ॳาతͳ಺༰͕ͩɺ·ͣ͸ͱʹ͔͘7JFXͱϩδοΫΛ෼཭͢Δɻ 23

  27. 7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ %PNBJO 24

  28. 7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ 7JFX %PNBJO 24

  29. େྔͷJT&NQUZ ΍൑ఆ͕ϘσΟϒϩʔͷΑ͏ʹμϝʔδΛ༩͑Δɻɻɻ 7JFX͔ΒϩδοΫΛണ͕͢ɿվमલ 7JFX %PNBJO 24

  30. 7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 25

  31. 7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 25

  32. 7JFX͔ΒϩδοΫΛണ͕͢ɿվमޙ %PNBJO 7JFX 25

  33. ίʔυ੔ཧͷεςοϓ 7JFX 26 ϩδοΫ" 7JFX 7JFX w 7JFXʹϩδοΫ͕
 ॻ͔Ε͍ͯΔঢ়ଶ w

    ಉ͡ϩδοΫ͕ෳ਺ͷը໘ ʹॏෳ͍ͯ͠Δ ϩδοΫ" ϩδοΫ" ϩδοΫ$ ϩδοΫ# ϩδοΫ#
  34. 7JFX 27 7JFX 7JFX ϩδοΫ$ ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ#

    ίʔυ੔ཧͷεςοϓ
  35. 7JFX 27 w ੔ཧͯ͠%PNBJOʹ
 ϩδοΫΛҠಈ %PNBJO %PNBJO 7JFX 7JFX ϩδοΫ$

    ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ# ίʔυ੔ཧͷεςοϓ
  36. ৽7JFX 27 w ੔ཧͯ͠%PNBJOʹ
 ϩδοΫΛҠಈ %PNBJO %PNBJO 7JFX 7JFX ϩδοΫ$

    ϩδοΫ" ϩδοΫ" ϩδοΫ# ϩδοΫ" ϩδοΫ# ίʔυ੔ཧͷεςοϓ w ͭͷը໘ͷ7JFXΛ
 ॻ͖׵͑Δ
  37. ϩδοΫ" ϩδοΫ" ϩδοΫ# ৽7JFX 28 7JFX ϩδοΫ$ %PNBJO %PNBJO ϩδοΫ"

    ϩδοΫ# ίʔυ੔ཧͷεςοϓ w ผͷը໘΋%PNBJOʹҠಈ ͨ͠ϩδοΫΛ࢖͏Α͏ʹ ͢Δ 7JFX
  38. ৽7JFX 28 w 7JFX૚ͷίʔυ͕ݮΔ 7JFX ϩδοΫ$ %PNBJO %PNBJO ϩδοΫ" ϩδοΫ#

    ίʔυ੔ཧͷεςοϓ w ผͷը໘΋%PNBJOʹҠಈ ͨ͠ϩδοΫΛ࢖͏Α͏ʹ ͢Δ 7JFX
  39. ৽7JFX 29 %PNBJO %PNBJO ϩδοΫ" ϩδοΫ# 7JFX ϩδοΫ$ ίʔυ੔ཧͷεςοϓ 7JFX

    w ίʔυ͕ݮͬͨ7JFXΛ
 ॻ͖׵͑Δ
  40. ৽7JFX 29 w ը໘୯ҐͰϦϑΝΫλΛ׬ ྃͤ͞ɺશମͷஔ͖׵͑Λ ໨ࢦ͢ %PNBJO %PNBJO ϩδοΫ" ϩδοΫ#

    ৽7JFX 7JFX ϩδοΫ$ ίʔυ੔ཧͷεςοϓ w ίʔυ͕ݮͬͨ7JFXΛ
 ॻ͖׵͑Δ
  41. ґଘؔ܎ w 7JFX.PEFM͕7JFXΛ஌Βͳ͍
 Α͏ʹ͢Δ͜ͱ w %PNBJO͕ଞʹґଘ͠ͳ͍͜ͱ 7JFX.PEFM 7JFX 3FQPTJUPSZ %PNBJO

    30
  42. σʔλͷྲྀΕ %PNBJO4FSWJDF ஋ΦϒδΣΫτ 7JFX.PEFM 7JFX 3FQPTJUPSZ 3Y+BWB4USFBN ؔ਺ݺͼग़͠ 31

  43. σʔλͷྲྀΕ %PNBJO4FSWJDF ஋ΦϒδΣΫτ 7JFX.PEFM 7JFX 3FQPTJUPSZ 3Y+BWB4USFBN ؔ਺ݺͼग़͠ w 3Y+BWBͷ4USFBNΛ4VCTDSJCF


    ͢Δͷ͸7JFX૚ͷΈʹ੍ݶ w 4VCKFDU 1SPDFTTPS ͸࢖Θͳ͍ 3Y+BWBͷར༻ϧʔϧΛઃ͚ɺ ֶशίετ௿Լϝϯςφϯεੑ ޲্Λ໨ࢦ͢ 31
  44. औΓ૊Μͩ݁Ռ 32

  45. औΓ૊Έͱ݁Ռ w ࠷΋ར༻਺ͷଟ͍τοϓը໘ΛϦϑΝΫλϦϯά׬ྃ w ݕ౼ɾઃܭɾ։ൃ߹Θͤͯϲ݄͘Β͍ w େ͖ͳόάͳͲͳ͘ɺίʔυͷݟ௨͕͠ྑ͘ͳͬͨ w ։ൃ͠΍͍͢ঢ়ଶʹͳΓɺΤϯδχΞ͔Β৽ػೳͷఏҊ΋ 33

  46. νʔϜͷมԽ w ઃܭʹ͍ͭͯٞ࿦͢Δස౓͕૿͑ͨɻ
 ڭ͑ΔڭΘΔؔ܎͔Β͓ޓ͍ʹֶ΂Δؔ܎΁ͷมԽɻ w ݟૹͬͨ෦෼΍ଥڠ఺ʹରͯٙ͠໰ɺ࣍ʹऔΓ૊Ή΂͖͜ͱ͕ݟ͖͑ͯͨɻ w ίϯετϥΫλΠϯδΣΫγϣϯݫ͘͠ͳ͍ʁ w ੒௕࣮ײ͢Δͷخ͍͠ʂ

    34
  47. ͋Γ͕ͱ͏͍͟͝·ͨ͠ :BIPPχϡʔεΞϓϦͥͻ͝ར༻͍ͩ͘͞ 35