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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
780
テストケースの名前はどうつけるべきか?
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
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.6k
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.6k
仕様駆動開発、導入半年。「本当に速くなってるの?」にデータで答える / AICon2026_hirakawa
rakus_dev
0
180
SRE Next 2026 何でも屋からの脱却
bto
0
1k
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
150
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
570
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
0
160
発表と総括 / Presentations and Summary
ks91
PRO
0
150
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
250
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
230
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
860
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
510
Featured
See All Featured
Between Models and Reality
mayunak
4
370
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Making Projects Easy
brettharned
120
6.7k
Designing for Performance
lara
611
70k
Automating Front-end Workflow
addyosmani
1370
210k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Ace a Technical Interview
jacobian
281
24k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Raft: Consensus for Rubyists
vanstee
141
7.6k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
460
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Λ͓ئ͍͠·͢ʂ