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
iOS でテスト容易な設計を 実現するためのデザインパターン
Search
Kuniwak
PRO
October 02, 2017
Technology
11k
53
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS でテスト容易な設計を 実現するためのデザインパターン
https://orecon.connpass.com/event/63769/
Kuniwak
PRO
October 02, 2017
More Decks by Kuniwak
See All by Kuniwak
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
8
2.7k
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
16
10k
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
37
22k
DeNA での思い出 / Memories at DeNA
orgachem
PRO
8
3.6k
それ CLI フレームワークがなくてもできるよ / Building CLI Tools Without Frameworks
orgachem
PRO
18
4.7k
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
4
770
テストケースの名前はどうつけるべきか?
orgachem
PRO
2
940
欠陥を早期に発見するための Software Engineer in Test とその重要性 / What is Software Engineer in Test and How they works
orgachem
PRO
22
5k
住宅を WebXR で評価しよう / Evaluating My Home by WebXR
orgachem
PRO
0
250
Other Decks in Technology
See All in Technology
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.8k
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
4
2.6k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
1
360
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
230
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
1
160
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
1
110
最近評価が難しくなった
maroon8021
0
340
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
Kaggleで成長するために意識したこと
prgckwb
2
310
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.1k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.1k
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Balancing Empowerment & Direction
lara
6
1.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Typedesign – Prime Four
hannesfritz
42
3.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Designing for Timeless Needs
cassininazir
1
320
BBQ
matthewcrist
89
10k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Building AI with AI
inesmontani
PRO
1
1.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
920
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
J04Ͱςετ༰қͳઃܭΛ ࣮ݱ͢ΔͨΊͷσβΠϯύλʔϯ
ࣗݾհ ·ͣ
TUSVDUDMBTTؒͷ ߏతͳࠩΛܭࢉ͢Δ ϥΠϒϥϦͷ࡞ऀͰ͢ σόοάʹศརͳ
ϑΟʔϧυͷࠩҟΛ จࣈྻͱͯ͠औಘͰ͖·͢ʂ TUSVDUDMBTTΛҾʹ EJ⒎ؔΛ࣮ߦ͢Δͱʜ
IUUQHJUIVCDPN,VOJXBL.JSSPS%J⒎,JU ͘͢͝ศརͰ͢ʂ
σβΠϯύλʔϯͷ հͷલʹ
ཧతͳςετͱɺ ͲΜͳͷͩΖ͏͔ʁ
खಈςετͱ ࣗಈςετͷؔ Έͳ͞Μ͝ଘ
࣌ؒܦա ʢػೳ૿େ͍ͯ͘͠ʣ ίετߴ ࣗಈςετ खಈςετ खಈςετ͕༗ར ࣗಈςετ͕༗ར ػೳ͕૿͍͑ͯͬͨͱͯ͠ ࣗಈςετܧଓ͍͢͠
ςετରͷཻͱ ίεύͷؔ ͓͓͖͑ͯ͘͞
ؔ" ؔ# ʜ ग़ྗO௨Γ ग़ྗN௨Γ ʜ
ςετରͷཻ͕ খ͍͞ͱ͖
୯ମςετ ؔ" ؔ# ςετͷɿO N௨Γ ୯ମςετ O௨Γ N௨Γ Ϟδϡʔϧݸผʹςετ͞ΕΔͷͰ
ςετରͷཻ͕ େ͖͍ͱ͖
Ϟδϡʔϧ" ʜ ςετͷɿOʷN௨Γ Ϟδϡʔϧ# ʜ ϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ#
ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡ खಈ6*ςετ Ϟδϡʔϧ࿈݁ͨ͠··ςετ͞ΕΔͷͰ
͠ɺςετͰ͖Δ͕ Nͩͬͨͱ͢Δͱʜ
୯ମςετ ؔ" ؔ# ΧόʔͰ͖Δൣғยํ ୯ମςετ O௨Γ N௨Γ
Ϟδϡʔϧ" ʜ ΧόʔͰ͖Δൣғ͘͝Ұ෦ Ϟδϡʔϧ# ʜ ϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ#
ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡ खಈ6*ςετ
ͭ·Γςετରͷཻ͕ খ͍͞ςετʢ୯ମςετʣɺ ίετύϑΥʔϚϯε͕ߴ͍ʂ
͜͜·Ͱͷ·ͱΊ w खಈςετͱൺͯࣗಈςετ ܧଓ͍͢͠ w ࣗಈςετͷதͰ୯ମςετ ίετύϑΥʔϚϯε͕ߴ͍ w ͭ·ΓɺࣗಈςετͰ͋Δ୯ମςετɺ ܧଓ͘͢͠ίετύϑΥʔϚϯε͕ߴ͍
ݟ͖͑ͯͨ͜ͱ ཧͷσόοάڥେྔͷ ୯ମςετʹΑͬͯ࡞ΒΕΔ ܧଓ͘͢͠ίετύϑΥʔϚϯε͕ߴ͍
୯ମςετ͙͢ʹ Ͱ͖Δͷ͔ʁ ͜͜Ͱٙʂ
Ͱ͖·ͤΜ
୯ମςετͷରؔΫϥε ͭ·ΓɺؔΫϥεͷ ઃܭͷӨڹΛड͚͍͢
ྫ ΄Μͱ͔ͳʁ
ςετ͠ͳ͍ͱා͍͙Β͍ʹෳࡶͳؔ ͳʹΒόϦσʔγϣϯΛ͢ΔΑ͏ͩ
ςετ͢Δʹςετରʹ దͳೖྗΛ͢Δඞཁ͕͋Δ ͜ͷೖྗ͕ϑΟʔϧυܦ༝Ͱ ͔͠QSJWBUFͩͬͨΓ͢Δͱ ೖྗΛ੍ޚ͢Δ͜ͱ͕͍ͦͦ͠
όϦσʔγϣϯͷ݁Ռ͕ Πϯελϯεϝιουͷ ݺͼग़͠ͷ༗ແͰ͔͠ ఆͰ͖ͳ͍ͱ͖ɺ όϦσʔγϣϯ݁Ռͷ औಘʹςΫχοΫ͕ ඞཁͱ͞ΕΔ
͜͜·Ͱͷ·ͱΊ ୯ମςετ͕؆୯͔Ͳ͏͔ ରͷઃܭʹେ͖͘ࠨӈ͞ΕΔ
ॏཁͳͷ୯ମςετ͕ ؆୯ͳઃܭʹ͢Δ͜ͱ
ͭͷσβΠϯύλʔϯ ͷհ ୯ମςετΛ؆୯ʹ͢Δ
w 0VUQVU0CKFDU*OKFDUJPO w 4QZ7JFX$POUSPMMFS w *OQVU0CKFDU*OKFDUJPO w 4JOHMF.FUIPE4UVC4QZ w %FQFOEFODZ#BH
w -PHHJOH0CTFSWFS w 3Y&WFOU#MPDLFS w 4UBUF.BDIJOF.PEFM w 1SFQSPDFTTPS5PLFO
҉తͳग़ྗΛ ଊ͑Δύλʔϯ ύλʔϯ
ςετରจࣈྻͷόϦσʔγϣϯؔ ೖྗจࣈྻ͕Ͱ͋Ε TVDDFTT Λɺͦ͏Ͱͳ͚Ε GBJMFE ΛݺͿΑ͏ͩ ʢܧঝΛલఏͱ࣮ͨ͠ʣ
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ Ͳ͏ͬͯTVDDFTT͕ ݺΕͨ͜ͱΛݕূ͢Ε ͍͍ͩΖ͏͔
ςετͰ͖·ͤΜ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦΕͳΒ
࠷ॳʹݕ౼͖͢ɺ݁ՌΛؔͷ Γʹ͢Δ͜ͱͰ͢ ͨͩ͠ɺঢ়گʹΑͬͯ͜ͷํ๏͕ ͑ͳ͍͜ͱ͋Γ·͢ ͦ͜Ͱɺࠓճ͜ͷํ๏͕͑ͳ͔ͬͨ ͱͯ͠ɺผͷํ๏Λݕ౼͠·͢ ѹతʹ؆୯
0VUQVU0CKFDU*OKFDUJPO ͦ͏͍͏ͱ͖
ςετରͷจࣈྻͷόϦσʔγϣϯؔ ͕͜͜όϦσʔγϣϯؔͷ ग़ྗʹͨΔ
ग़ྗઌͷΦϒδΣΫτͷ1SPUPDPMΛ࡞
ग़ྗઌΦϒδΣΫτΛ Ҿ͔ΒೖͰ͖ΔΑ͏ʹमਖ਼ ޭࣦഊॲཧग़ྗઌΦϒΤδΣΫτʹ௨ ઃܭमਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετͷ४උ Ͱͬͦ͘͞
ग़ྗ༰Λه͢ΔِͷΦϒδΣΫτʢ4QZʣΛ࡞ ϝιου͕ݺΕΔͱ͜͜ʹه͞Ε͍ͯ͘
ઃܭमਖ਼ޙͷςετ ग़ྗઌʹઌ΄Ͳͷ4QZΛࢦఆ TVDDFTT ͚͕ͩͨͩҰ͚ͩݺΕͨ͜ͱΛݕূͰ͖Δʂ
0VUQVU0CKFDU*OKFDUJPO w ͲΜͳ࣌ʹ͏͔ɿ w ςετ͔Βଊ͑ͮΒ͍ग़ྗ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w ग़ྗΛ࢘ΔΦϒδΣΫτΛ1SPUPDPMԽ w
ग़ྗΛه͢ΔِͷΦϒδΣΫτʢ4QZʣΛ࡞ w ςετͷ࣌4QZΛར༻
5JQT4QZ7JFX$POUSPMMFS ͜͏͍͏ͷ࡞Ε·͢
6*7JFX$POUSPMMFSͷ-JGF$ZDMFΛࢹ͢Δ4QZ
҉తͳೖྗΛ ੍ޚ͢Δύλʔϯ ύλʔϯ
ςετର αʔόʔͱͷ௨৴ڞ௨ͷ "1*Ϋϥε͕୲͓ͯ͠Γɺ αʔόʔ͔Βฦ͖ͬͯͨΛ େจࣈʹͯ͠ฦ͍ͯ͠ΔΑ͏ͩ αʔόʔʹϢʔβʔ໊Λ͍߹Θͤɺ େจࣈʹͯ͠ฦؔ͢
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ ෦తʹ͍ͬͯΔ"1*Ϋϥε αʔόʔ͔ΒΛऔಘͯ͘͠ΔͨΊɺ େจࣈʹͳΔલͷ༧Ͱ͖ͳ͍ ͦͷͨΊݕূʹ͏ਖ਼ղΛܾΊΒΕͳ͍ ςετରΛ࡞ ίʔϧόοΫ͔Β ݁ՌΛݕূ͍ͨ͠ ςετରΛ࣮ߦ
*OQVU0CKFDU*OKFDUJPO ͦ͜Ͱ
෦తʹ͍ͬͯΔ"1*ΫϥεΛͦͷ··1SPUPDPMԽ ͜ͷ1SPUPDPMΛݩʹͳͬͨ"1*Ϋϥεʹ࣮͓ͤͯ͘͞
ؔͷҾ͔Βɺ෦తʹ͏ "1*ΫϥεΛͤΔΑ͏ʹमਖ਼ ෦తʹ͞Εͨ"1*ΫϥεΛར༻ͯ͠Λऔಘ͢Δ ͭ·Γɺ͢"1*ΫϥεΛม͑Εऔಘ͞ΕΔม͑ΒΕΔ मਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετରʹ͢Λςετ༻ͷͷʹ͢ΔͨΊʹ ઌ΄Ͳͷ1SPUPDPMΛِ࣮ͨ͠ͷΫϥεʢ4UVCʣΛ࡞ ࣄલʹࢦఆ͕ͨ͠ςετରʹΔ ςετରʹ͍ͨ͠Λ ࣄલʹࢦఆ͢Δ
ςετͰઌ΄Ͳͷ ِͷΫϥεΛ͏ ςετରʹ͢Λ ͜͜ͰࢦఆͰ͖Δ ฦͬͯ͘Δ͕Θ͔ͬͯΔͷͰ ਖ਼ղΛ؆୯ʹਪଌͰ͖Δ ཁ͢Δʹɺҙਤ௨Γେจࣈʹ Ͱ͖ͨ͜ͱΛ͔֬ΊΒΕΔ ઃܭमਖ਼ޙͷςετ
*OQVU0CKFDU*OKFDUJPO w ͲΜͳ࣌ʹ͏͔ɿ w ςετ͔Βૢ࡞ͮ͠Β͍ೖྗ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w ೖྗΛ࢘ΔΦϒδΣΫτΛ1SPUPDPMԽ w
ೖྗΛ੍ޚՄೳͳِͷΦϒδΣΫτʢ4UVCʣΛ࡞ w ςετͷ࣌4UVCΛར༻
6*,JUͷग़ྗΛ ଊ͑Δύλʔϯ ύλʔϯ
ςετର Ϙλϯ͕ԡ͞ΕͨΒɺ 6*/BWJHBUJPO$POUSPMMFSͷ QVTI7JFX$POUSPMMFSϝιουͰ ભҠ͍ͨ͠Α͏ͩ
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ QVTI7JFX$POUSPMMFS͕ ݺΕͨ͜ͱΛͲͷΑ͏ʹ ݕূͰ͖ΔͩΖ͏͔ ϘλϯͷԡԼΛ࠶ݱ͢Δ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
جຊతʹ0VUQVU0CKFDU*OKFDUJPOͰɺ 6*/BWJHBUJPO$POUSPMMFSͷ ϝιουݺͼग़͠Λه͢ΕΑ͍ ͔͠͠ɺ6*/BWJHBUJPO$POUSPMMFSʹ ͨ͘͞ΜͷϑΟʔϧυͱϝιου͕͋Δ
6*/BWJHBUJPOͷશͯͷϑΟʔϧυͱ ϝιουΛඋ͑ͨ4QZͷ࡞ʹ ͔ͳΓͷख͕͔͔ؒΔʜ ͳΜͱ͔QVTI7JFX$POUSPMMFS͚ͩΛ ࠩ͠ସ͑ΒΕͳ͍ͷ͔ʜ
4JOHMF.FUIPE4UVC4QZ ͦ͜Ͱ
·ͣQVTI7JFX$POUPMMFSʹ ૬͢Δ1SPUPDPMΛ࡞ ͜ͷ1SPUPDPMͰ࣮Λཁٻ͢Δͷ QVTI7JFX$POUSPMMFS͚ͩʹ͢Δ
࣍ʹઌ΄Ͳͷ1SPUPDPMΛ࣮ͯ͠ ࣮ࡍͷQVTI7JFX$POUSPMMFSΛݺͿ ΦϒδΣΫτΛ࡞ 1SPUPDPMͷ࣮ʹඞཁͳͷ QVTI7JFX$POUSPMMFS͚ͩ ͳͷͰָ͍͢͝
Ҿܦ༝Ͱઌ΄ͲͷΫϥεΛೖ ઌ΄ͲͷΫϥεܦ༝Ͱ QVTI7JFX$POUSPMMFS ͕ݺͼग़͞ΕΔΑ͏ʹ͢Δ ઃܭमਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ಉ͡1SPUPDPMΛ࣮͢Δ4QZΛ࡞ QVTI7JFX$POUSPMMFSͷ ݺͼग़͠ཤྺͷهՕॴΛ༻ҙ QVTI7JFX$POUSPMMFS͕ݺΕͨΒهʹՃ
ઌ΄Ͳͷ4QZΛҾܦ༝Ͱೖ 4QZܦ༝ͰQVTI7JFX$POUSPMMFS ͷݺͼग़͕͠ݕূͰ͖ͨʂ ઃܭमਖ਼ޙͷςετ
4JOHMF.FUIPE4UVC4QZ w ͲΜͳ࣌ʹ͏͔ɿ w ϝιουϑΟʔϧυ͕ଟ͍ΦϒδΣΫτ ͷೖग़ྗΛ੍ޚ͍ͨ͠ͱ͖ w ԿΛ͢Δ͔ɿ w ϝιουͭΛΓग़ͯ͠4UVC4QZΛ࡞
w *OQVU0VUQVU0CKFDU*OKFDUJPOͰೖ
ґଘؔΛཧ͢Δ ύλʔϯ ύλʔϯ
ςετର 0VUQVU*OQVU0CKFDU*OKFDUJPOΛ ଓ͚ΔͱɺҾ͕૿͑ͯ͘Δ એݴҾॳظԽςετͰɺ ͦΕͧΕಉ͡Α͏ͳ͜ͱΛճ ॻ͘ඞཁ͕͋ͬͯͱͯͭΒ͍
ಛʹ7JFX$POUSPMMFSܥಉ͡Α͏ͳҾΛ Կॻ͘ӋʹͳͬͯͭΒ͍
ςετΛߟ͑ͯΈΔ ·ͣ
ςετॻ͚Δ͕ɺςετʹؔͳ͍Ҿ͕ଟ͍ͷͰݟ௨͕͠ѱ͍
%FQFOEFODZ#BH ͦ͜Ͱ
ͯ͢ͷ7JFX$POUSPMMFSͰڞ௨ͯ͠͏ͷΛ#BH·ͱΊΔ ҙͯ͠ཉ͍͠ͷɺڞ௨͠ͳ͍ͷ ͜͜ʹೖΕ͍͚ͯͳ͍ͱ͍͏͜ͱ ʢΠϯλʔϑΣʔεݪଇʹҧ͢ΔͨΊʣ
ςετରΛमਖ਼ͯ͠ɺઌ΄Ͳ·ͱΊͨ#BHΛड͚औΔΑ͏ʹ͢Δ
ґଘର͕૿͑ͯɺ #BHʹՃ͢Δ͚͍͍ͩ ͦͷͨΊɺमਖ਼͢ΔՕॴΛ ͭʹݮΒͤΔ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετଆͰ͞Βʹ#BHͷ ࡞ํ๏Λ؆୯ʹͰ͖·͢
ςετ༻ʹ#BHʹࣗΛ࡞͢ΔϑΝΫτϦؔΛੜ͓ͯ͘͠ ಛʹࢦఆ͕ͳ͚ΕσϑΥϧτҾͰ దͳͷ͕ΘΕΔΑ͏ʹ͓ͯ͘͠
ςετଆͰઌ΄ͲͷϑΝΫτϦؔΛ͏Α͏ʹ͢Δ ͲΜͳͷ͕ΘΕͯςετʹ Өڹ͕ͳ͍ͳΒɺҾΛলུͰ͖Δ
%FQFOEFODZ#BH w ͲΜͳ࣌ʹ͏͔ɿ w ͋ΔΫϥε܈ʹڞ௨ͨ͠Ҿ͕ଟ͘ɺ ݟ௨͕͠ѱ͘ͳ͍ͬͯΔ߹ w ԿΛ͢Δ͔ɿ w ڞ௨ͨ͠ҾΛ#BHͰͻͱ·ͱΊʹཧ
w ςετͰ#BHΛϑΝΫτϦؔͰ࡞ͯ͠ར༻ w ϑΝΫτϦؔʹσϑΥϧτҾΛઃఆ͓ͯ͘͠ͱศར
ςετରΛׂ͢Δ ύλʔϯ ύλʔϯ
ςετରͷ.PEFM ঢ়ଶมԽΛEFMFHBUF ͔ΒࢹͰ͖Δ ͋ΔؔΛ࣮ߦ͢Δͱ ෦ঢ়ଶ͕มԽͯ͠ EFMFHBUFʹ௨͞Εɺ ͍ͭͰʹϩά͕औΒΕΔ .PEFMঢ়ଶΛ อ͍࣋ͯ͠Δ ϩάΛ୲͢Δ-PHHFS
Ҿܦ༝Ͱೖ͞ΕΔ
ςετΛߟ͑ͯΈΔ ·ͣ
.PEFMͷঢ়ଶભҠΛ ͔֬ΊΔςετʹ -PHHFSΛ༩͑Δඞཁ͕ ͋Δͷͪΐͬͱҧײ ରԠ͢Δςετ .PEFMͷঢ়ଶભҠΛݕূ͍ͯ͠Δ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
͜͏͍͏ͱ͖ϩάػೳΛ .PEFM͔Βͨ͘͠ͳΔ ϩά.PEFMͷঢ়ଶભҠΛ ه͢Δͷʹͳ͍ͬͯΔ ͭ·ΓɺϩάػೳΛͨ͠ͱ ͯ͠ঢ়ଶભҠΛݕͰ͖Εɺ ͜Ε·Ͱ௨ΓʹϩάΛऔΕͦ͏ͳ ༧ײ͕͋Δ
-PHHJOH0CTFSWFS ͦ͜Ͱ
-PHHFSΛ৽͘͠ .PEFMͷࢹऀʹ Ճ͢ΔΘ͚͕ͩɺ EFMFHBUFͷ··ͩͱ ෳͷΦϒδΣΫτ͔Β ࢹͮ͠Β͍ͷͰɺ 3Y4XJGUஔ͖͑Δ .PEFM͔Βϩάͷ Λ֎͢ ઃܭमਖ਼ޙͷςετର
.PEFMΛࢹͯ͠ϩά Λૹ৴͢ΔΫϥεΛ࡞ .PEFMͷঢ়ଶ͕ มԽͨ͠ΒϩάΛૹ৴ .PEFMͷঢ়ଶભҠΛࢹ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
.PEFMͷ͔Βϩά ͕֎ΕͨͷͰɺςετ͕ ঢ়ଶભҠͷݕূʹ ઐ೦Ͱ͖ΔΑ͏ʹͳͬͨʂ ઃܭमਖ਼ޙͷςετ
-PHHJOH0CTFSWFS w ͲΜͳ࣌ʹ͏͔ɿ w .PEFMʹϩάػೳ͕ࠞࡏ͍ͯ͠Δ߹ w ԿΛ͢Δ͔ɿ w .PEFMΛෳͷ0CTFSWFS͔ΒࢹͰ͖ΔΑ͏ʹ͢Δ w
.PEFM͔ΒϩάػೳͷΛ֎͢ w .PEFMΛࢹ͢Δ-PHHFSΛ࡞͢Δ
ิɿ3Y4XJGU͕ݏͳਓ͚ɺ EFMFHBUFͷෳܥ͜͏ͳΔ ࠈͷນ։͚
EFMFHBUFΛྻʹ͢Δ EFMFHBUFΛྻʹ͢Δͱɺ ऑࢀরʹ͢Δίϯςφܕ͕ඞཁʹͳΔ Լͩͱ͙͢ʹճऩ͞ΕͪΌ͏ͷͰޡΓɿ weak var delegates: [Delegate]
ઌ΄Ͳͷίϯςφܕͷܕύϥϝʔλʹ EFMFHBUFͷ1SPUPDPMΛೖΕ͍͕ͨɺ 4XJGUͷ੍Ͱ͜Ε͕Ͱ͖ͳ͍ͷͰ ۤ͠ฆΕͷ5ZQF&SBTVSF͕ൃੜ
ิͷ·ͱΊ w %FMFHBUFͰෳͷΦϒδΣΫτ͔ΒࢹͰ͖Δ w ͨͩ͠ɺ࣮ݱ͢ΔͨΊͷίʔυྔଟ͘໘ w ͓ͱͳ͘͠3Y4XJGUʢ͔ͦΕʹ૬͢ΔͷʣΛ ͍·͠ΐ͏
ඇಉظͳςετΛ ಉظతʹ͢Δύλʔϯ ύλʔϯ
ςετର ʢ࣮ࡍͷ௨৴ͩͱίʔυ͍ͷͰ༻ʣ ॏෳऔಘΛ͙ ϑϥά͕͋Δ ޭΠϕϯτ͕ྲྀΕΔ ࣦഊΠϕϯτ͕ྲྀΕΔ औಘʹޭͨ͠Β௨ औಘΛ։࢝͢Δؔ จࣈྻΛαʔόʔ͔Βऔಘ͢Δ.PEFM
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ αʔόʔͱͷ௨৴ޙͷঢ়ଶΛςετ͍͕ͨ͠ɺαʔόʔͱͷ ௨৴ඇಉظͳͷͰɺඇಉظͳςετʹ͠ͳ͍ͱ͍͚ͳ͍ ͔͠͠ɺඇಉظͳςετίʔυྔ͕ଟ͘ͳΔͷͰɺ ؾ͕ਐ·ͳ͍ʜ
3Y&WFOU#MPDLFS ͦ͜Ͱ
Πϕϯτͷಉظతͳ ͪ߹ΘͤͷͨΊʹ 3Y#MPDLJOHΛ͍·͢ ࠷ॳͷ݁Ռ͕OJMͳͷͰ ͦΕΛআ֎ OJMͰͳ͍݁Ռ͕དྷΔ·Ͱ $PNQMFUFΛͭ $PNQMFUFʹͳΔ·Ͱ ίʔυͷ࣮ߦΛࢭΊΔ ݁Ռ͕͖ͨΒऔΓग़͢
ಉظతʹॻ͚ͨʂ मਖ਼ޙͷςετ
ͪ߹Θͤ͢Δίʔυͪ͝Όͪ͝Ό͢ΔͷͰɺ ؔʹ͘͘Γग़͢ͱՄಡੑͱ࠶ར༻ੑ্͕͕Δ
3Y&WFOU#MPDLFS w ͲΜͳ࣌ʹ͏͔ɿ w 3YͰදݱ͞ΕͨΠϕϯτ͕ඇಉظͰ ςετΛॻ͖ͮΒ͍ͱ͖ w ԿΛ͢Δ͔ɿ w 3Y#MPDLJOHΛ͔ͭͬͯಉظతͳίʔυʹ͢Δ
w ͪ߹Θͤͷίʔυؔʹ·ͱΊΔͱΑ͍
෦ঢ়ଶΛ੍ޚ͢Δ ύλʔϯ ύλʔϯ
ςετରઌ΄Ͳͱ ಉ͡.PEFMΛ͍·͢
ςετର ʢ࣮ࡍͷ௨৴ͩͱίʔυ͍ͷͰ༻ʣ ॏෳऔಘΛ͙ ϑϥά͕͋Δ ޭΠϕϯτ͕ྲྀΕΔ ࣦഊΠϕϯτ͕ྲྀΕΔ औಘʹޭͨ͠Β௨ औಘΛ։࢝͢Δؔ จࣈྻΛαʔόʔ͔Βऔಘ͢Δ.PEFM
ςετΛߟ͑ͯΈΔ ͏Ұ
͜ͷ.PEFMͷͯ͢ͷঢ়ଶΛ ςετ͢Δ͜ͱʹͨ͠ͱ͠·͢ ͜ͷ.PEFMͷͱΓ͑Δঢ়ଶͬͯɺ ͍͍ͬͨͲΕ͘Β͍͋ΔΜͰ͠ΐ͏ʁ
SFTVMU%JE$IBOHFͷ ࠷ޙͷ FSSPS%JE$IBOHFͷ ࠷ޙͷ JT'FUDIJOH OJM OJM USVF SFTVMU OJM
USVF OJM FSSPS USVF SFTVMU FSSPS USVF OJM OJM GBMTF SFTVMU OJM GBMTF OJM FSSPS GBMTF OJM FSSPS GBMTF ͋ɺ͋Εʁ͜Μͳʹ͋ΔΜ͚ͩͬʜʁ
͋Γ͑ͳ͍ঢ়ଶ ؚ·Ε͍ͯΔؾ͕͢Δʜ ʢঢ়ଶͷݟ௨͕͠ѱ͍ͷͰ֬৴Λͯͳ͍ʣ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
ঢ়ଶͷҰཡΛఆٛͯ͠ɺ Ұݩཧ͢Εݟ௨͕͠Αͦ͞͏
4UBUF.BDIJOF.PEFM ͦ͜Ͱ
·ͣ.PEFMͷऔΓ͏Δঢ়ଶͷҰཡΛ࡞Δ
୯ҰͷϑΟʔϧυͰ ঢ়ଶΛҰݩཧ͢Δ ͕มΘͬͨΒ ௨Λͯ͘͠ΕΔ 3Y4XJGU7BSJBCMF Λ͏ͱ͘ॻ͚Δ 7BSJBCMFͷมԽ ϑΟʔϧυΛ௨ͯ͠ ֎෦͔ΒࢹͰ͖Δ ঢ়ଶ͕Ұݩཧ
͞Εͨ͜ͱͰ ঢ়ଶભҠͷ༷ࢠ͕ Α͘Θ͔Δ ઃܭमਖ਼ޙͷຊମίʔυ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ঢ়ଶͷҰཡ͕͋ͬͯɺ͞Βʹ ঢ়ଶ͕Ұݩཧ͞Ε͍ͯΕ ؆୯ʹঢ়ଶભҠਤ͕ॻ͚Δ
.PEFMͷऔΓ͏Δঢ়ଶͷҰཡ͜Ε
.fetching .fetched(String) .failed(Error) .notFetchedYet GFUDI GFUDI GFUDI GFUDI
ঢ়ଶભҠਤΛݟΔͱ ҹͷશ෦Ͱͭ ͦΕͧΕͭͣͭςετ͢Ε શͯͷঢ়ଶભҠΛݕূͨ͜͠ͱʹͳΔ
4UBUF.BDIJOF.PEFM w ͲΜͳ࣌ʹ͏͔ɿ w .PEFMͷͱΓ͏Δঢ়ଶͷݟ௨͕͠ѱ͍ͱ͖ w ԿΛ͢Δ͔ɿ w FOVNͰঢ়ଶͷҰཡΛ࡞ w
୯ҰͷϑΟʔϧυͰঢ়ଶΛཧ͢Δ w 3Y4XJGU7BSJBCMFΛ͏ͱ͘ॻ͚Δ
ܕݕࠪͰςετΛ ݮΒ͢ύλʔϯ ύλʔϯ
ςετର EFRVFVF3FVTBCMF$FMMɺ SFHJTUFSΕͯΔͱΫϥογϡ͢Δ
ςετΛߟ͑ͯΈΔ ·ͣ
Ϋϥογϡ͠ͳ͍͜ͱ ͙Β͍֬ೝ͍͕ͨ͠ʜ ͍͍ͪͪςετ͢Δͷʜ
ςετ͠ͳͯ͘ ͍͍ํ๏Λߟ͑Δ ͦ͏͍͏ͱ͖
SFHJTUFSͨ͠ূڌΛ EFRVFVF͕ؔ ཁٻ͢ΔΑ͏ʹ͢Ε Αͦ͞͏ͳ༧ײ͕͋Δ
1SFQSPDFTTPS5PLFO ͦ͏͍͏ͱ͖
UPLFO֎͔Β ࡞Εͳ͍Α͏ʹ pMFQSJWBUFͰ੍ݶ ઃܭमਖ਼ޙͷςετରʢ$FMMଆʣ SFHJTUFS͢Δͱূڌͱͯ͠ UPLFOΛಘΒΕΔΑ͏ʹ͢Δ SFHJTUFSͷϥούʔ ؔΛ࡞͢Δ
EFRVFVFؔͷҾͰɺSFHJTUFSͨ͠ ূڌͷUPLFOΛཁٻ͢ΔΑ͏ʹ͢Δ UPLFO֎͔Β࡞Εͳ͍ͷͰɺઌʹSFHJTUFS ͯ͠UPLFOΛಘ͓͔ͯͳ͍ͱϏϧυ͕௨Βͳ͍ SFHJTUFSͯ͋͠ΕOJMʹͳΒͳ͍ͱ ެࣜυΩϡϝϯτʹॻ͍ͯ͋ΔͷͰ ҆৺ͯ͠GPSDFVOXSBQͰ͖Δʂ
1SFQSPDFTTPS5PLFO w ͲΜͳ࣌ʹ͏͔ɿ w ͋Δॲཧͷલʹඞཁͳલॲཧ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w લॲཧΛ࣮ߦ͠ͳ͍ͱಘΒΕͳ͍5PLFOΛ࡞ w
લॲཧ͕ඞཁͳؔͰ5PLFOΛཁٻͤ͞Δ
·ͱΊ w ཧڷେྔͷ୯ମςετͷதʹ ͋Γ·͢ w ୯ମςετ͕؆୯ʹͳΔͭͷ σβΠϯύλʔϯΛհ͠·ͨ͠ w ίʔυΛॻ͘ͱ͖ςετ͕ Ͳ͏ͳΔ͔Λҙࣝ͠·͠ΐ͏
એ w ൃදऀͷۈΊΔNJYJ(3061Ͱ J04ΤϯδχΞΛืू͍ͯ͠·͢ʂ w ͝ڵຯ͋Δํ!PSHB@DIFN·Ͱ %JSFDU.FTTBHFΛ͓ئ͍͠·͢ʂ