Share
Embed
Transcript
33 slides
-
୭ • @hiragram • akippa Inc. iOS App Developer •
Claude Max/ChatGPT Plus/ NotebookLM Plus/Devin Core/ GitHub Copilot Pro 2 -
iOSΞϓϦ։ൃΛLLMͰࣗಈӡసʹ͢Δʹ • Claude Max Λܖ • Claude Code ΛΠϯετʔϧ •
XcodeBuildMCP ΛηοτΞοϓ 4 -
͓·͚ • ࡢͷͬͯͨॴҦVibe Codingͷ༷ࢠΛհ͠·͢ • େنͳػೳ։ൃΛͳΔ͘ਫ਼ߴ͘ΔͨΊͷӡ༻ • ෳͷClaudeʹΑΔׂ୲ • هԱΛফ͢
• (Claude 3.7 ࣌ʹʹ͚ͭͨͷͰɺ4࣌ʹͲ͜·Ͱ༗ޮ͔ෆ໌) 6 -
• ʮཁ݅ఆٛʹ͖߹ͬͯʯ • ·ͣϓϩδΣΫτΛͬ͘͟Γ Ѳͤ͞Δ > ཁ݅ఆٛʹ͖߹ͬͯ͘Ε·͔͢ɻ ⏺ ͪΖΜͰ͢ɻͲͷΑ͏ͳػೳվળΛ ݕ౼͞Ε͍ͯ·͔͢ʁ
> ·ͣ͜ͷΞϓϦͷ֓ཁΛͬ͘͟Γཧղ ͯ͠Β͍͍ͬͯʁϓϩδΣΫτΛ Ұ௨ΓோΊͯΈ͍ͯͩ͘͞ɻ ⏺ ϓϩδΣΫτͷ֓ཁΛཧղ͢ΔͨΊʹɺ ओཁͳϑΝΠϧΛ֬ೝ͍͖ͯ͠·͢ɻ 10 -
• ओͳػೳɺٕज़ߏɺσʔλߏ ͳͲΛѲͯ͠Β͏ ⏺ ΞϓϦ֓ཁ ʮSetoriʯɺΧϥΦέ༻ͷηοτϦετཧΞϓϦͰ͢ɻ ओͳػೳ 1. ηοτϦετཧ -
ෳͷηοτϦετΛ࡞ɾཧ 2. Apple Music࿈ܞ - Apple Music͔ΒָۂใΛݕࡧɾऔಘ 3. ָۂཧ - ָ֤ۂͷ࠷ߴείΞɺΩʔมߋɺϝϞͳͲΧϥΦέಛ༗ͷใΛه 4. ଟݴޠରԠ - ָۂใΛݱࡏͷϩέʔϧʹ߹Θͤͯදࣔʢຊޠ/ӳޠͳͲʣ 5. Share Extension - Apple MusicΞϓϦ͔ΒָۂΛηοτϦετʹՃ ٕज़ߏ - SwiftUI - UIߏங - SwiftData - σʔλӬଓԽʢ@Modelɺଟରଟͷؔཧʣ - MusicKit - Apple Music࿈ܞ - Observation - ঢ়ଶཧʢ@Observableʣ - Swift Package Manager - AppCoreύοέʔδͰίΞϩδοΫΛ σʔλϞσϧ - Song - ָۂใ - Apple Music ID - λΠτϧ - ΞʔςΟετ - ΧϥΦέؔ࿈ใ - SongList - ηοτϦετ - SongToList - ଟରଟͷؔΛཧ͢Δதؒςʔϒϧ 11 -
• ͜Ε͔Β࡞Γ͍ͨͷʹ͍ͭͯ ࡶʹ͑Δ > ͜Εʹ৽ػೳΛՃ͢Δɻ ҰॹʹΧϥΦέʹདྷͨਓಉ࢜ͰۂϦετΛڞ༗ͯ͠ɺ ଞͷਓͷϦετΛΈͯͦͷਓʹՎͬͯ΄͍͠ՎΛબ ΜͰϦΫΤετΛૹΕΔΑ͏ʹ͢ΔɻMultipeer Connectivityͷར༻Λݕ౼͍ͯ͠Δɻ ⏺
໘ന͍ػೳͰ͢ͶʂMultipeerConnectivityΛ ͬͨۙڑͰͷϦΞϧλΠϜڞ༗ػೳͷཁ݅Λ ཧ͠·͠ΐ͏ɻ ⏺ Update Todos 㽾 ☐ MultipeerConnectivityػೳͷཁ݅ఆٛ ☐ ඞཁͳϞσϧͱαʔϏεͷઃܭ ☐ UIϑϩʔͷઃܭ 12 -
• ॳखͰ͜Ε͚ͩͷใΛͯ͠ ͘ΕΔ • ͜ͷઌͷٞͷ͖ͨͨͱͯ͠ े͗͢Δใྔ • ػೳཁ݅ɺٕज़తͳߟྀࣄ߲ɺ αϯϓϧίʔυɺUI/UXͷ֓ཁ ⏺
৽ػೳͷཁ݅ఆٛ ػೳ֓ཁ ΧϥΦέϘοΫεͰҰॹʹ͍Δਓಉ͕࢜ϦΞϧλΠϜͰۂϦετΛڞ༗͠ɺϦΫΤετΛૹΓ߹ ͑Δػೳɻ ओͳػೳཁ݅ 1. ηογϣϯཧ - ϗετػೳ: ෦Λ࡞ͯ͠ηογϣϯΛ։࢝ - ήετػೳ: ۙ͘ͷηογϣϯΛ୳ͯ͠ࢀՃ - ࣗಈஅ: ΞϓϦऴྃ࣌όοΫάϥϯυҠߦ࣌ͷॲཧ 2. σʔλڞ༗ - Ϧετڞ༗: બͨ͠ηοτϦετΛࢀՃऀͱڞ༗ - ϓϩϑΟʔϧ: χοΫωʔϜΞόλʔ৭ͷઃఆ - ϦΞϧλΠϜಉظ: ۂͷՃɾআ͕ଈ࠲ʹө 3. ϦΫΤετػೳ - ۂϦΫΤετ: ଞͷਓͷϦετ͔ΒۂΛબΜͰϦΫΤετૹ৴ - ϦΫΤετड৴: ௨ͱϦΫΤετҰཡදࣔ - εςʔλεཧ: ঝೝ/٫Լ/อཹͷঢ়ଶཧ 4. ηΩϡϦςΟɾϓϥΠόγʔ - ڞ༗ൣғ੍ޚ: ͲͷϦετΛڞ༗͢Δ͔બՄೳ - ηογϣϯೝূ: ෦ίʔυQRίʔυͰͷࢀՃ੍ݶ - Ұ࣌తͳڞ༗: ηογϣϯऴྃޙσʔλ͕Βͳ͍ ٕज़తͳߟྀࣄ߲ MultipeerConnectivity - MCSession: ηογϣϯཧ - MCNearbyServiceBrowser: ۙ͘ͷηογϣϯΛ୳͢ - MCNearbyServiceAdvertiser: ηογϣϯΛެ։ - σʔλܗࣜ: CodableΛ༻ͨ͠JSON௨৴ σʔλϞσϧ֦ு // ηογϣϯࢀՃऀ struct SessionParticipant { let peerID: MCPeerID let nickname: String let avatarColor: String let sharedLists: [SongList] } // ϦΫΤετ struct SongRequest { let id: UUID let fromPeerID: MCPeerID let toPeerID: MCPeerID let song: Song let message: String? let status: RequestStatus let createdAt: Date } enum RequestStatus { case pending case accepted case declined } UI/UXϑϩʔ 1. ηογϣϯ։࢝ը໘ - ʮ෦Λ࡞Δʯʮ෦ʹࢀՃʯͷબ - χοΫωʔϜઃఆ 2. ࢀՃऀҰཡը໘ - ଓதͷࢀՃऀϦετ - ֤ࢀՃऀͷڞ༗Ϧετදࣔ 3. ଞऀͷϦετӾཡը໘ - ࢀՃऀͷηοτϦετදࣔ - ۂΛλοϓͯ͠ϦΫΤετૹ৴ 4. ϦΫΤετཧը໘ - ड৴ͨ͠ϦΫΤετҰཡ - ૹ৴ͨ͠ϦΫΤετҰཡ - εςʔλεߋ৽ Ͳͷ෦͔Βৄࡉʹઃܭ͍͖ͯ͠·͠ΐ͏͔ʁ 13 -
• ରΛ௨ͯ͡ຏ͍͍ͯ͘ • ༰Λมߋͨ͠ΓՃͨ͠Γ͢Δ • ໃ६ߟྀ࿙Ε͕ͳ͍͔ΛνΣοΫͯ͠Β͏ • ͖ͨͨͷ༰ʹ͍ͭͯཧ༝Λઆ໌ͯ͠Β͏ • ࢀߟ࣮ΛݟͤͯΒ͏
• ͨ͠Βɺʮ͜͜·Ͱʹܾ·ͬͨ༰Λissueʹ͓͍ͯͯ͠ʯͰ GitHubʹissueΛ࡞ͬͯΒ͏ 14 -
• λʔϛφϧͰผͷClaudeΛཱͪ ্͛ͯɺ • ʮ͋ͳͨઃܭ୲ऀʯ • ʮ·ͣཁ݅ΛݟͯՃͰඞ ཁͳใΛચ͍ग़͠·͠ΐ ͏ʯ •
ҰҰͰઃܭʹඞཁͳใΛ ิ͍ͯ͘͠ > ͋ͳͨʹissue #37 ͷઃܭΛ୲͍͖ͯͨͩ͠ ·͢ɻ ͍͖ͳΓ࣮ʹೖΔલʹɺཁ݅ʹψέϞϨ͕ͳ͍͔ Λ֬ೝ͠·͠ΐ͏ɻissueͷ༰ΛಡΜͰཧղͯ͠ ͍ͩ͘͞ɻ ⏺ ྃղ͠·ͨ͠ɻissue #37ͷ༰Λ֬ೝ͍ͤͯͨ͞ ͖ͩ·͢ɻ ⏺ issue #37ͷ༰Λ֬ೝ͠·ͨ͠ɻཁ݅Λཧ͠ɺ ࣮લʹ֬ೝ͖͢Λચ͍ग़͠·͢ɻ > ໌Β͔ʹ͠ͳ͍ͱ͍͚ͳ͍͜ͱʹ͍ͭͯɺ1ͭͣͭ ࣭ͯ͘͠Ε·͔͢ʁ͑·͢ɻ ⏺ ͍ɺͦΕͰ1ͭͣͭ֬ೝ͍͖ͤͯͨͩ͞·͢ɻ ࣭1: SongϞσϧͷγϦΞϥΠζํ๏ʹ͍ͭͯ ݱࡏͷSongϞσϧ@ModelϚΫϩΛ༻͓ͯ͠Γ CodableͰͳ͍ͨΊɺMultipeerConnectivity ͰσʔλΛૹ৴͢ΔࡍʹγϦΞϥΠζͰ͖·ͤΜɻ ҎԼͷͲͪΒͷํ๏Ͱ࣮͖͢Ͱ͠ΐ͏͔ʁ A) ܰྔͳCodableߏମΛ࡞͢ΔҊ struct SongData: Codable { ... 18 -
• ۩ମతʹฉ͔Εͨ͜ͱ • ʮϗετ͕அͨ͠ͱ͖Ͳ͏͢Δʁ෮ؼΛͭʁଞͷήετ͕ϗε τʹঢ֨͢Δʁʯ • ʮ୭͔͕அͨ͠ΓɺΞϓϦ͕όοΫάϥϯυʹԼ͕ͬͨΓͨ͠ ͱ͖ɺଞͷϢʔβʔ͔ΒͲ͏ݟ͑ΔΑ͏ʹ͢ΔʁΦϑϥΠϯͰ͋Δ ͜ͱΛΒͤΔͷ͔ɺݟ্ͨΦϯϥΠϯͰָۂϦΫΤετͳͲ ૹΕΔͷ͔ʁʯ
• Ұ௨Γղܾͨ͠ΒɺʮܾΊͨ͜ͱΛ1ݸͣͭissueʹίϝϯτ͓͍ͯ͠ ͯʯͰίϝϯτͤ͞Δ 19 -
• λʔϛφϧͰผͷClaudeΛཱͪ ্͛ͯɺ • ʮ͋ͳ࣮ͨ୲ऀʯ • ʮదٓXcodeBuildMCPΛ ͬͯΞϓϦΛϏϧυͯ͠Τϥ ʔΛ͠ͳ͕ΒਐΊΔʯ •
ʮཁ͕݅ᐆດͩͬͨΓͯ͠ ࠔͬͨΒࢲʹฉ͍ͯʯ > issue #37 ͷ࣮Λ୲͍͖ͯͨͩ͠·͢ɻͦ͜ ʹॻ͍ͯ͋Δ͜ͱΛΑ͘ಡΜͰཧղ͍ͯͩ͘͠͞ɻ ·ͨɺͳΔͦ͘ΕΒͷཁ݅Λ୲อ͢ΔϢχοτς ετΛॻ͍͍ͯͩ͘͞ɻxcodebuild mcpΛͬͯ ɺఆظతʹϏϧυΛࢼ͠ɺࣦഊͨ͠߹ඞཁͳम ਖ਼Λࢪ͍ͯͩ͘͠͞ɻ࣮தɺཁ͕݅ᐆດͩͬͨΓ ͯ͠ϓϩμΫτΦʔφʔͰ͋Δࢲʹ֬ೝͨ͠΄͏͕ ͍͍ͱײ͡Δ͜ͱɺԕྀͳ͘ฉ͍ͯԼ͍͞ɻͦΕ Ͱ࣮Λ࢝Ί͍ͯͩ͘͞ɻ ⏺ ྃղ͠·ͨ͠ɻ ·ͣɺissue #37ͷ༰Λ֬ೝ͍ͤͯͩ͘͞͞ɻ ⏺ Issue #37ͷ༰Λ֬ೝ͠·ͨ͠ɻΧϥΦέηογ ϣϯػೳͷ࣮Ͱ͢Ͷɻ͔ͳΓେنͳػೳͳͷͰɺ λεΫΛཧͯ͠ਐΊ͍͖ͤͯͨͩ͞·͢ɻ ⏺ Update Todos 㽾 ☐ MultipeerConnectivityΛ༻ͨ͠ηογϣϯཧΫϥεͷ࣮ ☐ σʔλϞσϧʢSessionConfigɺ SessionParticipantɺSongRequestɺ SessionMessageʣͷ࣮ ☐ Ϣχοτςετͷ࡞ ☐ ηογϣϯ։࢝ը໘ʢχοΫωʔϜೖྗɺ෦࡞/ࢀՃબʣͷ࣮ ☐ ϗετը໘ʢύείʔυදࣔɺࢀՃऀҰཡʣͷ࣮ ☐ ήετը໘ʢύείʔυೖྗʣͷ࣮ ☐ ηογϣϯϝΠϯը໘ʢϦΫΤετܝࣔ൘λϒɺࢀՃऀλϒʣͷ࣮ ☐ ڞ༗Ϧετઃఆػೳͷ࣮ ☐ ଞऀͷϦετӾཡɾϦΫΤετૹ৴ػೳͷ࣮ ☐ ContentViewͷΤϯτϦʔϙΠϯτՃ ☐ ௨ػೳʢαϯυɾόΠϒϨʔγϣϯʣͷ࣮ ☐ όοΫάϥϯυରԠɾࣗಈ࠶ଓػೳͷ࣮ 22 -
• ࣮Λ࢝Ί͔ͯΒ7ɺಉ͡ͱ ͜ΖΛΨνϟΨνϟ܁Γฦ͍͠ ͬͯ͡Τϥʔɺ͍ͬͯ͡Τ ϥʔΛ܁Γฦ͍ͯͨ͠ɻ • ʮԿͬͯ͏·͍͔͘ͳ͔ ͬͨΒ૬ஊͯ͠Ͷʯ • SendableͳΫϩʔδϟपΓͰ᪴
͍͍ͯͨͷͰΛ͔͚ͨɻ > 1ͭͷʹԿԿमਖ਼ͯ͠͏·͍͔͘ ͳ͍ͳʔͱࢥͬͨΒʹ૬ஊͯ͠Ͷ ⏺ ਃ͠༁͍͟͝·ͤΜɻSendableͷͰԿ ಉ͡Τϥʔ͕ൃੜ͍ͯ͠·͢Ͷɻ ͜ͷɺSwift 6ͷconcurrencyϞʔυͰ SessionServiceΫϥε͕Sendableϓϩτίϧ ʹ४ڌ͍ͯ͠ͳ͍͜ͱ͕ݪҼͰ͢ɻ Timer.scheduledTimerͷΫϩʔδϟͰself ΛΩϟϓνϟ͍ͯ͠ΔͨΊɺΤϥʔ͕ൃੜ͍ͯ͠· ͢ɻ ͍͔ͭ͘ͷղܾࡦ͕͋Γ·͢ɿ 1. SessionServiceΛactorԽ͢Δʢਪʣ 2. @uncheckedΛ༻ͯ͠Sendableʹ४ڌͤ͞Δ 3. TimerҎ֎ͷํ๏ʢTask.sleepʣΛ༻͢Δ ͲͷΞϓϩʔν͕Α͍Ͱ͠ΐ͏͔ʁݸਓతʹɺ SessionServiceΛactorʹ͢Δ͜ͱͰɺฒߦॲཧ ͷ҆શੑΛอূͭͭ͠ɺ͜ͷΛղܾͰ͖Δͱࢥ͍ ·͢ɻͨͩ͠ɺͦͷ߹ଟ͘ͷϝιου͕asyncʹ ͳΔՄೳੑ͕͋Γ·͢ɻ ͲͪΒͷํੑͰਐΊΔ͖͔ɺ͝ҙݟΛ͓ฉ͔͍ͤͩ͘͞ɻ 23 -
• ͦͷޙԿ͔࣭͞Εͳ͕Β ॱௐʹ࣮͕ਐΈ… • Ϣχοτςετదʹॻ͖ͭ ͭྃɻςετɻ • ਓͷखͰίϛοτͯ͠PR࡞ͬ ࣮͓ͯΘΓɻ ⏺
࣮ྃʂ Issue #37ͷΧϥΦέηογϣϯػೳͷ࣮͕ͯ͢ ྃ͠·ͨ͠ʂ ࣮ͨ͠༰ͷ·ͱΊ 1. جຊػೳ - MultipeerConnectivityΛ༻ͨ͠P2P௨৴ - 4ܻύείʔυʹΑΔηογϣϯཧ - ࠷େ20ਓ·ͰͷࢀՃऀαϙʔτ - ϦΞϧλΠϜͰͷϦΫΤετૹड৴ 2. UI/UX - λϒόʔߏͷมߋ - ηογϣϯ։࢝ɺϗετɺήετɺϝΠϯը໘ - ଓঢ়ଶόφʔදࣔ - ௨ʢαϯυɾόΠϒϨʔγϣϯʣ 3. όοΫάϥϯυରԠ - ηογϣϯใͷӬଓԽʢUserDefaultsʣ - όοΫάϥϯυλεΫͷཧ - ϑΥΞάϥϯυ෮ؼ࣌ͷࣗಈ࠶ଓʢ࠷େ5ճʣ - ଓঢ়ଶͷࢹ֮తϑΟʔυόοΫ 4. ηΩϡϦςΟɾݖݶ - Info.plistʹϩʔΧϧωοτϫʔΫ༻ڐՄΛՃ - BonjourαʔϏεͷઃఆ 5. ςετ - 17ݸͷϢχοτςετΛ࡞ - ͯ͢ͷςετ͕ޭ Ϗϧυͱςετͯ͢ޭ͓ͯ͠Γɺ࣮ྃͰ͢ʂ 24 -
• ίʔυϨϏϡʔ༻ͷClaudeʹ /review 38 ͱPR൪߸Λࢦఆͯ͠ίʔ υϨϏϡʔͤ͞Δ • ཁ݅νΣοΫ༻ͷClaudeʹ ʮ࣮୲ऀ͕ίʔυΛఏग़͖ͯͨ͠ͷͰ issueΛΈͯඞཁͳػೳ͕શ෦ἧͬͯΔ͔֬ೝͯ͠ʯͱࢦࣔ
• ͪΐͪ͜ΐ͜ࡉ͔͍ࢦఠΛͯ͘͠ΔͷͰ࣮୲Claudeʹमਖ਼ͳͲΛ ࢦࣔ 26 -
͔͔ͬͨ࣌ؒʁ • 10:03pm: ཁ݅ఆٛClaudeͱ࢝͠Ίͨ • 10:28pm: ཁ݅issueཱ͕ͬͨ • 10:33pm: ઃܭ୲Claudeͱ࢝͠Ίͨ
• 10:51pm: issueʹৄࡉઃܭίϝϯτ͕ॻ͔Εͨ • 10:58pm: ࣮୲ClaudeʹࢦࣔΛͩ͠ɺࣗతʹಈ͖࢝Ίͨ • 11:34pm: ͯ͢ͷػೳͷ࣮͕ྃͨ͠ 28