2020幎ãã³ãããã¯ãšããŒã³ã¢ãŠã
ãŠãŠã¹ã±ã§ããã«ãªãã©ã«ãã¢ã®ããã¯ã«ã³ãããŒã§åããŠããŸããçŽ3幎ã¶ãã«ããã°èšäºãæžãä»æ¥ã¯ã以äžã®ãã€ãŒãã§æžããå 容ã詳ããæžããŸãã
2020幎æ¯ãè¿ããšãå人çã«ã¯å€§å€ãªå¹Žã§ããããã€ãšãªã¢ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠãããã°ããã¯ã«ã³ãããŒã§åããããšæã£ãæãããå°éãå€ãããšãŒããããæè¡æžåºçãçµãŠã¢ã¡ãªã«ã«çããããŒã³ã¢ãŠãã誀éåããªããåã«é²ãã§ãããšããã§ã®ãã³ãããã¯ã
— ãŠãŠã¹ã± (@ykawanabe) February 27, 2021
2020幎æ¯ãè¿ããšå€§å€ãªå¹Žã§ããããã³ãããã¯çµçãã¢ã¡ãªã«ã§ã¯èŠããŠãããã®ã®ã粟ç¥çã«éçãããŠããå人ãåšãã«å€ããèªåã®çµéšããããšããŸãšããŠããããšæã£ã次第ã§ãã
ãããããªãã§äœèª¿äžè¯ã«ïŒ
ãããã粟ç¥çãªäžèª¿ã¯é·ãéãããŠèç©ããããã®ã§ããã20代ååããå šåã§èµ°ã£ãŠãŸãããããã¯ãããã€ãšãªã¢ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠGoogleãFacebookã¿ãããªäŒç€Ÿã§åãããšããç®æšãæã£ãŠããç¹ã«ã§ããææå·¥åŠããCSã«å°éãå€ãããšãŒãããæ»åšãæè¡æžåºçãçµãŠã¢ã¡ãªã«ã«çããããŒã³ã¢ãŠãã誀éåããªãããã€ãšãªã¢ã®ããã°ããã¯ã«ã³ãããŒã«å ¥ããããã«ããã·ã¥ããŸããã
ãå°é£ãä¹ãåãã«ã¯ããã匷ãæšãç¶ããããšã ããšäœè²äŒç³»ãªæèãå ã«ãèªåã®äœã®ã·ã°ãã«ãç¡èŠããªããåžžã«ããã·ã¥ããŠããŸãããæçµçã«ãã³ãããã¯äžã人䞊ã¿ä»¥äžã«åããè¯ãæ瞟ãæ®ããªããåå°œããŸããã
èªåã§ã¯ããŒã³ã¢ãŠãã«è¿ã¥ããŠããããšã«æ°ã¥ãããšã¯é£ããã£ãã§ãããã ãå šãŠã®ç©ã«èå³ãç¡ãããã€ã©ã€ã©ã®ã¹ã¬ãã·ã§ã«ããäœããªããç©åãå¯ãŠããŸããéäžåã倱ã£ããã$30ã®éåçè²·ãã®ã«1ã¶æè¿·ã£ãããããããçç¶ã¯ãã£ãã®ã§ãããçãããããŸãŸãªã®ã§ã¯ãšæã£ãŠããã®ã§ãããæçµçã«ä»¥äžã®æŒ«ç»ã§ããããŸã§åé¡ãªãã£ãã®ã«çªç¶å€åãããç¹åŸŽããããšèšãã®ãèããåŸã ã«èªåã®ç¶æ ãèªèããã«è³ããŸããã
ããŒã³ã¢ãŠããšã€ã³ãã¹ã¿ãŒã·ã³ãããŒã
倧ããåããŠãã®ã粟ç¥çäžèª¿ãã¯ããŒã³ã¢ãŠããšã€ã³ãã¹ã¿ãŒã·ã³ãããŒã ããæ¥ãŠããŸãã ããŒã³ã¢ãŠãã¯çãå°œãããšèšãæå³ã§ãã身äœçã»ç²Ÿç¥çãªç²åŽã«ãã£ãŠããšãã«ã®ãŒã奪ãåããç²ãæãŠãŠããŸãç¶æ ããšã®ããšã§ãããããŸã§ä»äºã«æ ç±ã泚ãã§ãã®ã«ãçªç¶ããæ°ããªããªã£ããããŠããç¶æ ã§ãã
ãã³ãããã¯äžåšãã§ãã®çç¶ã«ãªã£ãŠãã人ãããèŠãããŸããã¯ãŒã¯ã©ã€ããã©ã³ã¹ãä¿ã€ã®ãé£ãããªããåžžã«é ãå転ããŠããç¶æ ã ãšããããªã£ãŠããŸãã®ãèªç¶ã§ãã
ã€ã³ãã¹ã¿ãŒã·ã³ãããŒã ã¯ãèªåã®å®åãå é¢çã«è¯å®ã§ããªãå¿çåŸåãã§ãèªåã®æåãéå°è©äŸ¡ããŠããŸãããšãæããŸãããã€ãšãªã¢ã®ããã¯ã«ã³ãããŒã§ãè¶ åªç§ãªäººãã¡ãšåãäžã§åã¯ããããç¶æ ã«è¿ã¥ããŠãããŸãããçŽåã«ãæžç±ãå·çããŠããããšãææ°ã®æè¡äºæ ã«ããã€ã³ãã ãšæããããããšã«åœ±é¿ããŠããŸãïŒæ¬ãæžããšãã®ãã¡ã€ã³ã®ã¬ããžã¯åŸããããä»ã¯çãã«ãªããã¡ïŒã
ãŸããè±èªã§åããããªææãåºãç¶ããã®ã¯ãããŸã ã«é£æ床ãé«ããªãšæã£ãŠããŸããäŒè©±ã®ã¿ãªãããæ å ±ãåéããé床ãæ·±ãã«ã圱é¿ããŸãããããèªãã®èªä¿¡ã«åœ±é¿ãäžããŠããŸããã
ã©ããªããšãã§ããïŒ
ã©ããªäººã§ããå°ããªãºã¬ã倧ããªç¡çã«ç¹ããããšãããããç¡çã ãšæã£ããäŒãã æ¹ããããšæããŸãããšã¯èšããç ãã 人ã«äŒããšèšã£ãŠãäŒãŸãªãããã§ãããªã®ã§ãæ¥é ããäºåã«å¯Ÿçãæã€ã®ãè¯ãããã§ãã
- 3ã¶æã«1åã1é±éã®ãã±ãŒã·ã§ã³ãåããã©ããã«è¡ã
- å®æçã«ã«ãŠã³ã»ãªã³ã°ãåããçŸç¶ã®ææ¡
- æ¥æ¬é£ã®æé£ãäœãæéãåãããããšãã®æéããšãã
- å®æçãªéåïŒçŸåšã¯é±5åã®ã¯ãã¹ãã£ããïŒ
- æ£æ©ããã
ãããªæãã§ãæ¥é å®è·µã§ããé·ææŠãæŠãæŠç¥ãæ¥é ã®ç掻ã«å ¥ããããšã«ããŸãããäŒæ¯ãšæ é€ããã¬ãŒãã³ã°ã®äžç°ã§ãããšããããã©ã€ã¢ã¹ãã³çæèãå ã«ããŠãŸãã
ããšãéãçç¶ã«ãªãåã«ãæ°è»œã«ã«ãŠã³ã»ãªã³ã°åããããããšããã§ãããã©ãã«ãŠã³ã»ãªã³ã°ã£ãŠãå°ããªãºã¬ãä¿®æ£ãããµããŒããããŠããããããªå Žæã§ãã£ãŠãæ°è»œã«ã話ããã«è¡ããããªå Žæãªãã§ããæ¬åœã«éããªã£ãã粟ç¥ç§ã®ãäžè©±ã«ãªããšæããŸãããåã®å Žåã¯ã幞ãã«ãäŒç€Ÿãããããæ©äŒãæäŸããŠãããŠãå©çšéå§ããããšãã§ããŸããã
競äºãæ¿ãããæèœè±ããªäººããã€ãšãªã¢ã«ã¯å€ãããã®ã§ãã€ã³ãã¹ã¿ãŒã·ã³ãããŒã ãããŒã³ã¢ãŠãã«èŠãã人ã¯å€ãã§ããæ±äº¬ã§ãæåçãªé¢ãããã䌌ããããªçŸè±¡ã¯ãããšæã£ãŠãŸããã¡ãã£ãšã§ãããºã¬ããæãããå°éã®äººã«çžè«ããã®ãããã§ããåž°ã£ãŠãããéã«ã
2018幎ãµã³ãã©ã³ã·ã¹ã³ã§åããœãããŠã§ã¢ãšã³ãžãã¢ããªã¹ã¹ã¡ããæ¯æ¥äœ¿ããã¢ããªãŸãšã
ãµã³ãã©ã³ã·ã¹ã³ã§ã¢ãã€ã«ã¢ããªãšã³ãžãã¢ãããŠãã(Yusuke Kawanabe (@ykawanabe))ã§ãã åãæ¥åžžçã«äœ¿ã£ãŠããã¢ããªã§æ è¡ã«æ¥ã人ã«ã圹ç«ã¡ãããªãã®ããŸãšããŸããå°ããã€è¿œå ããŠããäºå®ã§ãã
- ãªã³ã¯ã®äžã«ã¯ãªãã¡ãŒã©ã«ã³ãŒããå«ãã§ãããã®ããããŸãã
é»åã¹ã¯ãŒã¿ãŒ
2018幎ã«å ¥ãçªåŠãµã³ãã©ã³ã·ã¹ã³åžå ã«ç»å Žããé»åã¹ã¯ãŒã¿ãŒãå°å ã®äººã§ãåçºãã人ãå°ãªããªãã§ããããã§ã颯çœãšèµ°ã姿ã¯ã¹ã¿ã€ãªãã·ã¥ã§æªæ¥çãä¹ãæšãŠãããã®ã䟿å©ã§ãã
Bird
https://gift.bird.co/qaBoRX0siN
é»ãé»åã¹ã¯ãŒã¿ãŒãèŠããããããããBirdã§ããå UberãLyftã®åœ¹å¡ãã¡ã®äŒç€Ÿã§ãã
Lime
çœãšç·ã®ã¹ã¯ãŒã¿ãŒã¯Limeãç¹ã«ã©ã£ã¡ãåªããŠãããšããããšããªããããªã®ã§ãåã¯äž¡æ¹ã®ã¢ããªãå ¥ããŠããŸãã
èªè»¢è»
Ford GoBike
The Bay Areaâs bike share program | Ford GoBike
äžå2ãã«ãäžæ¥ä¹ãæŸé¡ã§10ãã«ãããªãå©äŸ¿æ§ãé«ããåã¯å¹ŽéäŒå¡ã«ãªã£ãŠããŸããæè¿ã§ã¯é»åã¢ã·ã¹ãã®èªè»¢è»ãã
JUMP bike
JUMP Bikes. Bike Share â Electrified
Ford bikeãšéãã®ã¯ãããã³ã°ã¹ããŒã·ã§ã³ããªããšããããšãä¹ãæšãŠå¯èœãªåé¢ãæ°ã¯å€ããªãå°è±¡ã
ã«ãŒã·ã§ã¢
Zipcar
https://refer.zipcar.com/s/yskkwnb915?share_id=6560747109443016507
ã«ãŒã·ã§ã¢ã®å é§ãããµã³ãã©ã³ã·ã¹ã³ã§ã¯ããŸãè»ãå¿ èŠãªãã®ã§ãåã¯è»ãæããé åºãããšãã¯Zipcardã§ãã
Maven
Hourly Car Rental Service | Maven Car Sharing
Zipcarã§èŠã€ãããªãæããããã¯çãæéã§åãããšãã«åã¯äœ¿ã£ãŠããŸãã
Getaround
https://www.getaround.com/invite/10213035395262674
人ãææããŠããè»ãã·ã§ã¢ãããšããã¢ããªã§ããè·¯é§ãããŠãããããè»ãæ¢ãã®ãZipcarãããæéãªãšããããŸã«ãããŸãããå€æ®µã¯å°ãå®ãããšãå€ãã§ãã
ã³ãŒããŒ
ã¹ã¿ãŒããã¯ã¹
Starbucks® App for iPhone® and Android⢠| Starbucks Coffee Company
泚æãé£ãããšèšãããã¹ã¿ãããã¢ããªã§ç°¡å泚æãåã¯åºå€æ家ãåºãåã«æ³šæããããã¯ã¢ããããŠãªãã£ã¹ã«è¡ã£ãŠããŸãã
Philz Coffee
Our App - Order Ahead, Pick-up Made Easy | Philz Coffee
ãµã³ãã©ã³ã·ã¹ã³ããŒã¹ã®ã³ãŒããŒãã§ãŒã³ã§ãã泚æåŸãããªããã³ãŒããŒãäœã£ãŠãããã®ãç¹åŸŽãéžã¹ããã¬ã³ãã®çš®é¡ãå€ããããããã
ãã©ã€ã¢ã¹ãã³
ã©ã³ãã³ã°ã³ãŒã¹çã«é¢ããŠã¯ãŸãåŸæ¥å¥ã®èšäºãæžããŸãã
ãããã ã£ãã§ãããããæ°ã«ãªãã¢ããªçããã°ãæ°è»œã«ã³ã¡ã³ãæ®ããŠãã ããã
ãµã³ãã©ã³ã·ã¹ã³ã§è»¢è·æŽ»åãããŸãã
èŠçŽ
ãµã³ãã©ã³ã·ã¹ã³ã§ hired.com ãäž»ã«çšãããã¥ãŒãšãŒã¯ã®äŒç€Ÿããã転è·ããŸãããRedditã®Hereâs How to Prepare for Tech Interviewsãšããèšäºãåèã«ãæè¡é¢æ¥ãžã®æºåããã倧å°æ§ã ãªäŒæ¥20瀟çšãåããŠãèªåã®ããã·ã§ã³ãšãããããäŒç€ŸãèŠã€ããŸããã
èæ¯
ãã¥ãŒãšãŒã¯ã«ããäŒç€Ÿã§åããŠããã®ã§ãããè«žã ã®äºæ ããã転è·æŽ»åãããããšã«ãªããŸããã*1
ã¢ã¡ãªã«ã§ã®äžè¬çãªãœãããŠã§ã¢ãšã³ãžãã¢æ¡çšããã»ã¹
ã¢ã¡ãªã«ã§ã®äžè¬çãªæ¡çšããã»ã¹ã¯ä»¥äžã®éãã§ãã
- ã¬ãžã¥ã¡ã®ã¹ã¯ãªãŒãã³ã°
- 人äºãšã®é»è©±é¢è«
- æè¡è ãšã®é»è©±é¢æ¥ïŒ1~2åïŒ
- ãªã³ãµã€ãé¢æ¥
人äºãšã®é»è©±é¢è«ã¯ãå¿æåæ©ãéå»ã®çµéšãèãããŸããäŒç€Ÿã®æ±ãã人æãšã®æäœéã®ãããã³ã°ã確èªããŠããå Žåãå€ãã§ãã æè¡è ãšã®é»è©±é¢æ¥ã¯ãé»è©±ã§äŒè©±ããªãããªã³ã©ã€ã³ã®ã³ãŒãã£ã³ã°ããŒã«çã䜿ã£ãŠåé¡ã解ãå Žåãã»ãšãã©ã§ãã4~8æéã§çµãããããªå®¿é¡ãåºãããå ŽåããããŸãã
ãªã³ãµã€ãé¢æ¥ã¯ãå®éã«ãªãã£ã¹ã«åºåããã§ã€ã¹ãã¥ãŒãã§ã€ã¹ã§è¡ãé¢æ¥ã§ãã4~6æéãšé·äžå Žã§ããããšãã»ãšãã©ã§ãäžè¬çã«ã¯3åã®ãã¯ã€ãããŒãã³ãŒãã£ã³ã°ã1åã®äžè¬çãªé¢æ¥ãè¡ãããŸãã
æ¡çšãŸã§ã®éã®ã
ã¢ã¡ãªã«ã§ã®æ¡çšæŽ»åãšæ¥æ¬ã®æ¡çšæŽ»åã¯ãå€åœäººã§ããããšãå·®ãåŒããŠããç§ã®èæèŠãããããšå€§ããéããã®ã§ãããåžžã«ç«¶äºã®æ¿ããã«ããããããšæããŸããããã ãã¡ãããšæºåãããŠæãã°äžå¯èœã§ã¯ãªããšããããšãããããŸããã
å°±åŽãã¶ïŒH-1BïŒããã°ãªãŒã³ã«ãŒããæã£ãŠããªããšããã»ã©ã®ã¹ã¿ãŒãã¬ã€ã€ãŒã§ãªããšé¢æ¥ããããŠãããªãããšãã»ãšãã©ã§ãã
çŽäžã¶æåã®è»¢è·æŽ»å
å®éã«è»¢è·æŽ»åãå§ããŠããä»äºã決ãŸããŸã§ã¯ãçŽäžã¶æåããäºã¶æã§ããã
* 1é±ç®ïŒå¿å
* 2é±ç®ã5é±ç®ïŒäººäºé¢æ¥ïŒæè¡é¢æ¥
* 6é±ç®ã8é±ç®ïŒãªã³ãµã€ãã€ã³ã¿ãã¥ãŒ
転è·æŽ»åèªäœã«ãšã«ããæéãããããŸããããŸããåµæ¥éããªãå°ããäŒç€Ÿãé€ãã人äºãæéå€ã«é¢æ¥ãããŠãããããšã¯éåžžã«çšãªã®ã§ãã¹ã±ãžã¥ãŒãªã³ã°ããšãŠãé£ããã£ãã§ããç§ã¯ã Calendly ã䜿ãçžæäŒæ¥åŽã«æéãéžãã§ãããããšã§è§£æ±ºããŸããã
å¿åç·š
ãŸãã¯ãã¬ãžã¥ã¡ã®æºåããã§ããã¬ãžã¥ã¡ãšCVã¯éããããã§ããã¬ãžã¥ã¡ã¯äžè¬çã«ã¯1ããŒãžã§åãŸãèªåã®çµæŽã®ãŸãšãã§ãCVã¯æ°ããŒãžã«ãããçµæŽã®ããã§ãé·ããã®ãCVãšãã説æãç®ã«ããŸããã人ã«ãã£ãŠã¯ãã¬ãžã¥ã¡ãäŒç€Ÿã«ãã£ãŠæžãæããããã§ãããiOSãšã³ãžãã¢è·ã«ããå¿åããªãã£ãã®ã§ç§ã¯åããã®ã䜿ããŸããã
次ã«ããžã·ã§ã³ã«å¿åããŸãã
æãå¹æãé«ãã£ãã®ããç¥äººã®çŽ¹ä»ã§ããæ¥æ¬ã§ãããã§ãããªãã¡ã¬ã³ã¹ããããšãæžé¡éžèãé£ã°ããã®ã§å ã«é²ããå¯èœæ§ãäžæ°ã«é«ãŸããŸãã 次ã«å¹æããã£ãã®ã¯ãhired.com ãšããã¹ã«ãŠãåã®ããã¯æ¥çåãæ±äººãµã€ãã§ããèªåã®åºæ¬æ å ±ãå ¥åãããšãèå³ãæã£ãŠãããäŒæ¥ãã声ããããŠããããä»çµã¿ã«ãªã£ãŠããŸãããã ããã°ãªãŒã³ã«ãŒããå°±åŽãã¶ãšãã£ããã¢ã¡ãªã«ã§å°±åŽã§ããæš©å©ãæã£ãŠããããšãæ¡ä»¶ã«ãªã£ãŠããããšãå€ãã®ã§æ³šæãå¿ èŠã§ãã
ãã® hired.com ã§äŒç€Ÿã¯ãå± äœå°åãããšã«ã人æãæ¢ãããã§ããåŒè¶ããèããŠãã人ã«ã¯æ³šæãå¿ èŠã§ãã æãå¹æããªãã£ãã®ããäŒæ¥ã®WebããŒãžããã®å¿åã§ããæ£çŽã«æžããšããã®æ¹æ³ã§ã¯äžç€Ÿãéžèãé²ããããšãã§ããŸããã§ããã
人äºé¢æ¥
æžé¡éžèãééããåŸã®å¿æåæ©ãªã©ã®åºæ¬æ å ±ã確èªããå Žã§ããããã¯é»è©±ã§è¡ãããŸãã
倧äœã®å Žå以äžã®ãã³ãã¬ãŒãã§äŒè©±ãå§ãŸããŸãã
äººäº ãããã«ã¡ããããããã§ããïŒã
ç§ãã¯ãã
人äºã調åã¯ã©ãã§ããã
ç§ãããæãã§ããããã¡ãã¯ã©ãã§ãããã
人äºãã¯ããè¯ãã§ããä»ãæé倧äžå€«ã§ããïŒã
ç§ããã¡ããã§ããã
人äºãã§ã¯ãããªãã«ã€ããŠã話ãããŠãã ãããã
ç§ãã¯ããç§ã¯ãããã
æ¥æ¬èªã«ãããšããã£ãŠæ®éã®äŒè©±ãªã®ã§ãããæ¥é 人ãšäŒè©±ãããªããšã³ãžãã¢ã§ããç§ã¯æ £ãããŸã§æéãããããŸãããéå»ã®ãããžã§ã¯ããã䜿ãããã¿ãæ°åçšæããæ°åã§è©±ãç·Žç¿ãç¹°ãè¿ããŸããããŸããïŒåãããã®èªå·±çŽ¹ä»ã¯ãé¢æ¥ãç¹°ãè¿ããŠãããã¡ã«ã¢ããããŒããããŠãããŸããã
æè¡é¢æ¥
æè¡è ãšããŠã®åãè©Šãããæè¡é¢æ¥ã§ããåºæ¬çã«ã¯ãã€ã³ãããšããŠiOS ã®åºæ¬ç¥èã10åçšåºŠç¢ºèªãã40åã»ã©ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ïŒCSïŒé¢é£ã®åé¡ã解ãã5åã®QandAã»ãã·ã§ã³ããããŸãã
ç¹ã«é£ããã®ããCSé¢é£ã®è³ªåãããŒã¿æ§é ãã¢ã«ãŽãªãºã ã«ã€ããŠã®åé¡ãåºãããŠãGoogle Docsã®ãããªãªã³ã©ã€ã³ã®ããã¹ããšãã£ã¿ã䜿ã£ãŠã³ãŒãã£ã³ã°ããŸãããªãŒãã³ã¬ã¯ã·ã§ã³ã¯ãªããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãããªãå Žåãããã®ã§ãå®éã«ãã¬ãŒã³ããã¹ããšãã£ã¿ã䜿ã£ãŠç·Žç¿ããã®ãããã§ãã Redditã®Hereâs How to Prepare for Tech Interviewsãšããèšäºãæºåãããäžã§å¿ èŠãªå 容ããªã¹ãã¢ããããŠããŠäŸ¿å©ã§ãããããã«ãªã¹ãã¢ããããŠããå 容ã«ã€ããŠæäœéç解ããŠãããã§ããã°å®è£ ãã§ããç¶æ ã«ãªã£ãŠããã®ãçæ³çã§ãã
åŠç¿ã«é¢ããŠã¯ã CoderustãšCracking the Coding Interviewã䜿ããŸãããç§ã¯ããŒã¿æ§é ãã¢ã«ãŽãªãºã ã®å匷ãæ¬æ Œçã«ããããšããªãã£ãã®ã§ãCoderustã®è¯ããšããã¯ããžã¥ã¢ã«ã§ã¢ã«ãŽãªãºã ã説æããŠãããŠããç¹ã§ããé¡äŒŒãµãŒãã¹ã«ã Interview Cake ããããŸããããå€æ®µãé«ãã§ãïŒããã«å人çã«ã¯Coderustã®æ¹ã奜ãã ã£ãïŒã
ç·Žç¿ã«æé©ãªã®ã¯ãLeetCode Online Judgeãããã¯ãã³ãŒãã£ã³ã°åé¡ããªã¹ãã¢ãããããŠãããªã³ã©ã€ã³ãã©ãŒã©ã ã§ãåºé¡ãããæåäŒæ¥ãã¿ã°ãããŠããããããŸããå®éã«ã³ãŒããå®è¡ã§ããã®ã§ã䟿å©ã§ããïŒswiftã«ã察å¿ïŒ
ãªã³ãµã€ãã€ã³ã¿ãã¥ãŒ
äŒç€Ÿã«ããããŸãããçŽ4æéã®æè¡é¢æ¥ãšã©ã³ãé¢æ¥ãåºæ¬ã§ããåé¡ã®é£æ床ã¯ãé»è©±æè¡é¢æ¥ãšå€§å·®ãªãããšãå€ãã§ããäžçªã®éãã¯ããã¯ã€ãããŒãã䜿ãããšãç°¡åã«ä¿®æ£ãã§ããªãã®ã§ãããã ã¢ããã§ã¯ãªããããããŠã³ã§ã³ãŒãã£ã³ã°ãããŠããå¿ èŠããããŸãã
ããã蟺ã®ãã¯ããã¯ã«é¢ããŠã¯ã Cracking the Coding Interviewãèè ã®è¬æŒçãèããŠå¯Ÿçãç·ŽããŸãããç§ã¯åºæ¬çã«ãç䌌ã³ãŒãããã¯ãããã¡ãœãããå®çŸ©ãé¢æ¥å®ãšäŒè©±ãããªããå¿ èŠã«å¿ããŠã¡ãœããã®å éšãå®è£ ãããšããæ¹æ³ããšããŸããã
ææ³ãšã
ã¹ã¿ãŒãã¢ããã®ã¡ãã«ãšèšãããã ããã£ãŠããµã³ãã©ã³ã·ã¹ã³ã¯é©æ°çãªããšã«åãçµãã§ãã人ãäŒç€Ÿã«åºäŒããå¯èœæ§ã¯é«ããªãšæããŸãããäžçäžããåªç§ãªäººæãéãŸã£ãŠããã®ã§ããã®ç«¶äºã®æ¿ãããèã§æããããšãã§ããŸãã
ä»äºæ¢ããã«ã«ãã£ãŒãã£ãããšããæå³ã§ã¯ãèšèªãç°å¢ã®éãã¯ããã©æ¥æ¬ã§ã®è»¢è·æŽ»åãšå€ãããªããšæããŠããŸããäžæè°ãšãããããªããšæãäŒç€Ÿã®éžèã¯é 調ã«é²ã¿ããäœãã€ãã€ãã ãªããšæãäŒç€Ÿã¯æçµé¢æ¥ãŸã§ã»ãšãã©è¡ããŸããã§ããã
ã¢ã¡ãªã«ã§åãã«ã¯ã競äºã®æ¿ããã®ã¿ãªãããå°±åŽãã¶ãšããé«ãå£ããããŸãããšã³ãžãã¢ãšããŠäžçã®æåç·ã§åãéžæè¢ãªã©ã«è©³ããæžãããŠããŸãããåºæ¬çã«ãã¶ããªããšã¢ã¡ãªã«ã§è»¢è·ããã®ã¯ããŒãã«ãé«ãã§ãã
å人çã«ã¯ãã¢ã¡ãªã«ã§ããå¿ èŠã¯ãªããã©æµ·å€ã§åããããšãã人ã«ã¯ãã«ãªã³ããå§ããããã§ããæè¡è ã¯æ¯èŒçãã¶ãåºãããã£ãããç©äŸ¡ãã¢ã¡ãªã«ãšæ¯ã¹ãŠãšãŠãå®ããäœã¿å¿å°ãæ矀ã§ãããã«ãªã³ã§ã®è»¢è·æŽ»åã«ã€ããŠã¯ãã«ãªã³ã«ãŠè»¢è·ããŸããã - zakisanâs blogãè¯ãã£ãã§ãã
ãã®ä»ã¡ã¢
- ãšãã倧äŒç€Ÿã§ã·ãã¢ãšã³ãžãã¢ã®ããžã·ã§ã³ã«å¿åãããã5幎以äžã®çµéšããªããšã·ãã¢ãšèªèã§ããªããšèšãããã
- 玹ä»ãããäžèŠæš¡ã®ã¹ã¿ãŒãã¢ããã«äºåºŠãäºå®ããã¿ãã£ã³ãããã
- æèŠãšããŠãã·ãŒãã©ãŠã³ãã®ã¹ã¿ãŒãã¢ãããã·ãªãŒãºAã®ã¹ã¿ãŒãã¢ãããæ¥æé·äžã®ã¹ã¿ãŒãã¢ããã倧äŒæ¥ã®4ã«ããŽãªã§é°å²æ°ã倧ããå€ãããæ¥æé·äžã®ã¹ã¿ãŒãã¢ããã¯ã人æã®è³ªã«ã°ãã€ãããã£ãããšãé¢æ¥äžã«ãæé·ã®çã¿ãå£éèŠããããšãããèŸãã
- ä»æ³šç®ã®ãããµã¹å·Austinã®äŒæ¥ã«ãå¿åãããã§ãããã€ãããŒãã£ããªäŒç€Ÿã¯ãµã³ãã©ã³ã·ã¹ã³ããã¥ãŒãšãŒã¯ã«å€ãå°è±¡ã§ããAustinã¯äœã¿ããããŠãè¯ãè¡ãªãã§ããã©ãã
- è±èªåã«é¢ããŠã¯ãåœéäŒæ¥ã§è±èªãäž»èšèªãšããŠåãããšã³ãžãã¢ãšããŠå£é ã®è°è«ãã§ããŠããã°åé¡ã¯ãªããšæããŸããããããããæ®æ®µäœ¿ããªããããªã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®åºæ¬ç¥èãç§ã¯ããã¯ã«ãªããŸããã
- ã¢ã¡ãªã«ã§ã®è»¢è·ãèããŠãã人ã¯ããšã³ãžãã¢ãšããŠäžçã®æåç·ã§åãéžæè¢ãšããæžç±ããªã¹ã¹ã¡ã§ããããå æ¬çã«æžãããŠããŸãã
ãŸãšã
äžã¶æåæ®éã«åããªããè·æ¢ããããŠããã®ã§ãç²ãããšããã®ãæ£çŽãªææ³ã§ãã
åœå ã«æå·®ãããã®ã§ãåºæ¬çã«ãã¥ãŒãšãŒã¯ã«æ»åšããªããããµã³ãã©ã³ã·ã¹ã³ããªãŒã¹ãã£ã³ã®äŒç€Ÿãšé¢æ¥ããã ãã§ãå²ãšå€§å€ã§ããã
åœå€ã§åããŠã¿ãããšã¯ãæ°ãã䟡å€èŠ³ã«è§Šããäžçªã®æ©äŒã ãšæã£ãŠããŸãããŸããçŸå°ã®äŒæ¥ã§åãããšã¯ãæ¥ç³»äŒæ¥ã®æµ·å€æ¯ç€Ÿã§åãã®ãšã¯å€§ããéããšæã£ãŠããŸããã©ã¡ããè¯ãç¹æªãç¹ãããã®ã§ãã©ã¡ãã®æèŠãèããŠã¿ãã®ãè¯ããšæããŸãã
ãããŠãæµ·å€ã§åããšããæå³ã§ã¯ããã«ãªã³ãªã©ã®ç§»æ°åå ¥ããçããªå°åã®æ¹ãå人çã«ã¯ãªã¹ã¹ã¡ã§ãã
*1:ç§ã¯å©çŽè ãã¢ã¡ãªã«ã«ããã®ã§ã¢ã¡ãªã«ã«æ®ãããã£ãã®ã§ãããåè·ã®ãšã³ãžãã¢ãªã³ã°ããŒã ãæ¬æ Œçã«ãã«ãªã³ã«ãªãã£ã¹ã移転ããããšã«æ±ºå®ããããã
CallKitãçšããSystem Calling Screenã®å®è£
èæ¯
WWDC16ã§VoIPã¢ããªã§ãiOSãã€ãã£ãã®UIã䜿ããããã«ãªããŸããããããŸã§ã¯ãPushéç¥ãããŠãŒã¶ãŒã«ã¢ããªãéããŠãããå¿ èŠããããŸãããããµãŒãããŒãã£è£œã¢ããªã§ããã€ãã£ãã¢ããªã®UIãéããããã«ãªã£ãããšã§ãããäžè²«ããäœéšãæäŸã§ãéç¥ã«ãæ°ã¥ãããããªãã¡ãªããããããŸãã
å人ãããžã§ã¯ãã§ããããè©ŠããŠã¿ãã®ã§ããŸãšããããšæããŸããããããšèªäœã¯ã·ã³ãã«ãªã®ã§ãããç§ã¯èšŒææžé¢é£ã§ã€ãŸãããŸããã
ããããšãã£ãããŸãšã
- Amazon SNSãèšå®ãã
- ã¢ããªåŽã®åæèšå®ã
PKPushRegistry
ãçšããŠãVoIPããã·ã¥éç¥ã®åæèšå®ãè¡ã - Amazon SNSãããVoIPããã·ã¥éç¥ãéã
- CallKitãçšããŠãã€ãã£ãé話ç»é¢ã衚瀺
Amazon SNSãçšããŠãVoIPããã·ã¥éç¥ãåãåã
Amazon SNSãèšå®ãã
ãã€ãã£ãé話ç»é¢ã衚瀺ããããã«ã¯ãã¢ããªãããã¯ã°ã©ãŠã³ãã§èµ·åããå¿ èŠããããŸãããã®ããã«VoIPããã·ã¥éç¥ãéãæºåãããå¿ èŠããããŸãã
VoIP push notificationãçšãããšãã¢ããªãããã¯ã°ã©ãŠã³ãã§èµ·åãããããšãä¿èšŒãããããã¯ã°ã©ãŠã³ãã§èµ·åããŠããå Žåã§ãåŠçãå®è¡ããããã®æéã確ä¿ãããŠããŸããç§ã¯ãã®ç¹ã«æ°ã¥ãããéåžžã®ããã·ã¥éç¥ãããŒã«ã«éç¥ã§å®è£ ã§ããªããè©Šè¡é¯èª€ããŠããŸããã ãã詳ããéãã«ã€ããŠã¯ãVoIPããã·ã¥éç¥(PushKit)ãšæšæºããã·ã¥éç¥ã®éãã«ã€ããŠããšãŠãåèã«ãªããŸãã
ParseããFirebaseã¯å®è£ æ(2016幎8æé )ã«ã¯ãVoIP ããã·ã¥éç¥ããµããŒãããŠããªãã£ããããAWSã®ããã·ã¥éç¥ãµãŒãã¹ã䜿ãããšã«ããŸããã
åºæ¬çã«ãéåžžã®ããã·ã¥éç¥ãSNSããéãå Žåãšããªãã·ã§ã³ãšèšŒææžãå€ããã ãã§ãæé ã¯å€ãããŸããã
ãŸãã¯ã蚌ææžã®äœæã§ããéåžžã®ããã·ã¥éç¥ãšåæ§ã«Apple DeveloperãŠã§ããµã€ãããã蚌ææžãäœæããããšãã§ããŸããApple push notification service SSLã§ã¯ãªããVoIP Service Certificateãéžæãã蚌ææžãååŸããP12ãã¡ã€ã«ãæžãåºããŸããiOSããã·ã¥éç¥çšèšŒææžã®æŽæ°æ¹æ³ãåèã«ãªããŸãã
次ã«ãAWS管çç»é¢ãããSNSãéžæããŸãã
次ã«ãApplicationãéžæããCreate platform applicationããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
衚瀺ãããããã©ãããã©ãŒã èšå®ç»é¢ã«ãŠãå¿ èŠãªæ å ±ãå ¥åããŸãã
- Application name: ä»»æã®ã¢ããªå
- Push notification platform: Apple development ãããã¯Apple production
- Push certificate type: VoIP push certificate
- Chose P12 file: Apple DeveloperãŠã§ããµã€ãã§äœæããVoIPããã·ã¥éç¥çšP12ãã¡ã€ã«ãéžæ
- Enter Password: P12ãã¡ã€ã«äœææã®ãã¹ã¯ãŒã
SNSåŽã®èšå®ã¯ä»¥äžã§å®äºã§ãã*1
VoIPããã·ã¥éç¥ãåãåãããã®ãã¢ããªåŽã§ã®èšå®
次ã«ãã¢ããªåŽã®ãããžã§ã¯ãèšå®ãããŸãããããžã§ã¯ããã¡ã€ã«ãéžæããVoIPããã·ã¥éç¥ãåãåãããã¿ãŒã²ããã®ãCapabilityãããBackground Modeãæå¹ã«ããŸããVoice over IPãšãBackgrond fetchãéžæããVoIPããã·ã¥éç¥ãåãåããä»»æã®åŠçãå®è¡ã§ããããã«ããŸãã*2
次ã«ãPKPushRegistry
ãçšããŠãããã€ã¹ããŒã¯ã³ãååŸããŸãã以äžã®ããã«ãPKPushRegistry
ã€ã³ã¹ã¿ã³ã¹ã«ãVoIPããã·ã¥éç¥ãåãåãããã«æå®ããŸããããªã²ãŒãã§æå®ããã€ã³ã¹ã¿ã³ã¹ããVoIPããã·ã¥éç¥é¢é£ã®ã³ãŒã«ããã¯ãåãåããŸãã
#import <PushKit/PushKit.h> @interface JSKPushKitManager()<PKPushRegistryDelegate> @property (nonatomic, strong) PKPushRegistry* voipRegistry; @end @implementation JSKPushKitManager -(void)setupPushKit { dispatch_queue_t mainQueue = dispatch_get_main_queue(); self.voipRegistry = [[PKPushRegistry alloc] initWithQueue: mainQueue]; self.voipRegistry.delegate = self; self.voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; }
ãã®ãsetupPushKit
ãAppDelegate
å
ã§åŒã³ãPKPushRegistry
ã®ã³ãŒã«ããã¯ãåãåããããã«ããŸãã
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self setupPushKit]; }
ããã€ã¹ããŒã¯ã³ãååŸããããã«ãJSKPushKitManager
ã«æ»ããPKPushRegistry
ã®ããªã²ãŒãã¡ãœãããå®è£
ããŸãã
// ããŒã¯ã³ãæŽæ°ããããšãã«åŒã°ããã -(void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type { NSString *tokenString = [self tokenStringWithData:credentials.token]; NSLog(@"Token String: %@", tokenString); // ããŒã¯ã³ããµãŒããŒã«éãåŠç } -(NSString *)tokenStringWithData:(NSData *)data { const unsigned *tokenBytes = [data bytes]; NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; return hexToken; }
ä»åã¯ããã¹ãã®ããã«ãNSLog()
ã§åºåããããã€ã¹ã«ãŠããŒã¯ãªããŒã¯ã³ãæåã§SNSã§ç»é²ããŸãããéåžžã¯ãµãŒããŒã«éä¿¡ãåŠçãå®è¡ããã®ãè¯ããšæããŸãã*3
VoIPããã·ã¥éç¥ãåãåããšä»¥äžã®ããªã²ãŒãã¡ãœãããåŒã°ããŸãã
// VoIPããã·ã¥éç¥ãåãåã£ããšã -(void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type { NSLog(@"Received a VoIP push notification."); }
Amazon SNSããVoIPããã·ã¥éç¥ãéã
ååŸããããã€ã¹ããŒã¯ã³ãããã¹ãã®ããã«SNSã«ç»é²ããŸããSNS管çç»é¢ãããäœæããApplicationãéžæããCreate platform endpointããããã€ã¹ããŒã¯ã³ãè¿œå ããŸããããã€ã¹ããŒã¯ã³ãè¿œå ããããšãåããã€ã¹ã®Endpoint ARNãäœæãããå端æ«ã«é ä¿¡ããéã«ãã®å€ãæå®ããŸãã
ã
ããã€ã¹ããŒã¯ã³ç»é²ç»é¢ã§ã¯ãDevice Tokenã®ä»ã«User Dataãå ¥åããããšãã§ããŸãããŠãŒã¶ãŒIDçãç»é²ããããšã§ããµãŒããŒããä»»æã®ç«¯æ«ã«ããã·ã¥éç¥ãéããããã«ãªããŸãã
ããŠãå®éã«VoIPããã·ã¥éç¥ãéä¿¡ããŠã¿ãŸããããéä¿¡ããã端æ«ã«ãã§ãã¯ãå ¥ããPublish to EndpoitããVoIPããã·ã¥éç¥ãéãããšãã§ããŸããiOSåŽã®èšå®ãå®äºããŠããã°ãVoIPããã·ã¥éç¥ãå±ãããã°ãèŠããã¯ãã§ãã
CallKitãçšããŠãã€ãã£ãé話ç»é¢ã衚瀺
VoIPããã·ã¥éç¥ãéããããã«ãªãã°ãããšã¯ãã€ãã£ãé話ç»é¢ã衚瀺ããã ãã§ãã ç»å Žããã¯ã©ã¹ã¯ä»¥äžã®éãã§ãã
- CXProvider:é話ç»é¢ãåŒã³åºãã¯ã©ã¹
- CXProviderConfiguration: ã¢ããªåºæã®é話ç»é¢å ±éã®èšå®
- CXCallUpdate: åãåã£ãé話ã«é¢ããæ å ±
JSKSystemCallProvider
ãšããã¯ã©ã¹ã«ãé話ã«é¢ããæ©èœãå®è£
ããŠãããŸãã
@interface JSKSystemCallProvider() <CXProviderDelegate> @property (nonatomic, strong) CXProvider *provider; @property (nonatomic, strong) CXProviderConfiguration *configuration; @end @implementation JSKSystemCallProvider -(instancetype)init { self = [super init]; if (self) { _configuration = [self newConfiguration]; _provider = [[CXProvider alloc] initWithConfiguration:_configuration]; [_provider setDelegate:self queue:nil]; } return self; } -(CXProviderConfiguration *)newConfiguration { CXProviderConfiguration *configuration = [[ CXProviderConfiguration alloc] initWithLocalizedName:@"Sample Phone Call"]; configuration.supportedHandleTypes = [NSSet setWithObject:@(CXHandleTypePhoneNumber)]; return configuration; }
CXProvider
ãCXProviderConfiguration
ãçšããŠåæåããŸããCXProviderConfiguration
ã§ã¯ãçä¿¡é³ããã¢ããªè¡šç€ºåãã¢ããªã¢ã€ã³ã³ã®æå®ãªã©ãã§ããŸãã
é話éå§
é話ãéå§ããã«ã¯ãCXProvider
ã®- (void)reportNewIncomingCallWithUUID:(NSUUID *)UUID update:(CXCallUpdate *)update completion:(void (^)(NSError *_Nullable error))completion;
ãåŒã³ãŸãã
-(void)reportIncomingCallWithHandle:(NSString *)handle success:(void (^)())success failure:(void (^)(NSError * error))failure { CXCallUpdate *update = [self newCallUpdateWithHandle:handle]; self.callId = [NSUUID UUID]; [self.provider reportNewIncomingCallWithUUID:self.callId update:update completion:^(NSError * _Nullable error) { if (error) { if (failure) failure(error); } else { if (success) { success(); } } }]; }
ãŠãŒã¶ãŒããé話éå§ãã¿ã³ãæŒããšãsuccess()
ãåŒã°ããŸããVoIPé話ãéå§ããåŠçãBlocksãšããŠæž¡ããé話ãéå§ãããŸãã
ãã®æãCXCallUpdate
ã€ã³ã¹ã¿ã³ã¹ãçšããŠé話ã«é¢ããæ
å ±ãæž¡ããŠããŸãããã®ã¯ã©ã¹ã§ã¯ãåç»ããµããŒãããããã°ã«ãŒãã³ãŒã«ããµããŒããããçã®æ
å ±ãä»äžããããšãåºæ¥ãŸãã
-(CXCallUpdate *)newCallUpdateWithHandle:(NSString *)handle { CXCallUpdate *update = [[CXCallUpdate alloc] init]; update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle]; update.supportsGrouping = NO; // ã°ã«ãŒãã³ãŒã«ãµããŒãããªã update.supportsHolding = NO; // é話ã®ããŒã«ãäžå¯ return update; }
é話ã®çµäº
é話ãéå§ããŠãããã¢ããªãéãããšãã§ãããããé話çµäºåŠçã¯ãã¢ããªããçµäºããå Žåãšããã€ãã£ãé話ç»é¢ããçµäºããå Žåãšäž¡æ¹èæ ®ããå¿ èŠããããŸãã
ã¢ããªããé話ãçµäºããå Žåã¯ã以äžã®ããã«CXProvider
ã®- (void)reportCallWithUUID:(NSUUID *)UUID endedAtDate:(nullable NSDate *)dateEnded reason:(CXCallEndedReason)endedReason;
ãçšããŠããã€ãã£ãé話ç»é¢ãçµäºãããŸãã
-(void)reportCallDidEnd { NSDate *callEndDate = [NSDate date]; [self.provider reportCallWithUUID:self.callId endedAtDate:callEndDate reason:CXCallEndedReasonRemoteEnded]; }
ãã€ãã£ãé話ç»é¢ããé話ãçµäºããå Žåã¯ã以äžã®ããªã²ãŒãã¡ãœãããåŒã°ããŸãã
-(void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action { // é話çµäºã®åŠç [action fulfill]; }
[action fulfill];
ãåŒã¶ããšã§ããã€ãã£ãé話ç»é¢ã§ã®è¡šç€ºãé話çµäºåŠçãå®äºããç¶æ
ã«ãªããŸãã
ãã€ãã£ãé話ç»é¢ã䜿ãäžã§ã®æ³šæç¹
ç»é¢ããã¯æãšãéããã¯æã®æåãéãã
ç»é¢ããã¯æã¯ããŠãŒã¶ãŒåŽã®èŠç¹ã ãšãé話éå§ãã¿ã³ãæŒããšãé話äžç»é¢ã«ãªãé話ãéå§ããŸããããã¯ã°ã©ãŠã³ãã§ã¯ãã¢ããªãèµ·åãé話ã«å¿ èŠãªåŠçãå®è¡ããŠããŸããç»é¢éããã¯æã«ã¯ããŠãŒã¶ãŒãé話éå§ãã¿ã³ãæŒããšã¢ããªãçŽæ¥èµ·åãããŸããã€ãŸããé話éå§ã«ãã£ãŠããã¯ã解é€ãããããã§ã¯ãªãã®ã§ããŠãŒã¶ãŒãããã¯è§£é€ãããŸã§ã¢ããªç»é¢ãæäŸããããšãã§ããŸããã
ãã®ãããçŸæç¹ã§ã¯ããŒããã·ã§ã³ååŸã®ã¢ã©ãŒãã衚瀺ã§ããªãããããã€ã¯ãšã«ã¡ã©ã®ããŒããã·ã§ã³ãé話éå§åã«ååŸããŠããå¿ èŠããããŸããé話ãéå§ããŠããçžæã®å£°ãèãããŠããèªåã®å£°ãèãããªãç¶æ ã«ãªã£ãŠããŸããŸãã*4
ãŸããé話éå§ã®ããã«ç¹å®ã®ç»é¢é·ç§»ãæã€ã¢ããªã¯æ³šæãå¿ èŠã§ããç»é¢éããã¯æã«ã¯é話éå§ãšåæã«ã¢ããªãèµ·åãããããäžè²«ããäœéšã®ããã«ä»ã®ç»é¢ãèŠããã«é話ç»é¢ãèŠããå¿ èŠããããŸãã
VoIPããã·ã¥éç¥åä¿¡æã®ã©ã€ããµã€ã¯ã«
VoIPããã·ã¥ãåä¿¡ãããšãããã¯ã°ã©ãŠã³ãã§ã¢ããªãèµ·åããããŸãã
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
ãåŒã°ãã
-(void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type;
ãåŒã°ããŸããã¢ããªèµ·åæã«éåæã§äœããã®åŠçãå®è¡ããŠããå Žåã¯æ³šæãå¿ èŠã§ãã
ãŸãšã
Amazon SNSã«ããVoIPããã·ã¥éç¥ãšãCallKitã«ãããã€ãã£ãé話ç»é¢ã®å®è£ ããŸãšããŸãããã¯ã©ã€ã¢ã³ãã§VoIPããã·ã¥éç¥ãåãåãããã€ãã£ãé話ç»é¢ã衚瀺ããããã¯ã°ã©ãŠã³ãã§ã¢ããªãèµ·åãé話ãéå§ããããšã§ãiOSã®é話ãšåæ§ã®äœéšãæäŸããããšãã§ããŸãã
å®è£ ã«ããããAppleãå ¬éããŠãããµã³ãã«ãããžã§ã¯ããããšãŠãåèã«ãªã£ãã®ã§ãèŠãŠã¿ãŠãã ããã
åèæç®
- Enhancing VoIP Apps with CallKit
- Speakerbox: Using CallKit to create a VoIP app
- VoIPããã·ã¥éç¥(PushKit)ãšæšæºããã·ã¥éç¥ã®éãã«ã€ããŠ
- Life cycle of app - when app is in terminated and push kit payload comes
*1:å®éã®éçšã«ã¯ããµãŒããŒåŽã®å®è£ ããã¡ããå¿ èŠ
*2:ãã®èšå®ã«æ°ã¥ãããVoIPããã·ã¥éç¥ããããã¯ã°ã©ãŠã³ãã§èµ·åããªããªãšãæ°æéããããŸãã
*3:ã¯ã©ã€ã¢ã³ãããçŽæ¥AWSã«ç»é²ããããšãã§ããŸãããããããã¯ããŸãã
*4:å·çæã«ãææåã¢ããªã§ãã®æåã確èªããŠèŸãæ°æã¡ã«ãªã£ã
ããããããAuto Layoutããå·çãã話
å æ¥ãç§ã®å·çããããããããAuto Layoutããçºå£²ãããŸããããšãŠã貎éãªçµéšãã§ãããšæãã®ã§ãŸãšããããšæããŸãã
çµç·¯
ã¯ããŸãã¯ã2015幎å æ¥ãæ°ããã¡ã¢åž³ã«ãæ¬ãæžãããšç®æšãæžããããšã§ãããä»ã«ãç®æšããã£ãŠããã³ããã¬ã¹ã®èªå·±èšé²æŽæ°ããã·ãã¯ã¹ããã¯ãæã«å ¥ãããšããã®ãã¡ã®1ã€ã§ãã
ãã£ããã¯ãåè·ã®Gunosyã§ç¬¬13åpotatotipsãéå¬ãããšãã«çªç¶èšªããŸãããæ芪äŒã§@tokoromããã«ã¢ã€ãã¢ã話ãããšãããããããããïŒããšãªãåºç瀟ã®æ¹ã玹ä»ããŠããããããšã«ãªããŸããããã®åŸãåºç瀟ã®æ¹ãšã®é¡åããããŒãã£ã³ã°ãäŒç»ã®æã¡åãããªã©ããããå·çããããšã«ãªããŸããããã®ãšãã¯ãŸã ãããããåŸ ã¡åããå°é£ã«ã¯æ°ä»ããŠããªãã®ã§ããã
éçºäœå¶ã»ãããŒ
- èè ïŒç§ïŒ
- ç£ä¿®(@tokorom)
- åºç瀟
- ç·šéã®æ¹ã
ããŒã¯ããŠã³ã§èšè¿°ãã1ç« ããšã«ãGithubäžã§Pull Requestãäœããšããã¹ã¿ã€ã«ã§ãããä»èããŸããããé称GMSãããŒïŒGithub+Markdownå·çãããŒïŒã§ããç§ã«ãšã£ãŠãã¯ãããŠã®å·çã ã£ããããç§ãæžããç·šéããã§ãã¯ãä¿®æ£äŸé Œãéãã¿ãããªããã»ã¹ãè€æ°åç¹°ãè¿ãã²ã©*1ãã§ãããã®åŸèµ€å ¥ã*2ãç¹°ãè¿ããããšãã圢ã§ããã*3
å·çäžæ±ãã課é¡
ã©ãããæãã€ãããããããããããéå»ã®ããã°èšäºãšé¢é£ãã第6ç« ãå®è£ åºæ¬ãã¿ãŒã³ãããæãã€ããããšã«ããã®ç« ã¯ãAuto Layoutãçšããã¬ã€ã¢ãŠãããã¿ãŒã³ã«åãããšããè©Šã¿ã®ç« ã§ããæéããããŠæžããããã°èšäºãå ã«æžããã®ã§äžæããããšæã£ãŠããŸãããããã®ãã¡ãŒã¹ããã©ããã¯ã²ã©ããã®ã§ããããŸããé·æãæžããšããããšãã§ããŸããã§ããããŸãæ¥æ¬èªãå šäœã®èšèšã«ãåé¡ããããŸããã*4
é·æãæžããªã
æåã®åé¡ã¯ãå 容ãè¡šé¢çãããããšã§ããååãªæ·±æããã§ããŠããããçµæçã«æåã«æžããç« ã®ãã©ããã¯çãããŸãããããã§ãããã®ææžããéã¯ãæ°åã®å ¥ã£ãããã°èšäºäœã®é·ãã§ã ã£ãã®ã§ãã俺é 匵ã£ãããšæã£ãŠããŸããã
æ¥æ¬èªã®åé¡
æ¥æ¬èªãããæžãæ¹ãã§ããŠããªãããšãæããåœèªã倧ã®èŠæã ã£ãç§ãäžåŠã®æã4åã®1ã4åã®2ãšèšããããŠã4åã®ã¡ãã£ãšã£ãŠèšã£ãŠãããããåœèªåã¯äœãã§ããããã«ãæç« ã®æžãæ¹ã¯çåŠäžã«åŠã³*5ãåŠè¡è«æãéããŠåŠãã ã®ã§ãç¹åŸŽçãªæç« ãšãªã£ãŠããŸãããæ¥æ¬èªã¯è±èªãããæ¥ç¶è©ããã䜿ããšããäž»èªãã¯ã£ããããããšããã£ããåœããåã®ã¬ãã«ããã¯ãããå¿ èŠããããŸããã
å šäœèšèš
200ããŒãžä»¥äžããã®ã§ãå šäœãèŠãŠã¡ãã»ãŒãžãçºä¿¡ããã®ãéåžžã«é£ããã£ãã§ããç§ã¯ããŸãç®æ¬¡ãäœãããšã«ããŸãããããããæžãé²ããŠãããšãå 容ã®è¿œå ãå ¥ãæ¿ããå¿ èŠã«ãªã£ãããæžç±ã®ç®çãèããªãããªããŠããšããããŸããããŸããã³ã³ãã¯ã¹ããããçšåºŠå ±æãããŠããããã°ãšéã£ãŠãåææ¡ä»¶ãã説æãããã€æ·±æãããå¿ èŠããããŸããèŠæã ãããã®å 容ã¯é£ã°ããã¿ãããªããšãã§ããŸãããäžæ©åŒããŠå šäœãèŠãªãããæã«ã¯å¿ èŠä»¥äžã«è¿ã¥ããŠå¯Ÿè±¡æè¡ã芳å¯ããå¿ èŠããããŸããã
察ç
ãããã®èª²é¡ã¯ãšã³ãžãã¢çæèã§è§£æ±ºããããšãã§ããŸããã
é·æãæžããªã
ããã¯æžãããšã§ãã解決ãããŸããã§ãããã³ãŒããšäžç·ã§ãããã ãé·æãæžããªãã®ã§ãæžãã¯ãããããšãã§ããŸããããé¶ãå ããåµãå ããã§ããããã§ãç§ã¯ãŸãå£èªã§æžãããšã«ããŸãããäŸãã°ãããªæãã
iOS 8 ã§ã¯ãªãªãšã³ããŒã·ã§ã³ãšããèãæ¹ããªããªã£ãããããèããªãã§æ¬²ããããã¶ã€ããŒãšçžŠæšªã§è©±ãã®ã¯ãããããsizeã§ããããã UITraitCollectionã䜿ãããããã°ããã ã£ãŠãããã€ã
å£èªã§æžããšããŸã æžãããšãã§ããã®ã§ãã¢ãŠããããéãå¢ãããšããæå³ãšèªåã®æèãæŽçãããšããæå³ã§ãã²ãããæžãç¶ããŸããã
æ¥æ¬èªã®åé¡
å°ããåäœã§ãç·šéã®æ¹ã«ã¬ãã¥ãŒããŠããããšããã®ãç¹°ãè¿ããŸãããPull Requestã¯å°ããåäœã§åºããæ©ã段éã§ã¬ãã¥ãŒããããä¿®æ£ããŠãããããããããŒã éçºãšäŒŒãŠããŸãã倱æãå€ãç¯ããªããã倱æãå ã«ãå°ããã€èªåã®æ¥æ¬èªã®åé¡ã解決ããŠãããŸããã
å šäœèšèš
æ¬ãæžããããšããªãã£ãã®ã§ãå ã«ç®æ¬¡ãäœããªããŠã¢ãããŒãããŸãééã£ãŠããŸãããããã°ã©ãã³ã°ãããããšãªã人ããã¯ã©ã¹èšèšããå ¥ããããªããã§ããå šäœåããã£ããèããåŸããããã¿ã€ãããã£ãšäœãããã®ãããã¿ã€ããå ã«å šäœãä¿®æ£ããããããªã¢ãããŒããå¿ èŠã ã£ããšä»ã§ã¯æããŸãïŒãã®ãããã¯ã¯äžå³¶è¡ããã®æ¬ãããããïŒã
ãŸããããã°ã©ãã³ã°ãšåæ§ã«ãã³ãŒããæžãããªãã¡ã¯ã¿ãªã³ã°ããããšãç¹°ãè¿ããããããè¯ãèšèšã«è¿ã¥ããŠãããã®ã ãšæããŸããæç« ã®æžãçŽãããªãã¡ã¯ã¿ãªã³ã°ã ãšæããšãæžãããšãä¿®æ£ããããšã«å¯Ÿããå¿ççéå£ããã£ãšäžãããŸãããœãããŠã§ã¢ã ãšèããã°ãäžåºŠåããã®ãäœã£ãŠã圢ãæŽããå¿ èŠãããã°äœããªãããªããŠããšããã§ããããã«ãªããŸããã*6
ãã®ä»
å·çã¯ãå°é£ãå€ãã£ãã§ãããããã«ãã£ãŠåŸãããšã倧ããã§ãã
ãŸããå·çãéããŠã¢ãŠãããããç¶ããã®ã§ãæç« ã«å¯Ÿããåãçµã¿æ¹ãå€ãããŸãããæªã ã«èŠææèã匷ãã§ãããæ¥æ¬èªã§é·æãæžãããšãžã®æµææã¯æžã£ãããããçš®ã®ã¹ã¿ã€ã«ã確ç«ããã®ã¯è¯ãã£ãã§ãããŸããæè¡èŠçŽ ã«ã€ããŠãç¶²çŸ çã«ç¥èãæŽçããããšãã§ããã®ã§ãåãçµã¿æ¹ãèŠãæ¹ãå€ãããã³ãŒããæžããšããå°ãæœè±¡çãªèŠç¹ããç©äºãæããããŠããæ°ãããŸãã
å²ããšèŸãã£ãã®ã¯ã1幎éãå€éšäžçãšåãé¢ãããŠããããšã§ããããã¯ãã¢ãŠããããã«ãšãã«ã®ãŒã泚ããããèªç¶ãšã€ã³ãããã®éãæžãããã§ããæéãäž»ã«äœ¿ãæè¡ã¯å·çå 容ã«é¢é£ãããã®ã«ãªããããæ°ããæè¡ã泚ç®ãããŠããæè¡ããããŸã§éãæ·±æãããæéã確ä¿ããã®ãéåžžã«é£ããã£ãã§ããå·çãããŠããéã¯ãæ å ±ã®åæšéžæãæéã®å¹çåã«æ°ãã€ããŠããŸããããŸããå人ãšéã¶æ©äŒãæžãã®ã§ãä¿®è¡å§ã®ãããªæ°æã¡ã«ãªãããšããããŸããã
ãŸãšã
ãšãŠãããŒããªããã»ã¹ã§ããããå·çãéããŠè¯ãã£ãããšã®æ¹ãå€ãã§ããåŠã³ã¯ãšãŠãå€ãã£ãã§ããæžç±ãåºé ã«äžŠãã§ãã姿ãã¿ããšããå人éãå¿æŽããŠãããŠãããšãã圹ã«ç«ã£ããšããã³ã¡ã³ããèŠããšãã«ããããé 匵ã£ãŠããã£ããªããšå¿ããæãããæ¬åœã«è¯ãçµéšã§ããã
- ããããããAuto Layoutããšããæ¬ãå·çããŸãããå€ãã®äººã«ãiOSã¢ããªéçºã®ã¬ã€ã¢ãŠãææ³ãäŒããããã«ãå šèº«å šéã泚ãæžããŸããã
- å·çã«ãšã³ãžãã¢çææ³ãçšããããšãã§ããããã¯ãšãŠãæå¹ã§ããã
- ã¢ãŠããããã«ãã£ãŠå§åçæé·ãå®æã§ããŸã
宣äŒ
ããããããAuto Layoutãã¯Auto Layoutãšãµã€ãºã¯ã©ã¹ã«ã€ããŠè§£èª¬ããŠããæžç±ã§ããã¬ã€ã¢ãŠãã®åºç€ãå æ¬çã«çŽ¹ä»ããåŸåã§ã¯æ¥åã§ãã䜿ããã¿ãŒã³ããŸãšããŠããŸããã¢ããŸã³ã®çŽ¹ä»æã«ãããšå¯Ÿè±¡è ã¯ã
éå»äžåºŠã¯XcodeãçšããŠã¢ããªãäœã£ãããšãããããAuto Layoutãšãµã€ãºã¯ã©ã¹ãçšããAdaptive Layoutãšèšããããšãã€ã尻蟌ã¿ããŠããŸãã¢ããªéçºè ã«ãŽã£ããã®äžåã§ãã
ãšããæãã«ãªã£ãŠããŸããåºæ¬çã«ã¯ãiOSã¢ããªéçºåå¿è ã«åããŠæžããŠããã®ã§ã"é»åž¯ãšã³ãžãã¢"ã¿ãããªäººã«ã¯åããŸãã*7ãæžåºã§èŠãããããã©ãã©ãšèªãã§ã¿ãŠãã ããã
*1:æåãå°å·çšã¬ã€ã¢ãŠãã«ãããããã®
*2:ã²ã©ã«èµ€ãã³ã§ä¿®æ£ãå ¥ããŠãã
*3:åç« 6åŸåŸ©ä»¥äžããŸãã
*4:ãã¡ããæè¡çãªå°é£ããããŸãã
*5:æ¥æ¬ã®åœèªã®ææ¥ã£ãŠæç« æ§é ãšãããŸããããªãã§ããã
*6:æšæ¥ããŸããŸèŽããdex.fmã§äŒŒããããªããšè©±ããŠããŸããã
*7:å€ãã®äººã«èªãã§ãããããšå¬ããã§ãããæ£ãã察象èªè ã«å±ããªããšãäºãäžå¹žã ãšæã£ãŠããŸã
ããã¥ãŒãšãŒã¯ã®ã¹ã¿ãŒãã¢ããã§åãã¯ãããŠïŒã¶æã®æ°ã¥ãããšããã¿ã€ãã«ã§ãGunosyBeerBashã«ãŠçºè¡šããŸãã
ã¡ãã£ãšåã«ãªãããããã¥ãŒãšãŒã¯ã®ã¹ã¿ãŒãã¢ããã§åãã¯ãããŠïŒã¶æã®æ°ã¥ãããšããã¿ã€ãã«ã§ãGunosyBeerBashã«ãŠçºè¡šãããåè·Gunosyã«ãŠãä¹ ãã¶ãã®å匷äŒç»å£ã ã£ãã
OKpandaãšãããè±èªåŠç¿ã¢ããªãæäŸãããã¥ãŒãšãŒã¯ã«ããã¹ã¿ãŒãã¢ããã§åãå§ããŠãçŽå幎ãçµã£ãããšãŠãå€åœç±ãªããŒã ã§ãæ±äº¬ãšäº¬éœã§ã®éé ·ãªå宿ãå¬ã®ãã¥ãŒãšãŒã¯ãä¹ãè¶ããèªåã®äžã§ãæ¯ãè¿ãããã£ãã®ã§ãŸãšããŠã¿ãã
çºè¡šè³æã¯ä»¥äžã
æ¥åžžç·š
åå以äžãã¿ã§ããããã¥ãŒãšãŒã¯ã®ã¹ã¿ãŒãã¢ããã§åããªããæ¥åžžçãªæ°ã¥ãã¯ä»¥äžã®3ã€ã
- 寿åžãçŸå³ãããªããŠãæããªãå¿
- ãã¥ãŒãšãŒã¯ã®å¯ãã«æããªãå¿
- è°è«ã«æããªãå¿
寿åžãçŸå³ãããªããŠãæããªãå¿
çŸå³ããã飯ãé£ã¹ãã«ã¯ããããªãã«é«ããéãæãå¿ èŠããããNetflixã§èŠãããJiro Dream of Sushiããšããããã¥ã¡ã³ã¿ãªãŒãã¢ã¡ãªã«ã§äººæ°ã§ã寿åžã®è©±ããããšããã¥ãŒãšãŒã¯ã§ã¯å€§äœãJiroã£ãŠç¥ã£ãŠããïŒããšèããããã¡ãªã¿ã«ãå®ã寿åžã¯ããç±³ãã·ã£ãã·ã£ãã§ãã
ãã¥ãŒãšãŒã¯ã®å¯ãã«æããªãå¿
æ°æž©ããã€ãã¹ãªããŠæ®éãæ±äº¬ä»¥åã«äœãã ããšããªãç§ã«ã¯èŸããããæ¥ã«ã¯ã倧éªã§15æ以éå€åºçŠæ¢ãå šäº€éåæ¢ãã¬ã¹ãã©ã³ããã®ä»ã®åºãéåºãªããŠããšããã£ããã¡ãªã¿ã«ãåãã®ã¯ããããã§ã次ã®æ¥ã®æã«ã¯èŠäºã«éªãããçµãã£ãŠããã
è°è«ã«æããªãå¿
åžžã«äž»äœæ§ãšäž»åŒµãåãããããããã¢ã€ãã¢ãªãïŒããªããŠè»œã ããèããšããåã¯ã©ãæãã®ïŒããšèããããããã¯ãéåžžã«æ¢èŠæã®ããå æ¯ã ãããããªã¯ã«ãŒãã詳ããã¯ãªã¯ã«ãŒãã®DNAãšããèªãã§æ¬²ããã
æ¥åžžç·šãŸãšã
æ£çŽãªè©±ãé£äºã¯ã¢ã¡ãªã«ã®é£äºã«æ £ããŠããã®ã§å€§ããªåé¡ã§ã¯ãªãããã ãçŒãèã寿åžãšãã£ããè€çŸç³»ã飯ããã¡ãã£ãšé«ããšãããããã ã ããšãçºè¡šã§ã¯æžããªãã£ããããã¥ãŒãšãŒã¯ã§äžç·ã«åãããããªã¢ãŒããããããè€æ°ã®ãã±ãŒã·ã§ã³ã§åããŠããããªã¢ãŒãã¯ãŒã¯ã¯äžã€ã®ãã¯ããã¯ã ãšæããããããŠãç¶æããã®ã¯ãšãŠãé£ãããç¹ã«æå·®ãããå Žåã¯ãé£ããããæ£çŽãã¹ããã©ã¯ãã£ã¹ãç¥ãããã
æè¡ç·š
æ¥æ¬ã§ã¯äŒã£ãããšããªãã¿ã€ãã®ãšã³ãžãã¢ãšåããŠããã綺éºãªã³ãŒããèšèšææ³ã¿ãããªãã®ãåžžã«æ±ããããŠãããã¡ãªã¿ã«ããã®å 容ã¯æ¥æ¬ã®ã€ã±ãŠããšã³ãžãã¢ã®æ¹ã ã«ã¯åœããåãããå 容ã ãšæãã®ã§ãèªã¿é£ã°ããŠã»ããã
ã¡ãœããåã¯è±èªã§èªãããã®ã«
äŸãã°ããããã¥ãŒã³ã³ãããŒã©ã«äœãã衚瀺ãããããªä»¥äžã®ã¡ãœããã
- (void)presentFromRootViewControler:(UIViewController *)rootViewControler { // Do something }
ä¿®æ£åŸãããªã£ãã
- (void)presentToViewController:(UIViewController *)viewController { // Do something }
é ããææã¯ã
- Controllerã®ã¹ãã«ãééããŠãã
- rootViewControlerãã©ããããããªã
- Fromã§ã¯ãªããŠãToãwidth
ããèŠããšäžåŠæ ¡ã®è±èªã¬ãã«ã®ãã¹ã ãå€ååã ãããããæ確ã«è±èªçã«æ£ããèªãããããªã¡ãœããåãã€ããå¿ èŠãããã
ã¡ãœãããåå²ãã
ã¡ãœããã¯çŽ°ããåäœã«åå²ãæå€ãšå¿ããã¡ã
- (id)init { self = [super init]; if (self) { self.backgroundColor = [UIColor whiteColor]; self.layout.cornerRadius = 5; UIImageView *imageView = [UIImageView alloc] init]; imageView.image = [UIImage imageNamedUniversal:@"someImage.png"]; [self addSubView:imageView]; imageView.keepHorizontaCenter.equal = 0.5; imageView.keepTopInset.equal = 10; } return self; }
ã¿ãããªé·ãåæåã¡ãœããããã£ããã以äžã®ããã«åå²ããŠããããšèªã¿ãããã£ããããã
- (id)init { self = [super init]; if (self) { [self configureUI]; [self layoutUI]; } return self; } - (void)configureUI {} self.backgroundColor = [UIColor whiteColor]; self.layout.cornerRadius = 5; UIImageView *imageView = [UIImageView alloc] init]; imageView.image = [UIImage imageNamedUniversal:@"someImage.png"]; }
ã¢ãžã¥ãŒã«åãšäŸåé¢ä¿ã®æŽç
å°ããããŒã ã§ãè€æ°ã®ã¢ããªãã¡ã³ããã³ã¹ãããããåæ©èœãã¢ãžã¥ãŒã«åããåå©çšåºæ¥ãããã«å¿ãããŠããã äŸãã°ãåºåã管çããã¯ã©ã¹AããåºåSDK BãimportããŠãããšããããã¯ã©ã¹Aå ã§ãã®SDKãçšããŠãããããAã¯SDK Bã«äŸåããŠããããšã«ãªããããã¯ãå®è¡æã®äŸåããã³ãŒãçã«ãã©ã¡ããããã§ããã
ããã§ãProtocolãçšããŠããã解æ¶ãããã€ãŸããprotocolãå®çŸ©ããAãprotocolã«äŸåãããSDK Bã§ãã®ãããã³ã«ãæ¡çšããããããšãSDK BãAã«ãã©ã°ã€ã³ã§ããããã«ãªãã
ãŸãšã
åœéçãªãšã³ãžãã¢éãšè¿ãã§åãäžã§å€ãã®äºãåŠãã§ãããæ¥åžžçã«ã¯ãåœé人ãšããŠåãé£ãããæ¥æ¬ã®å¿å°ãããæè¡è ãšããŠã¯ãåžžã«æåãæ±ããŠãªãã¡ã¯ã¿ãªã³ã°ãç¶ããããšããåºæ¬çãªèšèšã«å¯Ÿããèãæ¹ãåŠãã§ããã
ã¢ã¡ãªã«ã®äŒç€Ÿã§äžã¶æä»äºããŠå¿ èŠã ãšæã£ãè±èªå
Rebuild.fmãèŽããŠãŠããŸã å人ã®ãã¹ããèŠãŠãèªåãæããšããããã£ãã®ã§ãæžããŠã¿ãã 3ã¶æåããã¢ã¡ãªã«ã®ã¹ã¿ãŒãã¢ããã§åãå§ãããŠãªã®ã§åèã«ãªããšæãã
ãŸãåãäžã§å¿ èŠãªè±èªåã£ãŠ
- ä»äºãããäžã§å¿ èŠãªèœå
- ååãšã®æ¥åžžäŒè©±
ã®2ã€ã
é¢æ¥ã«éã£ãŠãä»äºãæã«å ¥ããäžã§ãè±èªåãšããæå³ã§ã¯ã1.ä»äºãããäžã§å¿ èŠãªèœåããããã°åé¡ãªãã å®éã«åãäžã§çæããã®ã¯ã2.ååãšã®æ¥åžžäŒè©±ãã®äžè¶³ã
è±èªã®åæèœ
ã©ã®ã¬ãã«ã«ãªã£ãŠãåºæ¬çã«ã¯ä»¥äžã®èœåã®ã©ããéäžããŠäŒžã°ãããšãã話ã«ãªãã
- ãªãŒãã£ã³ã°
- ãªã¹ãã³ã°
- ã©ã€ãã£ã³ã°
- ã¹ããŒãã³ã°
1. ä»äºãããäžã§å¿ èŠãªèœå
ããã¯ãæ£ç¢ºã«ç©äºãè¡šçŸããèœåãæããŠãããå ·äœçã«ã¯ã
- æ£ããåã£ãŠãã人ããæ£ããæžãèšèãç解ããèœå
- ããžã«ã«ã«ç©äºãè±èªã§æ£ç¢ºã«èª¬æããèœå
- æè¡åã«ããæç« ç解
ããã¯ã©ããæžãèšèãã€ãŸããªãŒãã£ã³ã°ãã©ã€ãã£ã³ã°èœåãéµãšãªã£ãŠããã
æ£ããåã£ãŠãã人ãç解ããèœåãããžã«ã«ã«ç©äºãè±èªã§æ£ç¢ºã«èª¬æããèœå
ããã¯ãåŠæ ¡ã§ãããããªãªã¹ãã³ã°ããªãŒãã£ã³ã°ãæããŠãããããŒãã£ã³ã°ãé¢æ¥ãšããå Žé¢ã§ã¯ãçžæã«äŒããããšãç®çãšããŠãããããäžå¯§ãªèšèãçšããè¡šçŸããã人ãå€ãããŸã説åŸåããããããããªç¥çãªèšãåãããããžã«ã«ãªèšãåããå€ããããæžãèšèã«è¿ããªãããã®ãããåŠæ ¡ã§åŠã¶ãããªããªãŒãã£ã³ã°ããªã¹ãã³ã°èœåã®åŒ·åã§ååã ã£ããããã®ã ã
ã€ãŸããæžãèšèãéããããšãæè¡æžãè±èªã§èªãã ããæè¡ããã°ãè±èªã§æžããŠã¿ãããããã«ãããæ·»åããŠããã£ãããè«æãè±èªã§èªããŠãèªåã®åã§æžããã®ã§ããã°ãååã ãšæã£ãŠããïŒæ·»åã»ãŒãªãã§æžãã人ã¯å°ãªãã ããïŒãããã«ãè±èªãšæ¥æ¬èªã¯æç« æ§é ãç°ãªããããè±èªã®ãšãã»ã€ã®æžãæ¹ãå匷ããã®ãå¿ èŠã ããããŸããè°è«æåãæ¥æ¬ãã匷ãã®ã§ããã£ã«ãã·ã§ã³ãããã£ããŒãçãªèšãåãã䜿ãããªããããšãå¿ é ã ããã
ãªãŒãã£ã³ã°ãã©ã€ãã£ã³ã°èœåãªã®ã§ããªã¹ãã³ã°ã¯TOEFL iBTã§20ç¹ããã°åé¡ããªããšæã£ãŠãã
æè¡åã«ããæç« ç解
ãšãŠãåœããåãªã®ã ããæè¡åãéããããšãç¹ã«ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹çãªå 容ãã¢ã¡ãªã«äººã¯ãèªåã®æ£åœæ§ã蚌æããããšãåŸæã ããããªäžã§ããªãããã§ãããã圌ããšåãããã«è¡šçŸã§ããæ¥æ¬äººã¯å°ãªããšæã£ãŠããã
2. ååãšã®æ¥åžžäŒè©±
ããã¯ãã€å¿ èŠã«ãªãããšãããšãè·å Žã§æ倧ã®ããã©ãŒãã³ã¹ãåºãããã ãå ·äœçã«å¿ èŠãªèœåã¯
- ç ããé »åºè¡šçŸããå£èªè¡šçŸãç¥ã£ãŠããããš
- æ£ããé³ãç解ããæ£ããé³ãšãªãºã ãåçŸã§ããããš
è·å Žã§ååãã±ã£ãšãã£ãå 容ãç解ãããã圌ããšé£äºãããŠãããšãã«é¢ä¿ãæ·±ããããæ°ã«ãªãäºãããã£ãšèãäžã§åœ¹ç«ã€ããã¡ãã¯ãäž»ã«ãªã¹ãã³ã°ãã¹ããŒãã³ã°ã ã
ç ããé »åºè¡šçŸããå£èªè¡šçŸãç¥ã£ãŠããããš
è±èªã®å£èªã¯æžãèšèãšå šãéãèšãåãã«ãªãããšãå€ãããã®ããããããã£ãèšç·ŽãåããŠããªãæ¥æ¬äººã¯ãããã«å£èªçãªè¡šçŸãç¥ã£ãŠãããã«ãã£ãŠãæ¥åžžäŒè©±ã®ã¹ã ãŒãºåºŠãå€ãã£ãŠããã ãããäŸãã°ãgetãšããèšèãåéãšã«ãã§ã«ãããšãã«ãâI got thisâãšèšãã°ä¿ºãæããã£ãŠããšãæ¥åžžäŒè©±ã¯åºæ¬çã«åãå 容ã®ãã¬ãŒãºã䜿ããŸãããŠäŒè©±ããã®ã§ãåãããã«å¢ããããããŒãšãªã£ãŠããã ãŸããæ¥åžžäŒè©±ã§ã¯ãã¡ããå£èªè¡šçŸãæåçãªè¡šçŸç¥èãå¿ èŠã«ãªããäŸãã°ãããã¡ã®åæ¥çã¯ã¿ããª"Frosted tip"ã ã£ãããŒãã£ãŠã¿ããªã§ç¬ã£ãŠããŠããç§ã«ã¯ãã£ã±ãã ã£ãããå€ãã®æ¥æ¬äººã«ã¯æãããã£ã±ãã ããïŒFrosted tipãšã¯æ¯å ã ãããªãŒãããŠããã³ãã³ã«ããææ¥æçãªé«ªåïŒãæåã«åºã¥ãããããã£ãè¡šçŸãéµãšãªãã
æ£ããé³ãç解ããæ£ããé³ãšãªãºã ãåçŸã§ããããš
å人çã«ããã¯æ¥åžžäŒè©±ããäžã§ã¯æã倧äºã ãšæã£ãŠãããè·å Žã§ããŽãã§ãŽãã§ãšèª°ããèšã£ãããšãååã«ç解ããã®ã¯ãšãŠãé£ãããé³ãšããŠæ £ããŠãªãããã ããããéããã«ã¯ãè³ãšå£ãéããå¿ èŠããããçºé³ãã§ããé³ã¯èãããããã«ãªãã
ç§ã¯ããã©ããã¯ã¹ãåŠã³ãè±èªç¹æã®ãªãºã ãåŠã³ããã©ãã培åºçã«ç䌌ããããšã§äœã«é³ãå©ã蟌ãã ãé³ããŸãã¯ç¥ãïŒãã©ããã¯ã¹ïŒãæ¥æ¬èªã§ããããããšãããè±èªã®é³ã¯3ã€ããããããã¯ç¥ããªããšåãé³ã«èãããŠãæèã§å€æãããããªããªãã
次ã«è±èªç¹æã®ãªãºã ãåŠã¶ãç§ã¯ä»¥äžã®ãAmerican Accent Trainingããšããæ¬ã䜿ã£ããè±èªã§ã¯ãé³ãã€ãªãã£ãããå Žåã«ãã£ãŠã¯çç¥ããããããïŒå°åã«ãããã®ã ãïŒãäŸãã°ãMountainãšããåèªãããŠã³ããŒã³ãšçºé³ãã人ããããSacramentoã ã£ãããµã¯ã©ã¡ã³ããŒã ã£ããããŸããæç« ã«ãªããšäžå®ã®ãªãºã ãã¿ãŒã³ããããç¥ã£ãŠãããšãªã¹ãã³ã°èœåãæ Œæ®µã«åäžããã
æåŸã«ããã©ããçšããä»®æ³ç·Žç¿ãããããã¬ãŒãºéãå¢ãããé³ã®ç·Žç¿ãããã®ã ããã©ãããã£ã¯ããŒã·ã§ã³ãããã®å 容ãäžäººã§æŒãããç§ã®å ŽåãâHow I met your motherâããâThe O.C.âãªãããèŠãŠç䌌ãããããŠããããŸããéåžžã®ãã©ãã¯å®éã®æ¥åžžäŒè©±ããŒã¹ã§è©±ãããŠããªãã®ã§ããªã¢ãªãã£ã·ã§ãŒïŒãã©ã¹ããŠã¹ãšãããããç§ã¯"The Hills"ãšãããã©ãã§ã¡ãã£ãšç·Žç¿ããïŒãªãããç䌌ããã®ãæã ã
ãŸãšã
ç§ã¯ããã®7幎äœãæ¥åžžäŒè©±èœååäžã«äœ¿ã£ãŠããïŒã1. ä»äºãããäžã§å¿ èŠãªèœåãã®ãªãã¡ã¬ã³ã¹ãå°ãªãã®ã¯ããããããšïŒãä»ã§ã¯ãä»äºããäžã§ã¯ããã«æ¥åãéè¡ã§ããããªã®ã§ãæ¥åžžäŒè©±èœåãªããŠãããŸã§å¿ èŠã§ã¯ãªããšæã£ãŠãããæ§é çã§ãããžã«ã«ãªæç« ãè±èªã§æžãã®ã§ããã°ãšã³ãžãã¢ã¯åŸæãªã®ã§ã¯ãªãã ããããåšãã®æ å ±ã«æããããå°ã«è¶³ã®çããèªåŠåã身ã«ã€ããã®ãæççµè·¯ã ãšæã£ãŠããã