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
790
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
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
410
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
260
A2UI という光を覗いてみる
satohjohn
1
140
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
890
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Webフレームワークの ベンチマークについて
yusukebe
0
170
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
300
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
5.9k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
710
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
390
A better future with KSS
kneath
240
18k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
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