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
Working as an iOS Developer at Classmethod
Search
Kato Jun
August 14, 2018
Programming
800
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Working as an iOS Developer at Classmethod
Kato Jun
August 14, 2018
More Decks by Kato Jun
See All by Kato Jun
love-swift-vol8
katoj
0
1.4k
Other Decks in Programming
See All in Programming
AIエージェントで 変わるAndroid開発環境
takahirom
2
680
どこまでゆるくて許されるのか
tk3fftk
0
500
act1-costs.pdf
sumedhbala
0
240
act2-costs.pdf
sumedhbala
0
120
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
130
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
150
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.6k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
590
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
510
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
190
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Code Reviewing Like a Champion
maltzj
528
40k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
A better future with KSS
kneath
240
18k
Believing is Seeing
oripsolob
1
170
Transcript
8PSLJOHBTBO J04%FWFMPQFS BU$MBTTNFUIPE ,BUP+VO 1
"CPVUNF !2 wՃ౻५ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΤϯδχΞ w$.ೖͬͯڧ wࡀʢࡀͷ່͕͍·͢ʣ
"HFOEB !3 wϞόΠϧΞϓϦαʔϏε෦ʹ͍ͭͯ wJ04ΤϯδχΞͷࣄ wҭࣇͱΫϥεϝιου wΫϥεϝιουͷจԽ w88%$Ͱൃද͞ΕͨؾʹͳΔ৽ػೳ
ϞόΠϧΞϓϦαʔϏε෦ ʢϓϦαʔʣͱʁ !4
ϓϦαʔͷ͓ࣄ !5 wࣄۀձ༷͚ࣾͷϞόΠϧΞϓϦʢJ04 "OESPJEʣͱͦͷόοΫΤϯυγεςϜ ʢ"84ʣΛ։ൃ w্هΛߦ͏͜ͱͰ͓٬༷ͷࣄۀɾϏδωεʹ ߩݙ͢Δɻ
͜ΜͳΞϓϦ࡞ͬͯ·͢ !6
͜ΜͳΞϓϦ࡞ͬͯ·͢ !7
͜ΜͳΞϓϦ࡞ͬͯ·͢ !8
Ҋ݅ͷ༰ɾن༷ʑ !9 w࠷ۙҎ্ͷൺֱతنͷେ͖ͳҊ͕݅ ૿͖͑ͯͨˠνʔϜ։ൃˠͭ·ΓνʔϜ֎ Θͣίϛϡχέʔγϣϯ͕ͱͯେࣄ wΞϓϦ͚ͩͷҊ݅͋Γ·͢ wҊ݅ʹґΒͣɺ͓٬༷ʹຬ͍ͯͨͩ͘͜͠ ͱ͕େࣄ
J04ΤϯδχΞͷࣄ !10
ྫ͑͜Μͳ͜ͱ !11 w͓٬༷ઌʹ๚ͯ͠ཁٻͷώΞϦϯά wٕज़తͳ؍͔Βཁ݅ఆٛʹࢀՃ wJ04ΤϯδχΞͷ؍͔ΒΞϓϦΛઃܭ w࣮ͪΖΜςετ w"OESPJEΤϯδχΞσβΠφʔαʔόʔαΠυΤϯδ χΞͱͷڠۀ
J04ΤϯδχΞͷ ؍͕େࣄ !12
J04ΤϯδχΞͷ؍ͱʁ !13 wJ04͔Β͜͏ͳΓ·͢Αʁ͜Μͳ͜ͱͰ͖ ·͢Αʁ wͦͷΓํ͏ݹ͍Ͱ͢Αʁ wࠓ͑Δ͚ͲඇਪʹͳΔͷͰผͷํ๏ߟ ͑ͳ͖ΌͰ͢Αʁ
ࣄΛ͢Δ্Ͱ ৺͕͚͍ͯΔ͜ͱ !14
ීஈ৺͕͚͍ͯΔ͜ͱ !15 w࣮ݱ͢Δํ๏͕ෳ͋Δ߹ͦΕͧΕͷϝ ϦοτσϝϦοτΛग़͓ͯ͠٬༷ʹબΜͰΒ ͏ʢͦͷ࣌ͪ͜ΒͷΦεεϝ999Ͱ͢Αͱ ͑Δʣ wʮ͜ΕͬͯͰ͖Δͷʁʯͬͯฉ͔Εͨ࣌ʹɺͰ ͖ΔͰ͖ͳ͍͚ͩ͡Όͳ͘ɺ࣮ݱ͢ΔͨΊͷલ ఏඞཁͳใɺײΛ͑Δ
ҭࣇͱΫϥεϝιου !16
உੑͷҭٳऔಘˋ !17 wˋͬͯݴ͏ͱӕͬΆ͘ฉ͑͜Δ͚ͲϚδ Ͱ͢ wࢲҭٳऔΓ·ͨ͠ʢϲ݄͚ؒͩͬͨͲɺͬ ͱऔΕΑ͔ͬͨʣ wपΓͷਓੵۃతʹҭࣇͯ͠·͢
͜Μͳ࣌ʹɺ͋͊Ϋϥεϝιου ͰΑ͔ͬͨͳ͊ͱࢥ͏ !18 wࢠڙ͕ٸʹΛग़͕ܴͯࣗ͑͠ʹߦ͔ͳ͘ ͯͳΒͳ͘ͳͬͨ wޕલதग़ࣾͯ͠ޕޙՈͰϦϞʔτϫʔΫ͢ ΔɺͳͲॊೈͳۈ͕Մೳ wݸਓͷ༧ఆͱࣄͷ༧ఆͷ߹͕͚͍ͭ͢
ΫϥεϝιουͷจԽ !19
ϒϩάʢ%FWFMPQFST*0ʣ !20
%FWFMPQFST*0ͱʁ !21 wࣾһ͕͍ͭͰ͖ͳ࣌ʹΞτϓοτͰ͖ Δ wϊϧϚͳ͍ wॻ͖͍ͨ࣌ʹॻ͖͍ͨ༰Λॻ͖͍ͨΑ͏ʹ ॻ͘
ϦϞʔτϫʔΫ !22
ϦϞʔτϫʔΫ !23 w௨ۈ࣌ؒͷɺࣄ͕Ͱ͖Δ wઇͷͳͲަ௨ػ͕ؔ͑ͳ͍߹ಛʹخ͍͠ wࣄ͕ऴΘͬͨΒ͙͢ʹՈͷࣄ͕Ͱ͖Δ w੍ͱͯ͠ϦϞʔτϫʔΫ͕͋ΔͷૉΒ͍͠ wͨͩ͠Ξτϓοτ͕͋Δ͜ͱ͕લఏ
Πϕϯτɾษڧձ !24
Πϕϯτɾษڧձ !25 wۀ࣌ؒதͰϒϩάΛॻ͚ ษڧձΠϕϯτʹߦ͚Δ wւ֎ΧϯϑΝϨϯεʹߦ͚Δ✈ wࠓ88%$ʹॳΊͯߦ͖·ͨ͠ʂ wνέοτɺߤඅɺϗςϧશ ֹձࣾෛ୲
!26
!27
!28
!29
!30
!31
!32
!33
ॳΊͯͷ88%$ !34 wJ04ΤϯδχΞͳͷͰճߦͬͯΈ͔ͨͬͨ wηογϣϯΛத৺ʹա͕ͨ͝͠໘ന͔ͬͨ w"QQMFͷΤϯδχΞʹ࣭Ͱ͖ΔϥϘʹ ػձ͕͋ΕߦͬͯΈ͍ͨ wߦ͔ͤͯ͘Εͨձࣾʹײँ
ࠓͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !35 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ
ࠓͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !36 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ
͓அΓ !37 w/%"ʹྀ͠ɺ9DPEFը໘ͷεΫϦʔϯ γϣοτࡌ͍ͤͯ·ͤΜ wJ04ϕʔλ൛Ͱͷಈ࡞֬ೝ݁ՌͳͷͰɺਖ਼ ࣜϦϦʔε࣌ʹڍಈ͕มΘΔՄೳੑ͕͋Γ ·͢
4JSJ4IPSUDVUTͱʁ !38 wϢʔβʔ͕ҰߦͳͬͨॲཧΛγεςϜʹొ w4JSJ͕Λֶशͯ͠εϙοτϥΠτݕࡧɺϩο ΫεΫϦʔϯͳͲʹαδΣετ w4JSJʹΑΔͰಛఆͷૢ࡞Λ࣮ߦ wಠࣗͷىಈϑϨʔζΛొ͢Δ͜ͱՄೳ
͜Ε·Ͱͷ4JSJ,JUͱԿ͕ҧ͏ͷʁ !39 w͜Ε·Ͱ4JSJͰ࣮ߦͰ͖Δૢ࡞͕ݶΒΕ͍ͯ ͨʢFY-JTUTBOE/PUFTυϝΠϯͰϝϞΛ࡞ ͢Δ*OUFOUͳͲʣ w4JSJ4IPSUDVUTͰΧελϜ*OUFOUͷ࡞ɺ طଘ*OUFOUͷΧελϚΠζ͕Մೳɺͭ·Γ4JSJ ͕༗ޮʹ͑Δγʔϯ͕૿͑ΔՄೳੑ͕͋Δ
4IPSUDVUTͷ"1*छྨ͋Δ !40 w/46TFS"DUJWJUZ w*OUFOUT
/46TFS"DUJWJUZ !41 wΞϓϦΛىಈͯ͠Կ͔Λදࣔ͢Δ߹ wطʹ)BOEP⒎ͳͲͰ͍ͬͯΔ߹Έࠐ Έ͍͢ w*OUFOUTʹൺ࣮͕͍ͯܰ
*OUFOUT !42 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ wͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳͷ͕࡞Մೳ
*OUFOUT !43 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ wͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳͷ͕࡞Մೳ
4IPSUDVUTͷ"1*छྨ͋Δ !44 w/46TFS"DUJWJUZ w*OUFOUT
࠷খͷ࣮ํ๏ ʢԿ͔ҙͷॲཧΛߦ͏ *OUFOUTʣ !45
*OUFOUT&YUFOTJPOΛՃ !46 w9DPEFͰϓϩδΣΫτϑΝΠϧΛબ͠ɺ 5"3(&54ͷࠨԼͷ ϘλϯΛΫϦοΫ͠ɺ *OUFOUT&YUFOTJPOΛՃ wΧελϜ6*Λද͍ࣔͨ͠߹ʮ*ODMVEF6* &YUFOTJPOʯʹνΣοΫ͢Δ
γϣʔτΧοτʢ*OUFOUʣΛఆٛ !47 wJOUFOUEFpOJUJPOϑΝΠϧΛ։͘ͱ࠷ॳԿ ͳ͍ۭͷঢ়ଶ wը໘ࠨԼͷ ϘλϯΛΫϦοΫͯ͠ʮ/FX *OUFOUʯΛબ
$VTUPN*OUFOU !48 w$BUFHPSZʢ֘͢ΔΧςΰϦΛબɻFYྉ ཧΛจ͢Δ4IPSUDVUͷ߹ʮ0SEFSʯΛ બʣ wࠓճʮ%PʯΛબ
$VTUPN*OUFOU !49 w5JUMF w%FTDSJQUJPO w%FGBVMU*NBHF w$POpSNBUJPOͷ6TFSDPOpSNBUJPOSFRVJSFEνΣοΫϘο Ϋεʢ࣮ߦ͢ΔલʹϢʔβʔͷ֬ೝΛߦ͏͔Ͳ͏͔ɻྫ͑ ྉཧΛจ͢Δ߹ͳͲνΣοΫΛ͚ͭͯ֬ೝ͢Δ ͖ʣ
1BSBNFUFST !50 w*OUFOUͷॲཧ͕ඞཁͱ͢ΔύϥϝʔλʔΛఆ ٛ wύϥϝʔλʔͷ໊લͱܕΛఆٛ wࠓճUBTL/BNFͱ͍͏4USJOHύϥϝʔλʔ Λͭఆٛ
4IPSUDVU5ZQFT !51 w1BSBNFUFSTͰఆٛͨ͠ύϥϝʔλʔΛΈ߹Θͤͯ ࡞͢Δ4IPSUDVUʢ4JSJͷϦΫΤετʣͷύλʔϯ wࠓճ5JUMFΛʮ%P\UBTL/BNF^ʯͱఆٛ w#BDLHSPVOEͷ4VQQPSUTCBDLHSPVOEFYFDVUJPOͷ νΣοΫϘοΫεʢόοΫάϥϯυ࣮ߦ͢Δ͔Ͳ͏ ͔ͷઃఆʣ
3FTQPOTFΛఆٛ !52 w4IPSUDVUΛ࣮ߦͨ݁͠Ռʢ4JSJ͔ΒͷϨεϙ ϯεʣͷܗࣜΛఆٛ w1SPQFSUJFTͰ1BSBNFUFSTͱಉ͡Α͏ʹϓϩ ύςΟͷ໊લͱܕΛఆٛ wࠓճ1BSBNFUFSTͱಉ༷ɺUBTL/BNFͱ͍͏ 4USJOHϓϩύςΟΛͭఆٛ
3FTQPOTFΛఆٛ !53 w3FTQPOTF5FNQMBUFT w4IPSUDVUͷ࣮ߦ݁ՌΛϢʔβʔʹ͑Δࡍͷϝοηʔ δςϯϓϨʔτΛఆٛ w$PEFʢॲཧޭࣦഊΛද͢ʣͱϝοηʔδΛఆٛ wࠓճ$PEF͕TVDDFTTͷ5FNQMBUFʹɺఆٛͨ͠ϓ ϩύςΟΛ͍ɺ*WFpOJTIFE\UBTL/BNF^ͱఆٛ
JOUFOUEFpOJUJPOϑΝΠϧ͔Β ίʔυ͕ࣗಈੜ !54 wϏϧυ͢ΔͱରԠ͢ΔΫϥε͕ࣗಈੜ͞Ε Δ
͜͜·Ͱ͕ 4IPSUDVUͷఆٛ !55
γϣʔτΧοτΛఏڙ !56 wࣗಈੜͨ͠ΫϥεΛͬͯγϣʔτΧοτΛγεςϜʹରͯ͠ఏڙ͢Δ w%P4PNFUIJOH*OUFOU͕JOUFOUEFpOJUJPOϑΝΠϧ͔Βࣗಈੜͨ͠*OUFOUΛද͢Ϋϥε w*OUFOUΛ࡞ͯ͠ඞཁใΛηοτͨ͠Βɺ*/*OUFSBDUJPOΛ࡞ͯ͠EPOBUF͢Δ͚ͩ let intent = DoSomethingIntent() intent.taskName
= "a certain task" let interaction = INInteraction(intent: intent, response: nil) interaction.donate { error in // handler error }
γϣʔτΧοτΛϋϯυϧ !57 wࣗಈੜͨ͠ΫϥεΛͬͯγϣʔτΧοτΛγεςϜʹରͯ͠ఏڙ͢Δ w*/&YUFOTJPOΛܧঝͨ͠ΫϥεͰIBOEMFS GPS ϝιουΛΦʔόʔϥΠυ wΠϯςϯτͷछྨʹԠͯ͡దͳϋϯυϥʔΦϒδΣΫτΛฦ͢ॲཧΛ͍ͯ͠Δ class IntentHandler: INExtension
{ override func handler(for intent: INIntent) -> Any? { switch intent { case is DoSomethingIntent: return DoSomethingIntentHandler() default: return nil } } }
γϣʔτΧοτΛϋϯυϧ !58 w࣮ࡍʹΠϯςϯτΛϋϯυϧ͢ΔΫϥεΛ࣮ w%P4PNFUIJOH*OUFOU)BOEMJOHࣗಈੜͨ͠ϓϩτίϧ wDPOpSN JOUFOUDPNQMFUJPO ϝιου͕ఆٛ͞Ε͍ͯ·͕ͨ͠ɺͪ͜Βͷ࣮ҙ wΠϯςϯτͷछྨʹԠͯ͡దͳϋϯυϥʔΦϒδΣΫτΛฦ͢ॲཧΛ͍ͯ͠Δ class DoSomethingIntentHandler:
NSObject, DoSomethingIntentHandling { func handle(intent: DoSomethingIntent, completion: @escaping (DoSomethingIntentResponse) -> Void) { guard let taskName = intent.taskName else { completion(DoSomethingIntentResponse(code: .failure, userActivity: nil)) return } // do something. let response = DoSomethingIntentResponse.success(taskName: taskName) completion(response) } }
͜͜·Ͱग़དྷΔͱʁ !59 wΞϓϦΛಈ͔ͯ͠ɺγϣʔτΧοτΛEPOBUF ͢ΔͱɺઃఆΞϓϦͷγϣʔτΧοτҰཡʹ දࣔ͞ΕΔ wಠࣗͷىಈϑϨʔζΛԻՄೳ
4JSJ4IPSUDVUT ͬͯΈ͍ͯͩ͘͞ !60
·ͱΊ !61
·ͱΊ !62 wΫϥεϝιουͷϞόΠϧΞϓϦαʔϏε෦Ͱ༷ʑͳҊ݅ɾࣄ͕ Ͱ͖·͢☺ wϒϩάॻ͖͍ͨਓɺษڧձʹొஃ͍ͨ͠ਓɺւ֎Πϕϯτߦ͖͍ͨਓɺ ߦ͚·͢Α wϦϞʔτϫʔΫͳͲɺ੍͏·͘׆༻͠Α͏ wࢠҭ͍ͯ͢͠Α w4JSJ4IPSUDVUTָ͍͠Α
5IBOLTʂ !63