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

複雑さに立ち向かうための ソフトウェア開発入門

複雑さに立ち向かうための ソフトウェア開発入門

iOSDC Japan 2024 発表資料

[email protected]

August 23, 2024
Tweet

Other Decks in Programming

Transcript

  1. 2023/09/03 iOSDC J a p a n 2023 shiz ෳࡶ͞ʹཱͪ޲͔͏ͨΊͷ

    ίʔυϦʔσΟϯάೖ໳ 01 010 0101 0 01 010 0101 0 લճͷ͋Β͢͡
  2. りんごげーむ ΤϯδχΞͷλεΫ ϓϩάϥϛϯά γεςϜઃܭ όάͷσόοάɾमਖ਼ ཁ݅ఆٛ υΩϡϝϯτͷ࡞੒ɾ؅ཧ ϛʔςΟϯά΁ͷࢀՃ UI/UXσβΠϯ ౷߹ςετ

    ίʔυϨϏϡʔ ηΩϡϦςΟςετ όʔδϣϯ؅ཧ εέδϡʔϧ؅ཧ ݟੵ΋Γ ίʔσΟϯάن໿ͷࡦఆ ໘઀ 1on1 ৽͍ٕ͠ज़ͷशಘ ϦϦʔεͷܭըɾ࣮ࢪ ূ໌ॻͷ؅ཧ ϑΟʔνϟʔϑϥάͷ؅ཧ CI/CDύΠϓϥΠϯͷ؅ཧ σόΠεͷ؅ཧ ٕज़ελοΫͷબఆ ෛՙςετ ύϑΥʔϚϯενϡʔχϯά ΠϯγσϯτରԠ ϩά؂ࢹ σʔλόοΫΞοϓ ϓϩϞʔγϣϯ४උ ࣾ಺ษڧձͷ։࠵ Test fl ight ϚχϡΞϧ࡞੒ ଞଟ਺ γεςϜϝϯςφϯε ਐḿ؅ཧ DBઃܭ Ϟδϡʔϧઃܭ
  3. ྫ: ಄ͷதͰϧʔϓॲཧΛ࣮ߦ͢Δ var t = 0 for i in 0...9

    { t = t * i } ෳࡶ͞ͷਖ਼ମ > ϫʔΩϯάϝϞϦ i = 0 → t = 0 i = 1 → t = 2 … ϫʔΩϯάϝϞϦ
  4. ෳࡶ͞ͷਖ਼ମ > ϫʔΩϯάϝϞϦ ໰୊Λղܾ ͢Δ ௕ظܭըΛ ཱͯΔ ֶश͢Δ ΑΓߴ౓ͳػೳΛࢧ͑Δ ʴ

    ଞͷػೳ ଞͷػೳ ଞͷػೳ ଞͷػೳ ଞͷػೳ ଞͷػೳ ʹ ʹ ʹ … ϫʔΩϯάϝϞϦ
  5. ϫʔΩϯάϝϞϦ͸૿΍ͤΔʁ ༗ࢎૉӡಈ ಡॻ ҉ه े෼ͳਭ຾ ྉཧ ϚΠϯυϑϧωε ҉ࢉ ෳࡶ͞ʹཱͪ޲͔͏ >

    ϫʔΩϯάϝϞϦͷ༰ྔͷݶքʹۙͮ͘ … ݈߁తͳ৯ࣄ ϫʔΩϯάϝϞϦ ೴τϨΞϓϦ ϘʔυήʔϜ ݴޠֶश ָثԋ૗ 3ϲ݄ ൒೥ 1೥ … ͪΐͬͱ૿͑Δ…͔΋ʁ
  6. ୲ ౰ ऀ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ ೴: Super

    Magicػೳͷʓʓʹ ͍࣭ͭͯ໰͍ͤͯͩ͘͞͞ ೴:͜ͷ݅Ͳ͏Ͱ͠ΐ͏͔ʁ
  7. ͞Βʹ਺೔ޙ... Ұ୴อཹ ୲ ౰ ऀ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ

    ೴:͓ख伱ͷࡍʹͰ΋🙏 ୲౰ऀ: ͓଴ͨͤ͠·ͨ͠ɻͦ Ε͸Ͱ͢Ͷ…
  8. Α͠ɺΘ͔ͬͨͧʂ εοΩϦ public func doSuperMagic SuperMagicػೳ ߋ৽೔: 2019/7/15 ୲ ౰

    ऀ ׬શͳ৘ใ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ
  9. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ໰୊఺ લ΋ಉ͜͡ͱ͕ ͋ͬͨΑ͏ͳ… 1೥ޙ…

    ʁ લ΋ಉ͜͡ͱ͕ ͋ͬͨΑ͏ͳ… 2೥ޙ… ʁ લ΋ಉ͜͡ͱ͕ ͋ͬͨΑ͏ͳ… 3೥ޙ… ʁ
  10. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ ୲ ౰ ऀ

    υΩϡϝϯτ ߋ৽ ν έ τ ίʔυίϝϯτ ௥Ճ ν έ τ
  11. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ ୲ ౰ ऀ

    υΩϡϝϯτ ߋ৽ ν έ τ ίʔυίϝϯτ ௥Ճ ν έ τ STOP
  12. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ ਺೥લͷ࣮૷ ୲ ౰

    ऀ ΜʔͳΜ͚ͩͬͨͬ…ʁ public func doSuperMagic SuperMagicػೳ ߋ৽೔: 2019/7/15
  13. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ > ૣΊͷҰख ͜ͷ৘ใ͕͋ͬͨΒ

    Θ͔Γ΍͍͔͢΋ʂ ͋ͷ৘ใ͕ ଍Γͳͦ͞͏ͩͳ SuperMagicػೳ ߋ৽೔: 2019/7/15 public func doSuperMagic ׬શͳ৘ใ
  14. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ > ૣΊͷҰख public

    func doSuperMagic // ʓʓΛ××͢Δ // ৄࡉ: https://wiki/supermagic
  15. υΩϡϝϯτߋ৽ - ʓʓͷઆ໌Λ௥Ճ - ʓʓͷྫΛ௥Ճ ν έ τ SuperMagicػೳ ߋ৽೔:

    2019/7/15 νέοτϦϯΫ ϦϯΫ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ > ૣΊͷҰख
  16. SwiftLint ΧελϜ εΫϦϓτ CI/CD Git Hooks Ϗϧυπʔϧ ϓϥάΠϯ build commit

    push PR × τϦΨʔ ࣗಈνΣοΫ ϧʔϧ × … … ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ > ࢓૊ΈԽ
  17. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ৘ใ͕ݟ͔ͭΒͳ͍ʂ > ରࡦ > ࢓૊ΈԽ public

    func doSuperMagic ίϝϯτγςω ઱໌ͳ࣮૷ͷهԱ ʂ
  18. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ ζϥϦ… 🔳Ϣʔβͷঢ়ଶ - ϩάΠϯ͍ͯ͠Δ -

    ಛผձһ - ͜Ε·ͰҰ౓΋ׂҾΩϟϯϖʔϯʹࢀՃͨ͜͠ͱ͕ͳ͍ 🔳΍Δ͜ͱ - ࠷ޙʹ঎඼Λߪೖͨ͠೔෇ - 1೥Ҏ্લ - ௒ׂҾηʔϧͷҊ಺Λτοϓϖʔδͷόφʔͱϓογϡ௨஌ Ͱߦ͏ɻ঎඼ΛߪೖͤͣʹϢʔβ͕όφʔΛ10ճݟͨΒඇද ࣔʹ͢Δ - 1೥ະຬ൒೥ΑΓલ - ظؒݶఆׂҾηʔϧͷҊ಺ΛτοϓϖʔδͰόφʔͱϓο γϡ௨஌Ͱߦ͏ɻϢʔβ͕࠷ॳʹόφʔΛݟ͔ͯΒ঎඼Λߪ ೖͤͣʹ1िؒܦաͨ͠Βඇදࣔʹ͢Δ - ൒೥ະຬ - ϨϏϡʔΛॻ͍ͨΒׂҾ݊ϓϨθϯτΩϟϯϖʔϯͷҊ಺Λ τοϓϖʔδͷόφʔͱϓογϡ௨஌Ͱߦ͏ɻ೚ҙͷλΠϛ ϯάͰON/OFFΛ੾Γସ͑ΒΕΔΑ͏ʹ͢Δ
  19. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ໰୊఺ > ͭ·Βͳ͍ϛεΛ܁Γฦ͢ ৚݅෼ذ

    ৽͍͠API εςοϓ ίʔυͷॻ͖ํ public func executo() public func fecthResuorce() public func handleErorr() typoͩΒ͚… ஫ҙྗ ूதྗ …
  20. ʁ ৘ ใ ৘ ใ ৘ใ ৘ใ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ

    > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ໰୊఺ > ๨ΕͬΆ͘ͳΔ ❌ ൈ͚Δ ೖΒͳ͍ ࠞ͟Δ ෮श͍ͨ͠ਓ͸ ͜͜ΛΫϦοΫ ϫʔΩϯάϝϞϦͷ ༰ྔͷݶք ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ
  21. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ໰୊఺ > ֶΜͩ͜ͱ͕਎ʹ෇͔ͳ͍ ௕ظهԱ

    ΑΓӬଓతʹ৘ใΛอଘͰ͖Δػೳ ಄ͷதͷ σʔλϕʔεతଘࡏ
  22. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ໰୊఺ > ֶΜͩ͜ͱ͕਎ʹ෇͔ͳ͍ ஌

    ࣝ ε Ω ϧ ϫʔΩϯάϝϞϦ ֶश: 20 ৸Δ: 0 ೳྗ ೝ஌Ϧιʔε 5/100 ௕ظهԱ อଘͰ͖ͣ…
  23. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ໰୊఺ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ

    ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ஌ࣝ εΩϧ ஌ࣝ εΩϧ ஌ࣝ εΩϧ
  24. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ ৘ใ

    ৘ใ খ෼͚ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ
  25. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ AΛ࣮ߦ͢Δɻ

    B͕ʓʓͷ৔߹ CΛ࣮ߦ͢Δɻ B͕ʓҎ֎ͷ৔߹ DΛ࣮ߦ͢Δɻ E͕ʓʓͷ৔߹ Aʹ໭Δɻ E͕ʓҎ֎ͷ৔߹ ॲཧΛऴྃ͢Δɻ
  26. Eͷ৚݅෼ذ ν έ τ AΛ࣮ߦ͢Δɻ B͕ʓʓͷ৔߹ CΛ࣮ߦ͢Δɻ B͕ʓҎ֎ͷ৔߹ DΛ࣮ߦ͢Δɻ E͕ʓʓͷ৔߹

    Aʹ໭Δɻ E͕ʓҎ֎ͷ৔߹ ॲཧΛऴྃ͢Δɻ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ Aͷॲཧ ν έ τ Bͷ৚݅෼ذ ν έ τ Cͷॲཧ ν έ τ Dͷॲཧ ν έ τ શମͷॲཧ ν έ τ ʹ + + + +
  27. ༰ྔͷݶք ❌ Ұ౓ʹ ̐±̍ ൈ͚Δ ೖΒͳ͍ ࠞ͟Δ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ

    > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ ෮श͍ͨ͠ਓ͸ͪ͜Β
  28. νϟϯΫ ؔ࿈͢Δ৘ใΛ·ͱΊͯ Ұͭͷҙຯͷ͋Δ୯Ґʹͨ͠΋ͷ ྫ: ΞϧϑΝϕοτCɺAɺT → CAT 09012345678 → ి࿩൪߸

    ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ
  29. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ νϟϯΫ

    νϟϯΫ νϟϯΫ νϟϯΫ ϫʔΩϯάϝϞϦ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ ৘ใ
  30. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ ϫʔΩϯάϝϞϦ

    ͪΐ͏Ͳ͍͍ εϖʔε͕͋Δͧ νϟϯΫ ※࣮ࡍ͸ʮεΩʔϚʯͱݺ͹ΕΔߏ଄ͷҰ෦ ͱͯ͠อଘ͞Ε͍ͯΔ ௕ظهԱ
  31. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ ϫʔΩϯάϝϞϦ

    ΁͍ νϟϯΫ ௕ظهԱ ଞͷ৘ใ ଞͷ৘ใ ଞͷ৘ใ ଞͷ৘ใ ΁͍
  32. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > Θ͚Δ ೝ஌ෛՙ

    ௕ظهԱ ϫʔΩϯάϝϞϦ ·ͩ·͍͚ͩΔ ඞཁͳͱ͖ʹ ৘ใΛऔΓग़͢ ؔ࿈৘ใΛ·ͱΊ νϟϯΫͰอ࣋͢Δ νϟϯΫ νϟϯΫ νϟϯΫ νϟϯΫ
  33. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > ͩ͢ •fetchલ:

    state = .loading error = nil •fetchޙ: state = .error error = InvalidParam ঢ়ଶભҠਤ
  34. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > ͩ͢ ϑϩʔνϟʔτ

    AΛ࣮ߦ͢Δɻ B͕ʓʓͷ৔߹ CΛ࣮ߦ͢Δɻ B͕ʓҎ֎ͷ৔߹ DΛ࣮ߦ͢Δɻ E͕ʓʓͷ৔߹ Aʹ໭Δɻ E͕ʓҎ֎ͷ৔߹ ॲཧΛऴྃ͢Δɻ
  35. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > ͩ͢ ϑϩʔνϟʔτ

    ଞͷ৘ใ ଞͷ৘ใ ଞͷ৘ใ ଞͷ৘ใ •fetchલ: state = .loading error = nil •fetchޙ: state = .error error = InvalidParam ঢ়ଶભҠਤ ϫʔΩϯάϝϞϦ ͪΐͬͱݟͤͯ
  36. ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ > ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > ͨΑΔ AI

    ਎͔Βग़ͨḉͱ͸ Ͳ͏͍͏ҙຯͰ͔͢ʁ ʮ਎͔Βग़ͨḉʢ͞͹ʣʯͱ͍͏දݱ͸ɺʮ਎͔Βग़ͨḊʢ͞ͼʣʯͷݴ༿༡ͼͷ ҰछͰ͢ɻಛʹ۩ମతͳҙຯ͕͋ΔΘ͚Ͱ͸͋Γ·ͤΜ͕ɺݴ༿༡ͼͱͯ͠࢖ΘΕ Δ͜ͱ͕͋Γ·͢ɻͨͱ͑͹ɺྉཧ΍ڕʹؔ࿈͢Δ࿩୊ͷதͰɺ৑ஊͱͯ͠ʮ਎͔ Βग़ͨḉʯͱݴ͏͜ͱͰস͍Λ༠͏͜ͱ͕Ͱ͖·͢ɻ ※ChatCPTͷճ౴ΑΓҰ෦ൈਮ
  37. ͖ͬ͞ௐ΂ͨͷ Կ͚ͩͬʁ ʁ ·ͨ΍ͬͪ·ͬͨʂ ೝ஌ෛՙΛԼ͛Δ > ࣄྫ঺հ > ΍Δ͜ͱ͕ଟ͗͢Δʂ >

    ෳࡶ͞Λճආ͢Δ3ͭͷ๏ଇ > ͨΑΔ Ͳ͏ͨ͠ʁ େৎ෉ʁ ੠͔͚ ❗ ❗