delyę Ŗå¼ä¼šē¤¾ć®ćƒ–ćƒ­ć‚° - TECH PLAY

TECH PLAY

delyę Ŗå¼ä¼šē¤¾

delyę Ŗå¼ä¼šē¤¾ ć®ęŠ€č”“ćƒ–ćƒ­ć‚°

å…Ø237ä»¶

こんにごは。dely恧Androidć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć—ć¦ć„ć‚‹kenzo恧恙怂 ć“ć®čØ˜äŗ‹ćÆdely Advent Calendar 2018恮6ę—„ē›®ć®čØ˜äŗ‹ć§ć™ć€‚ Qiita:Ā  https://qiita.com/advent-calendar/2018/dely Adventar:Ā  https://adventar.org/calendars/3535 怀 ę˜Øę—„ćÆę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®sakuraが ć€Œć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’ć‚ˆćć™ć‚‹ćŸć‚ć«1å¹“é–“å–ć‚Šēµ„ć‚“ć ć“ćØć€ ć‚’ę›øćć¾ć—ćŸć€‚ ę™®ę®µę¤œē“¢ć«ęŗć‚ć‚‹ę–¹ćÆć‚‚ć”ć‚ć‚“ć€ćć‚Œä»„å¤–ć®ę–¹ć«ćØć£ć¦ć‚‚é¢ē™½ć„å†…å®¹ćØćŖć£ć¦ć„ć¾ć™ć®ć§ć€ćœć²ć”č¦§ćć ć•ć„ć€‚ ćÆć˜ć‚ć« å¼Šē¤¾ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗćÆćƒ‡ć‚¶ć‚¤ćƒ³ćƒ•ć‚§ćƒ¼ć‚ŗćØå®Ÿč£…ćƒ•ć‚§ćƒ¼ć‚ŗć®2ć¤ć®ćƒ•ć‚§ćƒ¼ć‚ŗć«åˆ†ć‹ć‚Œć¦ć„ć¾ć™ć€‚ļ¼ˆč©³ć—ććÆć“ć”ć‚‰ā†“ļ¼‰ speakerdeck.com å¾ŒåŠć®å®Ÿč£…ćƒ•ć‚§ćƒ¼ć‚ŗć§ćÆć€å‰åŠć®ćƒ‡ć‚¶ć‚¤ćƒ³ćƒ•ć‚§ćƒ¼ć‚ŗć§å‡ŗę„äøŠćŒć£ćŸćƒ‡ć‚¶ć‚¤ćƒ³ć‚’å…ƒć«ē”»é¢ćƒ»ę©Ÿčƒ½ć‚’ä½œęˆć—ć¦ć„ćć“ćØć«ćŖć‚Šć¾ć™ć€‚ ćƒ‡ć‚¶ć‚¤ćƒ³ćƒ•ć‚§ćƒ¼ć‚ŗć§ćÆć€ć‹ćŖć‚Šć„ć„ę„Ÿć˜ć«å‹•ććƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—ć‚’ä½œęˆć—ćŸć‚Šć€ćć‚Œć‚’ē”Øć„ć¦ćƒ¦ćƒ¼ć‚¶ćƒ¼ćƒ†ć‚¹ćƒˆć‚’č”Œć£ćŸć‚ŠćØć€ć‚ˆć‚Šč‰Æć„ć‚‚ć®ć‚’ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«ęä¾›ć§ćć‚‹ć‚ˆć†ć«å¼Šē¤¾ć®ćƒ‡ć‚¶ć‚¤ćƒŠćƒ¼ć‚„ćƒ‡ć‚¶ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒé ‘å¼µć£ć¦ćć‚Œć¦ć„ć¾ć™ć€‚ ć§ć€äø‹ć®ć‚ˆć†ćŖćƒ‡ć‚¶ć‚¤ćƒ³ćŒå‡ŗę„äøŠćŒć£ć¦ć„ć‚‹ć‚ć‘ć§ć™ć€‚(ć“ć‚ŒćÆćƒ‡ć‚¶ć‚¤ćƒ³ć®ęŒ‡ē¤ŗć§ćÆćŖćć¦å®Ÿéš›ć«å®Ÿč£…ć—ćŸē”»é¢ć§ć™ćŒ) ćˆć€ć‚ć”ć‚ƒå‹•ćć€‚ć€‚ć€‚ (ćÆć˜ć‚ć¦ćƒ‡ć‚¶ć‚¤ćƒ³ć‚’č¦‹ćŸćØćć®ćć‚‚ć”) åˆć‚ć¦č¦‹ć‚‹ćØäø€ēž¬ćŸć˜ć‚ćć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ćŒć€å‹•ćć‚‚å«ć‚ć¦ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«ęä¾›ć™ć‚‹ä¾”å€¤ćŖć®ć§ć€é›£ć—ćć†ć ć‹ć‚‰ćØć„ć£ć¦å®Ÿč£…ć—ćŖć„ć‚ć‘ć«ćÆć„ćć¾ć›ć‚“ć€‚ ä»Šå›žćÆć“ć®ć‚ˆć†ćŖć„ć„ę„Ÿć˜ć«å‹•ććƒ‡ć‚¶ć‚¤ćƒ³ć‚’å®Ÿč£…ć«č½ćØć—č¾¼ć‚“ć§ć„ćéš›ć«ć‚„ć£ćŸć“ćØć®äø€ä¾‹ć‚’ē“¹ä»‹ć—ć¾ć™ć€‚ ViewPagerćØćć®ä»–Viewとの連動 ć¾ćšćÆć“ć”ć‚‰ć‚’ć”č¦§ćć ć•ć„ć€‚ ć“ć®ć‚ˆć†ć« ViewPager ć‚’ē”Øć„ćŸć‚¢ćƒ—ćƒŖć®å “åˆć€ē¾åœØé–‹ć„ć¦ć„ć‚‹ćƒšćƒ¼ć‚øć«ć‚ˆć£ć¦ ViewPager å¤–ć«č”Øē¤ŗć•ć‚Œć‚‹å†…å®¹ćŒå¤‰ć‚ć‚‹ć“ćØćŒć‚ć‚‹ćØę€ć„ć¾ć™ć€‚(ē”»é¢äø‹éƒØć‚„å³äøŠć®ā˜…) ć‚‚ć”ć‚ć‚“ć“ć‚Œć§OKćŖå “åˆć‚‚å¤šć„ćØćÆę€ć„ć¾ć™ćŒć€ć‚‚ć†å°‘ć—ē“°ć‹ć„å‹•ćć«ć“ć ć‚ć£ćŸUIć‚’ä½œęˆć—ćŸć„å “åˆć‚‚ć‚ć‚‹ć‹ćØę€ć„ć¾ć™ć€‚ ćŸćØćˆć°ć“ć‚“ćŖę„Ÿć˜ć§ć™ć€‚ ä»Šå›žćÆć“ć‚Œć®å®Ÿč£…ę–¹ę³•ć‚’ć”ē“¹ä»‹ć—ć¾ć™ć€‚ 用いるのは OnPageChangeListener 恮 onPageScrolled 恧恙怂 val viewPager: ViewPager = findViewById<ViewPager>(R.id.view_pager) viewPager.addOnPageChangeListener( object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int ) { } override fun onPageScrolled(position: Int , positionOffset: Float , positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int ) { } }) onPageScrolled は ViewPager ć®ć‚¹ć‚Æćƒ­ćƒ¼ćƒ«äø­ć«å‘¼ć³å‡ŗć•ć‚Œć€ćć®éš›ć«å¼•ę•°ćØć—ć¦äø‹čØ˜ć®å€¤ćŒęø”ć•ć‚Œć¾ć™ć€‚ ( positionOffsetPixels ćÆä»Šå›žćÆä½æć„ć¾ć›ć‚“) position : č”Øē¤ŗć•ć‚Œć¦ć„ć‚‹ęœ€åˆć®ćƒšćƒ¼ć‚øć®index positionOffset : position ć§ęŒ‡ć—ē¤ŗć•ć‚Œć‚‹ćƒšćƒ¼ć‚øć‹ć‚‰ć®ć‚Ŗćƒ•ć‚»ćƒƒćƒˆć®å‰²åˆć‚’0仄上1ęœŖęŗ€ć®å€¤ć§ positionOffsetPixels : position`ć§ęŒ‡ć—ē¤ŗć•ć‚Œć‚‹ćƒšćƒ¼ć‚øć‹ć‚‰ć®ć‚Ŗćƒ•ć‚»ćƒƒćƒˆć®pixel値 ć¤ć¾ć‚Šć€ć©ć®ć‚æć‚¤ćƒŸćƒ³ć‚°ć§ć©ć‚“ćŖå€¤ćŒčæ”ć‚‹ć‹ćØć„ć†ćØć€ć€ position : 0 positionOffset : 0.0 position : 0 positionOffset : 0.31944445 position : 0 positionOffset : 0.6259259 position : 1 positionOffset : 0.0 ćØć„ć†ę„Ÿć˜ć§ć™ć€‚ ä»„äøŠć®ć‚ˆć†ćŖå€¤ćŒć‚¹ć‚Æćƒ­ćƒ¼ćƒ«ć—ć¦ć„ć‚‹é–“ć«ä½•åŗ¦ć‚‚å‘¼ć°ć‚Œć‚‹ onPageScrolled ć§ęø”ć•ć‚Œć¾ć™ć€‚ ć“ć®å€¤ć‚’ä½æć£ć¦ćć®ä»–View恮translation悄alpha态scaleć‚’ć‚»ćƒƒćƒˆć—ć¾ć™ć€‚ äøŠć®ć‚µćƒ³ćƒ—ćƒ«ć®ć€Œć„ć„ć„ć„ć„ć€ć®Viewの例だと、 position が0の時は positionOffset ć®å¢—åŠ ć«å¾“ć£ć¦č”Øē¤ŗä½ē½®ćŒäøŠćŒć‚‹ position が1の時は positionOffset ć®å¢—åŠ ć«å¾“ć£ć¦č”Øē¤ŗä½ē½®ćŒäø‹ćŒć‚‹ position が2(äøŠčØ˜ä»„å¤–)ć®ę™‚ćÆåøøć«č”Øē¤ŗä½ē½®ćŒäø‹ć®ć¾ć¾ ćŖć®ć§ć€äø‹čØ˜ć®ć‚ˆć†ć« transilationY ć‚’ć‚»ćƒƒćƒˆć—ć¾ć™ć€‚ override fun onPageScrolled(position: Int , positionOffset: Float , positionOffsetPixels: Int ) { view.translationY = when (position) { 0 -> view.height - view.height * positionOffset 1 -> view.height * positionOffset else -> view.height.toFloat() } } // viewćÆć€Œć„ć„ć„ć„ć„ć€ć®view恧恙 ć“ć®ć‚ˆć†ćŖå‹•ćć«ćŖć‚Šć¾ć™ć€‚ ć‚‚ć†ļ¼‘ć¤ć€äøŠć®ć‚µćƒ³ćƒ—ćƒ«ć®ć€Œā˜…ć€ć®Viewの例だと、 position が0恮Ꙃ(äø‹čØ˜ä»„å¤–)ćÆäøé€ę˜Žåŗ¦ćŒ0のまま position が1の時は positionOffset ć®å¢—åŠ ć«å¾“ć£ć¦äøé€ę˜Žåŗ¦ćŒäøŠćŒć‚‹(ć ć‚“ć ć‚“č¦‹ćˆć‚‹ć‚ˆć†ć«ćŖć‚‹) position が2ć®ę™‚ćÆäøé€ę˜Žåŗ¦ćŒ1のまま(ćƒšćƒ¼ć‚øćŒå¢—ćˆć‚‹ć‚ˆć†ćŖć‚‰ positionOffset ć®å¢—åŠ ć«å¾“ć£ć¦äøé€ę˜Žåŗ¦ć‚’äø‹ć’ć‚‹) ćŖć®ć§ć€äø‹čØ˜ć®ć‚ˆć†ć« alpha ć‚’ć‚»ćƒƒćƒˆć—ć¾ć™ć€‚ override fun onPageScrolled(position: Int , positionOffset: Float , positionOffsetPixels: Int ) { star.alpha = when (position) { 1 -> positionOffset 2 -> 1f // ä»Šå›žćÆpositionć®ęœ€å¤§ćŒ2ćŖć®ć§ć“ć‚Œć§ć‚ˆć„ć§ć™ćŒć€ćƒšćƒ¼ć‚øćŒå¢—ćˆć‚‹å “åˆćÆ1f - positionOffsetとします else -> 0f } } // starćÆć€Œā˜…ć€ć®view恧恙 ć“ć®ć‚ˆć†ćŖå‹•ćć«ćŖć‚Šć¾ć™ć€‚ 恓悌恧态ViewPagerć‚’ć‚¹ć‚Æćƒ­ćƒ¼ćƒ«ć•ć›ćŸę™‚ć«ä»–ć®ViewćØé€£å‹•ć•ć›ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ ćŠć‚ć‚Šć« Androidć§ć‚‚ä»–ć®ćƒ•ćƒ­ćƒ³ćƒˆć‚Øćƒ³ćƒ‰ć§ć‚‚ć€å‹•ćć®ć‚ć‚‹ē”»é¢ć‚’ä½œć‚‹ć®ćÆćØć£ć¤ćć«ćć‹ć£ćŸć‚Šé›£ć—ć‹ć£ćŸć‚ŠćØć€å®Ÿč£…ć«č‹„å¹²ć®ćƒćƒ¼ćƒ‰ćƒ«ćÆć‚ć‚‹ćØę€ć„ć¾ć™ć€‚ ć§ć™ćŒć€ć‚„ć£ć±ć‚Šč‡Ŗčŗ«ćŒćƒ¦ćƒ¼ć‚¶ćƒ¼ćØć—ć¦ć‚µćƒ¼ćƒ“ć‚¹ć«č§¦ć‚Œć‚‹éš›ć«ć€ć„ć„ę„Ÿć˜ć«å‹•ć„ć¦ćć‚Œć‚‹ćØę°—ęŒć”ć‚ˆć‹ć£ćŸć‚Šć€ć‚ć‹ć‚Šć‚„ć™ć‹ć£ćŸć‚ŠćØć€č‰Æć„ä½“éØ“ćŒć§ćć¦ć„ć‚‹ćØę„Ÿć˜ć¾ć™ć€‚ ä½æć£ć¦ćć‚Œć‚‹äŗŗćŒć‚ˆć‚Šč‰Æć„ä½“éØ“ć‚’ć§ćć‚‹ć‚ˆć†ć«ć€ć‚‚ć®ć„ćć‚Šć‚’ć™ć‚‹äŗŗé–“ćØć—ć¦ćÆćć†ć„ć†ćØć“é ‘å¼µć‚‰ćŖć„ćØćŖćƒ¼ćØę€ć†ćØć“ć‚ć§ć™ć€‚ 怀 ć”ćŖćæć«äøŠć§ćƒ‡ć‚¶ć‚¤ćƒ³ć®ä¾‹ćØć—ć¦ć‚ć’ćŸ ć€Œć‚Æćƒ©ć‚·ćƒ«ć‹ć‚“ćŸć‚“ēŒ®ē«‹ę©Ÿčƒ½ć€ ćŒä»Šå›žćƒŖćƒŖćƒ¼ć‚¹ć•ć‚Œć¾ć—ćŸļ¼ ä½æć£ć¦ćæć¦ć‚‚ć‚‰ćˆć‚‹ćØćØć¦ć‚‚å¬‰ć—ć„ć§ć™ć€‚ ć‚¢ćƒ—ćƒŖćÆć“ć”ć‚‰: Android iOS 怀 ę˜Žę—„ćÆiOSć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®å €å£ć®ć€ŒiOSē‰ˆć‚Æćƒ©ć‚·ćƒ«ć®é–‹ē™ŗć‹ć‚‰ćƒŖćƒŖćƒ¼ć‚¹ć¾ć§ć®ęµć‚Œć€ć§ć™ć€‚ćŠę„½ć—ćæć«ļ¼
こんにごは: ) delyć§ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć—ć¦ć„ć‚‹sakura ( @818uuu ) ć§ć™ć€‚ć“ć®čØ˜äŗ‹ćÆ dely Advent Calendar 2018 恮5ę—„ē›®ć®čØ˜äŗ‹ć§ć™ć€‚ 4ę—„ē›®ć®čØ˜äŗ‹ćÆć€SREć®äŗ•äøŠć®ć€Œ č¶…ę‰‹č»½ć«ę§‹ēÆ‰ć™ć‚‹ļ¼ć‚µćƒ¼ćƒćƒ¬ć‚¹ćŖWEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹å®šē‚¹č¦³ęø¬åŸŗē›¤ 怍恧恗恟怂WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć®å®šē‚¹č¦³ęø¬ćƒ»åˆ†ęžć«čˆˆå‘³ćŒć‚ć‚‹ę–¹ćÆćœć²čŖ­ć‚“ć§ćæć¦ćć ć•ć„ć€‚ tech.dely.jp ćÆć˜ć‚ć« 私はdelyć«å…„ē¤¾ć—ćŸ2018幓1ęœˆć‹ć‚‰ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć—ć¦ć„ć¾ć™ć€‚ delyćŒé‹å–¶ć—ć¦ć„ć‚‹ę–™ē†å‹•ē”»ć‚¢ćƒ—ćƒŖć€Œć‚Æćƒ©ć‚·ćƒ«ć€ć§ćÆčØŖć‚ŒćŸćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ć»ćØć‚“ć©ćŒę¤œē“¢ć‚’ć™ć‚‹ć€ć„ć‚ć°ę¤œē“¢ćŒć‚³ć‚¢ć«ćŖć£ć¦ć„ć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć§ć™ć€‚ ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć—ć¦ćć®ę¤œē“¢ä½“éØ“ć‚’å°‘ć—ć§ć‚‚å‘äøŠć•ć›ć‚‹ć¹ćę—„ć€…č©¦č”ŒéŒÆčŖ¤ć—ć¦ć„ć¾ć™ć€‚ å¼Šē¤¾ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒę¤œē“¢ä½“éØ“ć«ć¤ć„ć¦čŖžć£ć¦ć„ć‚‹ć‚¤ćƒ³ć‚æćƒ“ćƒ„ćƒ¼čØ˜äŗ‹ć‚‚ć‚ć‚Šć¾ć™ć®ć§ć€ćœć²ć”č¦§ćć ć•ć„ć€‚ careerhack.en-japan.com ē§ćŒå…„ē¤¾ć™ć‚‹å‰ć¾ć§å¼Šē¤¾ć«ćÆę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć„ć†å½¹č·ćÆå­˜åœØć›ćšć€ä»–ć®å½¹č·ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒę¤œē“¢éƒØåˆ†ć‚’ęŽ›ć‘ęŒć”ć§ę‹…å½“ć—ć¦ć„ć¾ć—ćŸć€‚ å¾“ć£ć¦ć€ä¼šē¤¾ć«ćØć£ć¦ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć„ć†å½¹č·ć‚’ē½®ćć®ćÆåˆć‚ć¦ć®č©¦ćæć§ć—ćŸć—ć€ē§č‡Ŗčŗ«ć‚‚ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć„ć†å½¹č·ć«ć¤ć„ćŸć®ćÆä»Šå›žćŒåˆć‚ć¦ć§ć™ć€‚ ć“ć®čØ˜äŗ‹ć§ćÆć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’ę”¹å–„ć™ć‚‹ćŸć‚ć«ć€ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć—ć¦1å¹“é–“ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć«å‘ćåˆć£ćŸčØ˜éŒ²ć‚’ćŠå±Šć‘ć—ć¾ć™ć€‚ ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ē›®ęŒ‡ć—ć¦ć„ć‚‹ę–¹ć‚„ć‚µćƒ¼ćƒ“ć‚¹ć‚’é‹å–¶ć—ć¦ć„ć¦ć€Œę¤œē“¢ę©Ÿčƒ½ćÆęä¾›ć—ć¦ć„ć‚‹ć‘ć©ćŖć‹ćŖć‹ę‰‹ć‚’ć¤ć‘ć‚Œć¦ć„ćŖć„ć€ćØę‚©ćæć‚’ęŠ±ćˆć¦ć„ć‚‹ę–¹ć«ćØć£ć¦ć“ć®čØ˜äŗ‹ćŒå°‘ć—ć§ć‚‚ć”å‚č€ƒć«ćŖć‚‹ćØå¹øć„ć§ć™ć€‚ 目欔 ćÆć˜ć‚ć« 目欔 ę¤œē“¢é›¢č„±ēŽ‡ć®ę”¹å–„ ę¤œē“¢ēµęžœ0ä»¶ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®å‰Šęø› äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ę©Ÿčƒ½čæ½åŠ  ę¤œē“¢å“č³Ŗć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć®ē­–å®š ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ć®čæ½åŠ  ę¤œē“¢ęƒ…å ±ć®ćƒŖć‚µćƒ¼ćƒćØå…±ęœ‰ 恕恄恔恫 ę¤œē“¢é›¢č„±ēŽ‡ć®ę”¹å–„ ēµęžœ:č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®ę•“å‚™ć‚’č”Œć„ć€ę¤œē“¢é›¢č„±ēŽ‡ć‚’5%ä½Žäø‹ć•ć›ć‚‹ć“ćØć«ęˆåŠŸć—ć¾ć—ćŸšŸŽŠ ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć«ćŖć£ć¦ē‰¹ć«ę°—ć«ć‹ć‘ćŸć®ćŒć“ć®ę¤œē“¢é›¢č„±ēŽ‡ćØć„ć†ęŒ‡ęØ™ć§ć—ćŸć€‚å…„ē¤¾å½“åˆćÆć€Œäø€čˆ¬ēš„ćŖę¤œē“¢é›¢č„±ēŽ‡ćŒä½•%ćć‚‰ć„ćŖć®ć‹ć€ćØć„ć†ēŸ„č¦‹ć™ć‚‰ćŖć‹ć£ćŸćŸć‚ć€ćć®ę•°å€¤ćŒé«˜ć„ć®ć‹ä½Žć„ć®ć‹ć™ć‚‰åˆ¤ę–­ćŒć§ćć¾ć›ć‚“ć§ć—ćŸć€‚ čŖæęŸ»ć‚’é€²ć‚ć¦ć„ćć†ć”ć«ć€ę¤œē“¢é›¢č„±ēŽ‡ćŒé«˜ć„äø€ē•Ŗć®ē†ē”±ćÆč¾žę›øć‚·ćƒŽćƒ‹ćƒ ć§ć‚ć‚‹ć“ćØć«ę°—ć„ćć¾ć—ćŸć€‚ č¾žę›øć‚·ćƒŽćƒ‹ćƒ ē®”ē†ć®é‹ē”Øć«ć¤ć„ć¦ć®č©³ē“°ćÆć“ć”ć‚‰ć«čØ˜č¼‰ć—ć¦ć„ć¾ć™ć€‚ tech.dely.jp ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć”ćØć«ę¤œē“¢é›¢č„±ēŽ‡ć‚’å‡ŗć—ć€ę¤œē“¢é›¢č„±ēŽ‡ćŒé«˜ć„ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‹ć‚‰å„Ŗå…ˆēš„ć«åÆ¾å‡¦ć—ć¦ć„ćć¾ć—ćŸć€‚ č¾žę›øć‚·ćƒŽćƒ‹ćƒ ę”¹å–„ć‚’ćÆć˜ć‚ć¦ć™ćć«ēµęžœćŒč”Øć‚Œć€é‹ē”Øć‚’åœ°é“ć«ē¶šć‘ć¦ć„ć‚‹ćØēµęžœēš„ć«ę¤œē“¢é›¢č„±ēŽ‡ć‚’5%ä»„äøŠä½Žäø‹ć•ć›ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ ę¤œē“¢ēµęžœ0ä»¶ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®å‰Šęø› ēµęžœ:ę¤œē“¢ēµęžœ0ä»¶ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’1000å€‹ä»„äøŠå‰Šęø›ćƒ»åÆ¾åæœć—ć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ę¤œē“¢ä½“éØ“ć‚’å‘äøŠć•ć›ć‚‹ć“ćØćŒå‡ŗę„ć¾ć—ćŸšŸ“’ ć‚Æćƒ©ć‚·ćƒ«ć«ćÆ23,000ä»¶ä»„äøŠć®ćƒ¬ć‚·ćƒ”å‹•ē”»ćŒć‚ć‚Šäø€čˆ¬ēš„ćŖę–™ē†ćÆć»ć¼ē¶²ē¾…ć—ć¦ć„ć¾ć™ćŒć€ćŸć¾ć«ę¤œē“¢ēµęžœćŒ0ä»¶ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćŒč¦‹ć¤ć‹ć‚Šć¾ć™ć€‚ ć€Œä»Šęµč”Œć‚Šć®ćƒćƒ¼ć‚ŗćƒ‰ćƒƒć‚°ć‚’ä½œć‚ŠćŸć„ļ¼ć€ćØę€ć£ć¦ć€Œćƒćƒ¼ć‚ŗćƒ‰ćƒƒć‚°ć€ćØę¤œē“¢ć—ć¦ćć‚ŒćŸćØć—ć¦ć‚‚ę¤œē“¢ēµęžœćŒ0ä»¶ć ćØć€ę¤œē“¢ä½“éØ“ćÆéžåøøć«ę‚Ŗć„ć§ć™ć‚ˆć­ć€‚ ę¤œē“¢ēµęžœćŒ0件の要因は主に2ć¤ć‚ć‚Šć¾ć™ć€‚ 1ć¤ćÆå…ˆć»ć©äøŠčæ°ć—ćŸč¾žę›øć‚·ćƒŽćƒ‹ćƒ ćŒęœŖę•“å‚™ć®å “åˆć€ć‚‚ć†1ć¤ćÆćć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć«åˆč‡“ć™ć‚‹ćƒ¬ć‚·ćƒ”ćŒćć‚‚ćć‚‚å­˜åœØć—ćŖć„å “åˆć§ć™ć€‚ ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć«åˆč‡“ć™ć‚‹ćƒ¬ć‚·ćƒ”ćŒćć‚‚ćć‚‚å­˜åœØć—ćŖć„å “åˆćÆć€čŖæē†éƒØć•ć‚“ćØē›øč«‡ć—ć¦ćƒ¬ć‚·ćƒ”å‹•ē”»ć‚’ä½œęˆć—ć¦ć„ćŸć ćć¾ć™ć€‚ ę¤œē“¢ēµęžœćŒ0ä»¶ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®äø€č¦§ć®ē”Ÿćƒ‡ćƒ¼ć‚æć‚’ćŸć ęø”ć™ć ć‘ć ćØćƒ¬ć‚·ćƒ”ć®ć‹ć¶ć‚ŠćŒē™ŗē”Ÿć—ć¦ć—ć¾ć£ćŸć‚Šć€å®ŸćÆę—¢ć«ćƒ¬ć‚·ćƒ”ä½œęˆäø­ć ć£ćŸć‚Šć—ć¦ę‰‹é–“ćŒē™ŗē”Ÿć—ć¦ć—ć¾ć†ć®ć§ć€čŖæē†éƒØć•ć‚“ć«ć‚‚å®šęœŸēš„ć«ć‚¢ćƒ‰ćƒć‚¤ć‚¹ć‚’ä¼ŗć„å·„å¤«ć—ćŖćŒć‚‰ćƒ‡ćƒ¼ć‚æć‚’ćŠęø”ć—ć—ć¦ć„ć¾ć™ć€‚ č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®ę”¹å–„ćØę–°ćŸć«ćƒ¬ć‚·ćƒ”ć‚’ä½œęˆć—ć¦ć‚‚ć‚‰ć£ćŸć“ćØć§1å¹“é–“ć§å°‘ćŖććØć‚‚1000å€‹ä»„äøŠć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć«åÆ¾åæœć™ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ ć€ŽćØć‚ćƒ¼ć‚Š ćƒćƒ¼ć‚ŗćƒ‰ćƒƒć‚°ć€ć‚‚čŖæē†éƒØć•ć‚“ćØē›øč«‡ć—ć¦ä½œęˆć—ć¦ć„ćŸć ć„ćŸćƒ¬ć‚·ćƒ”ć®ć²ćØć¤ć§ć™ć€‚ä»Šć§ćÆćŸć¹ć‚Œć½ćŒ50ä»¶ä»„äøŠć‚ć‚‹äŗŗę°—ć®ćƒ¬ć‚·ćƒ”ć§ć™ć€‚ äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ę©Ÿčƒ½čæ½åŠ  ēµęžœ:äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ę©Ÿčƒ½čæ½åŠ ć«ć‚ˆć‚Šć€å…„åŠ›ć®ę‰‹é–“ć‚’ēœćć‚æćƒƒćƒ—ć™ć‚‹ć ć‘ć§äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć§ę¤œē“¢ć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć—ćŸšŸ‘† ć¾ćŸć€ć“ć®ę©Ÿčƒ½ćÆåˆ†ęžćƒ»ę”¹å–„ć‚‚ć†ć¾ćć„ć£ć¦ć„ć¾ć™ć€‚ ä»Šå¹“ę–°ć—ććƒŖćƒŖćƒ¼ć‚¹ć•ć‚ŒćŸę©Ÿčƒ½ć®1恤恫态"äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®č”Øē¤ŗ"ćŒć‚ć‚Šć¾ć™ć€‚ ć‚Æćƒ©ć‚·ćƒ«å†…ć§ć‚ˆćę¤œē“¢ć•ć‚Œć¦ć„ć‚‹ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚„ę€„äøŠę˜‡ć—ć¦ć„ć‚‹ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’č”Øē¤ŗć™ć‚‹ę©Ÿčƒ½ć§ć™ć€‚ ć‚Æćƒ©ć‚·ćƒ«ć®äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ę©Ÿčƒ½šŸŽ– 1.ę¤œē“¢ēŖ“ć‚’ć‚æćƒƒćƒ— 2.äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćŒč”Øē¤ŗć•ć‚Œć¾ć™ć€‚ä»Šå›žćÆć€Œć»ć†ć‚Œć‚“č‰ć€ć‚’ć‚æćƒƒćƒ—šŸ‘† 3.ć‚æćƒƒćƒ—ć—ćŸć ć‘ć§ē°”å˜ć«ć»ć†ć‚Œć‚“č‰ć®ę¤œē“¢ēµęžœćŒč¦‹ć‚Œć¾ć™ å…„åŠ›ć™ć‚‹ć®ć™ć‚‰ć‚ć‚“ć©ćć•ć„ę–¹ć«ćŠć™ć™ć‚ć§ć™ pic.twitter.com/DYTZTP4fiW — sakura@検瓢 (@818uuu) 2018幓12月5ę—„ ćƒćƒ­ć‚¦ć‚£ćƒ³ćŖć©ē‰¹åˆ„ćŖć‚¤ćƒ™ćƒ³ćƒˆę™‚ć«ćÆćć®ć‚¤ćƒ™ćƒ³ćƒˆć«é–¢é€£ć™ć‚‹äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’č”Øē¤ŗć™ć‚‹ć‚ˆć†ć«ć—ć¾ć—ćŸć€‚ ć“ć®ę–½ē­–ćÆćØć¦ć‚‚ę•°å€¤ćŒć‚ˆć‹ć£ćŸć§ć™šŸŽˆ ćƒćƒ­ć‚¦ć‚£ćƒ³ć®ę™‚ć®äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ äŗŗę°—ć®ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć§ć©ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćŒć‚ÆćƒŖćƒƒć‚Æć•ć‚Œć‚„ć™ć„ć‹ćŖć©ć‚’åˆ†ęžć—ć€ćć‚Œć«åŸŗć„ć„ć¦é‹ē”Øę–¹ę³•ć‚’ę”¹å–„ć—ćŸć‚Šę–°ćŸćŖę–½ē­–ć‚’č€ƒćˆćŸć‚Šć—ć¦ć„ć¾ć™ć€‚ćć—ć¦ć€ćć®åˆ†ęžēµęžœć‚’å®šęœŸēš„ć«ē¤¾å†…å…±ęœ‰ć‚µćƒ¼ćƒ“ć‚¹ć«ćƒ¬ćƒćƒ¼ćƒˆć—ć¦ć„ć¾ć™ć€‚ äŗŗę°—ć®ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰(ę–°č¦ę©Ÿčƒ½)ć®åˆ†ęžć‚’å§‹ć‚ćŸéš›ć«å­¦ć‚“ć ć“ćØć‚’å…±ęœ‰ć—ć¦ćŠćć¾ć™ć€‚ ę–°č¦ę©Ÿčƒ½ć‚’ćƒŖćƒŖćƒ¼ć‚¹ć—ćŸå¾Œć€Œå…Øä½“ć®ä½•ļ¼…ć«ć“ć®ę©Ÿčƒ½ćÆä½æć‚ć‚Œć¦ć„ć‚‹ć®ć‹ć€ć‚„ć€Œć©ć‚Œćć‚‰ć„ć®äŗŗćŒć“ć®ę©Ÿčƒ½ć‚’ä½æć£ć¦ćć‚Œć¦ć„ć‚‹ć®ć‹ć€ćŖć©ć‚’åæ…ćščŖæć¹ć‚‹ćØę€ć„ć¾ć™ć€‚ ć—ć‹ć—ćƒŖćƒŖćƒ¼ć‚¹ć—ć¦ć™ćć«åˆ†ęžć—ć¦ć—ć¾ć†ćØć€ć¾ć ć‚¢ćƒ—ćƒŖć®ćƒćƒ¼ć‚øćƒ§ćƒ³ć‚’ć‚¢ćƒƒćƒ—ćƒ‡ćƒ¼ćƒˆć—ć¦ć„ćŖć„ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚‚å¤šćę­£ē¢ŗćŖę¦‚ē®—å€¤ć‚’ęø¬ć‚‹ć“ćØćŒć§ćć¾ć›ć‚“ć€‚ ä¾‹ćˆć°ć€äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ę©Ÿčƒ½ćÆćƒŖćƒŖćƒ¼ć‚¹ć—ć¦ć‹ć‚‰ē“„10ę—„é–“ēµŒć£ć¦ć‹ć‚‰ć‚¤ćƒ™ćƒ³ćƒˆę•°ćŒč½ć”ē€ćć¾ć—ćŸć€‚ äŗŗę°—ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ć‚¤ćƒ™ćƒ³ćƒˆę•°ęŽØē§» : 2é€±é–“ć»ć©ēµŒć£ć¦ć‹ć‚‰ę•°å€¤ćŒč½ć”ē€ćć¾ć—ćŸ ä»–ć®ę–°č¦ę©Ÿčƒ½ć§ć‚‚ē“„2é€±é–“ēµŒć£ć¦ć‹ć‚‰ę•°å€¤ćŒč½ć”ē€ć„ćŸäŗ‹ä¾‹ćŒć‚ć‚Šć¾ć™ć€‚ć¤ć¾ć‚Šć€ ę–°č¦ę©Ÿčƒ½ćÆ2é€±é–“ä»„äøŠćŸć£ć¦ćÆć˜ć‚ć¦å…Øä½“ć®ä½•%ć«ä½æć‚ć‚Œć¦ć„ć‚‹ć®ć‹ćŒć‚ć‹ć‚‹ ということです。 (ē§ćÆć“ć®ć“ćØć‚’ēŸ„ć‚‰ćšć«ćƒŖćƒŖćƒ¼ć‚¹ć—ć¦1é€±é–“ć§é€Ÿå ±å€¤ć‚’ćƒ¬ćƒćƒ¼ćƒˆć—ć¦ć—ć¾ć„ć¾ć—ćŸšŸ˜Ø) ć‚Æćƒ©ć‚·ćƒ«ć§ćÆé–‹ē™ŗć®ć‚µć‚¤ć‚Æćƒ«ćŒćØć¦ć‚‚ćÆć‚„ć„åé¢ć€ę—¢ć«ćƒŖćƒŖćƒ¼ć‚¹ć•ć‚ŒćŸę©Ÿčƒ½ć«åÆ¾ć—ć¦ć‚±ć‚¢ć§ćć¦ć„ćŖć„ć“ćØć‚‚ä½•åŗ¦ć‹ć‚ć‚Šć¾ć—ćŸć€‚ äŗŗę°—ć®ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćÆćƒŖćƒŖćƒ¼ć‚¹ć•ć‚Œć¦ć‹ć‚‰ć‚‚ē¶™ē¶šēš„ć«åˆ†ęžć™ć‚‹ć“ćØć§ć†ć¾ćę”¹å–„ć‚’å›žć›ć¦ć„ć‚‹å„½ä¾‹ć ćØę€ć„ć¾ć™ć€‚ ę¤œē“¢å“č³Ŗć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć®ē­–å®š ēµęžœ:ę¤œē“¢å“č³Ŗć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ē­–å®šć—ć€ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć®ę–¹å‘ę€§ć‚’ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆåŒ–ć—ć¾ć—ćŸšŸ‘£ćŸć ć—é‹ē”Øć«é›£ć‚ć‚Šć§ć™ć€‚ Googleć«ćÆę¤œē“¢ć‚Øćƒ³ć‚øćƒ³ć®å“č³Ŗć‚’č©•ä¾”ć™ć‚‹ćŸć‚ć« ę¤œē“¢å“č³Ŗć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ を設けています。Googleć®ć‚’å‚č€ƒć«ć‚Æćƒ©ć‚·ćƒ«ć§ć‚‚ę¤œē“¢å“č³Ŗć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ē­–å®šć—ć¦ćæć‚‹ęŒ‘ęˆ¦ć‚‚ć—ć¾ć—ćŸć€‚ Google General Guidelines(Googleę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ļ¼‰ tech.dely.jp ćŸć ć€ć“ć‚ŒćÆä½œć£ćŸć°ć‹ć‚Šć§ę”¹å–„ć®ä½™åœ°ćŒå¤šć„ć®ćØé‹ē”ØćŒć¾ć¾ćŖć£ć¦ć„ćŖć„ćØć„ć†ē¾ēŠ¶ćŒć‚ć‚Šć¾ć™ć€‚ļ¼ˆćć‚Œć ć‘ä¼øć³ć—ć‚ćŒć‚ć‚‹ćØć„ć†ć“ćØć§ć™ć­ā€¦ē¬‘ļ¼‰ ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ć®čæ½åŠ  ēµęžœ:ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ćŒćƒŖćƒŖćƒ¼ć‚¹ć•ć‚Œć¾ć—ćŸćŒć€ęƒ³å®šć‚ˆć‚Šä½æē”Øć—ć¦ćć‚Œć‚‹ćƒ¦ćƒ¼ć‚¶ćƒ¼ę•°ćŒå°‘ćŖć‹ć£ćŸć§ć™šŸ˜” ä»Šå¹“ć‹ć‚‰ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ć‚‚å¢—ćˆć¾ć—ćŸć€‚ å«ć‚ćŸććŖć„ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚„ć‚øćƒ£ćƒ³ćƒ«ć€15åˆ†ä»„å†…ć§ä½œć‚Œć‚‹ę–™ē†ćŖć©ē‰¹å®šć®ę”ä»¶ć«åæœć˜ć¦ēµžć‚Šč¾¼ć‚€ć“ćØćŒć§ćć‚‹ę©Ÿčƒ½ć§ć™ć€‚ ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ćÆć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‹ć‚‰ć“ć†ć„ć†ę©Ÿčƒ½ćŒć»ć—ć„ļ¼ćØć‚¢ćƒ—ćƒŖćƒ¬ćƒ“ćƒ„ćƒ¼ć‚„CSć‚’é€šć—ć¦č¦ęœ›ć®ć‚ć£ćŸę©Ÿčƒ½ć®ć²ćØć¤ć§ć™ć€‚ć‚‚ć”ć‚ć‚“ē¤¾å†…ć§ć‚‚ć“ć‚“ćŖę©Ÿčƒ½ćŒć‚ć‚Œć°ć„ć„ć­ć€œćØę”ˆć§äøŠćŒć£ć¦ć„ć¾ć—ćŸć€‚ ē§ćÆäø»ć«åˆ†ęžć‚’ę‹…å½“ć—ćŸć®ć§ć™ćŒć€å®Ÿéš›ć«ćƒŖćƒŖćƒ¼ć‚¹ć—ć¦ćæć‚‹ćØęƒ³å®šć‚ˆć‚Šåˆ©ē”Øč€…ę•°ćŒć‚‚ć®ć™ć”ćå°‘ćŖć‹ć£ćŸć®ć§ć™ć€‚ å…·ä½“ēš„ć«ć„ć†ćØę¤œē“¢ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ę•°ļ¼…(一攁)ć—ć‹ēµžć‚Šč¾¼ćæę©Ÿčƒ½ć‚’åˆ©ē”Øć—ć¦ć„ćŖć‹ć£ćŸć®ć§ć™ć€‚ ć‚øćƒ£ćƒ³ćƒ«ć®ē²¾åŗ¦ćŒę‚Ŗć„ć®ć‹ćŖļ¼ŸćØę€ć„ē²¾åŗ¦ć‚’ć»ć¼100%ć«ć—ć¾ć—ćŸćŒćć‚Œć§ć‚‚ä½æć£ć¦ćć‚Œć‚‹ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ę•°ćÆå¢—ćˆć¾ć›ć‚“ć§ć—ćŸć€‚ ę•°å€¤ć‚’č¦‹å®ˆć‚Šē¶šć‘ćŸćØć“ć‚ć€å°‘ćŖć„ć®ć§ćÆćŖćć“ć‚ŒćŒå®šåøøēš„ćŖå€¤ćØć„ć†ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸć€‚ ę¤œē“¢ć‚’ć—ćŸå¾Œć«ćŖć«ć‹ć‚æćƒƒćƒ—ć™ć‚‹éšœå£ćŒć„ć‹ć«é«˜ć„ć®ć‹ć‚’ę€ć„ēŸ„ć‚‰ć•ć‚ŒćŸåé¢ć€é€šåøøć®ę¤œē“¢ć§ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę±‚ć‚ć¦ć„ć‚‹ć‚‚ć®ć‚’ę¤œē“¢ēµęžœć‚’å¶ćˆćŖć‘ć‚Œć°ā€¦ćØå¼·ćę„Ÿć˜ć‚‹ć®ć§ć—ćŸć€‚ ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ēµžć‚Šč¾¼ćæę©Ÿčƒ½ć®ē“¹ä»‹šŸŽ„ 1.ć¾ćšćÆć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ę¤œē“¢ļ¼ä»Šå›žćÆć€Œč±šč‚‰ć€ć§ę¤œē“¢ć—ć¾ć™ 2.ć€Œēµžć‚Šč¾¼ćæć€ć‚’ć‚æćƒƒćƒ—šŸ‘† 3.č±šč‚‰ć®äø»é£Ÿćƒ¬ć‚·ćƒ”ć‚’ęŽ¢ć—ćŸć„ć®ć§ć€Œäø»é£Ÿć€ć‚’éøęŠžļ¼ 4.ē°”å˜ć§ćŠć„ć—ć„č±šč‚‰ć®äø»é£Ÿćƒ¬ć‚·ćƒ”ć‚’č¦‹ć‚‹ć“ćØćŒć§ćć¾ć™šŸ˜‹ pic.twitter.com/HXZsqHxbu9 — sakura@検瓢 (@818uuu) 2018幓12月5ę—„ ę¤œē“¢ęƒ…å ±ć®ćƒŖć‚µćƒ¼ćƒćØå…±ęœ‰ ēµęžœ:ęƒ…å ±åŽé›†ć‚’åœ°é“ć«ē¶šć‘ćŸēµęžœć€ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ćƒ­ć‚°ć‚’ę·±ć„č¦–ē‚¹ć§č¦‹ć‚‹ć“ćØćŒć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć—ćŸļ¼ ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćÆćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒć©ć‚“ćŖć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć§ę¤œē“¢ć—ć¦ć„ć‚‹ć‹ęÆŽę—„ćƒć‚§ćƒƒć‚Æć—ć¾ć™šŸ‘€ ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ćƒ­ć‚°ć‹ć‚‰ä»„äø‹ć®ć“ćØć‚’ē¢ŗčŖć—ć¾ć™ć€‚ ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒć©ć‚“ćŖé£Ÿęć§ćƒ¬ć‚·ćƒ”ć‚’ęŽ¢ć—ć¦ć„ć‚‹ć®ć‹ ć©ć‚“ćŖć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćŒę€„äøŠę˜‡ć—ć¦ć„ć‚‹ć‹ ć„ć¾ćƒˆćƒ¬ćƒ³ćƒ‰ć®é£Ÿę/ćƒ”ćƒ‹ćƒ„ćƒ¼ćÆćŖć«ć‹ ę¤œē“¢äø‹ä½ć«ćÆć©ć‚“ćŖć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćŒå…„ć£ć¦ć„ć‚‹ć‹(č¾žę›øć‚·ćƒŽćƒ‹ćƒ ćŒęœŖę•“å‚™ć®åÆčƒ½ę€§ćŒé«˜ć„ćŸć‚) ę¤œē“¢ćƒ­ć‚°ć®ę„å‘³åˆć„ć‚’ćć”ć‚“ćØčŖ­ćæå–ć‚‹ćŸć‚ć«ć€äø–é–“äø€čˆ¬ć®é£Ÿć«ć¾ć¤ć‚ć‚‹ęƒ…å ±ć‚’ćŸćć•ć‚“ę¤œē“¢ć—ęƒ…å ±åŽé›†ć—ć¦ć„ć¾ć™ć€‚ ćƒ¦ćƒ¼ć‚¶ćƒ¼ćÆć‚Æćƒ©ć‚·ćƒ«ä»„å¤–ć«ć‚‚ē„”ę•°ć®é£ŸćØć®ęŽ„č§¦ē‚¹ć‚’ęŒć£ć¦ć„ć¾ć™ć€‚ ć€Œę–°å¤§ä¹…äæć§ęµč”Œć£ć¦ć„ć‚‹ćƒ”ćƒ‹ćƒ„ćƒ¼ć‚’ć‚Æćƒ©ć‚·ćƒ«ć§ć‚‚ä½œć‚ŠćŸć„ć€ć€Œćƒ†ćƒ¬ćƒ“ć§ć€‡ć€‡ćŒćƒ€ć‚¤ć‚Øćƒƒćƒˆć«åŠ¹ćć£ć¦č©•åˆ¤ć ć‘ć©ć‚Æćƒ©ć‚·ćƒ«ć§ć‚‚ćć®é£Ÿęć‚’ä½æć£ćŸćƒ¬ć‚·ćƒ”ć‚ć‚‹ć‹ćŖļ¼Ÿć€ćŖć©ćć“ć‹ć‚‰é£Ÿć¹ćŸć„ć‚‚ć®ć‚„ä½œć‚ŠćŸć„ćƒ¬ć‚·ćƒ”ć‚’ę±ŗć‚ć‚‹ć“ćØć‚‚å¤šć„ć§ć—ć‚‡ć†ć€‚ é£ŸćØć®ęŽ„č§¦ē‚¹äø€č¦§ Twitter instagram Youtube ć‚°ćƒ«ćƒ”ć‚µć‚¤ćƒˆ ćƒ‹ćƒ„ćƒ¼ć‚¹ć‚µć‚¤ćƒˆ 惖惭悰 ęµč”Œć‚Šć®é£²é£Ÿåŗ— など ć€Œć“ć®ęƒ…å ±åŽé›†ć™ć‚‹ä½œę„­ęœ¬å½“ć«ä¾”å€¤ć‚’ē”Ÿć‚“ć§ć„ć‚‹ć®ć‹ćŖļ¼Ÿć€ćØę€ć†ćØćć‚‚ć‚ć£ćŸć®ć§ć™ćŒć€åœ°é“ć«ē¶šć‘ć¦ć„ć‚‹ćØć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ćƒ­ć‚°ćŒć©ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć§ć©ć®ćć‚‰ć„å½±éŸæć‚’å—ć‘ć‚‹ć®ć‹ćŒå°‘ć—ćšć¤ć‚ć‹ć£ć¦ćć¾ć—ćŸšŸ‘ćć®ä»–ć«ć‚‚å‰Æę¬”ēš„ć«č‰Æć„åŠ¹ęžœćŒćŸćć•ć‚“ē”Ÿć¾ć‚Œć¾ć—ćŸļ¼ äøŠčØ˜ć§čŖæć¹ćŸęƒ…å ±ćÆē¤¾å†…ć«å®šęœŸēš„ć«å…±ęœ‰ć—ć¦ć„ć¾ć™šŸ“˜ ę¤œē“¢ęƒ…å ±å…±ęœ‰ć®äø€éƒØ 恕恄恔恫 ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’ę”¹å–„ć™ć‚‹ćŸć‚ć«ć€ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć—ć¦1å¹“é–“ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć«å‘ćåˆć£ćŸčØ˜éŒ²ć‚’ćŠå±Šć‘ć—ć¾ć—ćŸć€‚ 恄恋恌恧恗恟恧恗悇恆恋怂 ć“ć®čØ˜äŗ‹ć‚’äø€čØ€ć§ä¼ćˆć‚‹ćØć€ ć€Œč‡Ŗē¤¾ć®ę¤œē“¢ć®ę€§č³Ŗć‚’ć‚ˆćęŠŠę”ć—ć€ćć®ę€§č³Ŗć«åˆć‚ć›ć¦ę¤œē“¢ę”¹å–„ćƒ»åˆ†ęžć‚’ć™ć‚‹ć“ćØćŒé‡č¦ć€ ということです。 ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢1å¹“ē›®ć‚’ęŒÆć‚Ščæ”ć‚‹ćØć€ć‚‚ć®ć™ć”ćę‰‹ęŽ¢ć‚Šć§č‡Ŗåˆ†ć®ē„”åŠ›ć•ć‚’ę„Ÿć˜ćŸ1å¹“é–“ć§ć—ćŸć€‚ ēµŒéØ“ćƒ»ęŠ€č”“åŠ›äøč¶³ć§ćŖć‹ćŖć‹ć†ć¾ćć„ć‹ćŖć‹ć£ćŸć‚Šć€å‘Øć‚Šć«åŒć˜č·ę„­ć®ē›øč«‡ē›øę‰‹ćŒć„ćŖćć¦ę‚©ć‚€ć“ćØćŒćØć¦ć‚‚å¤šć‹ć£ćŸć‚Šā€¦ā€¦ 怂 恧悂态恓恮1å¹“é–“ć‚„ć£ć¦ććŸć“ćØćÆē„”é§„ć§ćÆćŖć‹ć£ćŸćØę€ć„ć¾ć™ć€‚ē„”é§„ć§ćÆćŖć‹ć£ćŸćØę€ć„ćŸć„ć—ć€ę€ć„åˆ‡ć‚ŠćŸć„ć§ć™ć€‚ ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢2幓目は1å¹“ē›®ć‚ˆć‚Šć‚‚ć‚‚ć£ćØę¤œē“¢ć‚’ć‚ˆćć§ćć‚‹ćØäæ”ć˜ć¦ć„ć¾ć™ć€‚ ćć—ć¦ć€ć„ć¤ć‹čƒøć‚’å¼µć£ć¦ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć§ć™ćØć„ćˆć‚‹ć‚ˆć†ć«ćŖć‚ŠćŸć„ć§ć™ć€‚ ę˜Žę—„ćÆć€å¼Šē¤¾ć®Androidć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®å·å£ć‚ˆć‚Šć€Œ Androidにいい感じの動きをさせていく話(ViewPagerとその他Viewとの連動) - dely engineering blog ć€ć®č©±ćŒę›øć‹ć‚Œć¾ć™ć€‚ę˜Æéžć€ćŠę„½ć—ćæć«ć—ć¦ć„ć¦ćć ć•ć„ļ¼
ćÆć˜ć‚ć« ęœ¬čØ˜äŗ‹ćÆdely Advent Calendar 2018恮4ę—„ē›®ć®čØ˜äŗ‹ć§ć™ć€‚ dely Advent Calendar 2018 - Adventar dely Advent Calendar 2018 - Qiita ę˜Øę—„ćÆå¼Šē¤¾ć®ę©Ÿę¢°å­¦ēæ’ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č¾»ćŒNixOSć«ć¤ć„ć¦ć®čØ˜äŗ‹ć‚’ę›øćć¾ć—ćŸć®ć§čˆˆå‘³ć®ć‚ć‚‹ę–¹ćÆę˜ÆéžčŖ­ć‚“ć§ćæć¦ćć ć•ć„ć€‚ tech.dely.jp こんにごは!dely恧SREć‚’ć‚„ć£ć¦ć„ć‚‹äŗ•äøŠć§ć™ć€‚ ęœ¬čØ˜äŗ‹ć§ćÆć€WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć®å®šē‚¹č¦³ęø¬ć®ä»•ēµ„ćæć‚’ę‰‹č»½ć«ę§‹ēÆ‰å‡ŗę„ć‚‹ć‚ˆć†ć«ć—ćŸć®ć§ćć®ē“¹ä»‹ć‚’ć—ćŸć„ćØę€ć„ć¾ć™ć€‚ ęœ¬čØ˜äŗ‹ć§ćÆäø‹čØ˜ć®ć‚µćƒ¼ćƒ“ć‚¹ć‚„ćƒ„ćƒ¼ćƒ«ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™ć€‚ AWS Terraform sitespeed.io å‰ē½®ććÆć„ć„ć‹ć‚‰ę§‹ēÆ‰ę–¹ę³•ć ć‘ēŸ„ć‚ŠćŸć„ćØć„ć†ę–¹ćÆ こごら! 目欔 ćÆć˜ć‚ć« 目欔 WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć«ć¤ć„ć¦ sitespeed.io恫恤恄恦 主な機能 各種スコア Waterfall Visual Metrics Browser Metrics ćƒ¬ćƒ³ćƒ€ćƒŖćƒ³ć‚°ę™‚ć®å‹•ē”»å†ē”Ÿ ć‚¹ć‚³ć‚¢ć«åÆ¾ć™ć‚‹ć‚¢ćƒ‰ćƒć‚¤ć‚¹ć®č”Øē¤ŗ ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć®é…ć„ćƒŖć‚Æć‚Øć‚¹ćƒˆ ć‚µć‚¤ć‚ŗć®å¤§ćć„ē”»åƒć‚„javascript 主な特従 å®šē‚¹č¦³ęø¬ć«ć¤ć„ć¦ å®šē‚¹č¦³ęø¬ć®ę–¹ę³• CodeBuildのピリット å®šē‚¹č¦³ęø¬åŸŗē›¤ć®ę§‹ēÆ‰ę–¹ę³• ę§‹ęˆå›³ å‰ę ęŗ–å‚™ ļ¼‘ļ¼Žćƒ¬ćƒć‚øćƒˆćƒŖć®ćƒ•ć‚©ćƒ¼ć‚Æ ļ¼’ļ¼ŽTerraform恮tfstatećƒ•ć‚”ć‚¤ćƒ«ē®”ē†ē”Øć®S3ćƒć‚±ćƒƒćƒˆć®ä½œęˆ ļ¼“ļ¼Žterraform.tfvarsの作成 ļ¼”ļ¼Žbackend.tfvarsの作成 ļ¼•ļ¼ŽTerraformä½œę„­ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć®åˆęœŸåŒ– ļ¼–ļ¼ŽåÆ¾č±”ć‚µć‚¤ćƒˆć®ęŒ‡å®š 構築 sitespeed.ioć«ć‚ˆć‚‹čØˆęø¬ēµęžœć®å‚ē…§ HTML SQL VIEW作成 Redashć«ć‚ˆć‚‹åÆč¦–åŒ–ä¾‹ ć‚«ć‚¹ć‚æćƒžć‚¤ć‚ŗ sitespeed.ioć®č©¦č”Œå›žę•°ć®čŖæę•“ čØˆęø¬é–“éš”ć®čŖæę•“ ꖙ金恫恤恄恦 恕恄恔恫 WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć«ć¤ć„ć¦ 2018幓7月のGoogleć®ć‚¹ćƒ”ćƒ¼ćƒ‰ć‚¢ćƒƒćƒ—ćƒ‡ćƒ¼ćƒˆć§ć‚‚åˆ†ć‹ć‚‹é€šć‚Šć€WEBćƒšćƒ¼ć‚øć®čŖ­ćæč¾¼ćæé€Ÿåŗ¦ćÆPCć‹ćƒ¢ćƒć‚¤ćƒ«ć‹ć«é–¢ć‚ć‚‰ćšć‚ˆć‚Šäø€å±¤é‡č¦č¦–ć•ć‚Œć¦ćć¦ć„ć¾ć™ć€‚ čŖ­ćæč¾¼ćæé€Ÿåŗ¦ć®é…ć„WEBćƒšćƒ¼ć‚øć‚’ę”¹å–„ć—ć‚ˆć†ćØćŖć£ćŸćØćć€ć¾ćšćÆć˜ć‚ć«ē¾ēŠ¶ć‚’ęŠŠę”ć™ć‚‹åæ…č¦ćŒć‚ć‚Šćć®ćŸć‚ć«ćÆWEBć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć‚’č”Œć†åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ ē¾åœØć€WEBć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć‚’čØˆęø¬ć™ć‚‹ę‰‹ę®µćØć—ć¦ćÆ google chrome恮Lighthouse機能 WebPageTest( https://www.webpagetest.org ) PageSpeed Insights( https://developers.google.com/speed/pagespeed/insights/ ) ćŖć©ć„ćć¤ć‹ć‚ć‚Šć¾ć™ćŒć€ęœ¬čØ˜äŗ‹ć§ćÆē¾åœØdelyć§åˆ©ē”Øć—ć¦ć„ć‚‹sitespeed.ioćØć„ć†ćƒ„ćƒ¼ćƒ«ć‚’ē“¹ä»‹ć—ćŸć„ćØę€ć„ć¾ć™ć€‚ sitespeed.io恫恤恄恦 sitespeed.ioćÆć‚Ŗćƒ¼ćƒ—ćƒ³ć‚½ćƒ¼ć‚¹ć®WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ćƒ„ćƒ¼ćƒ«ć§ć™ć€‚ www.sitespeed.io 主な機能 sitespeed.ioć‚’ä½æć†ć“ćØć§äø‹čØ˜ć®ć‚ˆć†ćŖćƒ‡ćƒ¼ć‚æć‚’WEBćƒ–ćƒ©ć‚¦ć‚¶ć§é–²č¦§ć™ć‚‹ć“ćØćŒåÆčƒ½ć«ćŖć‚Šć¾ć™ć€‚ 各種スコア Waterfall Visual Metrics Browser Metrics ćƒ¬ćƒ³ćƒ€ćƒŖćƒ³ć‚°ę™‚ć®å‹•ē”»å†ē”Ÿ ć‚¹ć‚³ć‚¢ć«åÆ¾ć™ć‚‹ć‚¢ćƒ‰ćƒć‚¤ć‚¹ć®č”Øē¤ŗ ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć®é…ć„ćƒŖć‚Æć‚Øć‚¹ćƒˆ ć‚µć‚¤ć‚ŗć®å¤§ćć„ē”»åƒć‚„javascript 主な特従 ć¾ćŸå‰ę®µć§ęŒ™ć’ćŸWEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ćƒ„ćƒ¼ćƒ«ćØé•ć„ć€äø‹čØ˜ć®ć‚ˆć†ćŖē‰¹å¾“ć‚’ęŒć£ć¦ć„ć¾ć™ć€‚ Dockerć«ć‚ˆć‚‹ē°”å˜ćŖå®Ÿč”Œ å…¬å¼ć®docker imagećŒć‚ć‚‹ć®ć§ć€äø‹čØ˜ć®ć‚³ćƒžćƒ³ćƒ‰ć«ć‚ˆć£ć¦ē°”å˜ć«å®Ÿč”Œć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ $ docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:7.7.2 https://www.sitespeed.io/ ēµęžœć®htmlå‡ŗåŠ› å®Ÿč”Œå¾Œć€čØˆęø¬ēµęžœćŒhtmlć§å‡ŗåŠ›ć•ć‚Œć¦ć„ć‚‹ć®ć§WEBćƒ–ćƒ©ć‚¦ć‚¶ć§ē°”å˜ć«é–²č¦§ć™ć‚‹ć“ćØćŒåÆčƒ½ć«ćŖć£ć¦ć„ć¾ć™ć€‚ ※ YYYY-MM-DD-HH-mm-ss ćÆå®Ÿč”Œę™‚åˆ»ćŒå…„ć‚Šć¾ć™ $ open sitespeed-result/www.sitespeed.io/YYYY-MM-DD-HH-mm-ss/index.html ä»–ć«ć‚‚äø‹čØ˜ć®ć‚ˆć†ćŖę©Ÿčƒ½ć‚’ęØ™ęŗ–ć§å‚™ćˆć¦ć„ć‚‹ć®ć§ć€ęŸ”č»ŸćŖé‹ē”ØćŒåÆčƒ½ć«ćŖć£ć¦ć„ć¾ć™ć€‚ html悒S3ć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ę©Ÿčƒ½ ēµęžœć‚’Slackć«é€šēŸ„ć™ć‚‹ę©Ÿčƒ½ ēµęžœć®ćƒ”ćƒˆćƒŖć‚Æć‚¹ć‚’jsonå½¢å¼ć§å‡ŗåŠ›ć™ć‚‹ę©Ÿčƒ½ å®šē‚¹č¦³ęø¬ć«ć¤ć„ć¦ WEBć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć«ćŠć„ć¦ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć‚’ē‰¹å®šć™ć‚‹ć ć‘ć§ć‚ć‚Œć°ć€ćć®ę™‚ē‚¹ć§ę•°å›žć®čØˆęø¬ć‚’å®Ÿę–½ć™ć‚Œć°ć‚ˆć„ć§ć™ćŒć€ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«åÆ¾ć—ć¦åÆ¾ē­–ć‚’č”Œć£ćŸå¾Œć€ć©ć®ēØ‹åŗ¦ę”¹å–„ć—ćŸć®ć‹ć«ć¤ć„ć¦ēŸ„ć‚ŠćŸć„å “åˆćÆåÆ¾ē­–å¾Œć«å†åŗ¦čØˆęø¬ć‚’å®Ÿę–½ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ č¤‡ę•°ć®åÆ¾ē­–ć‚’é•·ęœŸēš„ć«å®Ÿę–½ć—ć¦ć„ćå “åˆćŖć©ćÆć€åÆ¾ē­–ć‚’å®Ÿę–½ć™ć‚‹åŗ¦ć«čØˆęø¬ć‚’å®Ÿę–½ć™ć‚‹åæ…č¦ćŒć‚ć‚Šéžåøøć«å¤§å¤‰ć§ć™ć€‚ ć¾ćŸć€äøŠčØ˜ćØćÆååÆ¾ć«ä½•ć‹ć®ć‚æć‚¤ćƒŸćƒ³ć‚°ć§ę„å›³ć›ćšćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ćŒę‚ŖććŖć£ć¦ć„ćŖć„ć‹ć‚’ćƒć‚§ćƒƒć‚Æć—ćŸć„ćØćć‚„ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ćŒę‚ŖććŖć£ćŸå‰å¾Œć§ć¾ćŸćć®ć‚æć‚¤ćƒŸćƒ³ć‚°ć§ä½•ćŒåŽŸå› ć‹ćŖć©ćÆé”ć£ć¦ē¢ŗčŖć—ćŸć„ć“ćØć‚‚ć‚ć‚Šć¾ć™ć€‚ ćć†ć„ć£ćŸč¦ä»¶ć‚’é”ęˆć™ć‚‹ćŸć‚ć«ćÆć€äø€å®šé–“éš”ć§ē¹°ć‚Ščæ”ć—WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć‚’å®Ÿę–½ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ å®šē‚¹č¦³ęø¬ć®ę–¹ę³• å®šęœŸēš„ć«WEBć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć‚’č”Œć†ć«ćÆäø‹čØ˜ć®ć‚ˆć†ćŖę–¹ę³•ćŒč€ƒćˆć‚‰ć‚Œć¾ć™ć€‚ å®šęœŸēš„ć«ę‰‹å‹•ć§å®Ÿę–½ äø€ē•Ŗå˜ē“”ćŖć®ćÆå®šęœŸēš„ć«ę‰‹å‹•ć§č”Œć†ć“ćØć§ć™ć€‚ ćŸć ē¾å®Ÿēš„ć«ćÆę‰‹ä½œę„­ć§č”Œć†ćŸć‚åæ˜ć‚Œć‚‹ć“ćØćŒć‚ć£ćŸć‚Šć€ćć‚‚ćć‚‚åŒć˜ę™‚é–“ć«å®Ÿč”Œć™ć‚‹ć®ćŒé›£ć—ć‹ć£ćŸć‚Šć—ć¾ć™ć€‚ ć‚µćƒ¼ćƒć‚’ę§‹ēÆ‰ć—ć¦cron悄CIćƒ„ćƒ¼ćƒ«ć§å®šęœŸēš„ć«å®Ÿč”Œ ę¬”ćÆć‚µćƒ¼ćƒć‚’ē«‹ć¦ć¦cronć§å®Ÿč”Œć—ćŸć‚ŠJenkinsなどのCIćƒ„ćƒ¼ćƒ«ć§å®šęœŸēš„ć«å®Ÿč”Œć™ć‚‹ę–¹ę³•ć§ć™ć€‚ ć“ć®ę–¹ę³•ćÆć€ä»–ć®å‡¦ē†ćŒč£å“ć§å‹•ć„ć¦ć„ć¦ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć«å½±éŸæćŒć‚ć‚‹ć“ćØć‚’č€ƒę…®ć™ć‚‹åæ…č¦ćŒć‚ć£ćŸć‚Šć€ ćć‚‚ćć‚‚ć‚µćƒ¼ćƒć®ē®”ē†ćŒåæ…č¦ć«ćŖć£ć¦ć—ć¾ć†ć“ćØć«ćƒ‡ćƒ”ćƒŖćƒƒćƒˆć‚’ę„Ÿć˜ć¦ć—ć¾ć„ć¾ć™ć€‚ ECSć®ć‚æć‚¹ć‚Æå®Ÿč”Œę©Ÿčƒ½ć‚„AWS Batchć§å®šęœŸēš„ć«å®Ÿč”Œ ē†č«–ēš„ć«ćÆå®Ÿē¾ć§ććć†ć§ć™ćŒć€WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć®å®šē‚¹č¦³ęø¬ć‚’č”Œć†ć ć‘ćŖć®ć§å°‘ć—å¤§ć’ć•ćŖę°—ćŒć—ć¾ć™ć€‚ äøŠčØ˜ć«ļ¼“ć¤ć»ć©ę–¹ę³•ć‚’ęŒ™ć’ć¦č¦‹ć¾ć—ćŸćŒć€ć©ć‚Œć‚‚ć„ć¾ć„ć”ćØć„ć†ę„Ÿć˜ć§ć™ļ¼ˆäø»č¦³ļ¼‰ć€‚ ćć“ć§ęę”ˆć—ćŸć„ć®ćŒAWS恮CodeBuildć«ć‚ˆć‚‹å®šęœŸå®Ÿč”Œć§ć™ļ¼ CodeBuildのピリット CodeBuildćÆęœ¬ę„CIć§åˆ©ē”Øć™ć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć§ć™ćŒć€ć‚µćƒ¼ćƒćƒ¬ć‚¹ćŖå®Ÿč”Œē’°å¢ƒćØć—ć¦ć‚‚å„Ŗć‚Œć¦ć„ć‚‹ćØę€ć„ć¾ć™ć€‚ WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć®å®Ÿč”Œē’°å¢ƒćØć—ć¦ä½æć†ć“ćØć«ćŠć„ć¦ćÆäø‹čØ˜ć®ć‚ˆć†ćŖćƒ”ćƒŖćƒƒćƒˆćŒć‚ć‚Šć¾ć™ć€‚ ć‚µćƒ¼ćƒćƒ¬ć‚¹ćŖć®ć§ćƒŖć‚½ćƒ¼ć‚¹ć‚’ę°—ć«ć—ćŖćć¦ć‚ˆć„ å®Ÿč”Œę™‚é–“ć«ć‚ˆć‚‹å¾“é‡čŖ²é‡‘ CloudWatch Event連携でcronćƒ•ć‚©ćƒ¼ćƒžćƒƒćƒˆć«ć‚ˆć‚‹å®šęœŸå®Ÿč”Œć‚‚åÆčƒ½ å®šē‚¹č¦³ęø¬åŸŗē›¤ć®ę§‹ēÆ‰ę–¹ę³• ć“ć“ć‹ć‚‰ćÆå…·ä½“ēš„ćŖę§‹ēÆ‰ę–¹ę³•ć‚’ē“¹ä»‹ć—ć¾ć™ć€‚ ęœ¬čØ˜äŗ‹ć§ä½æē”Øć™ć‚‹ć‚³ćƒ¼ćƒ‰ćÆå…Øć¦Githubにあげています。 github.com AWSć®ćƒŖć‚½ćƒ¼ć‚¹ć‚’Terraformć‚’ä½æć£ć¦ć‚³ćƒ¼ćƒ‰åŒ–ć—ć¦ć„ć‚‹ć®ć§ć€å®šē‚¹č¦³ęø¬åŸŗē›¤ć‚’ę‰‹č»½ć«ę§‹ēÆ‰ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ ę§‹ęˆå›³ CodeBuild sitespeed.ioć‚’å®Ÿč”Œć™ć‚‹å®Ÿč”Œē’°å¢ƒćØć—ć¦åˆ©ē”Øć—ć¾ć™ć€‚ CloudWatch Event CodeBuildć‚’å®šęœŸēš„ć«å®Ÿč”Œć™ć‚‹ć‚¹ć‚±ć‚øćƒ„ćƒ¼ćƒ©ćØć—ć¦åˆ©ē”Øć—ć¾ć™ć€‚ S3 sitespeed.ioć«ć‚ˆć‚‹čØˆęø¬ēµęžœć®ę ¼ē“ćØć€HTMLć®ćƒ›ć‚¹ćƒ†ć‚£ćƒ³ć‚°ćØć—ć¦åˆ©ē”Øć—ć¾ć™ć€‚ Glue sitespeed.ioć«ć‚ˆć‚‹čØˆęø¬ēµęžœć®ć‚¹ć‚­ćƒ¼ćƒžć‚’å®šē¾©ć™ć‚‹ćŸć‚ć«åˆ©ē”Øć—ć¾ć™ć€‚ Athena sitespeed.ioć«ć‚ˆć‚‹čØˆęø¬ēµęžœć«åÆ¾ć—ć¦SQLć‚’å®Ÿč”Œć™ć‚‹ćŸć‚ć«åˆ©ē”Øć—ć¾ć™ć€‚ å‰ę åŸŗē›¤ę§‹ēÆ‰ć«ä¼“ć£ć¦ęœ€ä½Žé™äø‹čØ˜ćŒå®Ÿč”Œē’°å¢ƒć«čØ­å®šć•ć‚Œć¦ć„ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ awsclić®ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćØcredentialの設定 Terraformć®åˆ©ē”Øć«ä¼“ć£ć¦AWSć®ć‚¢ć‚Æć‚»ć‚¹ć‚­ćƒ¼ćØć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć‚­ćƒ¼ć®čØ­å®šćŒåæ…č¦ć§ć™ć€‚ Terraformć®ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ« IAMに対するTerraformć‚’å®Ÿč”Œć™ć‚‹ćŸć‚ć®ååˆ†ćŖęØ©é™čØ­å®š AWS CodeBuildとGitHubć®ęŽ„ē¶š AWSć‚³ćƒ³ć‚½ćƒ¼ćƒ«äøŠć®CodeBuildć«ćŠć„ć¦ćƒ—ćƒ­ć‚øć‚§ć‚ÆćƒˆčØ­å®šę™‚ć®ćƒšćƒ¼ć‚øć§äø‹čØ˜ć®ć‚ˆć†ć«ć€ć€ŒGitHubć‚¢ć‚«ć‚¦ćƒ³ćƒˆć‚’åˆ‡ę–­ć€ćØč”Øē¤ŗć•ć‚Œć¦ć„ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ć•ć‚Œć¦ć„ćŖć„å “åˆćÆć€ŒGitHubć«ęŽ„ē¶šć€ćƒœć‚æćƒ³ć‹ć‚‰GitHubé€£ęŗć‚’ęøˆć¾ć›ć¦ćć ć•ć„ć€‚ CodeBuildとGitHubćŒęŽ„ē¶šć•ć‚Œć¦ć„ćŖć„ćØTerraform恮applyę™‚ć«ć‚Øćƒ©ćƒ¼ć«ćŖć‚Šć¾ć™ć®ć§ć”ę³Øę„ćć ć•ć„ć€‚ ęŗ–å‚™ ļ¼‘ļ¼Žćƒ¬ćƒć‚øćƒˆćƒŖć®ćƒ•ć‚©ćƒ¼ć‚Æ äø‹čØ˜ć®ćƒ¬ćƒć‚øćƒˆćƒŖć‚’ć”č‡Ŗčŗ«ć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć«Forkします。Cloneć—ć¦ę–°ć—ććƒ¬ćƒć‚øćƒˆćƒŖć‚’ä½œęˆć—ć¦ć‚‚å¤§äøˆå¤«ć§ć™ć€‚ GitHub - gomesuit/webperf-by-codebuild ļ¼’ļ¼ŽTerraform恮tfstatećƒ•ć‚”ć‚¤ćƒ«ē®”ē†ē”Øć®S3ćƒć‚±ćƒƒćƒˆć®ä½œęˆ 空のS3ćƒć‚±ćƒƒćƒˆć‚’ļ¼‘ć¤ä½œęˆć—ć¾ć™ć€‚ ę—¢å­˜ć®ć‚‚ć®ć§ć‚‚å¤§äøˆå¤«ć§ć™ćŒć€tfstatećƒ•ć‚”ć‚¤ćƒ«ć®keyć‚’ć‚³ćƒ¼ćƒ‰ć«ć¹ćŸę›øćć—ć¦ć„ć‚‹ć®ć§ę–°č¦ć§S3ćƒć‚±ćƒƒćƒˆć‚’ä½œęˆć™ć‚‹ć“ćØć‚’ćŠć™ć™ć‚ć—ć¾ć™ć€‚ ļ¼“ļ¼Žterraform.tfvarsの作成 sitespeed.ioć®å‡ŗåŠ›ć—ćŸhtml悒S3ć®ćƒ›ć‚¹ćƒ†ć‚£ćƒ³ć‚°ę©Ÿčƒ½ć‚’ä½æć£ć¦å‚ē…§ć™ć‚‹ćŸć‚ć€č‡Ŗčŗ«ć®IPć§ć‚¢ć‚Æć‚»ć‚¹åˆ¶é™ć‚’ć‹ć‘ć¾ć™ć€‚ またCodeBuildćŒć‚½ćƒ¼ć‚¹ć‚’å–å¾—ć™ć‚‹å…ˆć‚’ć€ę‰‹é †ć§ä½œęˆć—ćŸćƒ¬ćƒć‚øćƒˆćƒŖć®URLに変曓します。 ć‚µćƒ³ćƒ—ćƒ«ćƒ•ć‚”ć‚¤ćƒ«ćŒć‚ć‚‹ć®ć§ć‚³ćƒ”ćƒ¼ć—ć¦ć‹ć‚‰ć€ $ cd terraform $ cp terraform.tfvars.sample terraform.tfvars ćƒ•ć‚”ć‚¤ćƒ«å†…ć®IPć‚¢ćƒ‰ćƒ¬ć‚¹ćØćƒ¬ćƒć‚øćƒˆćƒŖć‚’å¤‰ę›“ć—ć¾ć™ć€‚ # S3ć®ć‚¢ć‚Æć‚»ć‚¹å…ƒIP my_ip = "XXX.XXX.XXX.XXX/32" # ä½œęˆć—ćŸč‡Ŗčŗ«ć®GitHubćƒ¬ćƒć‚øćƒˆćƒŖ git_repository = "https://github.com/<user-name>/<repository-name>" ļ¼”ļ¼Žbackend.tfvarsの作成 Terraform恮tfstatećƒ•ć‚”ć‚¤ćƒ«ē®”ē†ē”Øć®S3ćƒć‚±ćƒƒćƒˆć‚’ terraform init ć®ć‚æć‚¤ćƒŸćƒ³ć‚°ć§ęŒ‡å®šć™ć‚‹ćŸć‚ćƒ•ć‚”ć‚¤ćƒ«ć‚’ä½œęˆć—ć¾ć™ć€‚ ć‚µćƒ³ćƒ—ćƒ«ćƒ•ć‚”ć‚¤ćƒ«ćŒć‚ć‚‹ć®ć§ć‚³ćƒ”ćƒ¼ć—ć¦ć‹ć‚‰ć€ # ./terraform ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć§å®Ÿę–½ $ cp backend.tfvars.sample backend.tfvars ćƒ•ć‚”ć‚¤ćƒ«å†…ć®ćƒć‚±ćƒƒćƒˆåć‚’å¤‰ę›“ć—ć¾ć™ć€‚ # tfstateć‚’ę ¼ē“ć™ć‚‹S3ćƒć‚±ćƒƒćƒˆ bucket = "č‡Ŗčŗ«ć§ä½œęˆć—ćŸS3ćƒć‚±ćƒƒćƒˆć®åå‰" ļ¼•ļ¼ŽTerraformä½œę„­ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć®åˆęœŸåŒ– äø‹čØ˜ć®ć‚³ćƒžćƒ³ćƒ‰ć§Terraformć®ä½œę„­ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć‚’åˆęœŸåŒ–ć—ć¾ć™ć€‚ ć‚Øćƒ©ćƒ¼ćŒć§ćŖć‘ć‚Œć°OK恧恙怂 # ./terraform ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć§å®Ÿę–½ $ terraform init -backend-config backend.tfvars ļ¼–ļ¼ŽåÆ¾č±”ć‚µć‚¤ćƒˆć®ęŒ‡å®š čØˆęø¬ć™ć‚‹ćƒšćƒ¼ć‚øć®URL悒urls.csvć«čØ˜č¼‰ć—ć¾ć™ć€‚ äø€č”Œć« ćƒ‰ćƒ”ć‚¤ćƒ³å,対豔URL,ć‚«ćƒ†ć‚“ćƒŖ ć®é †ć§čØ˜č¼‰ć—ć¾ć™ć€‚ č¤‡ę•°č”ŒčØ˜č¼‰ć™ć‚‹ćØļ¼‘å›žć®CodeBuildć®å®Ÿč”Œć§č¤‡ę•°ć®URLćŒčØˆęø¬ć•ć‚Œć¾ć™ć€‚ ć‚«ćƒ†ć‚“ćƒŖåćÆåÆ¾č±”URLć‚’ć‚«ćƒ†ć‚“ćƒ©ć‚¤ć‚ŗć™ć‚‹ćŸć‚ć«ä»˜äøŽć—ć¾ć™ć€‚ä»»ę„ć®ę–‡å­—åˆ—ć‚’å…„åŠ›ć—ć¦ćć ć•ć„ć€‚ ä¾‹ćˆć° https://www.kurashiru.com/ ć‚’čØˆęø¬åÆ¾č±”URLćØć™ć‚‹å “åˆć€äø‹čØ˜ć®ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚ ćƒˆćƒƒćƒ—ćƒšćƒ¼ć‚øćŖć®ć§ć‚«ćƒ†ć‚“ćƒŖćÆtopćØć—ć¾ć—ćŸć€‚ 計測対豔のWEBć‚µć‚¤ćƒˆćÆć”č‡Ŗčŗ«ćŒē®”ē†ć•ć‚Œć¦ć„ć‚‹ć‚‚ć®ć‚’čØ˜č¼‰ć—ć¦ćć ć•ć„ć€‚ www.kurashiru.com,https://www.kurashiru.com/,top 構築 Terraformć‚’å®Ÿč”Œć—ć¾ć™ć€‚ # ./terraform ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć§å®Ÿę–½ $ terraform apply ć—ć°ć‚‰ćć™ć‚‹ćØäø‹čØ˜ć®ć‚ˆć†ć«ć‚³ćƒ³ć‚½ćƒ¼ćƒ«ć«å‡ŗåŠ›ć•ć‚Œć‚‹ć®ć§ć€ē¢ŗčŖć®å¾Œć«ć€Œyesć€ćØå…„åŠ›ć™ć‚‹ćØćƒŖć‚½ćƒ¼ć‚¹ć®ē”ŸęˆćŒå§‹ć¾ć‚Šć¾ć™ć€‚ Plan: 16 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: äøŠčØ˜ć‚³ćƒžćƒ³ćƒ‰ć§ē”Ÿęˆć—ćŸćƒŖć‚½ćƒ¼ć‚¹ć‚’å‰Šé™¤ć™ć‚‹å “åˆćÆäø‹čØ˜ć‚³ćƒžćƒ³ćƒ‰ć‚’å®Ÿč”Œć—ć¾ć™ć€‚ # ./terraform ćƒ‡ć‚£ćƒ¬ć‚ÆćƒˆćƒŖć§å®Ÿę–½ $ terraform destroy sitespeed.ioć«ć‚ˆć‚‹čØˆęø¬ēµęžœć®å‚ē…§ ęœ€å¤§ļ¼‘ę™‚é–“å¾…ć¤ć‹čØ­å®šęøˆćæć®CodeBuildć‚’ę‰‹å‹•ć§ļ¼‘åŗ¦å®Ÿč”Œć™ć‚‹ćØS3ć«čØˆęø¬ēµęžœćŒē½®ć‹ć‚Œć¾ć™ć€‚ HTML S3ćƒć‚±ćƒƒćƒˆć«htmlćŒå‡ŗåŠ›ć•ć‚Œć¦ć„ć‚‹ć®ć§ćƒ–ćƒ©ć‚¦ć‚¶ć§é–‹ćć“ćØć§čØˆęø¬ēµęžœć‚’é–²č¦§ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ ä¾‹ćˆć°URLćÆäø‹čØ˜ć®ć‚ˆć†ćŖć‚‚ć®ć«ćŖć‚Šć¾ć™ć€‚ https://s3-ap-northeast-1.amazonaws.com/webperf-by-codebuild-d85de1e5e348/raw/www.sitespeed.io/desktop/top/2018/12/01/15/38/index.html SQL AWSć‚³ćƒ³ć‚½ćƒ¼ćƒ«ć®Athena恧SQLć‚’å®Ÿč”Œć™ć‚‹ćØēµęžœćŒå–å¾—ć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚ SQL例 SELECT * FROM "webperf_by_codebuild_d85de1e5e348"."json" limit 10; VIEW作成 ć“ć®ć¾ć¾ć§ć‚‚å•é”ŒćÆćŖć„ć®ć§ć™ćŒć€SQLć‚’ä½œęˆć™ć‚‹ćØćć«SQLćŒč¤‡é›‘ć«ćŖć‚‰ćŖć„ć‚ˆć†ć«VIEWć‚’čØ­å®šć™ć‚‹ć®ć‚’ćŠć™ć™ć‚ć—ć¾ć™ć€‚ ä¾‹ćˆć°äø‹čØ˜ć®ć‚ˆć†ćŖVIEWć‚’ē”Ÿęˆć™ć‚‹ć“ćØć§S3恮URLとtimestampć®ć‚«ćƒ©ćƒ ć‚’äŗ‹å‰ć«å®šē¾©ć—ć¦ćŠćć“ćØćŒåÆčƒ½ć§ć™ć€‚ SQLć®äø‹čØ˜ć®éƒØåˆ†ć‚’č‡Ŗčŗ«ć§Terraformć‚’å®Ÿč”Œć—ćŸēµęžœć«ē½®ćę›ćˆć¦ćć ć•ć„ć€‚ 怌<Terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸS3ćƒć‚±ćƒƒćƒˆ>怍 怌<Terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹>怍 CREATE OR REPLACE VIEW " <Terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹> " . " site " AS SELECT CAST ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " YEAR " , ' - ' ), " MONTH " ), ' - ' ), " DAY " ), ' ' ), " hour " ), ' : ' ), " minute " ) AS timestamp) " time " , " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( ' https://s3-ap-northeast-1.amazonaws.com/<terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸS3ćƒć‚±ćƒƒćƒˆ>/raw/ ' , " domain " ), ' / ' ), " device " ), ' / ' ), " category " ), ' / ' ), " year " ), ' / ' ), " month " ), ' / ' ), " day " ), ' / ' ), " hour " ), ' / ' ), " minute " ), ' /index.html ' ) " link " , * FROM " <Terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹> " . " json " ē½®ćę›ćˆä¾‹ CREATE OR REPLACE VIEW " webperf_by_codebuild_d85de1e5e348 " . " site " AS SELECT CAST ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " YEAR " , ' - ' ), " MONTH " ), ' - ' ), " DAY " ), ' ' ), " hour " ), ' : ' ), " minute " ) AS timestamp) " time " , " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( ' https://s3-ap-northeast-1.amazonaws.com/webperf-by-codebuild-d85de1e5e348/raw/ ' , " domain " ), ' / ' ), " device " ), ' / ' ), " category " ), ' / ' ), " year " ), ' / ' ), " month " ), ' / ' ), " day " ), ' / ' ), " hour " ), ' / ' ), " minute " ), ' /index.html ' ) " link " , * FROM " webperf_by_codebuild_d85de1e5e348 " . " json " ēµęžœä¾‹ SELECT * FROM " webperf_by_codebuild_d85de1e5e348 " . " site " limit 10 ; URLとtimestampć®ć‚«ćƒ©ćƒ ćŒčæ½åŠ ć•ć‚Œć¦ć„ć‚‹ć“ćØć‚’ē¢ŗčŖć§ćć¾ć™ć€‚ Redashć«ć‚ˆć‚‹åÆč¦–åŒ–ä¾‹ å¼Šē¤¾ć§ćÆä¾‹ćˆć°äø‹čØ˜ć®SQLć‚’å®Ÿč”Œć™ć‚‹ć“ćØć«ć‚ˆć£ć¦ć€ SELECT * FROM " <Terraformć«ć‚ˆć£ć¦ē”Ÿęˆć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹> " . " site " WHERE device = ' desktop ' AND time >= current_timestamp - interval ' 1 ' month AND category = ' top ' AND domain = ' www.kurashiru.com ' ORDER BY time desc ; äø‹čØ˜ć®ć‚ˆć†ćŖēµęžœć‚’å¾—ć¦ć„ć¾ć™ć€‚ ć¾ćŸäøŠčØ˜ć®ēµęžœć‚’äø‹čØ˜ć®ć‚ˆć†ć«Redashć‚’ä½æć£ć¦ć‚°ćƒ©ćƒ•åŒ–ć—ć¦ć„ć¾ć™ć€‚ äøŠčØ˜ćÆå¼Šē¤¾ć§ć®ä¾‹ć§ć™ćŒć€sitespeed.ioć«ć‚ˆć£ć¦ę§˜ć€…ćŖćƒ”ćƒˆćƒŖć‚Æć‚¹ćŒå–å¾—ć•ć‚Œć¦ć„ć‚‹ć®ć§č‰²ć€…ćŖęŒ‡ęØ™ć®ē›øåÆ¾ēš„ćŖå¤‰å‹•ć‚’čØˆęø¬ć™ć‚‹ć“ćØćŒåÆčƒ½ć«ćŖć£ć¦ć„ć¾ć™ć€‚ ć‚«ć‚¹ć‚æćƒžć‚¤ć‚ŗ sitespeed.ioć®č©¦č”Œå›žę•°ć®čŖæę•“ WEBć‚µć‚¤ćƒˆć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ćÆć‚µćƒ¼ćƒ‰ćƒ‘ćƒ¼ćƒ†ć‚£ćƒ¼ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć«ć‚ˆć£ć¦å½±éŸæć‚’å—ć‘ć‚‹ć®ć§ćƒŖć‚Æć‚Øć‚¹ćƒˆć™ć‚‹ćŸć³ć«ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć«ćšć‚ŒćŒē™ŗē”Ÿć™ć‚‹ć“ćØćŒå¤šć„ć§ć™ć€‚ ćć®ćŸć‚ļ¼‘å›žć®čØˆęø¬ć§ę•°å›žę–½č”Œć™ć‚‹ć“ćØćŒäø€čˆ¬ēš„ć§ć™ć€‚ sitespeed.ioćÆčØ­å®šćƒ•ć‚”ć‚¤ćƒ«ć®ćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æć‚’å¤‰ę›“ć™ć‚‹ć“ćØć§č©¦č”Œå›žę•°ć‚’čŖæēÆ€ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ čØ­å®šćƒ•ć‚”ć‚¤ćƒ«ćÆćƒ¬ćƒć‚øćƒˆćƒŖć®ćƒ«ćƒ¼ćƒˆć«ć‚ć‚‹config.jsonćØć„ć†ćƒ•ć‚”ć‚¤ćƒ«ć§ć€iterationsćØć„ć†ćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æć‚’3ć‹ć‚‰å¤‰ę›“ć™ć‚‹ć“ćØć§ę–½č”Œå›žę•°ć‚’čŖæēÆ€ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ { " browsertime ": { " iterations ": 3 , " speedIndex ": true } , " s3 ": { " region ": " ap-northeast-1 " } , " crawler ": { " depth ": 1 } , " plugins ": { " load ": [ " analysisstorer " ] } } čØˆęø¬é–“éš”ć®čŖæę•“ čØˆęø¬ć®ćƒˆćƒŖć‚¬ćƒ¼ćÆCloudWatch Eventć§č”Œć£ć¦ć„ć¾ć™ć€‚ćć®ćŸć‚CloudWatch Eventć®čØ­å®šć‚’å¤‰ę›“ć™ć‚‹ć“ćØć§čØˆęø¬é–“éš”ć®čŖæę•“ć‚’ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ Terraformć®č©²å½“ćƒ•ć‚”ć‚¤ćƒ«ćÆ terraform/codebuild_trigger.tf 恧恙怂schedule_expression恮 cron(0 * * * ? *) ć‚’å¤‰ę›“ć™ć‚‹ć“ćØć§é–“éš”ć‚’å¤‰ę›“ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ åę˜ ć™ć‚‹ć«ćÆć‚‚ć†äø€åŗ¦ terraform apply ć‚’å®Ÿč”Œć—ć¾ć™ć€‚ ꖙ金恫恤恄恦 ęœ¬čØ˜äŗ‹ć®čØ­å®šć§å®Ÿéš›ć«ć‹ć‹ć£ć¦ć„ć‚‹ę–™é‡‘ć‚’ć”å‚č€ƒć¾ć§ć«ćŠä¼ćˆć—ć¾ć™ć€‚ ē¾åœØ4恤恮URLć®čØˆęø¬ć‚’1ę™‚é–“ęÆŽć«å®Ÿč”Œć—ć¦ć„ć¾ć™ćŒć€CodeBuildć®č©²å½“ę–™é‡‘ćÆļ¼‘ćƒ¶ęœˆć«ē“„$40ć«ćŖć‚Šć¾ć™ć€‚ ę±ŗć—ć¦å®‰ććÆćŖć„ć§ć™ćŒć€ć‚µćƒ¼ćƒć®ē®”ē†ćŒć„ć‚‰ćŖć„ćŸć‚č² č·ć‚„éšœå®³ć‚’ę°—ć«ć›ćšé‹ē”Øć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ 恕恄恔恫 WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć®å®šē‚¹č¦³ęø¬ć«ć¤ć„ć¦ćŠč©±ć—ć¾ć—ćŸć€‚ ę‰‹é–“ć‚’ć‹ć‘ćšć«ćØć‚Šć‚ćˆćšćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹čØˆęø¬ć‚’å§‹ć‚ćŸć„ćØć„ć†č¦ä»¶ć«ć‚‚ć£ć¦ć“ć„ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ćœć²ēš†ę§˜ć®WEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹åˆ†ęžć®å‚č€ƒć«ć—ć¦ć„ćŸć ć‘ćŸć‚‰ćØę€ć„ć¾ć™ć€‚ ę˜Žę—„ćÆę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®sakura (@818uuu) ćŒć€Œć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒę¤œē“¢ć‚’ć‚ˆćć™ć‚‹ćŸć‚ć«å–ć‚Šēµ„ć‚“ć ć“ćØ ć¾ćØć‚ć€ćØć„ć†ć‚æć‚¤ćƒˆćƒ«ć§ęŠ•ēØæć—ć¾ć™ļ¼ćŠę„½ć—ćæć«ļ¼ tech.dely.jp
 こんにごは。 é–‹ē™ŗéƒØć®č¾»ć§ć™ć€‚ę™®ę®µćÆćƒ‡ćƒ¼ć‚æć‚µć‚¤ć‚Øćƒ³ćƒ†ć‚£ć‚¹ćƒˆćƒ»ę©Ÿę¢°å­¦ēæ’ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć‚„ć£ć¦ć„ć¾ć™ć€‚ Ā  ęœ¬čØ˜äŗ‹ćÆdely Advent Calendar 2018恮3ę—„ē›®ć®čØ˜äŗ‹ć§ć™ć€‚ adventar.org Ā  ę˜Øę—„ļ¼‘ļ¼’ęœˆļ¼’ę—„ćÆć€å¼Šē¤¾delyć®é–‹ē™ŗéƒØćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒ¼ćƒŠćƒ¼å…¼GM å„„åŽŸć®čØ˜äŗ‹ć§ć—ćŸć€‚ この1幓でdelyćÆć€Œkurashiruć€ć®ęˆé•·ćØćØć‚‚ć«ä½“åˆ¶ć‚‚å¤§ććå¤‰åŒ–ć—ć¾ć—ćŸć€‚ćć‚“ćŖäø­ć€č‹„ććƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚Ŗćƒ¼ćƒŠćƒ¼å…¼GMćØćŖć£ćŸå½¼ć®č‹¦ę‚©ć‚„ę„ę°—č¾¼ćæćŖć©ćŒčµ¤č£øć€…ć«ē¶“ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚ ć©ć†ćžć”äø€čŖ­ćć ć•ć„ć€‚ Ā  tech.dely.jp Ā  ć•ć¦ć€ä»Šå›žćÆē‰¹å®šć®ćƒ†ćƒ¼ćƒžć«ę²æć†åæ…č¦ćÆćŖć„ćØć®ć“ćØć ć£ćŸć®ć§ć€ę©Ÿę¢°å­¦ēæ’ćØćÆé–¢äæ‚ćŖćć€ć¼ććŒę™®ę®µä½æć£ć¦ć„ć‚‹ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆOSć®č©±ć‚’ć•ć›ć¦ć‚‚ć‚‰ćŠć†ćØę€ć„ć¾ć™ć€‚ćµć¤ć†ć€ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆPCで使うOSćØć„ćˆć°ć€MacOS悄Windowsć‚’ä½æć£ć¦ć‚‹ę–¹ćŒå¤šć„ć‹ćØę€ć„ć¾ć™ćŒć€ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ę–¹ć§ć™ćØć€ćŖć‚“ć‚‰ć‹ć®Linuxćƒ‡ć‚£ć‚¹ćƒˆćƒŖćƒ“ćƒ„ćƒ¼ć‚·ćƒ§ćƒ³ć‚’ä½æć£ć¦ć„ć‚‹äŗŗć‚‚ćć‚ŒćŖć‚Šć«å¤šć„ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ļ¼Ÿć¼ćč‡Ŗčŗ«ć‚‚ćØć‚ć‚‹Linuxć‚’ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆOSとして3幓ほど使っていまして、ごょっと クセの強いOS ć§ćÆć‚ć‚‹ć®ć§ć™ćŒć€ä½æć£ć¦ć„ćć†ć”ć«ć ć‚“ć ć‚“ćØå®‰åæƒę„Ÿć‚’ę„Ÿć˜ć¦ćć‚‹é¢ē™½ć„OSćŖć®ć§ć€ć“ć®ę©Ÿä¼šć«ćœć²ć”ē“¹ä»‹ć•ć›ć¦é ‚ććŸć„ćØę€ć„ć¾ć™ć€‚ Ā  ć¼ććØNixOSćØć®å‡ŗä¼šć„ ć¼ććÆ NixOS (ęœ€ę–°ćƒćƒ¼ć‚øćƒ§ćƒ³ćÆ18.09)というOSć‚’ä½æć£ć¦ć„ć¾ć™ć€‚å¤šåˆ†ć»ćØć‚“ć©ć®ę–¹ćŒć”å­˜ć˜ćŖć„ćØę€ć„ć¾ć™(笑)ć€‚ć¼ććÆć“ć®OS悒2015å¹“ć®äø­é ƒć‹ć‚‰ä½æć„å§‹ć‚ć¦ć€ęœ€åˆć®é ƒćÆMac上のVirtualBoxć«å‰²ć‚Šå½“ć¦ć¦ä½æć£ć¦ć„ćŸć®ć§ć™ćŒć€ć‚ć‚‹ę—„ćµćØę°—ćŒć¤ć„ćŸć‚‰ć€č‡Ŗå®…ć§ä½æć£ć¦ć„ć‚‹ć»ć¼ć™ć¹ć¦ć®PCがNixOSć«ćŖć£ć¦ć—ć¾ć„ć¾ć—ćŸć€‚ć‚‚ć”ć‚ć‚“delyć§ć®é–‹ē™ŗć«ä½æć£ć¦ć„ć‚‹ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆćƒžć‚·ćƒ³ć‚‚ć“ć®NixOS恧恙怂 Ā  NixOS Linux Ā  Ā Ā  NixOS恫恤恄恦 NixOSć®ć‚µć‚¤ćƒˆć«č”ŒććØć€ć“ć®ę§˜ćŖčØ˜č¼‰ćŒć‚ć‚Šć¾ć™ć€‚ Ā  The Purely Functional Linux Distribution NixOS is a Linux distribution with a unique approach to package and configuration management. Built on top of theĀ  Nix package manager , it is completely declarative, makes upgrading systems reliable, and hasĀ  many other advantages .Ā  ć¤ć¾ć‚Šć€ ē“”ē²‹é–¢ę•°åž‹Linuxćƒ‡ć‚£ć‚¹ćƒˆćƒŖćƒ“ćƒ„ćƒ¼ć‚·ćƒ§ćƒ³ ćŖć®ćŒå£²ć‚ŠćØčØ€ć£ć¦ć„ć¾ć™ć€‚ć“ć®čŖ¬ę˜Žć«ć‚‚ć‚ć‚‹ć‚ˆć†ć«ć€NixOSはNixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®äøŠć«ę§‹ēÆ‰ć•ć‚Œć¦ć„ć¦ć€å®Œå…Øć«å®£čØ€ēš„ć«ę‰±ć†ć“ćØćŒåÆčƒ½ćØćŖć£ć¦ć„ć¾ć™ć€‚ćØć„ć†ć‚ć‘ć§ć¾ćšćÆ Nixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ ć«ć¤ć„ć¦ć”ē“¹ä»‹ć—ćŸć„ćØę€ć„ć¾ć™ć€‚ Ā  Nixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ Nix: The Purely Functional Package Manager Ā  恓恔悉恮Nixć®ć‚µć‚¤ćƒˆć«č”ŒććØć€ę¬”ć®ć‚ˆć†ć«čØ˜č¼‰ć•ć‚Œć¦ć„ć¾ć™ć€‚ Ā  The Purely Functional Package Manager Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. It provides atomic upgrades and rollbacks, side-by-side installation of multiple versions of a package, multi-user package management and easy setup of build environments. ć‚„ćÆć‚Šć€ ē“”ē²‹é–¢ę•°åž‹ なんですね。要するに、NixOSćØć„ć†ć®ćÆē“”ē²‹é–¢ę•°åž‹ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼äøŠć§å‹•ćOSć€ć ć‹ć‚‰ē“”ē²‹é–¢ę•°åž‹OSćØć„ć†ć‚ć‘ćŖć‚“ć§ć™ć€‚ć“ć®Nixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć¤ć„ć¦ćÆć€ć„ć‚ć‚†ć‚‹é€šåøøć®ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®äø€ć¤ć§ć™ć®ć§ć€apt悄yum态homebrewćŖć©ćØåŒć˜ć‚ˆć†ć«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć‚’ē®”ē†ć™ć‚‹ć®ć«ę‰±ćˆć¾ć™ć€‚ä»„äø‹ć®ć‚³ćƒžćƒ³ćƒ‰ć§macOSć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć™ć‚‹ć“ćØć‚‚åÆčƒ½ć§ć™ć€‚ Ā ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć‚³ćƒžćƒ³ćƒ‰ curl https://nixos.org/nix/install | sh Ā  Nixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆć€ nixpkgs (the Nix Packages Collection)ć«ē™»éŒ²ć•ć‚Œć¦ć„ć‚‹ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć®äø­ć‹ć‚‰ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć‚’ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć—ć¾ć™ć€‚ć‚½ćƒ¼ć‚¹ćÆgithubć§ćƒŖćƒć‚øćƒˆćƒŖē®”ē†ć•ć‚Œć¦ć„ć¦ć€ Hydra ćØć„ć†ē¶™ē¶šćƒ“ćƒ«ćƒ‰ē®”ē†ć‚·ć‚¹ćƒ†ćƒ ć§ē®”ē†ć•ć‚Œć¦ć„ć¾ć™ć€‚ Ā  github.com Ā Ā Ā  Nixの仕組み  もう少しNixć®ä»•ēµ„ćæć«ć¤ć„ć¦č¦‹ć¦ć„ććŸć„ćØę€ć„ć¾ć™ć€‚Ā  ć“ć”ć‚‰ćŒNixē ”ē©¶ć®å…ƒćØćŖć£ćŸ Eelco Dolstra恕悓恮論ꖇ恧恙 ć€‚éžåøøć«ć‚Øć‚­ć‚µć‚¤ćƒ†ć‚£ćƒ³ć‚°ćŖå†…å®¹ćØćŖć£ć¦ć„ć¾ć™ć€‚ https://grosskurth.ca/bib/2006/dolstra-thesis.pdf Ā  Ā  å…Øä½“ćØć—ć¦ćÆć“ć®ć‚ˆć†ćŖå¤–č¦³ćØćŖć£ć¦ć„ć¾ć™ć€‚ Ā  [仕組み全体の外観]Ā  Ā  [主な仕組み] ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒ¬ć‚·ćƒ”é–¢ę•°ćƒ•ć‚”ć‚¤ćƒ«ćŒäø€ę„ć«ē®”ē†ć•ć‚Œć‚‹ļ¼ˆå°Žå‡ŗć‚³ćƒ³ćƒ‘ć‚¤ćƒ«ē”Øļ¼‰ ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒ¬ć‚·ćƒ”é–¢ę•°ćÆ NixčØ€čŖž (Nix Expression Language)ć§čØ˜čæ°ć™ć‚‹ NixčØ€čŖžćÆćƒ‘ćƒƒć‚±ćƒ¼ć‚øē®”ē†ē”ØDDL NixはNixčØ€čŖžć®ć‚³ćƒ³ćƒ‘ć‚¤ćƒ©ć®å½¹å‰² ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒ¬ć‚·ćƒ”é–¢ę•°ćƒ•ć‚”ć‚¤ćƒ«ćÆ Nixć‚¹ćƒˆć‚¢ ć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć•ć‚Œć‚‹ å°Žå‡ŗć‚³ćƒ³ćƒ‘ć‚¤ćƒ« = ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒ¬ć‚·ćƒ”é–¢ę•°ć®ćƒ“ćƒ«ćƒ‰ + Nixć‚¹ćƒˆć‚¢ćøć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ« Ā  [NixčØ€čŖž] 構文例はこごら Nix Expression Language - NixOS Wiki Nixć«ćŠć‘ć‚‹ć™ć¹ć¦ć®čØ­å®šé–¢ę•°ćÆć“ć®NixčØ€čŖžć§čØ˜čæ°ć—ć¾ć™ć€‚nix repl ć‚’ä½æć£ć¦ę§‹ę–‡ć‚’č©¦ć™ć“ćØćŒć§ćć¾ć™ć€‚ nix-repl> rec{x = 1; y = 3; z = x + y;}.z = > 4 Ā  [Nixć‚¹ćƒˆć‚¢] ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćÆåæ…ćšNixć‚¹ćƒˆć‚¢ć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć•ć‚Œć‚‹ ć‚¹ćƒˆć‚¢å†…ć«åŒć˜ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć®č¤‡ę•°ćƒćƒ¼ć‚øćƒ§ćƒ³ćŒå…±å­˜ć§ćć‚‹ļ¼ˆā€»ćŖć®ć§ć€HDDć®ēµę§‹ćƒœćƒŖćƒ„ćƒ¼ćƒ ćŒę¶ˆč²»ć•ć‚Œć¾ć™ć€‚ćć‚Œć‚‰ć‚’ę•“ē†ć™ć‚‹ćŸć‚ć«GCę©Ÿčƒ½ćŒć‚ć‚Šć¾ć™ć€‚ļ¼‰ ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćÆć€ć‚¹ćƒˆć‚¢å†…ć®å°Žå‡ŗćƒćƒƒć‚·ćƒ„ļ¼ˆäø€ę„ć«ē”Ÿęˆć•ć‚ŒćŸćƒćƒƒć‚·ćƒ„ļ¼‰ć«ć‚ˆć£ć¦ē‰¹å®šć•ć‚ŒćŸćƒ•ć‚©ćƒ«ćƒ€ć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć•ć‚Œć‚‹ ć“ć®äø€ę„ćŖćƒćƒƒć‚·ćƒ„åćƒ•ć‚©ćƒ«ćƒ€ć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć®ć™ć¹ć¦ć®ćƒ‡ćƒ¼ć‚æćŒę ¼ē“ć•ć‚Œć‚‹ļ¼ˆä»„äø‹ćÆtreeć‚³ćƒžćƒ³ćƒ‰ć®ä¾‹ļ¼‰ $ readlink $(which tree) /nix/store/ zzljry2r5w14rmvg3p9lz7ym326rfcpp -tree-1.7.0/bin/tree $ tree /nix/store/ zzljry2r5w14rmvg3p9lz7ym326rfcpp -tree-1.7.0/ /nix/store/ zzljry2r5w14rmvg3p9lz7ym326rfcpp -tree-1.7.0/ ā”œā”€ā”€ bin │   └── tree └── share └── man └── man1 └── tree.1.gz Ā  [Nixćƒćƒ£ćƒ³ćƒćƒ«( nix-channel )恫恤恄恦] Nixćƒćƒ£ćƒ³ćƒćƒ«ćÆē‰¹å®šć®ę”ä»¶ć‚’ęŗ€ćŸć™nixpkgsć®ćƒćƒ¼ć‚øćƒ§ćƒ³ć‚’ęä¾›ć™ć‚‹ä»•ēµ„ćæ Hydrać§ćƒ“ćƒ«ćƒ‰ćØćƒ†ć‚¹ćƒˆćŒęˆåŠŸć—ć¦ć„ć‚‹å “åˆć«ęä¾›ć•ć‚Œć‚‹ Nixćƒćƒ£ćƒ³ćƒćƒ«ć®ēØ®é”ž å®‰å®šćƒćƒ£ćƒ³ćƒćƒ«ć€ä¾‹ nixos-18.09 äøå®‰å®šļ¼ˆé–‹ē™ŗļ¼‰: nixos-unstable ć‚µćƒ¼ćƒå‘ć‘ć€ä¾‹ nixos-18.09-small, nixos-unstable-small Nixć‚¹ćƒˆć‚¢å†…ć«ćÆNixćƒćƒ£ćƒ³ćƒćƒ«ć®ęœ€ę–°nixpkgsćŒå…„ć£ć¦ć„ć¦Nixć«åˆ©ē”Øć•ć‚Œć‚‹ Hydrać§ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćŒćƒ“ćƒ«ćƒ‰ć•ć‚Œć€č‡Ŗå‹•ēš„ć«ćƒć‚¤ćƒŠćƒŖćƒ‘ćƒƒć‚±ćƒ¼ć‚øćŒē”Ÿęˆć•ć‚Œć‚‹ļ¼ˆć“ć‚ŒćŒē‰¹å®šć®ćƒćƒ£ćƒ³ćƒćƒ«ćØć—ć¦ęä¾›ć•ć‚Œć‚‹ļ¼‰Ā  Ā  NixOSの仕組み NixOSćÆć€ć“ć®ć‚ˆć†ć«Nixćƒ‘ćƒƒć‚±ćƒ¼ć‚øćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’äø­åæƒć§ę§‹ęˆć•ć‚Œć¦ć„ć‚‹OSćŖć®ć§ć—ćŸć€‚ć¾ćØć‚ć‚‹ćØNixOSč‡Ŗä½“ćÆć“ć®ć‚ˆć†ćŖå¤–č¦³ć‚’ć—ć¦ć„ć¾ć™ć€‚ Ā  NixOS全体の外観  Ā  Ā  NixOSć‚’ä½æć†ćØä»„äø‹ć®ć‚ˆć†ćŖę©ęµć‚’å—ć‘ć‚‰ć‚Œć¾ć™ć€‚ ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‚·ć‚¹ćƒ†ćƒ ļ¼ˆå®£čØ€åž‹čØ­å®šļ¼‰ Dependency Hell ć‹ć‚‰ć®č„±å“ ćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚Æ č»½é‡ć‚³ćƒ³ćƒ†ćƒŠćƒ¼ (systemd-nspawnåˆ©ē”Ø) Dev/Opsćƒ„ćƒ¼ćƒ« (NixOps) Ā  ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‚·ć‚¹ćƒ†ćƒ ļ¼ˆå®£čØ€åž‹čØ­å®šļ¼‰ Ā  なんと言ってもNixOSćØć„ćˆć° 恓悌 ćØć„ć†ę©Ÿčƒ½ć§ć™ć€‚ ę§˜ć€…ćŖčØ­å®šć‚„ćƒ‘ćƒƒć‚±ćƒ¼ć‚øē®”ē†ć€ć‚·ć‚¹ćƒ†ćƒ ć®č‡Ŗå‹•åŒ–ćŖć©ć‚’å®£čØ€ēš„ć«ē®”ē†ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ć‚·ć‚¹ćƒ†ćƒ ćÆnixpkgså†…ć«å«ć¾ć‚Œć¦ć„ć¦NixčØ€čŖžć‚’ä½æć£ć¦čØ˜čæ°ć—ć¾ć™ć€‚ Ā  NixOSć®ćƒ”ć‚¤ćƒ³ćØćŖć‚‹ęƒ…å ±ćÆć“ć®ćƒ•ć‚”ć‚¤ćƒ«ć«å®£čØ€ēš„ć«čØ˜č¼‰ć—ć¾ć™ć€‚ Ā  /etc/nixos/configuration.nix Ā  å®£čØ€ēš„ć«čØ­å®šć—ćŸä¾‹ć‚’ć„ćć¤ć‹ē“¹ä»‹ć—ć¾ć™ć€‚Ā  ćƒ—ćƒ­ćƒ“ć‚øćƒ§ćƒ‹ćƒ³ć‚°ć®ä¾‹ environment . systemPackages = with pkgs ; [ firefox termite tmux ]; Ā systemdć®ć‚µćƒ¼ćƒ“ć‚¹ systemd . services . ircSession = { wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; serviceConfig = { Type = "forking" ; User = "username" ; ExecStart = '' ${ pkgs . tmux } /bin/tmux new-session -d -s irc -n irc ${ pkgs . irssi } /bin/irssi'' ; ExecStop = '' ${ pkgs . tmux } /bin/tmux kill-session -t irc'' ; }; }; Ā cronć®ć‚µćƒ¼ćƒ“ć‚¹ systemd . services . cron = { enable = true ; systemCronJobs = [ "30 00 * * * sh hogehoge.sh" ]; }; Ā  Dependency Hell ć‹ć‚‰ć®č„±å“ Ā  ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćÆć€ć‚¹ćƒˆć‚¢å†…ć®å°Žå‡ŗćƒćƒƒć‚·ćƒ„ć«ć‚ˆć£ć¦ē‰¹å®šć•ć‚ŒćŸćƒ•ć‚©ćƒ«ćƒ€ć«ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć•ć‚Œć‚‹ć®ć§ć€ćŸćØćˆć°ćƒćƒ¼ć‚øćƒ§ćƒ³ć®ē•°ćŖć‚‹ļ¼’ć¤ć®ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćŒäøŠę›øćć•ć‚Œć‚‹ć“ćØć‚‚ćŖćļ¼ˆåˆ„ć®ćƒćƒƒć‚·ćƒ„å€¤ćŒē”Ÿęˆć•ć‚Œć‚‹ćŸć‚ļ¼‰ć€ć¾ćŸćƒ‘ćƒƒć‚±ćƒ¼ć‚øćŒä¾å­˜ć™ć‚‹åˆ„ć®ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć«ć¤ć„ć¦ć‚‚ć“ć®å°Žå‡ŗćƒćƒƒć‚·ćƒ„ć‚’ē”Øć„ć¦ćƒ“ćƒ«ćƒ‰ć•ć‚Œć‚‹ćŸć‚ć€ē›øäŗ’ēš„ć«ä¾å­˜ć—åˆć†ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćÆå­˜åœØć—ć¾ć›ć‚“ć€‚ć§ć™ć®ć§ć€ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ę™‚ć«ęÆŽå›žć€ē’°å¢ƒä¾å­˜ć«ę€ÆćˆćŖćŒć‚‰ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć™ć‚‹ć“ćØćÆćŖććŖć‚Šć¾ć™ć€‚ļ¼ˆć“ć®ē‚¹ć«é–¢ć—ć¦ćÆDockerć‚’ä½æćˆć°å•é”ŒćÆč§£ę±ŗć™ć‚‹ćØę€ć„ć¾ć™ćŒć€NixOSäøŠć§ć‚‚DockerćÆć‚‚ć”ć‚ć‚“ä½æćˆć¾ć™ć®ć§ć€ć¼ćć®å “åˆćÆē”Øé€”ć«ć‚ˆć£ć¦é©å®œä½æć„åˆ†ć‘ć¦ć„ć¾ć™ć€‚ļ¼‰ Ā  ćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚Æ Ā  なんらかのsystemčØ­å®šć‚’é–“é•ćˆć¦ć—ć¾ć£ćŸćŸć‚ć«ć€OSćŒčµ·å‹•ć—ćŖććŖć£ć¦ć‚ŖćƒÆć‚æćØć„ć†ēµŒéØ“ć‚‚ć€NixOSć‚’ä½æćˆć°ć•ć£ćØćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚Æć§ćć‚‹ć‹ć‚‰å®‰åæƒć§ć™ć€‚Ā  ć‚³ćƒžćƒ³ćƒ‰ć§ćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚ÆåÆčƒ½ ćƒ–ćƒ¼ćƒˆē”»é¢ć§ćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚ÆåÆčƒ½ Ā  Ā GRUBē”»é¢ć§å‰ć®ćƒŖćƒ“ć‚øćƒ§ćƒ³ć‚’éøęŠžć—ć¦čµ·å‹•ć™ć‚‹ Ā  NixOSć®å†ę§‹ēÆ‰ nixos-rebuild ć‚³ćƒžćƒ³ćƒ‰ć§å¤‰ę›“ć—ćŸčØ­å®šć‚’é©åæœć™ć‚‹ $ nixos-rebuild switch čØ­å®šć‚’ćƒ“ćƒ«ćƒ‰ć®ćæć™ć‚‹å “åˆ(ć‚³ćƒ³ćƒ‘ć‚¤ćƒ«ćƒć‚§ćƒƒć‚Æ) $ nixos-rebuild build å®£čØ€ēš„ć«OSć‚’ē®”ē†ć§ćć‚‹ć®ć§ć€ configuration.nix ć‚’åˆ„ć®PCć«ć‚³ćƒ”ćƒ¼ć—ć€ć“ć®ę‰‹é †ć§é©åæœć™ć‚Œć°åŒć˜ē’°å¢ƒć‚’å†ē¾ć§ćć‚‹ Ā  NixOps Dev/Opsćƒ„ćƒ¼ćƒ« Ā  NixOS恮Dev/Opsćƒ„ćƒ¼ćƒ«ćØć—ć¦NixOpsćŒć‚ć‚Šć¾ć™ć€‚NixOSはDev/Opsć‚’å¤§å¤‰é‡č¦č¦–ć—ćŸčØ­čØˆę€ęƒ³ćØćŖć£ć¦ć„ć¦ć€NixOpsć‚’ä½æć†ć“ćØć§ć€ćƒ‡ćƒ—ćƒ­ć‚¤å…ˆć®ćƒćƒ¼ćƒ‰ć‚¦ć‚§ć‚¢ć‚„ä»®ęƒ³ćƒžć‚·ćƒ³ć«åÆ¾ć—ć¦NixOSć®ć‚»ćƒƒćƒˆć‚’å±•é–‹ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ć¾ćŸć€NixOSć®ć‚·ć‚¹ćƒ†ćƒ ę§‹ęˆē®”ē†ćÆć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆPCćØć‚·ćƒ¼ćƒ ćƒ¬ć‚¹ć«ē®”ē†ć§ćć€å®£čØ€ēš„ćŖć‚¢ćƒ—ćƒ­ćƒ¼ćƒć‚’ćƒćƒƒćƒˆćƒÆćƒ¼ć‚Æć«ć‚‚ę‹”å¼µć—ć€ć•ć‚‰ć«ćć®ćƒ—ćƒ­ćƒ“ć‚øćƒ§ćƒ‹ćƒ³ć‚°ć‚’čæ½åŠ ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ć¼ććŒę‰€ęœ‰ć—ć¦ć„ć‚‹č¤‡ę•°ć®NixOSćƒžć‚·ćƒ³ć«ć¤ć„ć¦ć‚‚NixOpsć‚’ē”Øć„ć¦čØ­å®šę§‹ęˆć‚’ćƒćƒƒćƒˆćƒÆćƒ¼ć‚Æę‹”å¼µć—ć¦ä½æē”Øć—ć¦ć„ć¾ć™ć€‚ Ā  NixOSć®äøä¾æćŖćØć“ć‚ Ā NixOSćÆćØć¦ć‚‚ä¾æåˆ©ć‹ć¤å®‰åæƒć—ć¦åˆ©ē”Øć§ćć‚‹OSćŖć®ć§ć™ćŒć€ć™ć¹ć¦ć®äŗŗć«ćØć£ć¦ćć†čØ€ćˆć‚‹ć‹ćØć„ćˆć°ćŖć‹ćŖć‹ćć‚ŒćÆé›£ć—ć„é¢ć‚‚ć‚ć‚Šć¾ć™ć€‚ ćŸćØćˆć°ć“ć‚“ćŖē‚¹ć§ć™ć€‚ ć‚Æć‚»ćŒå¼·ć„ć®ć§ę…£ć‚Œć‚‹ć¾ć§ć«ę™‚é–“ćŒć‹ć‹ć‚‹ åˆ©ē”Øć§ćć‚‹ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćŒä»–ć®ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć‚ˆć‚Šå°‘ćŖć„ć®ć§ć€ćŖć„ćƒ‘ćƒƒć‚±ćƒ¼ć‚øćÆč‡Ŗåˆ†ć§ćƒ“ćƒ«ćƒ‰ć™ć‚‹åæ…č¦ćŒć‚ć‚‹ļ¼ˆć‚‚ć®ć«ć‚ˆć£ć¦ćÆēµę§‹é›£ć—ć„ć€‚ć€‚ļ¼‰ ć”ć‚‡ć£ćØć—ćŸć“ćØć‚’č©¦ć™ć®ćŒé¢å€’ļ¼ˆćć‚“ćŖćØćć“ćDockerを使いましょう) Dockerć®ć‚µćƒ¼ćƒ“ć‚¹čµ·å‹•ć‚‚ćŸć£ćŸć®ć“ć‚Œć ć‘ć§ć™ć€‚ { virtualisation = { docker . enable = true ; }; } Ā  ēµ‚ć‚ć‚Šć« ć„ć‹ćŒć§ć—ćŸć§ć—ć‚‡ć†ć‹ļ¼Ÿ NixOSć®ē‰¹ę€§ć«ć¤ć„ć¦ć–ć£ćć‚ŠćØć”ē“¹ä»‹ć•ć›ć¦é ‚ćć¾ć—ćŸć€‚NixOSć‚’ä½æć†ć“ćØć§ć€ć„ć‚ć‚†ć‚‹ā€Dependency Hellā€ć‹ć‚‰é–‹ę”¾ć•ć‚Œć€ ä¾å­˜é–¢äæ‚ć®å®ŒēµćŒäæčØ¼ć•ć‚Œć‚‹ć“ćØć§ć€å …ē‰¢ćŖē®”ē†ć‚„å®‰å…ØćŖćƒ­ćƒ¼ćƒ«ćƒćƒƒć‚ÆćŒåÆčƒ½ćØćŖć‚Šć¾ć™ć€‚NixOS ć«ćÆä»Šå›žć”ē“¹ä»‹ć§ććŖć‹ć£ćŸę©Ÿčƒ½ćŒć¾ć ć¾ć ćŸćć•ć‚“ć‚ć‚Šć¾ć™ć®ć§ć€ć‚‚ć—ć”čˆˆå‘³ć‚’ęŒć£ć¦ć„ćŸć ć‘ćŸć‚‰ćœć²ćŠč©¦ć—é ‚ć‘ć‚‹ćØå¬‰ć—ć„ć§ć™ć€‚ Ā  äøå®šęœŸé–‹å‚¬ć§ć™ćŒMeetupやってます! www.meetup.com Ā  ä½™č«‡ć§ć™ćŒć€ä»Šå¹“ć®Nix Conference(Nixcon 2018)で、Nixć‚’ä½æć£ćŸćƒ‡ćƒ¼ć‚æćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć®čØ­å®šć«ć¤ć„ć¦ć®ć‚»ć‚·ćƒ§ćƒ³ćŒć‚ć£ć¦å€‹äŗŗēš„ć«ćØć¦ć‚‚čˆˆå‘³ę·±ć‹ć£ćŸć§ć™ć€‚ę©Ÿę¢°å­¦ēæ’ć‚„ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³åŸŗē›¤ć«ć‚‚NixOSć‚’ä½æć†ćØé¢ē™½ćć†ć§ć™ć­ć€‚ Ā  Georges Dubus - Nix for data pipeline configuration.pdf - Google ćƒ‰ćƒ©ć‚¤ćƒ– Ā  Georges Dubus - Nix for data pipeline configuration Ā  恕恦态dely Advent Calendarć®ę˜Žę—„ć®ć‚æć‚¤ćƒˆćƒ«ćÆć€ć€Žč¶…ę‰‹č»½ć«ę§‹ēÆ‰ć™ć‚‹ļ¼ć‚µćƒ¼ćƒćƒ¬ć‚¹ćŖWEBćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹å®šē‚¹č¦³ęø¬åŸŗē›¤ć€ć§ć™ć€‚ćŠę„½ć—ćæć«ļ¼Ā 
こんにごは! dely, Inc.ć§ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼å…¼é–‹ē™ŗéƒØć‚øć‚§ćƒćƒ©ćƒ«ćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ć—ć¦ć„ć‚‹å„„åŽŸ ( @okutaku0507 ) ćØć„ć„ć¾ć™ć€‚ć“ć®čØ˜äŗ‹ćÆdely Advent Calendar 2018恮2ę—„ē›®ć®ęŠ•ēØæć§ć™ć€‚ å…ˆę—„ćÆć€å¼Šē¤¾ć®Androidć‚Øćƒ³ć‚øćƒ‹ć‚¢ć§ćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’å‹¤ć‚ć¦ć„ć‚‹ę¢…ę£®ć‹ć‚‰ć€ŒAWS CodeBuild+AWS SAM(Lambda)+Slackć§ęœ€é«˜ćŖAndroid CIē’°å¢ƒć‚’ä½œć‚‹ć€ćØć„ć†ć‚æć‚¤ćƒˆćƒ«ć§ęŠ•ēØæćŒć‚ć‚Šć¾ć—ćŸć€‚ę¢…ę£®ćÆDroidKaigi 2019ć«ć‚‚ē™»å£‡ć™ć‚‹äŗˆå®šć§ć™ć€‚ tech.dely.jp å¼Šē¤¾ćŒé‹å–¶ć—ć¦ć„ć‚‹ćƒ¬ć‚·ćƒ”å‹•ē”»ć‚µćƒ¼ćƒ“ć‚¹ć® kurashiru ćÆć‚ˆćēŸ„ć£ć¦ć„ć‚‹ć‘ć©ć€é–‹ē™ŗćƒćƒ¼ćƒ ćÆä½•ć—ć¦ć„ć‚‹ć®ć‹ć‚ć‹ć‚‰ćŖć„ćØć„ć†ę–¹ć«ć€å°‘ć—ć§ć‚‚å¼Šē¤¾ć®é–‹ē™ŗéƒØć®ć“ćØć‚’ēŸ„ć£ć¦ć„ćŸć ć‘ć‚Œć°å¹øć„ć§ć™ć€‚ć‚‚ć—ć€åŒč·ēØ®ć‚„å¼Šē¤¾ć«čˆˆå‘³ć‚’ęŒć£ć¦ćć‚ŒćŸę–¹ćŒć„ć¾ć—ćŸć‚‰ć€åƒ•ć® twitter 恮DMć§ć‚‚č‰Æć„ć®ć§ć€é€£ēµ”ć—ć¦ć„ćŸć ć‘ćŸć‚‰å¬‰ć—ć„ć§ć™ć€‚ Ā  1. ćÆć˜ć‚ć« åƒ•ćÆdely, Inc.ć«å…„ē¤¾ć—ćŸ2016å¹“ć‹ć‚‰å…ƒć€…ćÆćšć£ćØć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ (Ruby on Rails) ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć—ć¦ć„ć¾ć—ćŸć€‚ćć—ć¦ć€ä»Šå¹“ (2018幓) 恮5ęœˆć”ć‚ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚Šć€ć‚“ćƒŖć‚“ćƒŖćØę–½ē­–ćŖć©ć‚’å›žć—ć¦ć„ć¾ć™ć€‚ č‰Æćć‚‚ę‚Ŗćć‚‚ć€ę€„ęˆé•·ć™ć‚‹ćƒ™ćƒ³ćƒćƒ£ćƒ¼ć§ćÆć‚ć‚‰ć‚†ć‚‹å½¹č·ćŒćć‚‚ćć‚‚å­˜åœØć—ć¦ć„ćŖć‹ć£ćŸć‚Šć€ć»ć„ć»ć„ē©ŗć„ćŸć‚Šć—ć¾ć™ć€‚å„‡ć—ćć‚‚ć€å¼Šē¤¾ć«ćÆćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØć„ć†å½¹č·ćÆå­˜åœØć—ć¦ć„ć¾ć›ć‚“ć§ć—ćŸć€‚CTOćŒćć®ę„­å‹™ć‚’ę‹…ć£ć¦ć„ćŸēŠ¶ę…‹ć§ć—ćŸć€‚ć—ć‹ć—ćŖćŒć‚‰ć€CTOćÆåŸ·č”Œå½¹å“”ć‚‚å‹¤ć‚ć¦ć„ć‚‹ć®ć§ć€ēµ„ē¹”ć®ć“ćØć‚„ęŠ€č”“ēš„ćŖč¦–ē‚¹ć‹ć‚‰ä¼šē¤¾ć®ęœŖę„ć‚’å‰µé€ ć—ćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ć€‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć®ć“ćØć‚’åøøć«č€ƒćˆć‚‹ć«ćÆć‚­ćƒ£ćƒ‘ćŒć‚Ŗćƒ¼ćƒćƒ¼ć—ć¦ć—ć¾ć„ć¾ć™ć€‚ćć®ćŸć‚ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®ē™»ē”ØćÆę€„å‹™ć§ć—ćŸć€‚ć•ć‚Œć©ć€kurashiruč¦ęØ”ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’å¤–ć‹ć‚‰ęŽ”ē”Øć™ć‚‹ć«ćÆć‹ćŖć‚Šć®ćƒćƒ¼ćƒ‰ćƒ«ćŒć‚ć‚Šć€ęŽ”ē”ØćÆęš—ē¤ć«ä¹—ć‚ŠäøŠć’ć¦ć„ć¾ć—ćŸć€‚ćć“ć§ć€åƒ•ćŒčØ€ć‚ć‚ŒćŸčØ€č‘‰ćÆć€ć€ć€ Ā  ć€ŒćŠć£ććƒ¼ć€ę˜Žę—„ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć§ļ¼ć€ Ā  ćć†ć€ć“ć‚ŒćŒåƒ•ćŒęœŖēµŒéØ“ćŖćŒć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®ćØć¦ć¤ć‚‚ćŖćé‡ć„é–€ć‚’å©ćć“ćØć«ćŖć£ćŸč»¢ę©Ÿć§ć—ćŸć€‚ćŖćœć€åƒ•ćŒćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚ć†ćØę€ć£ćŸć®ć‹ć€ä»Šå¾Œć®ć‚­ćƒ£ćƒŖć‚¢ć‚„ęˆé•·ć«é–¢ć™ć‚‹č€ƒćˆćÆå¾Œčæ°ć—ć¾ć™ć®ć§ć€ć‚‚ć—åŒć˜ć‚ˆć†ćŖć‚­ćƒ£ćƒŖć‚¢ć«ę‚©ć‚“ć§ć„ć‚‹ę–¹ćŒć„ć‚Œć°ć€å°‘ć—ć§ć‚‚å‚č€ƒć«ćŖć‚Œć°å¹øć„ć§ć™ć€‚ Ā  2. ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØćÆ ę—„ęœ¬ć§ć‚‚å½“ćŸć‚Šå‰ć«ćŖć£ćŸćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć§ć™ćŒć€ä¼šē¤¾ć€ēµ„ē¹”ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«ć„ć‚ˆć£ć¦ć€ęœ¬å½“ć«ę§˜ć€…ćŖć“ćØć‚’ć™ć‚‹å½¹č·ć§ć™ć€‚ć§ć™ćŒć€ćć®ęœ¬č³Ŗć‚’ć–ć£ćć‚Šå®šē¾©ć™ć‚‹ćØć€Œćƒ—ćƒ­ćƒ€ć‚Æćƒˆć®ęˆé•·ć«č²¬ä»»ć‚’ęŒć¤äŗŗć€ć ćØęƒ³ć£ć¦ć„ć¾ć™ć€‚ ę®‹åæµćŖć“ćØć«ęœ‰ę–™ć®čØ˜äŗ‹ć§ć™ćŒć€ć“ć®čØ˜äŗ‹ćÆć‚ć‹ć‚Šć‚„ć™ćę›øć‹ć‚Œć¦ć„ć¦ć€ćØć£ć‹ć‹ć‚Šć‚„ć™ć‹ć£ćŸć§ć™ (ć‚¹ćƒ†ćƒžć§ćÆć‚ć‚Šć¾ć›ć‚“...) 怂 newspicks.com ć“ć®čØ˜äŗ‹ć«ć‚‚ć‚ć‚‹ć‚ˆć†ć«ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćÆć€ŒćƒŸćƒ‹CEOć€ćØć—ć¦ć®č²¬å‹™ćŒć‚ć‚‹ćØę€ć£ć¦ć„ć¾ć™ć€‚ć”ć‚‡ć£ćØč”Øē¾ćŒå¼·ć„ć§ć™ćŒć€ćˆćµć—ć‚“ć•ć‚“ ( @fshin2000 ) ć®ćƒ„ć‚¤ćƒ¼ćƒˆć‚‚ę øåæƒć‚’ć¤ć„ć¦ć„ć‚‹ćØę€ć£ć¦ć„ć¾ć™ć€‚ ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ć«ćŖć‚ŠćŸć„äŗŗć€ćƒŸćƒ‹CEOćØć—ć¦ć®ęœŸå¾…ć ć‹ć‚‰åŠ“åƒę™‚é–“ćÆćƒćƒ¼ćƒ é€£ęŗć«åæ…č¦ćŖåˆ†ć‚’é™¤ććØēŸ­ć„ćØć‹ä¼šē¤¾ę„ćŖć„ćØć‹ćÆå‰²ćØć©ć†ć§ć‚‚ć‚ˆćć¦ć€ćć‚Œć‚ˆć‚Š24ę™‚é–“ć®ćƒžć‚¤ćƒ³ćƒ‰ć‚·ć‚§ć‚¢ć‚’ę§ć’ć‚‰ć‚Œć‚‹äŗŗć˜ć‚ƒćŖć„ćØå¤šåˆ†ē„”ē†ć§ć™ć€‚ćƒžć‚¤ćƒ³ćƒ‰ć‚·ć‚§ć‚¢ćÆć„ćć‚‰ē²å¾—ć—ć¦ć‚‚ćƒ–ćƒ©ćƒƒć‚ÆćØćÆčØ€ć‚ć‚ŒćŖć„ć§ć™ć­ć€‚ — ćˆćµć—ć‚“@12/1 WebSig24/7登壇! (@fshin2000) November 6, 2018 Ā ä»„äø‹ć®čØ˜äŗ‹ć®äø­ć§Yamotty恕悓 ( @yamotty3 ) ćŒćŠć£ć—ć‚ƒć‚‹ć“ćØć€ćć®ć¾ć¾ć ćØę€ć„ć¾ć™ć€‚ PMć®å½¹å‰²ć‚„åæ…č¦ćŖć‚¹ć‚­ćƒ«ćÆć€ä¼šē¤¾ć‚„ćƒćƒ¼ćƒ ć«ć‚ˆć£ć¦å…Øē„¶é•ć„ć¾ć™ć€‚10Xć§ć‚ć‚Œć°ć€åƒ•ä»„å¤–ć®ćƒ”ćƒ³ćƒćƒ¼ćÆå…Øå“”ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŖć®ć§ć€åƒ•ćÆē¤¾é•·ę„­ć«åŠ ćˆć¦PMćØć—ć¦ć€ćƒ‡ć‚¶ć‚¤ćƒ³ć‚„é”§å®¢é–‹ē™ŗć‚’å«ć‚€ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćƒŖćƒ³ć‚°ä»„å¤–ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«é–¢ć™ć‚‹å…Øć¦ć®ä»•äŗ‹ć‚’ć‚„ć‚Šć¾ć™ć€‚é€†ć«ć€ć‚ć‚‰ć‚†ć‚‹č·ēØ®ćŒęƒć£ć¦ć„ć‚‹ä¼šē¤¾ćŖć‚‰ć€PMćÆčŖæę•“åŠ›ć‚„å·»ćč¾¼ćæåŠ›ć®ć»ć†ćŒé‡č¦ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ć€‚ www.fastgrow.jp ć¾ćŸć€ä»„äø‹ć®čØ˜äŗ‹ć«ć‚ć‚‹ć‚ˆć†ć«ć€ćƒ”ćƒ«ć‚«ćƒŖć®ć‚ˆć†ć«åŒć˜ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚’č§¦ć£ć¦ć„ćŸćØć—ć¦ć‚‚äø€ć¤ć®é ˜åŸŸć‚’ć¾ć‚‹ć£ćØä»»ć›ć‚‹ćØć„ć†ć‚¹ć‚æć‚¤ćƒ«ć‚‚ć‚ć‚Šć¾ć™ć€‚ www.fastgrow.jp では、dely, Inc.ć§ćÆć©ć®ć‚ˆć†ćŖę„­å‹™ć‚’ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćŒć“ćŖć—ć¦ć„ć‚‹ć®ć‹ćØć„ć†ćØć€ć€Œä½•ć§ć‚‚å±‹ć€ćØć„ć†å½¹å‰²ćŒå¤§ćć„ć§ć™ć€‚ć–ć£ćć‚Šćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØć—ć¦åƒ•ćŒć“ćŖć—ć¦ć„ć‚‹ć“ćØć‚’ē®‡ę”ę›øćć§ę›øćć¾ć™ć€‚ ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚¤ćƒ³ć‚æćƒ“ćƒ„ćƒ¼ć‚„ćƒ‡ćƒ¼ć‚æåˆ†ęžć‚’é€šć—ć¦ć€č§£ę±ŗć™ć¹ćčŖ²é”Œć‚’ē‰¹å®šć™ć‚‹ ćƒ¦ćƒ¼ć‚¶ćƒ¼ć€ćƒ“ć‚øćƒć‚¹ć€ć‚°ćƒ­ćƒ¼ć‚¹ć€ćƒ‡ć‚¶ć‚¤ćƒ³ć®čŖ²é”Œć«åÆ¾ć—ć¦č§£ę±ŗē­–ć‚’ē™ŗę”ˆć™ć‚‹ čŖ²é”ŒćØćć‚Œć«åÆ¾ć™ć‚‹č§£ę±ŗē­–ć‚’ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«åę˜ ć•ć›ć‚‹ćŸć‚ć«é–‹ē™ŗćƒ—ćƒ­ć‚»ć‚¹ć‚’å›žć™ćƒ•ć‚”ć‚·ćƒŖćƒ†ćƒ¼ćƒˆć‚’ć™ć‚‹ ć‚«ć‚¹ć‚æćƒžćƒ¼ć‚µć‚Æć‚»ć‚¹ć‚’č”Œć† ć‚³ćƒ¼ćƒ‰ć‚’ę›øć KPIć®å ±å‘Šć‚’č”Œć† ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆćŠć˜ć•ć‚“ćØćŖć£ć¦é–‹ē™ŗä»•ę§˜ę›øć‚’ę›øć éƒØē½²é–“čŖæę•“ć‚’é€šć—ć¦å„Ŗå…ˆåŗ¦ä»˜ć‘ć‚’č”Œć† ę„ę€ę±ŗå®šć®čŖ¬ę˜Žć‚’č”Œć„ć€ćƒćƒ¼ćƒ ć‹ć‚‰ē“å¾—ć‚’å¾—ć‚‹ ć‚Øćƒ³ć‚øćƒ‹ć‚¢/ćƒ‡ć‚¶ć‚¤ćƒŠćƒ¼ć®ęŽ”ē”Øć‚’č”Œć† twitterでエんサする etc... ćć‚“ćŖć“ć‚“ćŖć‚’č”ŒćŖć£ć¦ć„ć‚‹ćØć€äø€ēž¬ć§å¤Ŗé™½ćŒę²ˆćæć¾ć™ć€‚ å‰čæ°ć—ćŸć€Yamottyć•ć‚“ć®čØ˜äŗ‹ć®å¼•ē”Øć«ć‚‚ć‚ć‚‹ć‚ˆć†ć«ć€dely, Inc.ć§ćÆäŗŗćÆå…Øćč¶³ć‚Šć¦ć¾ć›ć‚“ćŒć€ć‚ć‚‰ć‚†ć‚‹č·ēØ®ćŒęœ€ä½Žäø€äŗŗćÆęƒć£ć¦ć„ć¦ć€éƒØē½²ćŒå­˜åœØć—ć¾ć™ć€‚10äŗŗć‚‚ęŗ€ćŸćŖć„ēµ„ē¹”ć§ć€äø€äŗŗäø€äŗŗćŒå…Øć¦ć®é ˜åŸŸć®ē“°éƒØć¾ć§ęŠŠę”ć—ć¦ę„ę€ę±ŗå®šć—ć¦č”Œå‹•ć—ć¦ć„ćåƒćØćÆć€ē¾å®Ÿēš„ć«ćÆē•°ćŖć£ć¦ć„ć¾ć™ć€‚ćć®ćŸć‚ć€é™ć‚‰ć‚ŒćŸé–‹ē™ŗćƒŖć‚½ćƒ¼ć‚¹ć®äø­ć€éƒØē½²é–“ć®čŖæę•“ć‚’č”Œć„ć€éƒØē½²ęØŖę–­ēš„ćŖč¦–ē‚¹ć‚’ęŒć£ć¦ć€ä»Šä¼šē¤¾ć«ćØć£ć¦ä½•ć‚’ć™ć¹ćć‹ć‚’č€ƒćˆć¦å„Ŗå…ˆåŗ¦ć‚’ę±ŗå®šć—ć€ä»²é–“ć®ē“å¾—ć‚’å¾—ć¦ćƒćƒ¼ćƒ ć‚’ćƒ‰ćƒ©ć‚¤ćƒ–ć•ć›ć¦ć„ćåŠ›ćŒę±‚ć‚ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚ åƒ•ćÆå…ƒć€…ćÆć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć§ć‚ć‚‹ćŸć‚ć€ē¾ę™‚ē‚¹ć§ćÆć‚Øćƒ³ć‚øćƒ‹ć‚¢ćƒŖćƒ³ć‚°ć®é ˜åŸŸć«å¼·ćæć‚’ęŒć£ć¦ć„ć¾ć™ć€‚ćć®ćŸć‚ć€ē›“čæ‘ć§č”ŒćŖć£ć¦ć„ć‚‹åƒ•ć®ä»•äŗ‹ćØć—ć¦ćÆć€äøē¢ŗå®Ÿę€§ć«å‘ćåˆć†ēµ„ē¹”ć‚’å‰µć‚ŠäøŠć’ć¦ć€ćƒŖćƒ¼ćƒ³ćŖćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗćƒ•ćƒ­ćƒ¼ć‚’ē¢ŗē«‹ć—ć¦ć„ćć“ćØćŒęŒ™ć’ć‚‰ć‚Œć¾ć™ć€‚ ćƒŖćƒ¼ćƒ³ćŖćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć«ć¤ć„ć¦ć€ćƒ”ćƒ«ćƒšć‚¤ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ć•ć‚Œć¦ć„ć‚‹å·å¶‹ć•ć‚“ ( @tsumujikaze ) ćŒę›øć‹ć‚ŒćŸnotećŒćØć¦ć‚‚å‚č€ƒć«ćŖć‚Šć¾ć™ć€‚ note.mu ä»Šć§ćÆć€ć“ć®ćƒŖćƒ¼ćƒ³ćŖćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć‚‚č»Œé“ć«ć®ć£ć¦ćć¦äøē¢ŗå®Ÿę€§ć«å‘ćåˆć†å¼·ć„ćƒćƒ¼ćƒ ć«ćŖć£ćŸćØę€ć£ć¦ć„ć¾ć™ć€‚ć“ć®ćƒŖćƒ¼ćƒ³ćŖćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć‚’ć©ć®ć‚ˆć†ć«å¼Šē¤¾ć§å®Ÿč·µć—ć¦ć„ć‚‹ć®ć‹ć‚’ AWS Dev Day 2018 ć§ē™»å£‡ć•ć›ć¦ć„ćŸć ćę©Ÿä¼šć«ęµć¾ć‚ŒćŸć®ć§ć€ćć®ę™‚ć®č³‡ę–™ć‚’ęŽ²č¼‰ć—ć¦ćŠćć¾ć™ć€‚ speakerdeck.com Ā  3. ć€Œę˜Žę—„ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć€ćØčØ€ć‚ć‚ŒćŸć‚‰ ć“ć“ć¾ć§ćć¦ęœ¬é”Œć«ć¤ć„ć¦ę›øććŸć„ćØę€ć„ć¾ć™ć€‚ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‹ć‚‰ēµŒéØ“ć‚‚ć—ćŸć“ćØćŖć„ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć£ćŸåƒ•ć®ć‚±ćƒ¼ć‚¹ć§ć™ć®ć§ć€ćƒ„ćƒƒć‚³ćƒŸć©ć“ć‚ęŗ€č¼‰ć‹ćØę€ć„ć¾ć™ćŒć€ćć“ć‚‰ćøć‚“ćÆć”å®¹čµ¦ć—ć¦ć„ćŸć ć‘ć‚Œć°å¹øć„ć§ć™ć€‚ ēµ„ē¹”ę–‡åŒ–ć«ć‚‚ć‚ˆć‚Šć¾ć™ćŒć€dely, Inc.ć§ćÆę§˜ć€…ćŖå½¹č·ć‚’ć½ćƒ¼ć‚“ć£ćØä»»ć›ć‚‹ć“ćØćŒć‚ˆćć‚ć‚Šć¾ć™ć€‚åƒ•ćŒä»»ć•ć‚ŒćŸćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚‚ćć‚“ćŖę„Ÿć˜ć§ęø”ć£ć¦ćć¾ć—ćŸć€‚ćć—ć¦ć€Ā å‰čæ°ć—ć¾ć—ćŸćŒć€å¼Šē¤¾ć«ćÆćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćŒć„ć¾ć›ć‚“ć§ć—ćŸć®ć§ć€å®Ÿč³Ŗēš„ć«å¼•ćē¶™ćŽćŖć©ćÆć‚ć‚Šć¾ć›ć‚“ć§ć—ćŸć€‚ 3.1 形から兄る ćć®ćŸć‚ć€åƒ•ćŒć¾ćšē€ę‰‹ć—ćŸć®ćÆć€Œćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØćÆļ¼Ÿć€ć‚’čŖæęŸ»ć—ć€č‡Ŗåˆ†ć®äø­ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼åƒć‚’ē¢ŗē«‹ć•ć›ć‚‹ć“ćØć§ć—ćŸć€‚ ć¾ćšćÆć€ć‚°ć‚°ć‚Šć¾ćć‚Šć¾ć—ćŸć€‚ć€Œćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ ćØćÆć€ćØć€‚ćć—ć¦ć€ę§˜ć€…ćŖčØ˜äŗ‹ć‚„å…ˆé§†č€…ć®čØ€å‹•ć‚’č¦‹ć¦ć„ćäø­ć§ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆē·ē§°ć§ć‚ć‚Šć€ä»Šć§ćÆå½“ćŸć‚Šå‰ć ćØę€ć£ć¦ć„ć¾ć™ćŒć€ę§˜ć€…ćŖå½¢ę…‹ćŒć‚ć‚‹ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸć€‚ć¤ć¾ć‚Šć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØćÆć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć®ęˆåŠŸć«č²¬ä»»ć‚’ęŒć”ć€ćŖć‚“ć§ć‚‚ć‚„ć‚‹å½¹č·ć ćØć„ć†ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸć€‚ćŖć®ć§ć€å¼Šē¤¾ć®kurashirućØć„ć†ć‚µćƒ¼ćƒ“ć‚¹ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆč‡Ŗåˆ†ć§å½¢ęˆć—ć¦ć„ćć—ć‹ćŖć‹ć£ćŸć®ć§ć™ć€‚čŖ°ć‚‚ę­£č§£ć‚’ę•™ćˆć¦ćÆćć‚Œć¾ć›ć‚“ć€‚ć€Œć•ć¦ć€å›°ć£ćŸćžć€‚ä½•ć‚’ć™ć‚Œć°ć„ć„ć‚“ć ć€‚ć€ćØć„ć†ēŠ¶ę…‹ć§ć—ćŸć€‚ 3.2 敓理する ä½•ć‚’ć™ć‚Œć°ć„ć„ć®ć‹ć‚ć‹ć‚‰ćŖć„ćØć„ć†ćØć„ć†ć‚«ć‚Ŗć‚¹ćŖēŠ¶ę…‹ć ć£ćŸć®ć§ć€ć¾ćšćÆę•“ē†ćŒåæ…č¦ć ćØę€ć„ć¾ć—ćŸć€‚å…·ä½“ēš„ć«ćÆć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć«ē›“ęŽ„ēš„ć«é–¢ć‚ć£ć¦ć„ć‚‹éƒØē½²ć€å¼Šē¤¾ć§ć„ć†ćØć‚æć‚¤ć‚¢ćƒƒćƒ—åŗƒå‘Šäŗ‹ę„­éƒØć€ćƒžćƒ¼ć‚±ćƒ†ć‚£ćƒ³ć‚°éƒØć€ćƒ–ćƒ©ćƒ³ćƒ‰éƒØ (ćƒ–ćƒ©ćƒ³ćƒ‰é†øęˆć«é–¢ć‚ć‚Šć€äø»ć«ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć®åˆ¶ä½œć‚’č”ŒćŖć£ć¦ć„ć‚‹)ć€ćć—ć¦é–‹ē™ŗéƒØćØć—ć¦ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«å¤‰ę›“ć‚’åŠ ćˆć‚‹ę–½ē­–ćØć—ć¦ä½•ć‚’č€ƒćˆć¦ć„ć‚‹ć®ć‹ć€ćƒ’ć‚¢ćƒŖćƒ³ć‚°ć™ć‚‹ć“ćØć‹ć‚‰å§‹ć‚ć¾ć—ćŸć€‚ å…ƒć€…ć€ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć—ć¦ę§˜ć€…ćŖćƒ‡ćƒ¼ć‚æć‚’ę‰±ć£ć¦ć„ćŸć‚Šć€ē®”ē†ć‚µć‚¤ćƒˆć®ę§‹ēÆ‰ćŖć©ć‚’é€šć—ć¦ä»–éƒØē½²ćØć®ć‚³ćƒŸćƒ„ćƒ‹ć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćŒć‚ć£ćŸć®ć§ć€éƒØē½²é–“ć§ć©ć®ć‚ˆć†ćŖę–½ē­–ć‚’č€ƒćˆć¦ć„ć‚‹ć®ć‹ćÆč‚Œę„ŸćÆć‚ć‚Šć¾ć—ćŸćŒć€ć•ć‚‰ć«å…·ä½“ēš„ć«čžćć“ćØć§ć€å·„ę•°č¦‹ē©ć‚‚ć‚Šć‚„ćć‚Œćžć‚Œć®éƒØē½²ć§ć®ćƒ—ćƒ©ć‚¤ć‚ŖćƒŖćƒ†ć‚£ć®é«˜ć•ćŖć©ć‚’čžćć“ćØć§ć€ę–½ē­–ć®č§£åƒåŗ¦ć‚’é«˜ć‚ć¦ć„ćć¾ć—ćŸć€‚ 3.3 å„Ŗå…ˆåŗ¦ć‚’ę±ŗć‚ć‚‹ å…Øć¦ć®éƒØē½²ćŒäø€ć¤ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚’č‰Æćć—ć‚ˆć†ćØå‹•ć„ć¦ć„ćŸćØć—ć¦ć‚‚ć€åŸŗęœ¬ēš„ć«ćÆé–‹ē™ŗćƒŖć‚½ćƒ¼ć‚¹ćÆäø€ć¤ć§ć€ć»ćØć‚“ć©ć®å “åˆćć‚Œć‚‚ćƒ‘ćƒ„ćƒ‘ćƒ„ć ćØę€ć„ć¾ć™ć€‚ćć®äø­ć§ć€ä½•ć‚’ć™ć¹ćć‹ć‚’č€ƒćˆć‚‹ć“ćØćÆå®¹ę˜“ć§ćÆćŖć„ć—ć€ćć®ę„ę€ę±ŗå®šćÆćć®ę™‚ć®ę°—åˆ†ć«å·¦å³ć•ć‚Œć‚‹ć“ćØćŖćć€å†ē¾ę€§ćŒćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ć€‚ ćć®ćŸć‚ć«ć€åŸ·č”Œå½¹å“”ć§CTOである大竹 ( @EntreGulss ) 恫Bizć‚µć‚¤ćƒ‰ć®č«øć€…ć‚’ć‚³ćƒ¼ćƒćƒ³ć‚°ć—ć¦ć‚‚ć‚‰ć†ę™‚é–“ć‚’čØ­ć‘ć¦ć‚‚ć‚‰ć„ć¾ć—ćŸć€‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć®č”Œćęœ«ć‚’å·¦å³ć™ć‚‹ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćÆä¼šē¤¾ć®ć»ć¼å…Øć¦ć®ęƒ…å ±ć‚’é ­ć«ć‚¤ćƒ³ćƒ—ćƒƒćƒˆć—ć¦ćŠćåæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ćć®ćŸć‚ć€ēµŒå–¶å±¤ć®č€ƒćˆć‚’čžćć“ćØćÆäøåÆę¬ ć§ć—ćŸć€‚ å„éƒØē½²ć®č²¬ä»»č€…ć§ć‚ć‚‹ć‚øć‚§ćƒćƒ©ćƒ«ćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆéƒØē½²é–“ć§ęƒ…å ±ć‚’å…±ęœ‰ć§ćć¦ć„ćŸćØć—ć¦ć‚‚ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«å¤‰ę›“ć‚’åŠ ćˆć‚‹åæ…č¦ćŒć‚ć‚‹å„éƒØē½²ć®å¤§å°ć‚ć‚‹ę–½ē­–ć®å…Øć¦é ­ć«å…„ć‚Œć¦ćŠćć“ćØćÆé›£ć—ć„ćØę€ć„ć¾ć™ć€‚ćć®ćŸć‚ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆå…Øć¦ć®ęƒ…å ±ć‚’č‡Ŗåˆ†ć«é›†ē©ć—ć€ä»Šä¼šē¤¾ć«ćØć£ć¦č§£ę±ŗć—ćŖć‘ć‚Œć°ćŖć‚‰ćŖć„čŖ²é”ŒćÆä½•ć‹ć‚’ę±ŗå®šć—ćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ć€‚å„éƒØē½²ć§å„Ŗå…ˆåŗ¦ćŒé«˜ć„ę–½ē­–ć§ć‚ć£ć¦ć‚‚ć€ćć‚ŒćŒćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«ć™ćć«åę˜ ć§ćć‚‹ćØćÆé™ć‚Šć¾ć›ć‚“ć€‚ćć®å„Ŗå…ˆåŗ¦ć‚’ę±ŗć‚ćŸčƒŒę™Æć‚’ćƒ­ć‚øć‚«ćƒ«ć«čŖ¬ę˜Žć™ć‚‹č²¬ä»»ć‚‚åŒę™‚ć«ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćŒč² ć£ć¦ć„ć‚‹ć‚ć‘ć§ć™ć€‚ 3.4 å®Ÿč”Œć™ć‚‹ ćŖćœć€ä»Šćć®ę–½ē­–ć‚’ć™ć‚‹ć®ć‹ć€‚ę–½ē­–ć®whyć‚’é–‹ē™ŗć«é–¢ć‚ć‚‹å…Øć¦ć®äŗŗćŒēŸ„ć£ć¦ć„ć‚‹ć“ćØćÆćØć¦ć‚‚é‡č¦ć§ć™ć€‚ē“å¾—ę„Ÿć‚’ęŒć£ć¦é–‹ē™ŗć§ćć‚‹ć‹ćŒę–½ē­–ć®č‰Æć—ę‚Ŗć—ć‚’å·¦å³ć™ć‚‹ć“ćØć‚‚ć‚ć‚‹ćØč€ƒćˆć¦ć„ć¾ć™ć€‚ćć®č²¬ä»»ć‚‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćÆć‚ć‚Šć¾ć™ć€‚ćć®ćŸć‚ć«ćÆć€ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒ†ćƒ¼ć‚·ćƒ§ćƒ³čƒ½åŠ›ćŒäøåÆę¬ ć§ć™ć€‚åƒ•ćÆć€ć“ć“ć§č‡Ŗåˆ†ć®ę„ę€ę±ŗå®šć‚’čØ€čŖžåŒ–ć™ć‚‹ć“ćØć«ćØć¦ć‚‚č‹¦ęˆ¦ć—ć¾ć—ćŸć€‚ć‚ć‚‰ć‚†ć‚‹ć“ćØć‚’ē·åˆć—ć¦č€ƒćˆć¦ę„ę€ę±ŗå®šć‚’č”ŒćŖć£ć¦ć„ć‚‹ć®ć§ć€ćć‚Œć‚‰ć‚’é †åŗē«‹ć¦ć¦ć€å…Øć¦ć®äŗŗć«ē†č§£ć—ć¦ć‚‚ć‚‰ćˆć‚‹ē²’åŗ¦ć§čØ€č‘‰ć«č½ćØć™ć“ćØćÆćØć¦ć‚‚é›£ć—ć„ć§ć™ć€‚ćć®ćŸć‚ć€č‡Ŗåˆ†ć®ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆć§ē“å¾—ć—ć¦ć„ćŖć•ćć†ćŖćƒ”ćƒ³ćƒćƒ¼ćŒå…„ć‚Œć°åø­ć¾ć§č”Œć£ć¦ć€ē“å¾—ć—ć¦ć‚‚ć‚‰ćˆć‚‹ć¾ć§č­°č«–ć™ć‚‹ć“ćØć‚‚ć‚ć‚Šć¾ć—ćŸć€‚ ćć—ć¦ć€å®Ÿéš›ć®é–‹ē™ŗć§ćÆä»Šć¾ć§å®Ÿč£…ę®µéšŽć§ćÆć‚¢ć‚øćƒ£ć‚¤ćƒ«ć‚’å–ć‚Šå…„ć‚Œć¦ć„ćŸć‚‚ć®ć®ć€č¦ä»¶å®šē¾©ć‚’ć‚¦ć‚©ćƒ¼ć‚æćƒ¼ćƒ•ć‚©ćƒ¼ćƒ«ć§č”ŒćŖć£ć¦ć„ćŸćŒćŸć‚ć«ć€čŖ²é”ŒćÆć‚ć£ć¦ć„ć¦ć‚‚č§£ę±ŗē­–ćŒé–“é•ć£ć¦ć„ć‚‹ćØć„ć†ć“ćØćŒåŗ¦ć€…ć‚ć‚Šć€ćć‚ŒćŒé–‹ē™ŗć§ć®čŖ²é”ŒćØćŖć£ć¦ć„ć¾ć—ćŸć€‚č¦ä»¶å®šē¾©ć‚‚ć‚¢ć‚øćƒ£ć‚¤ćƒ«ć§č”ŒćŠć†ćØć„ć†ć€å‰čæ°ć—ćŸćƒŖćƒ¼ćƒ³ćŖé–‹ē™ŗćƒ—ćƒ­ć‚»ć‚¹ć®å®šē€ć«ćƒ”ćƒ³ćƒćƒ¼ćØćØć‚‚ć«ę³ØåŠ›ć—ć¾ć—ćŸć€‚č¦ä»¶å®šē¾©ćƒ•ć‚§ćƒ¼ć‚ŗć§ćÆć€ęœ€åˆćÆē“°éƒØć¾ć§ä»‹å…„ć—ć¦ć€ćć‚Œć‚‰ćŒäøŠę‰‹ćå›žć‚‹ć‚ˆć†ć«ćƒ•ćƒ­ćƒ¼ć®ę”¹å–„ć‚’č”ŒćŖć£ćŸć‚Šć—ć¦ć„ć¾ć—ćŸć€‚ ćć—ć¦ć€éƒØē½²é–“ć§å®Ÿč”Œć™ć‚‹ę–½ē­–ć‚„å…Øē¤¾č¦ęØ”ć§ę³ØåŠ›ć™ć‚‹ę©Ÿčƒ½ć«ć¤ć„ć¦ćÆć€ć‚¹ć‚±ć‚øćƒ„ćƒ¼ćƒ«ć‚’åøøć«ę›“ę–°ć€åÆč¦–åŒ–ć—ć€ć‚¹ćƒ†ćƒ¼ć‚Æćƒ›ćƒ«ćƒ€ćƒ¼ć«ćÆé€šēŸ„ć™ć‚‹ćŖć©ć‚’č”Œć„ć€éƒØē½²é–“ć®ę‘©ę“¦ć‚„é–“é•ć£ćŸć‚‚ć®ć‚’ä½œć£ć¦ć—ć¾ć†ć‚ˆć†ćŖćƒŖć‚¹ć‚Æć‚’ęø›ć‚‰ć™ć“ćØć‚‚č”Œć„ć¾ć—ćŸć€‚ 3.5 ćƒ—ćƒ¬ć‚¤ćƒ¤ćƒ¼ć‹ć‚‰é›¢ć‚Œć‚‹ č‡Ŗåˆ†ćŒćƒ—ćƒ¬ć‚¤ćƒ¤ćƒ¼ć‹ć‚‰é›¢ć‚Œć‚‹ć€ć“ć‚ŒćŒäø€ē•Ŗé›£ć—ć‹ć£ćŸć“ćØć§ć™ć€‚ęœ€čæ‘ć§ćÆę–°å’ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ä»»ć›ć‚‹ć‚±ćƒ¼ć‚¹ć‚„ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćŒäø€čˆ¬åŒ–ć—ćŸć“ćØć§č»¢č·ć™ć‚‹ć‚±ćƒ¼ć‚¹ć‚‚ć‚ć‚‹ćØę€ć„ć¾ć™ć€‚ć—ć‹ć—ćŖćŒć‚‰ć€å†…éƒØć‹ć‚‰ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚ć‚‹ć„ćÆćƒ‡ć‚¶ć‚¤ćƒŠćƒ¼ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚‹ć‚±ćƒ¼ć‚¹ćŒå¤šć„ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ćć®ę™‚ć«ć€ć—ć£ć‹ć‚ŠćØč‡Ŗåˆ†ć®ćƒ—ćƒ¬ć‚¤ćƒ¤ćƒ¼ćØć—ć¦ć®ę„­å‹™ć‚’å¼•ćē¶™ćę™‚é–“ćŒć‚ć‚Œć°č‰Æć„ć®ć§ć™ćŒć€å¼Šē¤¾ć®ć‚ˆć†ć«ć„ććŖć‚Šćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ä»»ć•ć‚Œć‚‹ć‚±ćƒ¼ć‚¹ć§ćÆć€ćć†ćÆć„ćć¾ć›ć‚“ć§ć—ćŸć€‚ åƒ•ć®å “åˆćÆć€ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ć‚’ę›øććŖćŒć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØć—ć¦ć®ę„­å‹™ć‚’é‚č”Œć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚č‡Ŗåˆ†ćŒć‚³ćƒ¼ćƒ‰ć‚’ę›øćć“ćØćŒå„½ćć§ć€é–‹ē™ŗćƒŖć‚½ćƒ¼ć‚¹ćŒćƒ‘ćƒ„ćƒ‘ćƒ„äø”ć¤ć‚„ć‚ŠćŸć„ć“ćØćŒćŸćć•ć‚“ć‚ć‚‹äø­ć§ć¤ć„ć¤ć„č‡Ŗåˆ†ć‚’ęˆ¦åŠ›ćØć—ć¦ć‚«ć‚¦ćƒ³ćƒˆć—ć¦ć€ę§˜ć€…ćŖć“ćØć‚’ć“ćŖć—ć¦ć—ć¾ć„ćŒć”ć§ć—ćŸć€‚ć—ć‹ć—ćć‚Œć§ćÆć©ć£ć”ć¤ć‹ćšć«ćŖć£ć¦ć—ć¾ć„ć€č‡Ŗåˆ†ć‚‚ć‚­ćƒ£ćƒ‘ć‚Ŗćƒ¼ćƒćƒ¼ć«ćŖć‚Šć‹ć‘ć¦ć„ć¾ć—ćŸć€‚åæƒć‚’é¬¼ć«ć—ć¦ć€č‡Ŗåˆ†ćŒćƒ—ćƒ¬ć‚¤ćƒ¤ćƒ¼ć‹ć‚‰é›¢ć‚Œć‚‹ę±ŗę–­ć‚’ć—ćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ć§ć—ćŸć€‚å¹øć„ćŖć“ćØć«ć€å¼Šē¤¾ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ćƒćƒ¼ćƒ ćÆå°‘ę•°ćŖćŒć‚‰ē²¾é‹­ćŒé›†ć¾ć£ć¦ćŠć‚Šć€å¾ć€…ć«č‡Ŗåˆ†ćŒę‹…å½“ć™ć‚‹ć‚æć‚¹ć‚Æć‚’ęø›ć‚‰ć—ć¦ć„ćć“ćØć§ć€ćƒ•ć‚§ćƒ¼ćƒ‰ć‚¢ć‚¦ćƒˆć™ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ Ā  4. ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćØć—ć¦å¤§åˆ‡ćŖć“ćØ åŠå¹“é–“ćØć„ć†ēŸ­ć„ęœŸé–“ćŖćŒć‚‰ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ēµŒéØ“ć—ć¦ć„ć¦ć€å¤§åˆ‡ć ćØę€ć£ćŸč€ƒćˆć‚’ćŠä¼ćˆć—ćŸć„ćØę€ć„ć¾ć™ć€‚ 4.1Ā åŸ·ē€ć—ć€č«¦ć‚ćŖć„ å‰čæ°ć—ćŸć€ćˆćµć—ć‚“ć•ć‚“ć®ćƒ„ć‚¤ćƒ¼ćƒˆć«ć‚‚ć‚ć‚‹ć‚ˆć†ć«ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćÆ24ę™‚é–“ć®ćƒžć‚¤ćƒ³ćƒ‰ć‚·ć‚§ć‚¢ć‚’ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«č²»ć‚„ć™ć“ćØćŒć§ćć‚‹ć‹ćŒč³‡č³ŖćŖć®ć§ćÆćØę€ć„ć¾ć™ć€‚č²»ć‚„ć™ćØć„ć†č”Øē¾ć‚‚é©åˆ‡ć§ćÆćŖćć¦ć€ę°—ćŒć¤ć„ćŸć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć®ć“ćØć‚’č€ƒćˆć¦ć„ćŸćć‚‰ć„ćŒć”ć‚‡ć†ć©ć„ć„ćØę€ć„ć¾ć™ć€‚č‡Ŗåˆ†ć§ć‚µćƒ¼ćƒ“ć‚¹ć‚’ē«‹ć”äøŠć’ćŸć“ćØćŒć‚ć‚‹äŗŗćŖć‚‰ę€ć„å½“ćŸć‚‹ēÆ€ćŒć‚ć‚‹ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ę°—ćŒć¤ć‘ć°ć€č‡Ŗåˆ†ć®ć‚µćƒ¼ćƒ“ć‚¹ć‚’ä½æć£ć¦ć‚‚ć‚‰ć†ć«ćÆć©ć†ć™ć‚Œć°ć„ć„ć®ć‹ć‚’č€ƒćˆć¦ć„ćŸćØć„ć†ć“ćØćŒć‚ć‚‹ćÆćšć§ć™ć€‚ ćć—ć¦ć€ćƒ—ćƒ­ćƒ€ć‚ÆćƒˆćÆé †čŖæćŖę™‚ć°ć‹ć‚Šć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚é•·ćč‹¦ć—ć„ę™‚ęœŸć«å·®ć—ęŽ›ć‹ć‚‹ę™‚ć‚‚ć‚ć‚Šć¾ć™ć€‚č‹¦ć—ć„ę™‚ć§ć‚‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«åÆ„ć‚Šę·»ć„ć€ę›“ćŖć‚‹ęˆé•·ćŒć§ćć‚‹ć“ćØć‚’č«¦ć‚ćŖć„ć€‚é ­ćŒć”ćŽć‚Œć‚‹ć¾ć§č€ƒćˆć‚‹ć€‚ę™‚ć«ćÆč‡Ŗåˆ†ć‚‚ę³„č‡­ć„ć“ćØć‚’ć™ć‚‹ć€‚ćć‚“ćŖč«¦ć‚ć®ę‚Ŗć•ć‚‚åæ…č¦ć ćØę€ć£ć¦ć„ć¾ć™ć€‚ 4.2 č‡Ŗåˆ†ć®ęž ēµ„ćæć ć‘ć§č€ƒćˆćŖć„ ć¤ć„č‡Ŗåˆ†ć®ęž ēµ„ćæć§č€ƒćˆć¦ć—ć¾ć†ć“ćØćŒć‚ć‚Šć¾ć™ć€‚ä¾‹ćˆć°ć€ć©ć†ć‚„ć‚Œć°DAUć‚’ć‚ć’ć‚‹ć“ćØćŒć§ćć‚‹ć‹ćØć„ć†čŖ²é”Œć«åÆ¾ć—ć¦ć€é–‹ē™ŗå“ć§č€ƒćˆćŸć‚‰ć€ćƒŖćƒ†ćƒ³ć‚·ćƒ§ćƒ³ć‚’äøŠć’ć‚‹ćŸć‚ć®ę–½ē­–ć‚’č€ƒćˆć¦ć—ć¾ć„ćŒć”ć§ć™ć€‚ćć‚Œč‡Ŗä½“ćÆé–“é•ć„ć§ćÆćŖć„ć®ć§ć™ćŒć€ćć®ē­”ćˆćÆćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć®å¤–ć«ć‚ć‚‹ć‹ć‚‚ēŸ„ć‚Œć¾ć›ć‚“ć€‚ć‚‚ć—ć‹ć—ćŸć‚‰ć€ćƒŖć‚¢ćƒ«ć‚¤ćƒ™ćƒ³ćƒˆć‚’é–‹å‚¬ć—ćŸć‚‰ę€ć‚ć¬ē››ę³ć¶ć‚Šć§ć€SNSć§ćƒć‚¤ćƒ©ćƒ«ć—ć¾ćć‚ŠēµęžœćØć—ć¦ć€č‡Ŗåˆ†ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚’ć‚°ćƒ­ćƒ¼ć‚¹ć•ć›ć‚‹ć“ćØćŒć§ćć‚‹ć‹ć‚‚ēŸ„ć‚Œć¾ć›ć‚“ć€‚ć¤ć¾ć‚Šć€DAUć‚’äøŠć’ć‚‹ćŸć‚ć«ćÆćƒ—ćƒ­ćƒ€ć‚Æćƒˆå¤‰ę›“ćÆć„ć‚‰ćšć«ć€ćƒžćƒ¼ć‚±ć®ę–½ē­–ć§č§£ę±ŗć§ćć‚‹ć‹ć‚‚ēŸ„ć‚Œć¾ć›ć‚“ć€‚ćć†ćŖć‚‹ćØć€ćƒžćƒ¼ć‚±ćƒ†ć‚£ćƒ³ć‚°ēš„ćŖč¦–ē‚¹ćŖć©č‡Ŗåˆ†ć®ęž ēµ„ćæć®å¤–ć§č€ƒćˆć‚‹ć“ćØć‚‚åæ…č¦ć«ćŖć‚‹ć‚ć‘ć§ć™ć€‚ ćć®ćŸć‚ć«ćÆć€åøøć«ē¤¾å†…å¤–ć§ć‚¢ćƒ³ćƒ†ćƒŠć‚’é«˜ćč²¼ć‚Šć€ę§˜ć€…ćŖć‚µćƒ¼ćƒ“ć‚¹ć®ę–½ē­–ć‚’ćæć¦č‡Ŗåˆ†ćŸć”ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«ćƒ­ćƒ¼ć‚«ćƒ©ć‚¤ć‚ŗć•ć›ć‚‹ćØć©ć†ćŖć‚‹ć‹ć‚’č€ƒćˆć¦ćŠćåæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ćµćØć—ćŸēž¬é–“ć«č‡Ŗåˆ†ć®é ­ć®äø­ć«äø€ć¤äø€ć¤ć®ćƒ”ćƒ¼ć‚¹ćŒć“ć£ćŸć‚ŠćØē¹‹ćŒć‚‹ć“ćØć‚‚ć‚ć‚‹ć®ć§ć™ć€‚ 4.3Ā é€†ē®—ę€č€ƒ ćć‚ŒćÆć”ć‚ƒć‚“ćØē›®ęØ™ć‹ć‚‰é€†ē®—ć—ć¦č€ƒćˆć¦ć„ć‚‹ć®ć‹ć€ćØč‡Ŗåˆ†ć«åøøć«å•ć†ć“ćØćÆå¤§åˆ‡ć§ć™ć€‚ć‚¹ćƒžćƒ¼ćƒˆćƒ‹ćƒ„ćƒ¼ć‚¹ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ ć‚’ć•ć‚Œć¦ć„ć‚‹å‰ē”°ć•ć‚“ć®čØ˜äŗ‹ć‹ć‚‰å¼•ē”Øć—ć¾ć™ć€‚ ć¾ćŸć€å¤§ććŖć‚øćƒ£ćƒ³ćƒ—ć‚’ē”Ÿć‚€ćŸć‚ć«ć€ē›®ęØ™ćÆé€†ē®—ć§čØ­å®šć—ć¦ć„ć¾ć™ć€‚ 怌1å¹“å¾Œć«ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚ćŸć‚ŠåŽē›Šć‚’3å€ć«ć™ć‚‹ć€ćØć„ć£ćŸåŽ³ć—ć„ē›®ęØ™ć‚’ē«‹ć¦ć¦ć€ćć“ć‹ć‚‰é€†ē®—ć—ć¦č€ƒćˆć‚‹ćØć„ć†ć“ćØć‚’ę—„ć€…č”Œć†ć€‚ć“ć‚ŒćÆć€éžåøøć«é‡č¦ćŖēŠ¶ę³čØ­å®šć ćØę€ć„ć¾ć™ć€‚ seleck.cc ć“ć®čØ˜äŗ‹ć«ć‚ć‚‹ć‚ˆć†ć«ć€ä¾‹ćˆć°1å¹“å¾Œć«ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚ćŸć‚Šć®åŽē›Šć‚’3å€ć«ć™ć‚‹ćØć„ć†ē›®ęØ™ć‚’ē«‹ć¦ćŸćØć—ć¾ć™ć€‚ć“ć®å€¤ćÆäŗ‹ę„­čØˆē”»ć‹ć‚‰å¼•ć£å¼µć£ć¦ćć‚‹ć®ć§ć„ć„ćØę€ć„ć¾ć™ć€‚ä»Šć®å®Ÿéš›ć®ęˆé•·ēŽ‡ć‚’åŽ³ć—ć‚ć«ćæć¦ć€ęˆé•·ę›²ē·šć‚’å¼•ć„ćŸę™‚ć«ć€1å¹“å¾Œć«ćÆåŽē›ŠćÆ2å€ć«ć‚‚ć„ć‹ćŖć„ć“ćØćŒć‚ć‹ć£ćŸćØć—ć¾ć™ć€‚ćć†ć™ć‚‹ćØć€ć“ć®ć¾ć¾ć‚„ć£ć¦ć„ć¦ćÆē›®ęØ™ćŒé”ęˆć§ććŖć„ć“ćØć«ę°—ćŒä»˜ćć‚ć‘ć§ć™ć€‚ćć†ć™ć‚‹ćØć€é•ć†ę‰‹ć‚’č€ƒćˆćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ć€‚ćć®äø­ć§ę€ć‚ć¬ę‰‹ćŒę€ć„ć¤ćć€äø€ę°—ć«ć‚°ćƒ­ćƒ¼ć‚¹ć•ć›ć‚‹ć“ćØćŒć§ćć‚‹ć“ćØć‚‚ć‚ć‚Šć¾ć™ć€‚ Ā 4.4 č§£ę±ŗć™ć¹ćčŖ²é”ŒčØ­å®šć§å…Øć¦ćŒę±ŗć¾ć‚‹ ä»Šåƒ•ć‚‰ćŒå…ØåŠ›ć‚’ęŽ›ć‘ć¦ć§ć‚‚č§£ę±ŗć™ć¹ćčŖ²é”ŒćÆä½•ć§ć‚ć‚‹ć‹ć‚’č€ƒćˆć‚‹ć“ćØćŒćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®ęœ¬č³Ŗć ćØć‚‚ę€ć£ć¦ć„ć¾ć™ć€‚ćć®ę–½ē­–ćŒęˆåŠŸć—ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚’å¤§ććć‚°ćƒ­ćƒ¼ć‚¹ć‚ć‚‹ć„ćÆę”¹å–„ć•ć›ć‚‹ć“ćØćŒć§ćć‚‹ć‹ćÆčŖ²é”Œć‚’čØ­å®šć—ćŸę™‚ē‚¹ć§ę±ŗć¾ć£ć¦ć„ć‚‹ć“ćØć‚‚ć‚ć‚Šć¾ć™ć€‚ćć®ćŸć‚ć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚ć‚‹ć„ćÆćƒ“ć‚øćƒć‚¹ć«ćŠć‘ć‚‹čŖ²é”Œć‚’ē™ŗč¦‹ć—ć€ćć‚Œć‚‰ć«å„Ŗå…ˆé †ä½ć‚’ć¤ć‘ć¦č§£ę±ŗć—ć¦ć„ćć€ćć“ć«ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®ę‰‹č…•ćŒå•ć‚ć‚Œć¦ć„ć‚‹ćØę€ć„ć¾ć™ć€‚ 4.5Ā é›£ć—ć„čŖ²é”Œć«ćƒ•ć‚©ćƒ¼ć‚«ć‚¹ć™ć‚‹ ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚ć‚‹ć„ćÆćƒ‡ć‚¶ć‚¤ćƒŠćƒ¼ć®ćƒŖć‚½ćƒ¼ć‚¹ćÆćØć¦ć¤ć‚‚ćŖćč²“é‡ć§ć™ć€‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«ćÆå¤§å°ę§˜ć€…ćŖå•é”ŒćŒć‚ć‚Šć¾ć™ć€‚ę”¹å–„ćƒŖć‚¹ćƒˆć‚’ä½œć‚Šć”ć‚‡ć£ćØé‹ē”Øć—ćŸć ć‘ć§ć‚‚ć€ć‹ćŖć‚Šć®ę•°ć®č§£ę±ŗć—ćŖć‘ć‚Œć°ćŖć‚‰ćŖć„čŖ²é”ŒćŒč¦‹ć¤ć‹ć‚‹ć“ćØć§ć—ć‚‡ć†ć€‚ćć®ę™‚ć«ć‚ˆćę€ć„å‡ŗć™ćƒ”ć‚æćƒ•ć‚”ćƒ¼ćÆć€ä»„äø‹ć®čØ˜äŗ‹ć«ć‚ć‚‹ē“¶ćØēŸ³ćØē ‚ćØć‚³ćƒ¼ćƒ’ćƒ¼ć§ć™ć€‚ tabi-labo.com ć“ć®čØ˜äŗ‹ć§čØ€ć£ć¦ć„ć‚‹ć“ćØćÆćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć«ć‚‚é©åæœć•ć‚Œć¾ć™ć€‚ē“¶ć®äø­ć«ć€ęœ€åˆć‹ć‚‰ē ‚ć‚’č©°ć‚ć¦ć„ć‚‹ćØć€č‚åæƒćŖę™‚ć«ćć‚Œć‚‰ć«é‚Ŗé­”ć•ć‚Œć¦ēŸ³ć‚’č©°ć‚ć‚‹ć“ćØćŒć§ććŖććŖć£ć¦ć—ć¾ć„ć¾ć™ć€‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗć«ćŠć„ć¦ć‚‚ć€ē›®å…ˆć®å°ć•ć„ę–½ē­–ć«ę°—ć‚’å–ć‚‰ć‚Œć¦ć—ć¾ć£ć¦ćÆć€ęœ¬å½“ć«åƒ•ć‚‰ćŒč§£ćć¹ćć€é›£ć—ćå¤§ććŖčŖ²é”Œć‚’č§£ć‘ćŖć„ć¾ć¾ę™‚é–“ć ć‘ćŒéŽćŽć¦ć—ć¾ć†ć®ć§ć™ć€‚å°ć•ć„ę©Ÿčƒ½ć§ć‚‚ć€ć‚¢ćƒ—ćƒŖćÆćƒŖćƒŖćƒ¼ć‚¹ć•ć‚ŒćŸć‚‰å–ć‚Ščæ”ć—ćŒć¤ć‹ćŖć„å “åˆćŒå¤šć„ć®ć§ć€éš…ć€…ć¾ć§ćƒć‚§ćƒƒć‚Æć™ć‚‹ćØę€ć„ć¾ć™ć€‚ēµęžœćØć—ć¦ć€å¤§å°é–¢ć‚ć‚‰ćšäø€ć¤ć®ę©Ÿčƒ½ć‚’ćƒŖćƒŖćƒ¼ć‚¹ć™ć‚‹ć«ćÆć€ć‚ć‚‹ēØ‹åŗ¦ć®å·„ę•°ćŒć‹ć‹ć‚‹ć‚ć‘ć§ć™ć€‚ćć®äø­ć§ć€č§£ćć¹ćå¤§ććŖčŖ²é”Œć«åÆ¾ć—ć¦å…ØåŠ›ć§å–ć‚Šēµ„ć‚€ć€ć“ć®ćƒžć‚¤ćƒ³ćƒ‰ć‚’ęŒć£ć¦ćŠćć“ćØćŒå¤§åˆ‡ć ćØę„Ÿć˜ć¦ć„ć¾ć™ć€‚ Ā  5. ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚ć†ćØę€ć£ćŸē†ē”± ćŖćœć€ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć‚’ę›øćć“ćØćŒå¤§å„½ććŖåƒ•ćŒćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚ć†ćØę€ć£ćŸć‹ć‚’ē°”å˜ć«ę›øć„ć¦ćŠćć¾ć™ć€‚ åƒ•č‡Ŗčŗ«ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć«ćŖć‚ć†ćØę€ć£ćŸē†ē”±ćŒć€Œćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ć‚’é€šć—ć¦äø–ć®äø­ć‚’å¹øć›ć«ć—ćŸć„ć€ćØć„ć†äŗŗē”Ÿć®ē›®ęØ™ćŒć‚ć‚‹ć‹ć‚‰ć§ć™ć€‚ćć®äø­ć§ć€č‡Ŗåˆ†ćÆćƒ—ćƒ­ć‚°ćƒ©ćƒ ć‚’ę›øćć“ćØć«ćƒćƒžć£ćŸć ć‘ć§ć€ćć‚ŒćÆę‰‹ę®µć«éŽćŽćŖć„ćØę€ć£ć¦ć„ć¾ć™ć€‚äø–ć®äø­ć‚’å¹øć›ć«ć™ć‚‹ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚’č‡Ŗåˆ†ć®ę‰‹ć§å‰µć£ć¦ć„ććŸć‚ć«ćÆć€äø€äŗŗć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćØć—ć¦ćÆé™ē•ŒćŒć‚ć‚‹ćØę€ć£ć¦ć„ćŸć—ć€ę„ę€ę±ŗå®šć‚’ć—ć¦ć„ććŸć‚ć«ćÆč‡Ŗåˆ†ć®ćƒ¬ć‚¤ćƒ¤ćƒ¼ć‚’äøŠć’ć¦ć„ćć—ć‹ćŖć„ćØč€ƒćˆć¦ć„ć¾ć—ćŸć€‚ćć®ćŸć‚ć®éøęŠžćØć—ć¦ć€äø€ē•Ŗč‰Æć„ćØę€ć£ćŸć®ćŒćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć«ćŖć‚‹ć“ćØć§ć—ćŸć€‚ Ā  6. ęœ€å¾Œć« ć€Œę˜Žę—„ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć€ćØčØ€ć‚ć‚ŒćŸč‡Ŗåˆ†ć®ēµŒéØ“ć‚’é€šć—ć¦ć€å¼Šē¤¾ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć®å½¹å‰²ć‚„ćƒžć‚¤ćƒ³ćƒ‰ć‚»ćƒƒćƒˆć«ć¤ć„ć¦ē“¹ä»‹ć—ć¾ć—ćŸć€‚ć„ć‹ćŒć§ć—ćŸć‹ć€‚ ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ćÆä½•ć§ć‚‚å±‹ć§ć‚ć‚‹ćŒę•…ć«ć€å¤§å¤‰ćŖå “é¢ć‚‚å¤šć€…ć‚ć‚Šć¾ć™ć€‚ć—ć‹ć—ćŖćŒć‚‰ć€äø–ć®äø­ć‚’ć‚ˆć‚Šč‰Æćć—ć¦ć„ćå®Ÿę„ŸćÆå¼·ćć€ć‚„ć‚ŠćŒć„ć®ć‚ć‚‹å½¹č·ć ćØę€ć£ć¦ć„ć¾ć™ć€‚ å¼Šē¤¾ć§ćÆć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚ć‚‹ć„ćÆćƒ“ć‚øćƒć‚¹ć®čŖ²é”Œć«åÆ¾ć—ć¦ęˆęžœć«åŸ·ē€ć—ć¦ć„ć‘ć‚‹ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ć“ć‚Œć‹ć‚‰ć•ć‚‰ć«ć€å¼Šē¤¾ćØå¼Šē¤¾ćŒé‹å–¶ć—ć¦ć„ć‚‹ćƒ—ćƒ­ćƒ€ć‚ÆćƒˆćÆć©ć‚Œć‚‚é¢ē™½ććŖć‚‹ćØč‡Ŗč² ć—ć¦ć„ć¾ć™ć€‚ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ä»„å¤–ć®å½¹č·ć§ć‚‚ć€ć‚‚ć—čˆˆå‘³ćŒć‚ć‚Œć°ć€åƒ•ć® twitterć‚¢ć‚«ć‚¦ćƒ³ćƒˆ ć§ć‚‚ä½•ć§ć‚‚ć„ć„ć®ć§ć€å£°ć‚’ć‹ć‘ć¦ć„ćŸć ć‘ć‚‹ćØå¹øć„ć§ć™ć€‚ę˜ÆéžćŠčŒ¶ć§ć‚‚ć—ć¾ć—ć‚‡ć†ć€‚ ę˜Žę—„ćÆć€å¼Šē¤¾ć®ę©Ÿę¢°å­¦ēæ’ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č¾»ć‚ˆć‚Šč‡Ŗčŗ«ćŒä½æć£ć¦ć„ć‚‹NixOSć®č©±ćŒę›øć‹ć‚Œć‚‹ćØę€ć„ć¾ć™ć€‚ę˜Æéžć€ćŠę„½ć—ćæć«ć—ć¦ć„ć¦ćć ć•ć„ć€‚ tech.dely.jp
こんにごは。Androidć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ć†ć‚ć‚‚ć‚Šć§ć™ć€‚ ć“ć®čØ˜äŗ‹ćÆdely Advent Calendar 2018恮1ę—„ē›®ć®čØ˜äŗ‹ć§ć™ć€‚ ć‚¢ćƒ‰ćƒ™ćƒ³ćƒˆć‚«ćƒ¬ćƒ³ćƒ€ćƒ¼ć«ć¤ć„ć¦ćÆQiita恧悂Adventarć§å…¬é–‹ć—ć¦ć„ć¾ć™ć®ć§ć€ć»ć‹ć®čØ˜äŗ‹ć«ć¤ć„ć¦ćÆę˜Æéžćć”ć‚‰ć‹ć‚‰č¦‹ć¦ćć ć•ć„ć€‚ Qiita: https://qiita.com/advent-calendar/2018/dely Adventar: https://adventar.org/calendars/3535 DroidKaigi 2019ę„½ć—ćæć§ć™ć­ć€‚č‡Ŗåˆ†ć‚‚3ć¤ć»ć©ć‚»ćƒƒć‚·ćƒ§ćƒ³ć‚’ęŠ•ēØæć—ćŸć®ćŒć‚ć§ćŸć1ć¤ęŽ”ęŠžć•ć‚Œć¾ć—ć¦ć€ä»Šć‹ć‚‰ć—ć£ć‹ć‚Šęŗ–å‚™ć›ć­ć°ćØē™ŗč”Øå†…å®¹ć‚’ä½œć£ć¦ć„ć‚‹ę—„ć€…ć§ć™ć€‚ 怌Android Vitalså¾¹åŗ•ę“»ē”Øć€ćØć„ć†ć‚æć‚¤ćƒˆćƒ«ć§ē™ŗč”Øć—ć¾ć™ć®ć§ć€čˆˆå‘³ć‚ć‚‹ę–¹ć„ć‚Œć°ę˜Æéžčžćć«ę„ć¦ć‚‚ć‚‰ćˆć‚‹ćØć†ć‚Œć—ć„ć§ć™ć€‚ ć•ć¦ć€ä»Šę—„ćÆęŠ•ēØæć—ćŸć‚‚ć®ć§ęŽ”ē”Øć•ć‚ŒćŖć‹ć£ćŸć‚‚ć®ć†ć”ć®1ć¤ć«ć¤ć„ć¦ć€ć›ć£ć‹ćć§ć™ć®ć§ćƒ–ćƒ­ć‚°čØ˜äŗ‹ćØć—ć¦ć¾ćØć‚ć¦ćŠć“ć†ćØę€ć„ć¾ć™ć€‚ ęå‡ŗć—ćŸć‚»ćƒƒć‚·ćƒ§ćƒ³ć®ę¦‚č¦ć«ć¤ć„ć¦ćÆć“ć‚“ćŖę„Ÿć˜ć§ć—ćŸć€‚ Android恧CIć—ć¦ć¾ć™ć‹ļ¼Ÿ 2018å¹“ē¾åœØć§ćÆę“»ē”Øć§ćć‚‹CIć‚µćƒ¼ćƒ“ć‚¹ćŒę§˜ć€…å­˜åœØć™ć‚‹ć“ćØć‚‚ć‚ć‚Šć€Android恮CIē’°å¢ƒć‚’ę§‹ēÆ‰ć™ć‚‹ć“ćØćÆē‰¹ć«č¤‡ę•°äŗŗćŒé–‹ē™ŗć«ć‹ć‹ć‚ć‚‹ć‚ˆć†ćŖē’°å¢ƒć§ćÆäø€čˆ¬ēš„ćŖć“ćØć«ćŖć£ć¦ć„ć‚‹ć“ćØćØę€ć„ć¾ć™ć€‚ćć®äø­ć§ć‚‚AWS CodeBuildは1åˆ†å˜ä½ć®å®Ÿč”Œę™‚é–“ć§ć®čŖ²é‡‘ä½“ē³»ć€åŒę™‚å®Ÿč”Œć‚æć‚¹ć‚Æę•°ć®åˆ¶é™ćŒä»–ć‚µćƒ¼ćƒ“ć‚¹ć«ęÆ”ć¹ć¦ć‚†ć‚‹ć„ć€ćŖć©ē‰¹å¾“ēš„ćŖCIć‚µćƒ¼ćƒ“ć‚¹ć§ć‚ć‚‹ć“ćØć‚‚ć‚ć‚Šć€äø€åŗ¦ćÆå°Žå…„ć‚’ę¤œčØŽć—ćŸę–¹ć‚‚ć„ć‚‹ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ 恗恋恗态AWS CodeBuildćÆē‰¹ć«ä»–ć‚µćƒ¼ćƒ“ć‚¹ćØć®é€£ęŗå‘Øć‚Šć®ę©Ÿčƒ½ćŒč²§å¼±ćŖć“ćØć‚‚ć‚ć‚Šć€ę§˜ć€…ćŖåˆ©ē‚¹ćŒć‚ć‚ŠćŖćŒć‚‰ć‚‚å°Žå…„ć•ć‚ŒćŖć„ć€ćØć„ć£ćŸć“ćØćŒå¤šć„ć®ć§ćÆćŖć„ć‹ćØę€ć„ć¾ć™ć€‚ęœ¬ē™ŗč”Øć§ćÆAWS SAMを擻用してAWS CodeBuildęœ€å¤§é™ć«ę“»ē”Øć™ć‚‹ę–¹ę³•ć«ć¤ć„ć¦čŖ¬ę˜Žć—ć¾ć™ć€‚ćŖćŠć€ęœ¬ē™ŗč”Øå†…ć®Amazon Lambdać®ć‚³ćƒ¼ćƒ‰ćÆGolangを使用しています。 Androidć®ć‚«ćƒ³ćƒ•ć‚”ćƒ¬ćƒ³ć‚¹ć§ć™ćŒć€å®Ÿéš›ćÆć‚ć‚“ć¾ć‚ŠAndroidの話はしてないですねw ć§ćÆå†…å®¹ć«å…„ć£ć¦ć„ććŸć„ćØę€ć„ć¾ć™ć€‚ dely恮Android開発ではこんなことをCIbotにやってもらってます 2018å¹“ē¾åœØAndroidé–‹ē™ŗć«ćŠć„ć¦ćÆCIć‚’å°Žå…„ć—ć¦ć„ćŖć„ćØć„ć†ć“ćØćÆćć†ćć†ćŖć„ć“ćØć ćØę€ć†ć®ć§ć™ćŒć€dely恮Androidé–‹ē™ŗć§ć‚‚ć‚‚ć”ć‚ć‚“CIć‚’å°Žå…„ć—ć¦ć„ć¾ć™ć€‚ Slack上のbotć€ćć—ć¦GitHub恮WebHookć‹ć‚‰ć»ćØć‚“ć©ć®ę©Ÿčƒ½ć‚’å‘¼ć³å‡ŗć™ć‚ˆć†ć«ä½œć£ć¦ćŠć‚Šć€2018幓12月1ę—„ē¾åœØć§ćÆć“ć‚“ćŖć“ćØćŒć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚ GitHub上でPullRequestć‚’ä½œć‚‹ć€ę›“ę–°ć™ć‚‹ćŸć³ć«ćƒ“ćƒ«ćƒ‰ć€č‡Ŗå‹•ćƒ†ć‚¹ćƒˆć€Lintć‚’č”Œć†ę©Ÿčƒ½ SlackäøŠć‹ć‚‰UIćƒ†ć‚¹ćƒˆļ¼ˆAWS DeviceFarmļ¼‰ć‚’å‘¼ć³å‡ŗć™ę©Ÿčƒ½ SlackäøŠć‹ć‚‰DeployGateć«č‡Ŗå‹•ćƒ“ćƒ«ćƒ‰ć•ć‚ŒćŸAPKć‚’ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ćŸć†ćˆć§Slack恫URLćØęœ€ę–°ć®Release Noteć‚’é€šēŸ„ć™ć‚‹ę©Ÿčƒ½ SlackäøŠć‹ć‚‰ćƒŖćƒŖćƒ¼ć‚¹ćƒ–ćƒ©ćƒ³ćƒć€ćƒ›ćƒƒćƒˆćƒ•ć‚£ćƒƒć‚Æć‚¹ćƒ–ćƒ©ćƒ³ćƒć‚’ć‚Ŗćƒ¼ćƒ—ćƒ³ć—ć€ļ¼ˆćƒ”ć‚øćƒ£ćƒ¼/ćƒžć‚¤ćƒŠćƒ¼/ćƒ‘ćƒƒćƒļ¼‰ćƒŖćƒŖćƒ¼ć‚¹ć”ćØć«ćƒćƒ¼ć‚øćƒ§ćƒ³ē•Ŗå·ć‚’č‡Ŗå‹•ć§ć‚¤ćƒ³ć‚ÆćƒŖćƒ”ćƒ³ćƒˆć™ć‚‹ę©Ÿčƒ½ ęœ€ę–°ćƒćƒ¼ć‚øćƒ§ćƒ³ć‚’ćƒŖćƒŖćƒ¼ć‚¹ć™ć‚‹éš›ć«GitHubć®ćƒŖćƒŖćƒ¼ć‚¹ćƒšćƒ¼ć‚øć‚’ä½œęˆć—ć€Release Noteć‚’č‡Ŗå‹•ć§ē”Ÿęˆć—ē™»éŒ²ć™ć‚‹ę©Ÿčƒ½ SlackäøŠć‹ć‚‰Google Playć«č‡Ŗå‹•ćƒ“ćƒ«ćƒ‰ć•ć‚ŒćŸAPKとProguardć®ćƒžćƒƒćƒ”ćƒ³ć‚°ćƒ•ć‚”ć‚¤ćƒ«ć‚’ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć€ć‚¢ćƒ«ćƒ•ć‚”ćƒ†ć‚¹ćƒˆćƒˆćƒ©ćƒƒć‚Æć«å…¬é–‹ć™ć‚‹ę©Ÿčƒ½ SlackäøŠć‹ć‚‰ē‰¹å®šć®ćƒ–ćƒ©ćƒ³ćƒć®ć‚³ćƒ¼ćƒ‰ć‚’ä½æć£ć¦Dockerć®ćƒ“ćƒ«ćƒ‰ē”Øć‚¤ćƒ”ćƒ¼ć‚øć‚’ē”Ÿęˆć—ć€Amazon ECRć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ę©Ÿčƒ½ 仄上の機能がSlack悄GitHub恮WebHookć”ć—ć«å‘¼ć³å‡ŗć›ć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚ć“ć‚Œć‚‰ć®ę©Ÿčƒ½ćŒč‡Ŗå‹•ć§å‘¼ć³å‡ŗć›ć‚‹ē’°å¢ƒćÆć€2018å¹“ē¾åœØć«ćŠć„ć¦ć‚‚ćć“ćć“é ‘å¼µć£ć¦ć„ć‚‹ć‚ˆć†ćŖę°—ćŒć—ć¾ć™ćŒå®Ÿéš›ć©ć†ćŖć‚“ć§ć—ć‚‡ć†ļ¼Ÿļ¼ˆć‚‚ć—ć‹ć—ć¦å½“ćŸć‚Šå‰ć ć£ćŸć‚Šć—ć¾ć™ć‹ļ¼Ÿļ¼‰ ć“ć®ć™ć¹ć¦ć®ć‚„ć‚Šę–¹ć‚’ć“ć“ć«ę›øć„ć¦ć—ć¾ć†ćØćØć¦ć‚‚é•·ććŖć£ć¦ć—ć¾ć†ć®ć§ć€å®Ÿéš›ć«č‚ć«ćŖć‚‹éƒØåˆ†ć®äø€éƒØć ć‘ä»Šå›žćÆčØ˜äŗ‹ćØć—ć¦å…±ęœ‰ć—ć¾ć™ćŒć€ć¾ćŸåˆ„é€”ē“°ć‹ćčŖ¬ę˜Žć™ć‚‹čØ˜äŗ‹ć‚’ę›øć“ć†ć‹ćØę€ć£ć¦ć„ć¾ć™ć€‚ ć“ć‚Œć‚‰ć®ę©Ÿčƒ½ć‚’ć©ć®ć‚ˆć†ć«å®Ÿē¾ć—ć¦ć„ć‚‹ć‹ ć§ćÆå®Ÿéš›ć€ć“ć‚Œć‚‰ć®ę©Ÿčƒ½ć‚’ć©ć‚“ćŖćƒ„ćƒ¼ćƒ«ć‚„ć‚µćƒ¼ćƒ“ć‚¹ć‚’ä½æć£ć¦å®Ÿē¾ć—ć¦ć„ć‚‹ć‹ē“¹ä»‹ć—ć¾ć™ć€‚ CIć‚’ć‚„ć‚‹ć«ćÆćØć‚Šć‚ćˆćšćƒ“ćƒ«ćƒ‰ē”Øć®ē’°å¢ƒćŒåæ…č¦ćŖć®ć§ć™ćŒć€ćć‚ŒćÆä»„äø‹ć®ć‚‚ć®ć‚’ä½æć£ć¦å®Ÿē¾ć—ć¦ć„ć¾ć™ć€‚ AWS CodeBuild Amazon ECR AWS CodeBuildćÆå„Ŗē§€ćŖć®ć«ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć®å¤–éƒØé€£ęŗćŖć©ćŒč²§å¼±ćŖć›ć„ć§ļ¼ˆCode Pipelineを使う方法やPush HookćÆć‚ć‚Šć¾ć™ćŒć€ę­£ē›“äøč¶³ć§ć™ć‚ˆć­ļ¼‰ć‚ć¾ć‚Šč©±é”Œć«ćŖć£ć¦ć„ćŖć„å°č±”ćŒć‚ć‚Šć¾ć™ćŒć€dely恮Androidé–‹ē™ŗć§ćÆć“ć”ć‚‰ć‚’ćƒ•ćƒ«ę“»ē”Øć—ć¦ć„ć¾ć™ć€‚CodeBuildć‚’ä½æć†äøŠć§åæ…č¦äøåÆę¬ ćŖć®ćŒAmazon ECR(Dockerć®ćƒŖćƒć‚øćƒˆćƒŖć‚µćƒ¼ćƒ“ć‚¹ļ¼‰ćŖć®ć§ć™ćŒć€ć“ć”ć‚‰ć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ćŸć‚¤ćƒ”ćƒ¼ć‚øć‚’CodeBuildć‹ć‚‰ä½æć†ćØć€ćƒ“ćƒ«ćƒ‰ē”Øć®Dockerć‚¤ćƒ”ćƒ¼ć‚øć®ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰é€Ÿåŗ¦ćŒēˆ†é€Ÿć«ćŖć‚Šć¾ć™ć€‚CircleCIć‚’ä½æć£ć¦ć„ćŸéš›ć‚‚ć‚ŖćƒŖć‚øćƒŠćƒ«ć®ćƒ“ćƒ«ćƒ‰ć‚¤ćƒ”ćƒ¼ć‚øć‚’ä½æć£ć¦ć„ć‚‹ćØ5åˆ†ļ½ž10åˆ†å¾…ćŸć•ć‚ŒćŸć‚Šć™ć‚‹ć“ćØćŒć‚ć‚Šć¾ć—ćŸćŒć€ć“ć”ć‚‰ć®ē’°å¢ƒć«åˆ‡ć‚Šę›æćˆć¦ć‹ć‚‰ćć†ć„ć£ćŸå¾…ć”ę™‚é–“ćÆć»ćØć‚“ć©ē™ŗē”Ÿć—ćŖććŖć‚Šć¾ć—ćŸć€‚dely恮Androidé–‹ē™ŗć§ćÆćŖć‚‹ć¹ćä¾å­˜é–¢äæ‚ć‚’äø€ē·’ććŸć«å…„ć‚ŒćŸć‚¤ćƒ”ćƒ¼ć‚øć‚’Amazon ECRć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ć“ćØć§ć€ć„ććŖć‚Šćƒ“ćƒ«ćƒ‰ć‚„ćƒ†ć‚¹ćƒˆć‹ć‚‰čµ°ć‚‹ć‚ˆć†ć«ć—ć¦ć€ćƒ“ćƒ«ćƒ‰ę™‚é–“ć‚’å‰Šęø›ć—ć¦ć„ć¾ć™ć€‚ AWS SAM(Lambda) CodeBuildć®é€£ęŗå‘Øć‚Šć®č²§å¼±ć•ć‚’č£œć†ćŸć‚ć«ć€AWS SAMを擻用しています。Slackからの呼び出しや、GitHub恮WebHookć‚’ć“ć”ć‚‰ć§ę§‹ęˆć—ćŸAPI Gatewayć§å—ć‘ć¦ć€å®Ÿéš›ć®CodeBuildć®å‘¼ć³å‡ŗć—ē­‰ć‚’č”Œć£ć¦ć„ć¾ć™ć€‚ å…Øä½“ć®ę§‹ęˆå›³ å…Øä½“ć®ę§‹ęˆćÆć“ć‚“ćŖę„Ÿć˜ć«ćŖć£ć¦ć„ć¾ć™ć€‚ å®Ÿéš›ćÆGoogle Play Developer APIć‚’ä½æć£ć¦ć„ćŸć‚Šć‚‚ć—ć¾ć™ćŒć€ä»Šå›žćÆAWS CodeBuildå‘Øć‚Šć®ä»•ēµ„ćæć«ć¤ć„ć¦ć€ćć”ć‚‰ć‚’ęŽ”ē”Øć—ćŸē†ē”±ć«ć¤ć„ć¦čŖ¬ę˜Žć—ć¾ć™ć€‚ AWS CodeBuildć‚’ęŽ”ē”Øć—ćŸē†ē”± 1åˆ†å˜ä½ć§ä½æć£ćŸåˆ†ć ć‘čŖ²é‡‘ 大抵のCIć‚µćƒ¼ćƒ“ć‚¹ć ćØć€åŒę™‚ćƒ“ćƒ«ćƒ‰å®Ÿč”ŒåÆčƒ½ę•°ć‚’å¢—ć‚„ć™ć”ćØć«ęœˆé”ę–™é‡‘ćŒå¢—ćˆć‚‹ćØć„ć†å½¢ć«ćŖć£ć¦ć„ć‚‹ćØć“ć‚ćŒå¤šć„ćØę€ć„ć¾ć™ćŒć€AWS CodeBuildćÆć‚·ćƒ³ćƒ—ćƒ«ć«ćƒ“ćƒ«ćƒ‰ę™‚é–“ćŒ1åˆ†ć‹ć‹ć‚‹ć”ćØć«čŖ²é‡‘ć•ć‚Œć‚‹čŖ²é‡‘ä½“ē³»ć«ćŖć£ć¦ć„ć¾ć™ć€‚ 料金蔨はこごら https://aws.amazon.com/jp/codebuild/pricing/ ć§ć™ćŒć€äø€ē•Ŗå¤§ćć„ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚µć‚¤ć‚ŗć§ć‚ć‚‹build.general1.large(15GBćƒ”ćƒ¢ćƒŖć€8vCPUļ¼‰ć§ć‚‚ć€ćƒ“ćƒ«ćƒ‰1åˆ†å½“ćŸć‚Šć®ę–™é‡‘ćÆ0.020USD恧恙怂1å›žč‡Ŗå‹•ćƒ“ćƒ«ćƒ‰ć‚„ćƒ†ć‚¹ćƒˆć‚’å›žć™ćŸć³ć«ę•°åå††ēØ‹åŗ¦ć®ę–™é‡‘ä½“ē³»ćŖć®ć§ć€ć¾ćšå°Žå…„ć—ć¦ćæć‚‹ć€ćØć„ć†ę™‚ć«éžåøøć«č‰Æć„ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ļ¼ˆēµå±€ćć®ć¾ć¾ęœ¬ęŽ”ē”Øć—ć¾ć—ćŸļ¼‰ ć‚†ć‚‹ć„åŒę™‚å®Ÿč”Œćƒ“ćƒ«ćƒ‰ę•°ć®åˆ¶é™ https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/limits.html 恓恔悉恫AWS CodeBuildć®åˆ¶é™ć«ć¤ć„ć¦ę›øć„ć¦ć‚ć‚‹ć®ć§ć™ćŒć€ä»–ć®CIć‚µćƒ¼ćƒ“ć‚¹ć«ęÆ”ć¹ć¦åœ§å€’ēš„ć«åŒę™‚å®Ÿč”Œćƒ“ćƒ«ćƒ‰ę•°ć®åˆ¶é™ćŒē·©ć„ć§ć™ć€‚å°Žå…„ē›“å¾ŒćÆ5å€‹ć®ćƒ“ćƒ«ćƒ‰ć‚’åŒę™‚å®Ÿč”Œć§ćć¾ć™ćŒć€é€šåøøćÆ20å€‹ć®ćƒ“ćƒ«ćƒ‰ć‚’åŒę™‚å®Ÿč”Œć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚č¤‡ę•°äŗŗć§ć‚“ćƒŖć‚“ćƒŖé–‹ē™ŗć—ć¦ć‚‚ć€ć‚­ćƒ„ćƒ¼ć‚¤ćƒ³ć‚°ć•ć‚ŒćŸćƒ“ćƒ«ćƒ‰ć‚’å¾…ć¤ć“ćØćÆć‚ć¾ć‚ŠćŖć„ć§ć™ć­ć€‚ Dockerć‚¤ćƒ”ćƒ¼ć‚øć®å–å¾—ćŒēˆ†é€Ÿļ¼ˆAmazon ECRć‚’ä½æć£ćŸéš›ļ¼‰ å‰čæ°ć—ćŸćØćŠć‚Šć§ć™ćŒć€CodeBuildとECRを連携するとDockerć‚¤ćƒ”ćƒ¼ć‚øć®å–å¾—ćŒēˆ†é€Ÿć«ćŖć‚Šć¾ć™ć€‚ć“ć‚Œć ć‘ć§ć‚‚CodeBuildć‚’ęŽ”ē”Øć™ć‚‹ä¾”å€¤ćÆć‚ć‚‹ć®ć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚ CodeBuildäøŠć§ć®ćƒ“ćƒ«ćƒ‰ć®ä»•ę–¹ćÆåŸŗęœ¬ēš„ćŖä½æć„ę–¹ć‚’ć—ć¦ć„ć‚‹ć ć‘ć§ć™ćŒć€Dockerć‚¤ćƒ”ćƒ¼ć‚øę§‹ēÆ‰ć®éš›ć«ę°—ć‚’ä»˜ć‘ć¦ć„ć‚‹ć“ćØć«ć¤ć„ć¦å…±ęœ‰ć—ć¦ćŠćć¾ć™ć€‚ļ¼ˆćØć„ć£ć¦ć‚‚Dockerć‚¤ćƒ”ćƒ¼ć‚øć‚’ä½æć£ć¦ćƒ“ćƒ«ćƒ‰ć™ć‚‹éš›ć«ćÆå½“ćŸć‚Šå‰ć®č©±ć§ć™ćŒā€¦ļ¼‰ ćƒ“ćƒ«ćƒ‰ē”ØDockerć‚¤ćƒ”ćƒ¼ć‚øę§‹ēÆ‰ć®éš›ć«ę°—ć‚’ä»˜ć‘ć¦ć„ć‚‹ć“ćØ ä¾å­˜ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć‚‚ć‚¤ćƒ”ćƒ¼ć‚øć«å«ć‚ć¦ć—ć¾ć† ć‚‚ć”ć‚ć‚“CodeBulidć«ć‚‚ć‚­ćƒ£ćƒƒć‚·ćƒ„ę©Ÿčƒ½ćŒć‚ć‚‹ć®ć§ä¾å­˜ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆćć”ć‚‰ć«å…„ć‚Œć¦ć—ć¾ć†ć€ćØć„ć†ć®ć‚‚ć‚ć‚ŠćŖć®ć§ć™ćŒć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ć®å±•é–‹ć«ć‚‚ćć‚ŒćŖć‚Šć®ę™‚é–“ćŒć‹ć‹ć‚Šć¾ć™ć€‚å…ˆć«Gradleć®ćƒ“ćƒ«ćƒ‰ć‚’äø€å›žčµ°ć‚‰ć›ć¦ć—ć¾ć†ć“ćØć§ć€ćƒ“ćƒ«ćƒ‰ć«åæ…č¦ćŖä¾å­˜ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆå…Øć¦ćƒ“ćƒ«ćƒ‰ć‚¤ćƒ”ćƒ¼ć‚øäøŠć«å±•é–‹ć•ć‚ŒćŸēŠ¶ę…‹ć«ć—ć¦ć„ć¾ć™ć€‚ Docker Multi-stage buildć§ć‚¤ćƒ”ćƒ¼ć‚øć‚µć‚¤ć‚ŗć‚’åœ§ēø®ć™ć‚‹ äøŠčØ˜ć®ć“ćØć‚’ć‚„ć‚‹ćØć€ć©ć†ć—ć¦ć‚‚ē„”é§„ćÆć‚½ćƒ¼ć‚¹ć‚³ćƒ¼ćƒ‰ē­‰ćŒć‚¤ćƒ”ćƒ¼ć‚øć«ę®‹ć‚ŠćŒć”ć§ć™ć€‚ https://docs.docker.com/develop/develop-images/multistage-build/ Docker 17.05ć‹ć‚‰å°Žå…„ć•ć‚ŒćŸć“ć”ć‚‰ć®Docker multi-stage bulidć®ę©Ÿčƒ½ć‚’ä½æć£ć¦ć€ä½™čØˆćŖćƒ•ć‚”ć‚¤ćƒ«ćŒć‚¤ćƒ”ćƒ¼ć‚øäøŠć«ę®‹ć‚‰ćŖć„ć‚ˆć†ć«å·„å¤«ć—ć¦ć„ć¾ć™ć€‚ ćƒ“ćƒ«ćƒ‰ē”Ødockerfile ä»„äø‹ćŒå¼Šē¤¾ć§ä½æć£ć¦ć„ć‚‹ćƒ“ćƒ«ćƒ‰ē”Øć®dockerfile恧恙怂 dangerć‚„ćƒžćƒ¼ć‚±ćƒ†ć‚£ćƒ³ć‚°ē”Øć®ćƒ„ćƒ¼ćƒ«ć€jsonćƒ‘ćƒ¼ć‚¹ē”Øć®jqćŖć©ć‚’ä½æć†ćŸć‚ć€ćć‚Œć‚‰ć®ä¾å­˜é–¢äæ‚ć‚‚å«ć‚“ć§ć„ć¾ć™ć€‚ć“ć†ć„ć£ćŸć‚‚ć®ć‚’ć‚¤ćƒ”ćƒ¼ć‚øć«å«ć‚ć¦ćŠćć“ćØć‚‚ć§ćć‚‹ć®ćÆDockerć‚¤ćƒ”ćƒ¼ć‚øć‚’č‡Ŗå‰ć§ē®”ē†ć—ć¦ć„ć‚‹ć“ćØć®åˆ©ē‚¹ć§ć™ć­ć€‚ FROM openjdk:8u141-jdk-slim AS intermediate ENV ANDROID_SDK_FILENAME=sdk-tools-linux-3859397.zip ENV JQ_PATH=/usr/local/jq ENV ANDROID_HOME=/opt/android-sdk-linux ENV ANDROID_SDK_URL="http://dl.google.com/android/repository/${ANDROID_SDK_FILENAME}" \ ANDROID_API_LEVELS=android-16,android-26,android-27,android-28 \ ANDROID_BUILD_TOOLS_VERSIONS=27.0.3,28.0.2 ENV APKTOOL_PATH=/usr/local/apktool ENV ADJUST_DTT_PATH=/usr/local/adjust_dtt ENV PATH=${PATH}:${ANDROID_HOME}/tools/bin:${JQ_PATH}:${APKTOOL_PATH}:${ADJUST_DTT_PATH} ENV GRADLE_USER_HOME=/usr/local/gradle RUN apt-get -y update && \ apt-get -y --no-install-recommends install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 \ uni2ascii python-pip python-yaml \ ruby \ wget git curl ssh && \ apt-get -y install ruby-dev make gcc && \ gem install bundler && \ gem install ruby-ll && \ pip -q install awscli && \ mkdir $JQ_PATH && cd $JQ_PATH && \ wget -q -O- https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 > jq && chmod +x $JQ_PATH/jq && \ mkdir $APKTOOL_PATH && cd $APKTOOL_PATH && \ wget -q -O- https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool > apktool && chmod +x $APKTOOL_PATH/apktool && \ wget -q -O- https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.3.4.jar > apktol.jar && chmod +x $APKTOOL_PATH/apktool.jar && \ mkdir $ADJUST_DTT_PATH && cd $ADJUST_DTT_PATH && \ wget -q -O- https://raw.githubusercontent.com/adjust/android_sdk/master/tools/adjust-dtt > adjust-dtt && chmod +x $ADJUST_DTT_PATH/adjust-dtt && \ mkdir $ANDROID_HOME && cd $ANDROID_HOME && \ wget -q ${ANDROID_SDK_URL} && \ unzip ${ANDROID_SDK_FILENAME} && \ rm ${ANDROID_SDK_FILENAME} && \ mkdir ${GRADLE_USER_HOME} && \ echo y | sdkmanager $(echo ${ANDROID_BUILD_TOOLS_VERSIONS} | sed 's/,/\n/g' | sed -E 's/(.+)/build-tools;\1/g' | tr '\n' ' ') "platform-tools" "extras;android;m2repository" "extras;google;m2repository" "extras;google;google_play_services" $(echo ${ANDROID_API_LEVELS} | sed 's/,/\n/g' | sed -E 's/(.+)/platforms;\1/g' | tr '\n' ' ') WORKDIR /workspace # Resolve Dependencies FROM intermediate AS dependencies COPY . /workspace RUN ./gradlew --project-cache-dir=${GRADLE_USER_HOME} clean lintDevDebug assembleDevDebug # Resolve Bundle FROM intermediate COPY Gemfile /workspace RUN bundle install # Copy Gradle Caches COPY --from=dependencies /usr/local/gradle /usr/local/gradle AWS CodeBuild悒APIć‹ć‚‰ć‚­ćƒƒć‚Æć—ć¦å‹•ć‹ć™ AWS CodeBuildćÆć€ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§ćÆAWS CodePipelineć‹ć‚‰ć®å‘¼ć³å‡ŗć—ć€ć¾ćŸćÆGitHub等と連携してPushę™‚ć«č‡Ŗå‹•ć§ćƒ“ćƒ«ćƒ‰ć‚’č”Œć†ć“ćØćŒåÆčƒ½ć§ć™ć€‚ćŖć‚“ćØćŖćCIć‚’å›žć—ć¦ćƒ†ć‚¹ćƒˆć‚³ćƒ¼ćƒ‰ć‚’čµ°ć‚‰ć›ć‚‹ć€ć‚ć‚‹ć„ćÆćƒ‡ćƒ—ćƒ­ć‚¤ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćØć—ć¦ä½æć†ć«ćÆć“ć‚Œć ć‘ć§ć‚‚ååˆ†ćŖć®ć§ć™ćŒć€ä¾‹ćˆć° PullRequestć‚’ä½œć£ćŸć‚æć‚¤ćƒŸćƒ³ć‚°ć§ćƒ“ćƒ«ćƒ‰ć‚’å›žć—ć€Danger等を使って自動でPullRequestć®ćƒ¬ćƒ“ćƒ„ćƒ¼ć‚’č”Œć† ćƒ‡ćƒćƒƒć‚°ē”Øć®ćƒ“ćƒ«ćƒ‰ćØęœ¬ē•Ŗē”Øć®ćƒ“ćƒ«ćƒ‰ć‚’åŒć˜ćƒ–ćƒ©ćƒ³ćƒć‹ć‚‰åˆ†å²ć—ć¦ćƒ“ćƒ«ćƒ‰ć•ć›ć‚‹ é€šåøøćØé•ć†ćƒ‘ć‚æćƒ¼ćƒ³ć®ćƒ“ćƒ«ćƒ‰ć«åÆ¾åæœć•ć›ć‚‹ ćŖć©ćÆä»„äøŠć®ę‰‹ę³•ć‚’ä½æć£ć¦ć„ć‚‹ćØå›°é›£ć§ć™ć€‚å¹øć„ć€CodeBuild恮APIć«ćÆå¤–ć‹ć‚‰ćƒ“ćƒ«ćƒ‰ć‚æć‚¹ć‚Æć‚’ä»»ę„ć®čØ­å®šć§čµ°ć‚‰ć›ć‚‹ć‚‚ć®ćŒć‚ć‚Šć€ć“ć”ć‚‰ć‚’ä½æć†ć“ćØć§ē“°ć‹ć„ćƒ“ćƒ«ćƒ‰ć‚æć‚¹ć‚Æć«åÆ¾åæœć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ SDKから呼び出す https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html å®Ÿéš›ć«ćƒ“ćƒ«ćƒ‰ć‚æć‚¹ć‚Æć‚’å‘¼ć³å‡ŗć™ćŸć‚ć®APIćÆć“ć”ć‚‰ć§ć™ć€‚å¼Šē¤¾ćÆLambdaäøŠć®ć‚³ćƒ¼ćƒ‰ć‹ć‚‰å‘¼ć³å‡ŗć—ć¦ć„ć¾ć™ćŒć€Go恮SDKć§ć®å‘¼ć³å‡ŗć—ę–¹ćÆć“ć‚“ćŖę„Ÿć˜ć«ćŖć£ć¦ć„ć¾ć™ć€‚ out, err := m.codeBuild.StartBuildWithContext(ctx, codebuild.StartBuildInput{ ProjectName: aws.String( "kurashiru-android-ci" ), SourceVersion: aws.String(branchName), EnvironmentVariablesOverride: []*codebuild.EnvironmentVariable{ { Name: aws.String( "CI_SPLIT_APK" ), Value: aws.String(strconv.FormatBool(splitApk)), }, { Name: aws.String( "CI_BUILDTASK" ), Value: aws.String(buildTask), }, { Name: aws.String( "CI_BRANCH_NAME" ), Value: aws.String(branchName), }, ... }, }) åŸŗęœ¬ēš„ćŖčØ­å®šćÆć‚³ćƒ³ć‚½ćƒ¼ćƒ«ć§č”Œć£ć¦ćŠććØć—ć¦ć€č‚ćÆSourceVersionとEnvironmentVariablesOverrideć®éƒØåˆ†ć§ć™ć€‚Slack悄GitHubć‹ć‚‰ćƒ“ćƒ«ćƒ‰ć‚æć‚¹ć‚Æć‚’å‘¼ć³å‡ŗć™éš›ćÆć€SourceVersionć«ćƒ–ćƒ©ćƒ³ćƒåćŖć©ć‚’ęŒ‡å®šć—ć€EnvironmentVariablesOverrideć«ćƒ“ćƒ«ćƒ‰ć”ćØć«ē•°ćŖć‚‹ē’°å¢ƒå¤‰ę•°ć‚’čØ­å®šć—ć€å®Ÿéš›ć«CodeBulidäøŠć§čµ°ć‚‹ć‚·ć‚§ćƒ«ć‚¹ć‚ÆćƒŖćƒ—ćƒˆć§ćć®ē’°å¢ƒå¤‰ę•°ć‚’åˆ©ē”Øć—ć¦å‡¦ē†å†…å®¹ć‚’åˆ†å²ć—ć¦ć„ć¾ć™ć€‚ AWS SAMを使ってSlackとGitHub恋悉CodeBuildを動かす 上記のAPIを使い、Slack悄GitHub恋悉CodeBuildć®ćƒ“ćƒ«ćƒ‰ć‚æć‚¹ć‚Æć‚’čµ°ć‚‰ć›ć¦ć„ć¾ć™ć€‚åŸŗęœ¬ēš„ć«ćÆć€ $ sam init 恋悉Cloud Formationć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆć‚’ē”Ÿęˆć—ć€ćć“ć‹ć‚‰Lambdać®ę§‹ęˆć‚’ä½œć£ć¦ć„ćć¾ć™ć€‚ ē”Ÿęˆć•ć‚ŒćŸyamlć‚’ä½æć£ć¦å®Ÿéš›ć«AWSäøŠć«ē’°å¢ƒć‚’ę§‹ēÆ‰ć™ć‚‹ć‚³ćƒžćƒ³ćƒ‰ćÆć“ć‚“ćŖę„Ÿć˜ć§ć™ć€‚ $ aws cloudformation package \ --template-file template.yml \ --s3-bucket <ćƒ“ćƒ«ćƒ‰ć•ć‚ŒćŸlambdaē”Øćƒć‚¤ćƒŠćƒŖć®ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰å…ˆć®S3ćƒć‚±ćƒƒćƒˆ> \ --s3-prefix <ćƒ“ćƒ«ćƒ‰ć•ć‚ŒćŸlambdaē”Øćƒć‚¤ćƒŠćƒŖć®ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰å…ˆć®S3ć®ćƒ‘ć‚¹ć®prefix> \ --output-template-file .template.yml $ aws cloudformation deploy \ --template-file .template.yml \ --stack-name <ćƒ‡ćƒ—ćƒ­ć‚¤å…ˆć«stack名> \ --capabilities CAPABILITY_IAM å®Ÿéš›ćÆć“ć‚Œć‚’ć‚·ć‚§ćƒ«ć‚¹ć‚ÆćƒŖćƒ—ćƒˆć«čØ˜čæ°ć—ć¦ćć‚Œć‚’å®Ÿč”Œć™ć‚‹ć‚ˆć†ć«ć—ć¦ć„ć¾ć™ć€‚ CloudFormationć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆćƒ•ć‚”ć‚¤ćƒ«ć®ä¾‹ 弊社のCI botć‚’ę§‹ęˆć—ć¦ć„ć‚‹Cloud Formationć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆć‚’å…±ęœ‰ć—ć¦ćŠćć¾ć™ć€‚ Google Play Developer APIć®ćŸć‚ć®čØ˜čæ°ć‚‚å…„ć£ć¦ć„ć‚‹ć®ć§å°‘ć—é•·ć„ć®ć§ć™ćŒć€AWS SAMではLambdać®ćƒ‘ćƒ¼ćƒŸćƒƒć‚·ćƒ§ćƒ³ć®å®šē¾©ć‚„API Gatewayć®å®šē¾©ć‚‚äø€ē·’ć«ę›øćć“ćØćŒć§ćć‚‹ć®ćŒē‰¹å¾“ć§ć™ć€‚ CI botć®ę§‹ęˆć‚’ć™ć¹ć¦ć“ć“ć§č”Øē¾ć§ćć‚‹ć®ć§ć€ćƒ”ćƒ³ćƒ†ćƒŠćƒ³ć‚¹ć‚‚ć—ć‚„ć™ćć¦ć„ć„ć§ć™ć­ć€‚ AWSTemplateFormatVersion : "2010-09-09" Transform : 'AWS::Serverless-2016-10-31' Parameters : SlackToken : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/slack_token GitHubToken : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/github_token GoogleApiCredentials : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/google_api_credentials Resources : LambdaIamRole : Type : AWS::IAM::Role Properties : AssumeRolePolicyDocument : Version : "2012-10-17" Statement : - Effect : Allow Principal : Service : lambda.amazonaws.com Action : "sts:AssumeRole" Policies : - PolicyName : "rebecca_lambda" PolicyDocument : Version : "2012-10-17" Statement : - Effect : "Allow" Action : "s3:ListBucket" Resource : "arn:aws:s3:::anonymous-ci-artifacts" - Effect : "Allow" Action : "s3:GetObject" Resource : "arn:aws:s3:::anonymous-ci-artifacts/*" - Effect : "Allow" Action : - "codebuild:StartBuild" - "codebuild:StopBuild" - "codebuild:ListBuildsForProject" - "codebuild:BatchGetBuilds" Resource : "arn:aws:codebuild:ap-northeast-1:xxxxxxxxxxxxx:project/*" - Effect : "Allow" Action : - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:DescribeLogGroups" - "logs:DescribeLogStreams" - "logs:PutLogEvents" - "logs:GetLogEvents" - "logs:FilterLogEvents" Resource : "*" SlackApp : Type : 'AWS::Serverless::Function' Properties : Handler : lambda-rebecca-slack Runtime : go1.x CodeUri : build/lambda-rebecca-slack.zip Timeout : 300 Role : !GetAtt LambdaIamRole.Arn Environment : Variables : REBECCA_SLACK_TOKEN : !Ref SlackToken REBECCA_GITHUB_TOKEN : !Ref GitHubToken REBECCA_GOOGLE_API_CREDENTIALS : !Ref GoogleApiCredentials Events : Post : Type : Api Properties : Path : /slack Method : post GitHubApp : Type : 'AWS::Serverless::Function' Properties : Handler : lambda-rebecca-github Runtime : go1.x CodeUri : build/lambda-rebecca-github.zip Timeout : 300 Role : !GetAtt LambdaIamRole.Arn Environment : Variables : REBECCA_SLACK_TOKEN : !Ref SlackToken REBECCA_GITHUB_TOKEN : !Ref GitHubToken REBECCA_GOOGLE_API_CREDENTIALS : !Ref GoogleApiCredentials Events : Post : Type : Api Properties : Path : /github Method : post ć•ć¦ć€ćć‚Œć§ćÆčŖ¬ę˜Žć«å…„ć£ć¦ć„ćć¾ć™ć€‚ API Gatewayć®ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆć‚’Cloud Formationć‹ć‚‰ä½œęˆć—ć€Lambdaと瓐いける SlackApp : Type : 'AWS::Serverless::Function' Properties : Handler : lambda-rebecca-slack Runtime : go1.x CodeUri : build/lambda-rebecca-slack.zip Timeout : 300 Role : !GetAtt LambdaIamRole.Arn Environment : Variables : REBECCA_SLACK_TOKEN : !Ref SlackToken REBECCA_GITHUB_TOKEN : !Ref GitHubToken REBECCA_GOOGLE_API_CREDENTIALS : !Ref GoogleApiCredentials Events : Post : Type : Api Properties : Path : /slack Method : post ć“ć”ć‚‰ćŒAWS SAMの中で、Slack恮WebHook用のLambdać®čØ˜čæ°ć§ć™ć€‚Properties.Eventsä»„äø‹ćŒAPI Gatewayē”Øć®å®šē¾©ć«ćŖć£ć¦ć„ć¾ć™ć€‚ Events : Post : Type : Api Properties : Path : /slack Method : post é‡č¦ćŖć®ćÆType: Apić®ęŒ‡å®šć€ćć—ć¦PathとMethod悒Propertiesć§ęŒ‡å®šć™ć‚‹ć“ćØć§ć™ć€‚ć“ć‚Œć«ć‚ˆć‚Šć“ć®CloudFormation恧꧋ꈐ恕悌恟API Gateway恮/slack恮URL悒Slack恮WebHook恮URLćØć—ć¦ęŒ‡å®šć™ć‚‹ć“ćØć§ć€å®Ÿéš›ć«Slack恮Web Hookć‚’å—ć‘å–ć‚‹ć“ćØćŒć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚ Goć§ć“ć”ć‚‰ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’å—ć‘ä»˜ć‘ć‚‹ć«ćÆć€ func handleRequest(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error ) { ... } func main() { lambda.Start(handleRequest) } ć“ć‚“ćŖę„Ÿć˜ć®ć‚³ćƒ¼ćƒ‰ć§å—ć‘ä»˜ć‘ć‚‰ć‚Œć¾ć™ć€‚ć‚·ć‚°ćƒćƒćƒ£ćŒć‚·ćƒ³ćƒ—ćƒ«ć§ć„ć„ć§ć™ć­ć€‚ AWS Systems Manager恮Parameter Storeć‚’ä½æć£ć¦ē’°å¢ƒå¤‰ę•°ć®čØ­å®šé …ē›®ć‚’ćƒŖćƒć‚øćƒˆćƒŖć«å…„ć‚ŒćŖćć¦ęøˆć‚€ć‚ˆć†ć«ć™ć‚‹ CloudFormationć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆćƒ•ć‚”ć‚¤ćƒ«ć«APIć®ćƒˆćƒ¼ć‚Æćƒ³ć‚’å…„ć‚Œć¦ć—ć¾ć†ć®ćÆć€ć“ć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆćƒ•ć‚”ć‚¤ćƒ«č‡Ŗä½“ć‚’GitćƒŖćƒć‚øćƒˆćƒŖē­‰ć§ē®”ē†ć™ć‚‹ć“ćØć‚’č€ƒćˆć‚‹ćØć‚ć¾ć‚Šć‚ˆććÆć‚ć‚Šć¾ć›ć‚“ć€‚å¼Šē¤¾ćÆAWS Systems Manaer恮Parameter Storeć®ę©Ÿčƒ½ć‚’ä½æć†ć“ćØć§ć€ćƒ‡ćƒ—ćƒ­ć‚¤ę™‚ć«APIć®ćƒˆćƒ¼ć‚Æćƒ³ć‚’čØ­å®šć—ć¦ćƒ‡ćƒ—ćƒ­ć‚¤ć™ć‚‹ć‚ˆć†ć«ć—ć¦ć„ć¾ć™ć€‚ č©³ć—ććÆć“ć”ć‚‰ć«ę›øć„ć¦ć‚ć‚Šć¾ć™ć®ć§ć€ć“ć”ć‚‰ć‚’ć”å‚ē…§ćć ć•ć„ć€‚ https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-paramstore.html å®Ÿéš›ć«AWS SAMć®äø­ć§ć“ć”ć‚‰ć§å®šē¾©ć—ćŸćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æć‚’é©ē”Øć™ć‚‹ć«ćÆć€ Parameters : SlackToken : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/slack_token GitHubToken : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/github_token GoogleApiCredentials : Type : AWS::SSM::Parameter::Value<String> Default : /rebecca/google_api_credentials ć“ć”ć‚‰ć§ćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æåć‚’å®šē¾©ć—ć¦ćŠćć€ Environment : Variables : REBECCA_SLACK_TOKEN : !Ref SlackToken REBECCA_GITHUB_TOKEN : !Ref GitHubToken REBECCA_GOOGLE_API_CREDENTIALS : !Ref GoogleApiCredentials ć“ć®ć‚ˆć†ć«ē’°å¢ƒå¤‰ę•°ć‚’čØ­å®šć™ć‚‹å“ć§ć€ć‚ć‚‰ć‹ć˜ć‚å®šē¾©ć—ć¦ć„ćŸćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æåć‚’å‚ē…§ć™ć‚‹ć ć‘ć§å‡ŗę„ć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚ Slack用、GitHub用に走らせるLambdaē”Øć®ćƒć‚¤ćƒŠćƒŖć‚’åˆ‡ć‚Šåˆ†ć‘ć¦ćƒ‡ćƒ—ćƒ­ć‚¤ć™ć‚‹ę–¹ę³• CI botćØćŖć‚‹ćØć‚„ćÆć‚ŠSlack态GitHubćŖć©ć€ę§˜ć€…ćŖćØć“ć‚ć‹ć‚‰ć®ćƒˆćƒŖć‚¬ćƒ¼ć§ćƒ“ćƒ«ćƒ‰ć‚’čµ°ć‚‰ć›ćŸććŖć‚Šć¾ć™ćŒć€ćć‚Œć‚’ć™ć¹ć¦åŒäø€ć®Lambdać®ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆć§å‡¦ē†ć™ć‚‹ć®ćÆäæå®ˆę€§ć®é¢ć‹ć‚‰č€ƒćˆć¦ć‚‚ć‚ć¾ć‚Šć‚ˆćć‚ć‚Šć¾ć›ć‚“ć€‚å¼Šē¤¾ćÆćć®ćć‚Œćžć‚Œć‚’åˆ„ć®ćƒć‚¤ćƒŠćƒŖćØć—ć¦åˆ‡ć‚Šåˆ†ć‘ć¦ćƒ“ćƒ«ćƒ‰ć—ć¦ć„ć¾ć™ć€‚ ćØć„ć£ć¦ć‚‚ć€å˜ć« + / + /github - main.go + /slack - main.go ćØćć‚Œćžć‚Œmainćƒ‘ćƒƒć‚±ćƒ¼ć‚øć‚’ä½œć‚Šć€åˆ„ć€…ć«ćƒ‡ćƒ—ćƒ­ć‚¤ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć‚’ä½œć£ć¦ć„ć‚‹ć ć‘ć§ć™ć€‚ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-go-how-to-create-deployment-package.html 恓恔悉恫Goć‚’ä½æć£ćŸå “åˆć®ćƒ‡ćƒ—ćƒ­ć‚¤ćƒ‘ćƒƒć‚±ćƒ¼ć‚øć®ä½œć‚Šę–¹ćŒę›øć„ć¦ć‚ć‚Šć¾ć™ć€‚ ęœ€å¾Œć«ę³Øę„ē‚¹ å¤§åˆ†é•·ććŖć£ć¦ć—ć¾ć£ćŸć®ć§ć€ä»Šå›žćÆęœ€å¾Œć«CI botć‚’å®Ÿč£…ć™ć‚‹ć†ćˆć§ćƒćƒžć£ćŸćƒć‚¤ćƒ³ćƒˆć‚’ć”ē“¹ä»‹ć—ć¦ćŠćć¾ć™ć€‚ Slack恮WebHooké€£ęŗäøŠć®ę³Øę„ē‚¹ Slack恮Events API恮WebHookć‚’å®Ÿč£…ć™ć‚‹äøŠć§äø€ć¤å•é”Œć«ćŖć‚‹ć®ćŒć€ 3ē§’ć§ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć‚’čæ”ć•ćŖć„ćØć‚Øćƒ©ćƒ¼ć«ćŖć‚Šć€ćƒŖćƒˆćƒ©ć‚¤ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒé£›ć‚“ć§ćć‚‹ という点です。どうしてもCIå‘Øć‚Šć®ć‚æć‚¹ć‚ÆćÆå³åŗ§ć«ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć‚’čæ”ć›ćŖć„ć‚æć‚¹ć‚Æć‚‚ć‚ć‚Šć€ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć ć‘čæ”ć—ć¦å‡¦ē†ć‚’ć™ć‚‹ćØć„ć†ę–¹ę³•ć‚‚ć€ä¾‹ćˆć°åˆ„ć®Lambdać‚’å‘¼ć¶ćŖć©ć®ę–¹ę³•ć§å®Ÿē¾ć§ćć¾ć™ćŒć©ć†ć—ć¦ć‚‚ē…©é›‘ć«ćŖć‚ŠćŒć”ćŖć®ć§ć€ćƒŖćƒˆćƒ©ć‚¤ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’ē„”č¦–ć™ć‚‹ćØć„ć†åŠ›ęŠ€ć§åÆ¾åæœć—ć¦ć„ć¾ć™ć€‚ if req.Headers[ "X-Slack-Retry-Reason" ] != "" { // ćƒŖćƒˆćƒ©ć‚¤ę™‚ćÆē„”č¦– return events.APIGatewayProxyResponse{ StatusCode: 200 , }, nil } X-Slack-Retry-ReasonćŒć¤ć„ć¦ćŸć‚‰ęˆåŠŸćƒ¬ć‚¹ćƒćƒ³ć‚¹ć‚’å³åŗ§ć«čæ”ć—ć¦ć—ć¾ć†ćØć„ć†é›‘ćŖę–¹ę³•ć§ć™ć­ļ½— Events APIć®ä»•ę§˜ć«ć¤ć„ć¦ćÆ https://api.slack.com/events-api ć“ć“ć«č©³ć—ć„ć®ć§ć€å®Ÿéš›ć«å®Ÿč£…ć™ć‚‹å “åˆćÆć“ć“ć‚’ć‚ˆćčŖ­ć‚“ć ć†ćˆć§å®Ÿč£…ć—ć¾ć—ć‚‡ć†ć€‚ 締め 恕恦态AWS SAMとAWS CodeBuild恧CIē’°å¢ƒć‚’ä½œć‚‹ć†ćˆć§ć®ćƒć‚¤ćƒ³ćƒˆć«ć¤ć„ć¦ć„ćć¤ć‹ę›øćć¾ć—ćŸć€‚ć“ć®č¾ŗć‚’ęŠ¼ć•ćˆć¦ćŠć‘ć°ć€ć‚ćØćÆćŒć‚“ć°ć£ć¦GitHub悄Google PlayなどのAPIć‚’ć‚“ćƒŖć‚“ćƒŖå‘¼ć‚“ć§å®Ÿč£…ć™ć‚‹ć ć‘ć§ć™ć€‚ēš†ć•ć‚“ć‚‚AWS SAMとAWS CodeBuildć§ęœ€é«˜ćŖCIē’°å¢ƒć‚’ä½œć‚Šć¾ć—ć‚‡ć†ć€‚ čØ˜äŗ‹ć®å†…å®¹ć«č³Ŗå•ćŖć©ć‚ć‚‹ę–¹ćÆć€ Twitter恧 @kr9ly ć«ę°—č»½ć«čžć„ć¦ćć ć•ć„ć€‚ 恕恦态dely Advent Calendarć®ę˜Žę—„ć®ć‚æć‚¤ćƒˆćƒ«ćÆć€ ć€Œę˜Žę—„ć‹ć‚‰ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć€ćØčØ€ć‚ć‚ŒćŸć‚‰ です。愽しみですね。 2ę—„ē›®ć®čØ˜äŗ‹ć§ć™ tech.dely.jp
こんにごは。 ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č¾»ć§ć™ć€‚ Ā  ę—©é€Ÿć§ć™ćŒć€ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć£ć¦ć”å­˜ēŸ„ć§ć—ć‚‡ć†ć‹ļ¼Ÿ ē¤¾å†…ć§ć‚‚ć‚ˆćć€Œć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć€ć£ć¦ä½•ć ļ¼Ÿć€Œć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć€ć£ć¦ć©ć‚“ćŖć“ćØć‚’ć™ć‚‹ćƒć‚øć‚·ćƒ§ćƒ³ļ¼ŸćØć„ć†ćµć†ć«čžć‹ć‚Œć‚‹ę©Ÿä¼šćŒå¤šć„ć§ć™ć€‚åŒć˜ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć§ć•ćˆćć®å®Ÿę…‹ć‚’ę­£ē¢ŗć«ćÆęŠŠę”ć§ććŖć„ćØć„ć†äŗ‹ć‚‚ć‚ć‚Šć€ę”¹ć‚ć¦ćć®ä»•äŗ‹ć®å†…å®¹ć«ć¤ć„ć¦å°‘ć—ć”ē“¹ä»‹ć—ćŸć„ćØę€ć£ć¦ć„ć¾ć™ć€‚ å®ŸćÆēŸ„ć‚‰ć‚Œć¦ć„ćŖć„ćØć„ć†ć®ć‚‚ćć®ćÆćšć§ć—ć¦ć€ę—„ęœ¬ć«ćÆć¾ć ć“ć®ćƒć‚øć‚·ćƒ§ćƒ³ć‚’ę˜Žē¢ŗć«ē¤ŗć™åå‰ćŒć‚ć‚Šć¾ć›ć‚“ć€‚ļ¼ˆć§ć™ć®ć§ć€delyå†…ć§ćÆć“ć®ć‚ˆć†ć«å‘¼ć‚“ć§ć„ć¾ć™ć€‚ļ¼‰ć—ć‹ć—ćŖćŒć‚‰ć€ęµ·å¤–ć®ćƒ‡ćƒ¼ć‚æć‚’é‡č¦č¦–ć—ć¦ć„ć‚‹ä¼šē¤¾ćŖć©ć§ćÆć€ēŠ¶ę³ć«ć‚ˆć£ć¦ćƒ‡ćƒ¼ć‚æć‚µć‚¤ć‚Øćƒ³ćƒ†ć‚£ć‚¹ćƒˆć‚ˆć‚Šć‚‚é‡č¦ćŖćƒć‚øć‚·ćƒ§ćƒ³ćØč€ƒćˆć‚‰ć‚Œć‚‹ć“ćØć‚‚ć‚ć‚‹ć»ć©ć€ćØć¦ć‚‚ęœ‰ē›Šć§ć‚„ć‚ŠćŒć„ć®ć‚ć‚‹ ćØć¦ć‚‚ć‚Øć‚­ć‚µć‚¤ćƒ†ć‚£ćƒ³ć‚°ćŖćƒć‚øć‚·ćƒ§ćƒ³ ć ćØę€ć£ć¦ć„ć¾ć™ć€‚ Ā  ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćØćÆ ć¾ćšćÆć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć«ć¤ć„ć¦å°‘ć—ć”čŖ¬ę˜Žć—ćŸć„ćØę€ć„ć¾ć™ć€‚ 悈恏态 ćƒ‡ćƒ¼ć‚æć®ęµć‚Œ は ę°“ć®ęµć‚Œ ć«ä¾‹ćˆć¦čŖ¬ę˜Žć•ć‚Œć‚‹ć“ćØćŒå¤šć„ć‹ćØę€ć„ć¾ć™ć€‚ ćŸćØćˆć°ć€ ćƒ‡ćƒ¼ć‚æć®ęµć‚Œć®ć“ćØć‚’ć€Ž ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆćƒŖćƒ¼ćƒ ć€ ćØå‘¼ć‚“ć ć‚Šć€ ćƒ‡ćƒ¼ć‚æć‚’č²Æć‚ć‚‹ć‚¹ćƒˆćƒ¬ćƒ¼ć‚øć‚’ć€Ž ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æ ć€ćØå‘¼ć‚“ć ć‚Šć—ć¾ć™ć€‚ Ā  Ā  ć“ć‚ŒćÆćŖćœć§ć—ć‚‡ć†ć‹ļ¼Ÿ 恓恮 ę°“ ćØć„ć†å­˜åœØćÆć€ē§ćŸć”ć®ē”Ÿę“»ć®äø­ć«ćŠć„ć¦å…Øćę¬ ć‹ć›ćŖć„ć‚‚ć®ć§ć™ć€‚é£²ę–™ē”Øć€é£Ÿäŗ‹ē”Øć€é£Ÿå™Øć‚’ę“—ć†ć€ę‰‹ć‚’ę“—ć†ćŖć©ćŖć©ć€č›‡å£ć‚’ć²ć­ć‚Œć°ć„ć¤ć‚‚ćć“ć«ę°“ćŒå‡ŗć‚‹ćØć„ć†ēŠ¶ę…‹ćØć„ć†ć®ćÆć€ę—„ęœ¬ć«ä½ć‚“ć§ć„ć‚‹ćØćŖć‚“ć ć‹å½“ćŸć‚Šå‰ć®ć‚ˆć†ć«ę„Ÿć˜ć¾ć™ćŒå®ŸćÆå½“ćŸć‚Šå‰ć§ćÆćŖć„ć‚“ć§ć™ć€‚ ć“ć‚Œć‚’å®Ÿē¾ć—ć¦ć„ć‚‹ä»•ēµ„ćæć€ćć‚Œć“ććŒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ ć§ć™ć€‚ćć‚Œć§ćÆę°“ć®ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚’ć‚‚ć†å°‘ć—č©³ć—ćč¦‹ć¦ć„ćć¾ć—ć‚‡ć†ć€‚ Ā  ę°“ć®ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ Ā  ęØŖęµœåø‚ę°“é“å±€ć®å›³ć‚’ćŠå€Ÿć‚Šć—ć¦ć”čŖ¬ę˜Žć•ć›ć¦ć„ćŸć ććŸć„ćØę€ć„ć¾ć™ć€‚ å±±ć«é™ć‚Šę³Øć„ć é›Øę°“ćÆåœ°äø­ć‚’é€šć‚Šć‚„ćŒć¦å·ćØćŖć‚Šä½Žåœ°ćøćØęµć‚Œć¦ę„ć¾ć™ć€‚ćć®å·ć®ę°“ćŒå„å®¶åŗ­ć®č›‡å£ćøćØä¾›ēµ¦ć•ć‚Œć‚‹ć‚ć‘ć§ć™ćŒć€å¤šćć®å®¶åŗ­ć«ä¾›ēµ¦ć™ć¹ćä¾›ēµ¦é‡ć‚’äø€å®šć«äæęŒć™ć‚‹ćŸć‚ć«å·ć®ę°“ć‚’ć›ćę­¢ć‚ć¦ 惀惠 ć‚’ä½œć‚Šć¾ć™ć€‚ćƒ€ćƒ ć‹ć‚‰äø€å®šēš„ć«ę”¾å‡ŗć•ć‚Œć‚‹ę°“ćÆć€ å°Žę°“ę–½čØ­ ć‚’é€šć£ć¦ęµ„ę°“å “ć§ ęµ„åŒ– ć•ć‚Œć€ē”Ÿę“»ē”Øę°“ćØć—ć¦ć®åŸŗęŗ–ć‚’ęŗ€ćŸć—ćŸć®ć” é…ę°“ē®”ćƒ»ēµ¦ę°“ē®” ļ¼ˆę™‚ć«ćÆå¢—åœ§ćƒćƒ³ćƒ—ćŖć©ć‚’åˆ©ē”Øļ¼‰ć‚’é€šć—ć¦å„å®¶åŗ­ćøćØä¾›ēµ¦ć•ć‚Œć¾ć™ć€‚ Ā  ćƒ‡ćƒ¼ć‚æć®ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚‚å®ŸćÆć“ć‚ŒćØåŒć˜ćŖć®ć§ć™ć€‚ć¤ć¾ć‚Šć€č›‡å£ć‚’ć²ć­ć‚‹ćØ ę°“ ć§ćÆćŖć ćƒ‡ćƒ¼ć‚æ ćŒä¾›ēµ¦ć•ć‚Œć‚‹ć®ćŒćƒ‡ćƒ¼ć‚æć®ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćØć„ć†ć‚ć‘ć§ć™ć€‚ć‚‚ć—ć€ę—„åøøēš„ć«ä¾›ēµ¦ć•ć‚Œć‚‹ć¹ćć‚æć‚¹ć‚Æć‚’ć€ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć«åÆ¾ć—ć¦ęÆŽå›žSQLć‚’ē™ŗč”Œć—ć¦ć„ć‚‹ćØć—ćŸć‚‰ć€ä¾‹ć«ćŖćžć‚‰ćˆć¦ć€ć‚ćŖćŸćÆę°“ć‚’é£²ć‚€ćŸć‚ć«ć‚ć–ć‚ć–ćƒ€ćƒ ćøćØčµ“ćć€ć‚³ćƒƒćƒ—ć‚’ćƒ€ćƒ ćøćØå»¶ć€…åž‚ć‚‰ć—ć¦ę±²ćæäøŠć’ć€ęŒå‚ć—ćŸć‚éŽč£…ē½®ć§ć‚éŽć—ć¦é£²ć‚“ć§ć„ć‚‹ć‚ˆć†ćŖć‚‚ć®ćØčØ€ćˆć‚‹ćØę€ć„ć¾ć™ć€‚ļ¼ˆć—ć‹ć—ć€ć‚¢ćƒ‰ćƒ›ćƒƒć‚Æåˆ†ęžćÆå®šåøøēš„ćŖć‚æć‚¹ć‚Æć«ćÆč©²å½“ć—ćŖć„ć®ć§ć€ć•ć—ćšć‚ę°“č³Ŗę¤œęŸ»ć®ć‚ˆć†ćŖć‚‚ć®ćØč€ƒćˆć‚‰ć‚Œć¾ć™ć€‚ļ¼‰ Ā  怀怀怀怀怀 Ā  Ā ļ¼ˆåŽ³ęœØćƒ€ćƒ ć®ć‚¤ćƒ”ćƒ¼ć‚øć‚’ćŠå€Ÿć‚Šć¾ć—ćŸļ¼‰ć€€ć€€ć€€ć€€ć€€ć€€ć€€ć€€ć€€ć€€ć€€ļ¼ˆć‚éŽč£…ē½®ć®ä¾‹ļ¼‰ Ā  ć¤ć¾ć‚Šć€ę°“ćØćƒ‡ćƒ¼ć‚æć®ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć«ćÆć“ć®ć‚ˆć†ćŖåÆ¾åæœé–¢äæ‚ć«ć‚ć‚‹ćØčØ€ćˆć¾ć™ć€‚ Ā  ę°“ ⇆ ćƒ‡ćƒ¼ć‚æ 惀惠 ⇆ ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æ å°Žę°“ę–½čØ­ ⇆ ćƒ”ćƒƒć‚»ćƒ¼ć‚øć‚­ćƒ„ćƒ¼ć‚µćƒ¼ćƒ“ć‚¹ ęµ„åŒ– ⇆ ETL処理 é…ę°“ę±  ⇆ ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ é…ę°“ē®”ćƒ»ēµ¦ę°“ē®”Ā  ⇆ ć‚øćƒ§ćƒ–ćƒ•ćƒ­ćƒ¼ č›‡å£ Ā  ⇆ API态Batchć€åˆ†ęžćƒ„ćƒ¼ćƒ« Ā  ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć®å…·ä½“ēš„ćŖćƒ‡ćƒ¼ć‚æć®ęµć‚ŒćÆć“ć®ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚ ćƒ‡ćƒ¼ć‚æćÆć¾ćš ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æ ć«äæå­˜ć•ć‚Œć¦ć€ ćƒ”ćƒƒć‚»ćƒ¼ć‚øć‚­ćƒ„ćƒ¼ć‚µćƒ¼ćƒ“ć‚¹(MQS) ć‚’é€šć—ć¦ć€ćƒ‡ćƒ¼ć‚æć®ęµć‚Œļ¼ˆć¤ć¾ć‚Š ć‚¹ćƒˆćƒŖćƒ¼ćƒ  ļ¼‰ćŒåˆ¶å¾”ć•ć‚Œć¾ć™ć€‚ MQS ć«ć‚Øćƒ³ć‚­ćƒ„ćƒ¼ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćÆć€ ć‚µćƒ–ć‚¹ć‚Æćƒ©ć‚¤ćƒ 悄 ćƒˆćƒ”ćƒƒć‚Æ ć«ć‚ˆć£ć¦ćƒ‡ć‚­ćƒ„ćƒ¼ć•ć‚Œćć®å¾ŒETLå‡¦ē†ć«č­²ęø”ć•ć‚Œć¾ć™ć€‚ETLå‡¦ē†ęøˆćæ(ć¤ć¾ć‚Š ęµ„åŒ–ć•ć‚ŒćŸ )ćƒ‡ćƒ¼ć‚æćÆ ć‚øćƒ§ćƒ–ćƒ•ćƒ­ćƒ¼ ć«ä¹—ć‚Šć€ćć‚Œćžć‚ŒćŒåæ…č¦ćŖ ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ ćøćØé‹ć°ć‚Œć¦ć„ćć¾ć™ć€‚ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«äæå­˜ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćÆéšę™‚ć€ęœ€ę–°ēŠ¶ę…‹ć«ę›“ę–°ć•ć‚Œć€ API 悄 Batch ć®ć‚¤ćƒ³ćƒ—ćƒƒćƒˆćØćŖć£ćŸć‚Šć€ć‚ć‚‹ć„ćÆę©Ÿę¢°å­¦ēæ’ć®å­¦ēæ’ę™‚ć® ćƒ‡ćƒ¼ć‚æć‚»ćƒƒćƒˆ ć«ē”Øć„ć‚‰ć‚ŒćŸć‚Šć€ åˆ†ęžćƒ„ćƒ¼ćƒ« ć®ć‚³ćƒ³ć‚½ćƒ¼ćƒ«ćŖć©ć‹ć‚‰ē›“ęŽ„SQLć§å‚ē…§ć•ć‚ŒćŸć‚Šć—ć¦ę—„åøøēš„ć«ę“»ē”Øć§ćć‚‹ēŠ¶ę…‹ć‚’ē¶­ęŒć™ć‚‹ć“ćØćŒåÆčƒ½ćØćŖć‚‹ć®ć§ć™ć€‚ Ā  ć—ć‹ć—ć€äø€ę–¹ć§ć“ć®ć‚ˆć†ćŖē–‘å•ćŒć‚ć‚‹ćØę€ć„ć¾ć™ć€‚ Ā  ć€Œćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć«ē›“ęŽ„SQLć‚’ęŠ•ć’ć¦ć‚‚å®Ÿē¾ć§ćć‚‹ć®ć§ćÆļ¼Ÿć€ ćÆć„ć€ć‚‚ć”ć‚ć‚“å®Ÿē¾ćÆć§ćć¾ć™ć€‚ć—ć‹ć—ć€ē¾å®Ÿć«ē›®ć‚’å‘ć‘ć¦ćæć‚‹ćØć©ć†ć§ć—ć‚‡ć†ć‹ļ¼Ÿä½æć„ęØć¦ć®ć‚¢ćƒ‰ćƒ›ćƒƒć‚Æåˆ†ęžć§ć‚ć‚Œć°åÆčŖ­ę€§ć®ä½Žć„SQLć§ć‚ć£ć¦ć‚‚ć•ć»ć©ę”ÆéšœćÆćŖć„ć§ć—ć‚‡ć†ć€‚ć—ć‹ć—ć€å®šē‚¹č¦³ęø¬ć—ć¦ć„ććŸć„ęŒ‡ęØ™ć®é›†čØˆå‡¦ē†ć‚„ć€ę©Ÿę¢°å­¦ēæ’ć«ē”Øć„ć‚‹ćƒ‡ćƒ¼ć‚æć‚’ęÆŽå›žč¤‡é›‘ćŖSQLć§å–å¾—ć™ć‚‹ćØć—ćŸć‚‰ć€ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć«ć‚¹ćƒˆć‚¢ć•ć‚Œć¦ć„ć‚‹ćƒ‡ćƒ¼ć‚æé‡ć«ęÆ”ä¾‹ć—ć¦å‡¦ē†ć‚³ć‚¹ćƒˆć‚‚é«˜ććŖć‚Šćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć‚‚č½ć”ć¦ć—ć¾ć„ć¾ć™ć€‚ļ¼ˆä½•10ćƒšć‚æćƒć‚¤ćƒˆć®ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚ÆćÆä»Šć§ćÆćć‚Œć»ć©ēć—ć„č©±ć§ćÆćŖć„ć§ć™ć‚ˆć­ć€‚ļ¼‰ć¾ćŸć€SQLćÆé‹ē”ØćŒé•·ććŖć‚‹ćØ ć†ćŖćŽć®ć‚æćƒ¬ēš„ ć«č¤‡é›‘ćŖę§‹ęˆćŒčæ½åŠ ć•ć‚Œć¦ć„ćć‚‚ć®ćŖć®ć§ć€ę”¹äæ®ć«ć‹ć‹ć‚‹ć‚³ć‚¹ćƒˆćÆé«˜ććŖć‚Šć€ć„ćšć‚Œćƒć‚°ć®ęø©åŗŠć«ćŖć‚Šć‹ć­ć¾ć›ć‚“ć€‚ćć†ćŖć‚‰ćŖć„ćŸć‚ć«ć‚‚ć€å„å…Øć§å®‰å®šēš„ć«åæ…č¦ćŖćƒ‡ćƒ¼ć‚æć‚’ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«ä¾›ēµ¦ć™ć‚‹ä»•ēµ„ćæćØć„ć†ć®ćÆéžåøøć«é‡č¦ćŖč²¬å‹™ć‚’ę‹…ć£ć¦ć„ć‚‹ćØč€ƒćˆć‚‰ć‚Œć¾ć™ć€‚ Ā  ć€Œćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć«ē›“ęŽ„SQLć‚’ē™ŗč”Œć—ćŸę–¹ćŒåŠ å·„å‡¦ē†ć‚’åŠ ćˆć‚‹ć‚ˆć‚Šćƒ‡ćƒ¼ć‚æć®äæ”é ¼ę€§ćŒé«˜ć„ć®ć§ćÆļ¼Ÿć€ ć“ć‚Œć‚‚ē¢ŗć‹ć«äø€ē†ć‚ć‚Šć¾ć™ćŒć€ę™‚é–“ēš„ć‚³ć‚¹ćƒˆćØē²¾åŗ¦ćØć®ćƒˆćƒ¬ćƒ¼ćƒ‰ć‚Ŗćƒ•ć«ćŖć‚‹ćØę€ć„ć¾ć™ć€‚ćƒšć‚æćƒć‚¤ćƒˆć€ć‚Øć‚Æć‚µćƒć‚¤ćƒˆē“šć®ć‚¹ć‚­ćƒ£ćƒ³ć‚’ä½•åŗ¦ć‚‚å®Ÿč”Œć™ć‚‹ćØę–™é‡‘ć‚³ć‚¹ćƒˆćŒå¤§å¤‰ćŖć“ćØć«ćŖć‚Šć¾ć™ć—ć€ćƒ¬ć‚¹ćƒćƒ³ć‚¹ę™‚é–“ćŒå‡¦ē†ę™‚é–“å…Øä½“ć®ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«ćŖć‚Šć¾ć™ć€‚ć“ć®čŖ²é”Œć«ćŠć„ć¦äø€ē•Ŗé‡č¦ćŖć“ćØćÆć€ åŠ å·„ę™‚ć®å†Ŗē­‰ę€§ć‚’äæčØ¼ć™ć‚‹ ćØć„ć†ć“ćØć«ćŖć‚‹ćØę€ć„ć¾ć™ć€‚ćć®ćŸć‚ć«ćÆć€ć‚¢ć‚¦ćƒˆćƒ—ćƒƒćƒˆć®é …ē›®ę•°ć®äø€č‡“ć‚„ćƒ‡ćƒ¼ć‚æé‡ć®å¤‰åŒ–ć«åÆ¾ć™ć‚‹ćƒćƒŖćƒ‡ćƒ¼ć‚æćƒ¼ć‚’ETLå‡¦ē†ēµ‚äŗ†å¾Œć«å®Ÿč”Œć—ēµęžœć‚’Slackć§é€šēŸ„ć—ćŸć‚Šć€ć‚ć‚‹ć„ćÆå “åˆć«ć‚ˆć£ć¦å¾Œē¶šå‡¦ē†ć‚’åœę­¢ć™ć‚‹ćŖć©ć®é…ę…®ćŒåæ…č¦ć«ćŖć‚Šć¾ć™ć€‚ć„ć‚„ć„ć‚„ć€ćć‚“ćŖć“ćØć‚’ć™ć‚‹ćć‚‰ć„ćŖć‚‰SQLć‚’ē™ŗč”Œć—ćŸę–¹ćŒć‚„ć£ć±ć‚Šć„ć„ć®ć§ćÆļ¼ŸćØę€ć†ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ćŒć€ę˜Øä»Šć§ćÆē‰¹ć«ć“ć‚Œć‚‰ć®ETLå‡¦ē†ć«åŠ ćˆć€ę©Ÿę¢°å­¦ēæ’ć®ę–‡č„ˆć«ćŠć„ć¦ćƒ‡ćƒ¼ć‚æé‡ćŒę±ŗå®šēš„ć«ę‰±ćˆćŖć„čŖ²é”Œć‚‚ć‚ć‚Šć¾ć™ć®ć§ć€ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°å‡¦ē†ć‚„å‰å‡¦ē†ć‚’č”Œć†ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚µć‚¤ć‚ŗć‚’åÆå¤‰ć«ć—ć¦ć€ć‚³ć‚¹ćƒˆć‚’ęŠ‘ćˆćŸć„ćØć„ć†ę€ć„ć‚‚ć‚ć‚Šć€ć“ć®ć“ćØć‚‚ć‚ˆć‚ŠęŸ”č»ŸćŖćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³čØ­čØˆćŒę±‚ć‚ć‚‰ć‚Œć‚‹čƒŒę™ÆćØćŖć£ć¦ć„ć‚‹ćØč€ƒćˆć¾ć™ć€‚ Ā  tech.dely.jp ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚’ę§‹ēÆ‰ć™ć‚‹ ä¾‹ćØć—ć¦ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚’AWSć§ę§‹ēÆ‰ć—ćŸå “åˆć‚’ć”ē“¹ä»‹ć—ćŸć„ćØę€ć„ć¾ć™ć€‚Ā  Ā  AWSでの構築例 Ā  AWSでの構築例です。 ćƒ¦ćƒ¼ć‚¶ć®ć‚¤ćƒ™ćƒ³ćƒˆćƒ‡ćƒ¼ć‚æćÆć€Kinesis Firehose悒通恗恦S3ć«å®šęœŸēš„ć«äæå­˜ć•ć‚Œć¾ć™ć€‚ć“ć®ćƒ‡ćƒ¼ć‚æćÆć€AWS GluećŒć‚Æćƒ­ćƒ¼ćƒŖćƒ³ć‚°ć—ć¦ć‚«ć‚æćƒ­ć‚°åŒ–ć—ETLå‡¦ē†ć‚’č”Œć£ćŸć®ć”ć€å†ć³S3恫parquetćƒ•ć‚©ćƒ¼ćƒžćƒƒćƒˆē­‰ć§äæå­˜ć—ć¾ć™ć€‚ć¾ćŸć€ćć‚ŒćØåŒę™‚ć«lambdaēµŒē”±ć§AmazonMQćøćØćƒ‘ćƒ–ćƒŖćƒƒć‚·ćƒ„ć•ć‚Œć¾ć™ć€‚AmazonMQにはTopicとQueueがETLå˜ä½ć§ć‚µćƒ–ć‚¹ć‚Æćƒ©ć‚¤ćƒ–ć•ć‚Œć¦ć„ć¾ć™ć®ć§ć€ć‚Øćƒ³ć‚­ćƒ„ćƒ¼ć—ćŸć‚¤ćƒ™ćƒ³ćƒˆćƒ­ć‚°ć«åÆ¾ć—ć¦ćƒ‡ć‚­ćƒ„ćƒ¼ć‚’č”Œć„StepFunctions悄AWS Batchć®ć‚øćƒ§ćƒ–ćƒ•ćƒ­ćƒ¼ć‚’é€šć—ę‰€å®šć®ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«äæå­˜ć•ć‚Œć¾ć™ć€‚ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ćÆAthenać§ć‚¢ćƒ‰ćƒ›ćƒƒć‚Æåˆ†ęžć‚’č”Œć£ćŸć‚Šć€lambdać‹ć‚‰ć®åˆ©ē”Øć‚„ć‚¢ćƒ—ćƒŖć§ć®åˆ©ē”Øć®ēµęžœćØć—ć¦ć€å†ć³ć‚¤ćƒ™ćƒ³ćƒˆćƒ‡ćƒ¼ć‚æćØć—ć¦ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚ÆćøćØäæå­˜ć•ć‚Œć¦ć„ćć¾ć™ć€‚ ć¾ćŸć€ē®”ē†ē”»é¢ćŖć©ć‹ć‚‰RDSć«ē™»éŒ²ć—ćŸćƒ‡ćƒ¼ć‚æć«ć¤ć„ć¦ć‚‚AWS GluećŒć‚Æćƒ­ćƒ¼ćƒŖćƒ³ć‚°ć—ć¦ć‚«ć‚æćƒ­ć‚°åŒ–ć—ETLå‡¦ē†ć§ćƒ¦ćƒ¼ć‚¶ć®ć‚¤ćƒ™ćƒ³ćƒˆćƒ‡ćƒ¼ć‚æćØēµ±åˆć•ć‚Œć¦ć€ę‰€å®šć®ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«äæå­˜ć•ć‚Œć¾ć™ć€‚ AmazonMQćÆćƒ‡ćƒƒćƒ‰ćƒ¬ć‚æćƒ¼ć‚­ćƒ„ćƒ¼é…äæ”ć‚¢ćƒ©ćƒ¼ćƒ ć‚’čØ­å®šć—ćŸć‚Šć€äøŠęµćƒ—ćƒ­ć‚»ć‚¹ć®å¤±ę•—ć‚’å—ć‘ć¦äø‹ęµć®ć‚µćƒ–ć‚¹ć‚Æćƒ©ć‚¤ćƒć®ćƒ‡ć‚­ćƒ„ćƒ¼ć‚’ę­¢ć‚ćŸć‚Šć€é€†ć«äø‹ęµć®å‡¦ē†ćŒčæ½ć„ć¤ć‹ćŖć„å “åˆć«ćƒćƒƒć‚Æćƒ—ćƒ¬ćƒƒć‚·ćƒ£ćƒ¼ć‚’ć‹ć‘ć‚‹ćŖć©ć€ć¾ć•ć« 惀惠 悄 ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć®ćƒćƒ«ćƒ– ć®ć‚ˆć†ćŖå½¹å‰²ć‚’ę‹…ć£ć¦ć„ć¾ć™ć€‚ Ā  GCPでの構築例 Ā  こごらはGCPでの構築例です。 ćƒ¦ćƒ¼ć‚¶ć‚¤ćƒ™ćƒ³ćƒˆćÆFirebaseć‚’é€šć˜ć¦BigQueryć«äæå­˜ć•ć‚Œć¾ć™ć€‚BigQueryć®ćƒ‡ćƒ¼ć‚æćÆpub/subć‚’ēµŒē”±ć—ć¦dataflow恫恦ETLå‡¦ē†ć‚’č”Œć„ć¾ć™ć€‚å‡¦ē†ęøˆćæć®ļ¼ˆ ęµ„åŒ–ć•ć‚ŒćŸ ļ¼‰ćƒ‡ćƒ¼ć‚æćÆę‰€å®šć®ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«äæå­˜ć•ć‚Œć¾ć™ć€‚BigQueryć§ć‚¢ćƒ‰ćƒ›ćƒƒć‚Æåˆ†ęžć—ćŸēµęžœć‚„Cloud Functionsć‚„ć‚¢ćƒ—ćƒŖć®åˆ©ē”ØēµęžœćÆć‚„ćÆć‚Šå†ć³ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚ÆćøćØå¾Ŗē’°ć—ć¦ć„ćć¾ć™ć€‚ Ā  ć“ć®ć‚ˆć†ć«ć€ ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆćƒŖćƒ¼ćƒ ćÆåøøć€…å¾Ŗē’°ć— åæ…č¦ćŖćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć‚’ęŗ€ćŸć—ę§˜ć€…ćŖē”Øé€”ćØć—ć¦åˆ©ē”Øć•ć‚Œć¦ć„ćć¾ć™ć€‚åˆ©ē”Øć™ć‚‹APIć‚„ę©Ÿę¢°å­¦ēæ’ć®Batchå‡¦ē†ćŖć©ć«ćØć£ć¦ćć‚ŒćÆć€ć‚ćŸć‹ć‚‚č›‡å£ć‚’ć²ć­ć£ć¦ćƒ‡ćƒ¼ć‚æćŒä¾›ēµ¦ć•ć‚Œć‚‹ć‚ˆć†ć«ć€åøøę™‚ęœ€ę–°ć®ćƒ‡ćƒ¼ć‚æć‚’åˆ©ē”Øć™ć‚‹ć“ćØćŒåÆčƒ½ćØćŖć‚Šć¾ć™ć€‚ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ćŖć©ć§KPIć‚’č¦‹ć‚‹éš›ć€å®‰åæƒć—ć¦åˆ©ē”Øć§ćć‚‹ć€ć¾ćŸćÆć€API悄Batchć®ć‚¤ćƒ³ćƒ—ćƒƒćƒˆćŒåøøć«ęœ€ę–°ēŠ¶ę…‹ć‚’ē¶­ęŒć•ć‚Œć¦ć„ć‚‹ć“ćØćÆć€ć‚µćƒ¼ćƒ“ć‚¹å…Øä½“ć®å“č³Ŗć‚’äøŠć’ć€ē¾ę™‚ē‚¹ć‚ˆć‚Šć‚°ćƒ­ćƒ¼ć‚¹ć™ć‚‹ćŸć‚ć®åŸŗē¤ŽćØć—ć¦åæ…č¦äøåÆę¬ ć ćØč€ƒćˆć¦ć„ć¾ć™ć€‚ć¾ćŸć€ę©Ÿę¢°å­¦ēæ’ć§ćÆå¾Ŗē’°ć—ćŸćƒ‡ćƒ¼ć‚æć®ćƒ•ć‚£ćƒ¼ćƒ‰ćƒćƒƒć‚Æć‚’å†ć³ć‚¤ćƒ³ćƒ—ćƒƒćƒˆćƒ‡ćƒ¼ć‚æćØć™ć‚‹ć“ćØć«ć‚ˆć‚Šć€ęŽØč«–ē²¾åŗ¦ć®å®šåøøēš„å‘äøŠćŒęœŸå¾…ć§ćć¾ć™ć€‚ Ā  まとめ Ā  ä»Šå›žćÆć€ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć«ć¤ć„ć¦ć”ē“¹ä»‹ć—ć¾ć—ćŸć€‚ ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćŒä½•ć‹ļ¼Ÿć€ć‚ć‚‹ć„ćÆć€ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ä»•äŗ‹ć«ć¤ć„ć¦ćŖć‚“ćØćŖćć”ē†č§£ć„ćŸć ć‘ć‚Œć°å¤§å¤‰å¬‰ć—ć„ć§ć™ć€‚ ę°“ćŒäŗŗć«ćØć£ć¦ćƒ©ć‚¤ćƒ•ćƒ©ć‚¤ćƒ³ć§ć‚ć‚‹ć‚ˆć†ć«ć€ćƒ‡ćƒ¼ć‚æę“»ē”ØćÆä¼šē¤¾ćŒé‹å–¶ć™ć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć«ćŠć‘ć‚‹ćƒ©ć‚¤ćƒ•ćƒ©ć‚¤ćƒ³ć ćØę€ć£ć¦ć„ć¾ć™ć€‚ćć®ćŸć‚ć«ć€åøøć«ę–°é®®ć§ęµ„åŒ–ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æć‚’ä¾›ēµ¦ć™ć‚‹ć“ćØćÆå®‰å®šēš„ć«ć‚µćƒ¼ćƒ“ć‚¹ć‚’é‹å–¶ć™ć‚‹äøŠć§ć®ę ¹å¹¹ćØćŖć‚Šć¾ć™ć€‚ćć—ć¦ć€ć“ć®ćƒšć‚æćƒć‚¤ćƒˆē“šć®ćƒ‡ćƒ¼ć‚æć®ęµć‚Œć‚’å††ę»‘ć«ē®”ē†ć—ć€é‹ē”Øć‚³ć‚¹ćƒˆć‚’ęŠ‘ćˆć€ć‚µćƒ¼ćƒ“ć‚¹å‘äøŠć«č²¢ēŒ®ć™ć‚‹ć“ćØćÆćØć¦ć‚‚é›£ć—ćé«˜ć„ęŠ€č”“åŠ›ć‚’č¦ć—ć¾ć™ćŒć€ćć®åˆ†ćØć¦ć‚‚ć‚„ć‚ŠćŒć„ć®ć‚ć‚‹ćƒć‚øć‚·ćƒ§ćƒ³ć§ć‚ć‚‹ćØę€ć£ć¦ć„ć¾ć™ć€‚ Ā  ęœ€å¾Œć« Ā  今delyć§ćÆć€ć“ć®ćØć¦ć‚‚ć‚Øć‚­ć‚µć‚¤ćƒ†ć‚£ćƒ³ć‚°ćŖćƒć‚øć‚·ćƒ§ćƒ³ ć€Œć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć€ ć‚’å‹Ÿé›†ć—ć¦ćŠć‚Šć¾ć™ć€‚ć—ć‹ć—å¼Šē¤¾ć«ćŠć„ć¦ć‚‚ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ»ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć®å–ć‚Šēµ„ćæćÆć¾ć ć¾ć å§‹ć‚ćŸć°ć‹ć‚Šć§ć€ć¾ć£ćŸćę‰‹ä»˜ć‹ćšćŖē‚¹ć‚‚ę•°å¤šćć‚ć‚Šć¾ć™ć€‚ć“ć®å–ć‚Šēµ„ćæć«čˆˆå‘³ć‚’ćŠęŒć”é ‚ć‘ćŸę–¹ć€ć‚ć‚‹ć„ćÆę©Ÿę¢°å­¦ēæ’ć‚‚ä½µć›ć¦ä»Šå¾Œć”ę“»čŗć—ćŸć„ćØę¤œčØŽć•ć‚Œć¦ć„ć‚‹ę–¹ć«ćÆć†ć£ć¦ć¤ć‘ć®ćƒć‚øć‚·ćƒ§ćƒ³ć ćØę€ć£ć¦ćŠć‚Šć¾ć™ć®ć§ć€å°‘ć—ć§ć‚‚ć”čˆˆå‘³ć‚’ęŒć£ć¦é ‚ć‘ćŸę–¹ćÆćœć²ć”é€£ēµ”ćŠå¾…ć”ć—ć¦ćŠć‚Šć¾ć™ļ¼ Ā  Ā 
ć“ć‚“ć«ć”ćÆļ¼Žé–‹ē™ŗéƒØć®sakura ( @818uuu )ć§ć™ļ¼Ž ę™®ę®µćÆćƒ¬ć‚·ćƒ”å‹•ē”»ć‚µćƒ¼ćƒ“ć‚¹ ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’ę‹…å½“ć—ć¦ć„ć¾ć™ļ¼Ž ä»Šå›žćÆć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ä½œęˆć—ćŸćŠč©±ć‚’ę›øćć¾ć™ļ¼Ž ćÆć˜ć‚ć« ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć®ä½œęˆę–¹ę³• 1. General Guidelinesć‚’ēœŸä¼¼ć‚‹ 2. å“č³Ŗč©•ä¾”é …ē›®ć®ä½œęˆ 3. č©•ä¾”ćƒ†ć‚¹ćƒˆć®å®Ÿę–½ ęœ€å¾Œć« ćÆć˜ć‚ć« ćæćŖć•ć‚“ćÆä½•ć‹ć‚’ę¤œē“¢ć—ćŸę™‚ć«ć€Œę€ć£ćŸēµęžœćØć”ć‚‡ć£ćØé•ć†ćŖā€¦ā€¦ć€ćØę„Ÿć˜ćŸēµŒéØ“ćŒć‚ć‚‹ćØę€ć„ć¾ć™ļ¼Žćć†ć„ć†ę¤œē“¢ć®ē²¾åŗ¦ć‚„å“č³Ŗē®”ē†ćÆć©ć®ć‚ˆć†ć«äæć”ļ¼Œć¾ćŸļ¼Œę”¹å–„ć•ć‚Œć¦ć„ć‚‹ć®ć§ć—ć‚‡ć†ć‹ļ¼Ž Googleだと General Guidelines ćØć„ć†ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ćŒć‚ć‚Šļ¼Œćć‚Œć«åŸŗć„ćå¤šćć®č©•ä¾”č€…ćŒę¤œē“¢å“č³Ŗć®č©•ä¾”ć‚’č”Œć£ć¦ć„ć¾ć™ļ¼Ž ä»Šå›žć‚Æćƒ©ć‚·ćƒ«ć§ć‚‚ćć®č©¦ćæć«å–ć‚Šēµ„ć‚“ć§ćæć‚ˆć†ćØę€ć„ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ä½œęˆć—ć¾ć—ćŸļ¼Ž ć¾ć ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć™ć¹ć¦ć‚’å…¬č”Øć§ćć‚‹ć»ć©ę•“ć£ć¦ćÆć„ćŖć„ć®ć§ć™ćŒļ¼Œä½œęˆę–¹ę³•ć‚’äø€éƒØå…¬é–‹ć—ć¾ć™ļ¼Ž ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć®ä½œęˆę–¹ę³• 1. General Guidelinesć‚’ēœŸä¼¼ć‚‹ まずはGoogle恮 General Guidelines ćØć„ć†ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ēœŸä¼¼ć¦ć–ć£ćć‚Šć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć®ćƒ†ćƒ³ćƒ—ćƒ¬ćƒ¼ćƒˆć‚’ä½œęˆć—ć¾ć—ćŸļ¼Ž 2. å“č³Ŗč©•ä¾”é …ē›®ć®ä½œęˆ ę¬”ć«ę¤œē“¢ć®å“č³Ŗć‚’č©•ä¾”ć™ć‚‹é …ē›®ć‚’ä½œęˆć—ć¾ć—ćŸļ¼Ž General Guidelines ć«ćÆå“č³Ŗč©•ä¾”é …ē›®ćŒę•°åå€‹ć‚ć‚Šć¾ć™ćŒļ¼Œä»Šå›žćÆć»ć¼čøč„²ćÆć—ć¾ć›ć‚“ć§ć—ćŸļ¼ŽćŖćœćŖć‚‰ļ¼ŒGooglećØć‚Æćƒ©ć‚·ćƒ«ćÆę¤œē“¢ć®ę€§č³Ŗć‚„ę¤œē“¢ć®ę ”ę­£ļ¼Œč©•ä¾”ć™ć‚‹č»øćŖć©ćŒå¤§ććē•°ćŖć‚‹ć‹ć‚‰ć§ć™ļ¼Ž ćć“ć§ļ¼Œć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć«åˆć‚ć›ć¦äø€ć‹ć‚‰č©•ä¾”é …ē›®ć‚’ä½œęˆć—(ćƒŸćƒ‹ćƒžćƒ ć§ćÆć‚ć‚Šć¾ć™ćŒ)ä»Šå›žćÆ4ć¤ć®é …ē›®ć‚’ä½œęˆć—ć¾ć—ćŸļ¼Ž ćć®äø­ć®äø€ć¤ć‚’ē“¹ä»‹ć™ć‚‹ćØć€Œćć®ćƒ¬ć‚·ćƒ”ćŒå®šē•Ŗć«čæ‘ć„ć‹ć€ćØć„ć†é …ē›®ć‚’ä½œć‚Šć¾ć—ćŸļ¼Ž ä¾‹ćˆć°ļ¼ˆć©ć”ć‚‰ć‚‚ē“ ę•µćŖćƒ¬ć‚·ćƒ”ć§ć™ćŒļ¼‰ļ¼Œć€Ž[å¤‰ć‚ć‚ŠēØ®ļ¼ćƒŸćƒ‹ć‚‚ćšććƒćƒ³ćƒćƒ¼ć‚°]ć€ćØć€Ž[ē°”å˜ćƒ‡ćƒŸć‚°ćƒ©ć‚¹ć‚½ćƒ¼ć‚¹ć®ćƒćƒ³ćƒćƒ¼ć‚°]ć€ć ćØå¾Œč€…ć®ć»ć†ćŒć‚ˆć‚Šäø€čˆ¬ēš„ć«å®šē•Ŗć®ćƒćƒ³ćƒćƒ¼ć‚°ćØę„Ÿć˜ć‚‹ćØę€ć„ć¾ć™ć—ļ¼Œå®šē•Ŗć•ćØć„ć†ć®ćÆćƒ¬ć‚·ćƒ”ć‚’éøć¶äø€ć¤ć®ćƒć‚¤ćƒ³ćƒˆć«ćŖć‚‹ćØč€ƒćˆćŸć‹ć‚‰ć§ć™ļ¼Ž ćƒ¬ć‚·ćƒ”ć‚’éøć¶ćƒć‚¤ćƒ³ćƒˆćÆć¤ć¾ć‚Šć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ēµęžœć§éøć¶ćƒć‚¤ćƒ³ćƒˆć«ć‚‚ć¤ćŖćŒć£ć¦ćć¾ć™ļ¼Ž www.kurashiru.com www.kurashiru.com また,1ć¤ć®é …ē›®ć«ć¤ć5ę®µéšŽč©•ä¾”(-2,-1,-0,1,2点)ć‚’ć¤ć‘ć‚Œć‚‹ć‚ˆć†ć«čØ­å®šć—ć¾ć—ćŸļ¼Ž 恓悌恧1ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć«ć¤ć4é …ē›®*5ę®µéšŽć‚’ć¤ć‘ć‚‹ć®ć§ęœ€ä½Ž-8ē‚¹ć€œęœ€é«˜8点の17ę®µéšŽć®č©•ä¾”ć‚’ć¤ć‘ć‚Œć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć—ćŸļ¼Ž 3. č©•ä¾”ćƒ†ć‚¹ćƒˆć®å®Ÿę–½ č©•ä¾”é …ē›®ć‚’ä½œęˆć—ēµ‚ćˆćŸå¾Œć«ļ¼Œćć‚Œć§ęžœćŸć—ć¦ę•°å€¤ćŒć†ć¾ćä»˜ćć®ć‹ć‚’ćƒ†ć‚¹ćƒˆć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ļ¼Ž ä»Šå›žćÆ1äŗŗćŖć®ć§č©•ä¾”ćƒ†ć‚¹ćƒˆć«ć‹ć‹ć‚‹ę™‚é–“ć‚‚č€ƒę…®ć—ć¦č©•ä¾”ć™ć‚‹ę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ęØ™ęœ¬čŖæęŸ»ć‚’č”Œć„č©•ä¾”ćƒ†ć‚¹ćƒˆć‚’å®Ÿę–½ć—ć¾ć—ćŸļ¼Ž č©•ä¾”ćƒ†ć‚¹ćƒˆć‚’å®Ÿę–½ć—ćŸēµęžœļ¼Œč©•ä¾”é …ē›®ćƒ»č©•ä¾”ę–¹ę³•ćØć‚‚ć«ę¦‚ć­ć‚ˆć•ćć†ć ćØć„ć†ć“ćØć‚’ē¢ŗčŖć§ćć¾ć—ćŸļ¼Ž ćƒŸćƒ‹ćƒžćƒ ć§ćÆć‚ć‚Šć¾ć™ćŒć“ć‚Œć§ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ä½œęˆć™ć‚‹ć“ćØćŒć§ćć¾ć—ćŸļ¼Ž ęœ€å¾Œć« ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢å“č³Ŗč©•ä¾”ć‚¬ć‚¤ćƒ‰ćƒ©ć‚¤ćƒ³ć‚’ä½œęˆć—ć¦ćæć‚‹ćØé›£ć—ć„ć“ćØć ć‚‰ć‘ć§ć—ćŸļ¼Ž ć—ć‹ć—ļ¼Œęœ¬å½“ć«é›£ć—ć„ć®ćÆć“ć‚Œć‚’é©åˆ‡ć«é‹ē”Øć—ćć‚Œć‚’ę¤œē“¢ć®ę”¹å–„ć«ć„ć‹ć™ć“ćØć ćØę€ć„ć¾ć™ļ¼Ž ę¤œē“¢å“č³Ŗč©•ä¾”č‡Ŗä½“å–ć‚Šēµ„ć‚“ć§ć„ć‚‹ćØć“ć‚ćÆå°‘ćŖć„ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ćŒćŖć«ć‹ēŸ„č¦‹ć‚’å…±ęœ‰ć§ćć‚Œć°å¹øć„ć§ć™ļ¼Ž delyć§ćÆć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ļ¼Žć‚ˆć‚ć—ććŠé”˜ć„ć—ć¾ć™ļ¼Ž www.wantedly.com
ć“ć‚“ć«ć”ćÆć€ę©Ÿę¢°å­¦ēæ’ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č¾»ć§ć™ć€‚ Ā  å…ˆę—„ć€SageMakerć®ę“»ē”Øäŗ‹ä¾‹ć§ē™»å£‡ć•ć›ć¦é ‚ćć¾ć—ćŸć€‚ machinelearningnighttokyo20181.splashthat.com Ā  Ā  ę©Ÿę¢°å­¦ēæ’ć§äø€ē•Ŗę™‚é–“ć®ęŽ›ć‹ć‚‹ä½œę„­ćØć„ćˆć°ć€ć‚„ćÆć‚Š å‰å‡¦ē† ć§ć™ć‚ˆć­ć€‚ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć‹ć‚‰ćƒ‡ćƒ¼ć‚æć‚’å–å¾—ć—ć¦ć€åæ…č¦ć«åæœć˜ć¦ę§˜ć€…ćŖćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć‹ć‚‰ćƒ‡ćƒ¼ć‚æć‚’ć‹ćé›†ć‚ć¦ć€åŠ å·„ć—ć¦ć€ć¾ćŸåˆ„ć®ćƒ‡ćƒ¼ć‚æć‚¹ćƒˆć‚¢ć«å…„ć‚Œć¦ćØć€‚ć€‚ć€‚ å¤§é‡ć®ćƒ‡ćƒ¼ć‚æć‚’ć‚ć£ć”ć«ć‚„ć£ćŸć‚Šć“ć£ć”ć«ć‚„ć£ćŸć‚Šć—ć¦ć€ć‚‚ć†äø€ä½“ęœ€åˆćÆä½•ćŒć—ćŸć‹ć£ćŸć®ć‹ć•ć£ć±ć‚Šć‚ć‹ć‚‰ćŖććŖć£ć¦ć—ć¾ć†ć“ćØćŒć‚ć‚Šć¾ć™ć€‚ Ā  Ā ćć‚Œć«åŠ ćˆć¦ć€ę©Ÿę¢°å­¦ēæ’ć§ćÆć€å­¦ēæ’ć—ćŸćƒ¢ćƒ‡ćƒ«ć«åÆ¾ć—ć¦ęŽØč«–ć—ćŖć‘ć‚Œć°ćŖć‚Šć¾ć›ć‚“ćŒć€ć¾ćŸć“ć®ęŽØč«–ēµęžœćŒåæ…ćšć—ć‚‚ ę±ŗå®šēš„ć§ćÆćŖć„ ćØć„ć†čŖ²é”Œć‚‚å«ć‚“ć§ć„ć¾ć™ć€‚ 恓恮态 ę±ŗå®šēš„ć§ćÆćŖć„ ćØćÆć©ć†ć„ć†ć“ćØć§ć—ć‚‡ć†ć‹ļ¼Ÿ å‹•ä½œćŒäŗˆęø¬åÆčƒ½ćŖć‚‚ć®ć€ć¤ć¾ć‚Šć€å…„åŠ›ć—ćŸć‚‚ć®ć«åÆ¾ć—ć¦ć€åøøć«åŒć˜ēµŒč·Æć§čØˆē®—ć‚’č”Œć„ć€åŒć˜ēµęžœć‚’å‡ŗåŠ›ć™ć‚‹ć€ć“ć†ć„ć†ęŒÆć‚‹čˆžć„ć‚’ę±ŗå®šēš„ćØ čØ€ć„ć¾ć™ć€‚ćŖć®ć§ć™ćŒć€ę©Ÿę¢°å­¦ēæ’ć«ćŠć„ć¦ć€ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°ć§ē”Ÿęˆć•ć‚Œć‚‹ćƒ¢ćƒ‡ćƒ«ćØć„ć†ć®ćÆć€ćć®å­¦ēæ’ćƒ‡ćƒ¼ć‚æć«ć‚ˆć£ć¦ć€åŒć˜č²¬å‹™ć‚’ę‹…ć£ćŸćƒ¢ćƒ‡ćƒ«ć§ć‚ć£ć¦ć‚‚ęŒÆć‚‹čˆžć„ćŒå¤‰ć‚ć£ć¦ć—ć¾ć„ć¾ć™ć€‚ ćŸćØćˆć°ć€åŒć˜ļ¼‘ļ¼ļ¼äø‡ä»¶ć®ćƒ‡ćƒ¼ć‚æć«ć¤ć„ć¦ļ¼“ć‚Æćƒ©ć‚¹åˆ†é”žć‚’č”Œć†å “åˆć«ć€ę˜Øę—„ęŽØč«–ć—ćŸćØćć«ćÆć€ć‚Æćƒ©ć‚¹AćŒļ¼“ļ¼“äø‡ä»¶ć€ć‚Æćƒ©ć‚¹BćŒļ¼“ļ¼“äø‡ä»¶ć€ć‚Æćƒ©ć‚¹CćŒļ¼“ļ¼“äø‡ä»¶ćØē¶ŗéŗ—ć«åˆ†é”žć•ć‚Œć¦ć„ćŸćØć—ć¾ć™ć€‚ć—ć‹ć—ć€ä»Šę—„åŒć˜ćƒ‡ćƒ¼ć‚æć§ęŽØč«–ć—ćŸć‚‰ć‚Æćƒ©ć‚¹AćŒļ¼˜ļ¼äø‡ä»¶ć€ć‚Æćƒ©ć‚¹BćŒļ¼‘ļ¼•äø‡ä»¶ć€ć‚Æćƒ©ć‚¹Cが5äø‡ä»¶ćØå…Øē„¶é•ć†ēµęžœć‚’å‡ŗåŠ›ć—ćŸć‚Šć—ć¦ć€ć¾ć•ć« äŗˆęø¬äøåÆčƒ½ ćŖć‚ć‘ć§ć™ć€‚ Ā  MLć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćƒ»ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć®ę§‹ēÆ‰ ćć“ć§ć€ć“ć‚“ćŖć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ćƒ»ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć‚’ę§‹ēÆ‰ć—ć¾ć—ćŸć€‚ Ā  ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ćƒ¼ć®å¤‰é· å®ŸćÆć€å…ƒć€…ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚ÆćŒBigQueryćŖć®ć§ć€ę§‹ēÆ‰ć®čØ­čØˆå½“åˆćÆGCP Cloud PubSubとDataflowć‚’ä½æć£ć¦ę§‹ēÆ‰ć—ć‚ˆć†ćØć—ćŸć‚“ć§ć™ć­ć€‚č¦Ŗå’Œę€§ćŒé«˜ć„ć—ä½æć„ć‚„ć™ć„ć®ć§ć€‚ Ā  ć¾ć•ć«ć“ć‚“ćŖę„Ÿć˜ć§ć™ć‚ˆć­ć€‚ Ā Ā  ć—ć‹ć—ć€ć‚¢ćƒ—ćƒŖć‹ć‚‰Cloud PubSubć«åÆ¾ć—ć¦ć€ć‚¤ćƒ™ćƒ³ćƒˆć‚’ćƒ‘ćƒ–ćƒŖćƒƒć‚·ćƒ„ć™ć‚‹ćŸć‚ć®SDKćŒęä¾›ć•ć‚Œć¦ć„ćŖć‹ć£ćŸć‚“ć§ć™ć€‚RESTć®ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆćÆē”Øę„ć•ć‚Œć¦ć‚ć‚‹ć‚“ć§ć™ćŒć€ćƒćƒƒćƒ•ć‚”ćƒŖćƒ³ć‚°ć‚„ćƒŖćƒˆćƒ©ć‚¤ć«ć¤ć„ć¦ćÆSDKć«ä»»ć›ćŸć„ćŖććØć„ć†ę€ć„ćŒć‚ć‚Šć¾ć—ćŸć€‚ Ā  Ā  Ā ćć—ć¦ę¬”ć«ć€AWS Batch态Step Functionsć‚’ę¤œčØŽć—ć¾ć—ćŸć€‚AWS BatchćÆéžåøøć«ē°”å˜ć«ä½æćˆć¾ć™ć—ć€å¤§é‡ć®ćƒ‡ćƒ¼ć‚æć§ć‚‚ęÆ”č¼ƒēš„é«˜é€Ÿć«å‡¦ē†ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ć—ć‹ć—ćƒÆćƒ¼ć‚Æćƒ­ćƒ¼ćƒ‰ćŒå›ŗå®šć•ć‚Œć¦ć—ć¾ć†ć“ćØć§ęŸ”č»ŸćŖć‚¹ć‚±ćƒ¼ćƒ«å¤‰ę›“ćŒęœ›ć‚ćŖć„ć“ćØćØć€ćƒÆćƒ¼ć‚Æćƒ­ćƒ¼ćƒ‰ć®ē®”ē†ćØć‚³ćƒ¼ćƒ‰ć®ē®”ē†ćŒåˆ„ć€…ć«ćŖć£ć¦ć—ć¾ć†ć®ć§ć€MLćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć§ć®DevOpsćŒäø€å…ƒåŒ–ć§ććŖć„ćØć„ć†čŖ²é”ŒćŒć‚ć‚Šć¾ć—ćŸć€‚ Ā  Ā  Step FunctionsćÆć€ē§ćŸć”ćŒę€ć„ęćć‚¤ćƒ”ćƒ¼ć‚øć«ć‚‚ć£ćØć‚‚čæ‘ć„å½¢ć®ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ć‚’ęä¾›ć—ć¦ćć‚Œć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć§ćÆć‚ć‚Šć¾ć—ćŸćŒć€AWS lambdać®ćæćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ć‚¹ćƒ†ćƒƒćƒ—ć«ęŒ‡å®šć™ć‚‹ć“ćØćŒåÆčƒ½ćØć„ć†ć“ćØć§ć€ć‚„ćÆć‚ŠMLćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć®DevOpsćŒäø€å…ƒē®”ē†ć§ććŖć„čŖ²é”Œć‚’č§£ę¶ˆć™ć‚‹ć“ćØćÆć§ćć¾ć›ć‚“ć§ć—ćŸć€‚ Ā  ć—ć‹ć—ć€ć“ć‚Œć‚‰ć®ćƒžćƒćƒ¼ć‚øćƒ‰ćŖć‚µćƒ¼ćƒ“ć‚¹ć«ć¤ć„ć¦ćÆć€åæ…č¦ć«åæœć˜ć¦ä»Šå¾Œć‚‚ć©ć‚“ć©ć‚“ä½æć£ć¦ć„ććŸć„ć§ć™ć—ć€ć‚Æćƒ­ć‚¹ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć§ęä¾›ć•ć‚Œć‚‹ę§˜ć€…ćŖć‚µćƒ¼ćƒ“ć‚¹ć«ć¤ć„ć¦ć‚‚ć€č‰Æć„ć‚µćƒ¼ćƒ“ć‚¹ćÆ é©ęé©ę‰€ ć§ä½æć£ć¦ć„ććŸć„ć€‚ćć‚“ćŖę¬²å¼µć‚ŠćŖę€ć„ć‚‚ć‚ć‚Šć¾ć—ćŸć€‚ Ā  Kubernetesć®ęŽ”ē”Ø ćć‚“ćŖć‚ć‘ć§Kubernetesć‚’ęŽ”ē”Øć—ć¾ć—ćŸć€‚KubernetesにはJobs态CronJobćØć„ć†ć®ćŒć‚ć‚Šć¾ć—ć¦ćƒćƒƒćƒć‚’čµ·å‹•ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ē‰¹ć«CronJobćÆć‚¹ć‚±ć‚øćƒ„ćƒ¼ćƒ«čµ·å‹•ć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ć“ć®ę©Ÿčƒ½ć‚’åˆ©ē”Øć—ć¦ć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚’ēµ„ć‚‚ć†ćØč€ƒćˆćŸć‚ć‘ć§ć™ć€‚ć“ć†ć™ć‚Œć°ć€ć‚‚ć”ć‚ć‚“ć‚Æćƒ­ć‚¹ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć§ć‚‚ä½æćˆć¾ć™ć—ć€ ę±ŗå®šēš„ćŖ ćƒÆćƒ¼ć‚Æćƒ­ćƒ¼ćƒ‰ć®ć§ć‚‚ć„ć‘ćć†ćØåˆ¤ę–­ć—ćŸćŖć‚‰ć€GCP Cloud Dataflow态AWS Batch态Step Functions悒CronJobć‹ć‚‰å‘¼ć³å‡ŗć—ć¦ä½æć†ćØć„ć£ćŸę©ęµć‚‚å—ć‘ć‚‰ć‚Œć¾ć™ć€‚ē¾ēŠ¶ć§ć‚‚ć‚³ćƒ³ćƒ†ćƒŠå†…ć‹ć‚‰ć€AWS Glue恮ELTć‚øćƒ§ćƒ–ć«åÆ¾ć—ć¦pySparkć®ć‚¹ć‚ÆćƒŖćƒ—ćƒˆć«ęŠ•ć’ć¦å‡¦ē†ć‚’ē§»č­²ć•ć›ćŸć‚Šć€AWS Athenać®ć‚Æć‚ØćƒŖć«čØˆē®—ć‚’ä»»ć›ćŸć‚ŠćØę“»ē”Øć—ć¦ć„ć¾ć™ć€‚ ć¾ćŸć€ę©Ÿę¢°å­¦ēæ’ć® éžę±ŗå®šćØć„ć†čŖ²é”Œ ć§ć™ćŒć€ęŽØč«–ēµęžœć®ć‚µć‚¤ć‚ŗć«ć‚ˆć£ć¦ę¬”ć®å‡¦ē†ć§åˆ©ē”Øć™ć‚‹ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć®ć‚µć‚¤ć‚ŗć‚’å¤‰ćˆćŸć‚Šć€ć‚¹ć‚±ćƒ¼ćƒ«ć‚¢ć‚¦ćƒˆć—ćŸć‚ŠćØęŸ”č»ŸćŖåÆ¾åæœćŒåÆčƒ½ćØćŖć‚Šć¾ć™ć€‚ ćć—ć¦ć‚‚ć†äø€ć¤ć€Kubernetesć‚’ęŽ”ē”Øć™ć‚‹ć«č‡³ć£ćŸå¤§ććŖē†ē”±ćŒć‚ć‚Šć¾ć—ćŸć€‚ Amazon SageMakerの擻用 恝悌恌态Amazon SageMakerの擻用です。 Amazon SageMakerćÆć€ę©Ÿę¢°å­¦ēæ’ćƒ¢ćƒ‡ćƒ«ć‚’ć‚ć‚‰ć‚†ć‚‹č¦ęØ”ć§ć€čæ…é€Ÿć‹ć¤ē°”å˜ć«ę§‹ēÆ‰ć€ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°ć€ćƒ‡ćƒ—ćƒ­ć‚¤ć§ćć‚‹ć‚ˆć†ć«ć™ć‚‹å®Œå…Øćƒžćƒćƒ¼ć‚øćƒ‰åž‹ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć§ć™ć€‚SageMakerćŒęä¾›ć™ć‚‹ćƒ“ćƒ«ćƒˆć‚¤ćƒ³ć‚¢ćƒ«ć‚“ćƒŖć‚ŗćƒ ćØć€DeepLearningćƒ•ćƒ¬ćƒ¼ćƒ ćƒÆćƒ¼ć‚ÆćÆć™ć¹ć¦ć€ć‚³ćƒ³ćƒ†ćƒŠć§ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°JOBćŒčµ·å‹•ć§ćć¾ć™ć€‚ć¤ć¾ć‚Šć€ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°JOBćØć„ć†ć‚³ć‚¹ćƒˆć®å¤§ććŖå‡¦ē†ć‚’ć‚³ćƒ³ćƒ†ćƒŠć«ē§»č­²ć•ć›ć‚‹ć“ćØćŒć§ćć‚‹ć®ć§ć€ćƒÆćƒ¼ć‚Æćƒ­ćƒ¼ćƒ‰ć®ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹č‡Ŗä½“ćÆęÆ”č¼ƒēš„å°ć•ćć¦ęøˆć‚€ćØć„ć†ć“ćØćŖć‚“ć§ć™ć€‚ Ā  Ā  Ā  Kubernetesの運用 kubernetesć®é‹ē”Øć®äø­ć§ć„ćć¤ć‹å·„å¤«ć—ć¦ć„ć‚‹ē‚¹ćŒć‚ć‚Šć¾ć™ć®ć§ć€å°‘ć—ć”ē“¹ä»‹ć—ćŸć„ćØę€ć„ć¾ć™ć€‚Ā  Ā  argo Ā  1つ目は、argoć®å°Žå…„ć§ć™ć€‚argoćÆćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ć‚’ē“°ć‹ććƒ‡ć‚¶ć‚¤ćƒ³ć§ćć‚‹ć ć‘ć§ćŖćć€ē›“åˆ—å‡¦ē†ć€äø¦åˆ—å‡¦ē†ć‚‚YAMLäø€ć¤ć«čØ˜čæ°ć™ć‚‹ć“ćØćŒć§ćć‚‹ć®ć§ćØć¦ć‚‚ä¾æåˆ©ć§ć™ć€‚ē®”ē†ē”»é¢ć‚’ē«‹ć”äøŠć’ć¦ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ćŒåÆč¦–åŒ–ć§ćć‚‹ć®ć‚‚ć„ć„ć§ć™ć‚ˆć­ć€‚ Ā  Ā  Ā  kubewatch Ā  2つ目はkubewatchć®å°Žå…„ć§ć™ć€‚ć“ć‚Œć«ć‚ˆć‚Šć€jobć®é–‹å§‹ćØēµ‚äŗ†ć€ć‚Øćƒ©ćƒ¼ćŖć©ć«ć¤ć„ć¦ćÆć€ć“ć‚“ćŖę„Ÿć˜ć§kubewatch悒通恗恦icebergć•ć‚“ćŒēŸ„ć‚‰ć›ć¦ćć‚Œć¦ć¾ć™ć€‚ Ā  Ā  DataDog Ā  ćć—ć¦ļ¼“ē•Ŗē›®ćÆDataDogć®å°Žå…„ć§ć™ć€‚DataDogć‚Øćƒ¼ć‚øć‚§ćƒ³ćƒˆć§Podć®ēŠ¶ę³ć®ē›£č¦–ć‚’č”Œć£ć¦ć„ć¾ć™ć€‚č¤‡ę•°ć®nodeć®ēŠ¶ę³ć‚’äø€å…ƒēš„ć«ē›£č¦–ć§ćć‚‹ć®ć§ćØć¦ć‚‚åŠ©ć‹ć£ć¦ć„ć¾ć™ć€‚ Ā  Ā  waterć‚³ćƒžćƒ³ćƒ‰ć®é–‹ē™ŗ ćć—ć¦ļ¼”ć¤ē›®ćØć—ć¦ć€waterć‚³ćƒžćƒ³ćƒ‰ćØć„ć†ć®ć‚’é–‹ē™ŗć—ć¾ć—ćŸć€‚ kubernetes悄minikubećŖć©ć‚³ćƒžćƒ³ćƒ‰ćŒćŸćć•ć‚“ć‚ć£ć¦é‹ē”Øć™ć‚‹äøŠć§ęŠŠę”ć™ć‚‹ć®ćŒå¤§å¤‰ć§ć™ć‚ˆć­ć€‚argoć®å°Žå…„ć§argoć‚³ćƒžćƒ³ćƒ‰ć¾ć§å¢—ćˆć¦ć‚‚ć†č¦šćˆćć‚Œć¾ć›ć‚“ć€‚ćć“ć§waterć‚³ćƒžćƒ³ćƒ‰ć§åæ…č¦ćŖć‚³ćƒ³ćƒ†ć‚­ć‚¹ćƒˆå˜ä½ć«ć‚³ćƒžćƒ³ćƒ‰ć‚’ć¾ćØć‚ć‚‹ć“ćØć§ć€ć‚³ćƒžćƒ³ćƒ‰ć®ćƒ¦ćƒ¼ć‚¶ćƒ“ćƒŖćƒ†ć‚£ć®å‘äøŠć«å–ć‚Šēµ„ć‚“ć§ć„ć¾ć™ć€‚ Ā  installer恧water ć‚³ćƒžćƒ³ćƒ‰ć§ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć—ć¾ć™ć€‚ Ā  UsagećŒč”Øē¤ŗć•ć‚Œć¾ć™ć€‚ Ā  ćƒ‡ćƒ—ćƒ­ć‚¤ć‚³ćƒžćƒ³ćƒ‰ $ water deploy -e env -p project_name ć“ć‚“ćŖę„Ÿć˜ć§ę–°ć—ć„ćƒ—ćƒ­ć‚øć‚§ć‚Æćƒˆć®ä½œęˆć‹ć‚‰ćƒ‡ćƒ—ćƒ­ć‚¤ć€Podの編集などもwaterć‚³ćƒžćƒ³ćƒ‰ć§äø€å…ƒēš„ć«ēµ±äø€ēš„ćŖę“ä½œćŒåÆčƒ½ć«ćŖć£ć¦ć„ć¾ć™ć€‚(å…ØéƒØć§ćÆćŖć„ć‚“ć§ć™ć‘ć©ć€‚ć€‚) Ā  ä»Šå¾Œć®ćƒ­ćƒ¼ćƒ‰ćƒžćƒƒćƒ— ē¾åœØć€ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć®åˆ¶å¾”ć‚„Pod恮Up/Downについては、専用のPod(Control Roomļ¼‰ć‚’ē«‹ć¦ć¦åˆ¶å¾”ć‚’č”Œć£ć¦ć‚‹ć®ć§ć™ćŒć€ć“ć‚Œć‚’Amazon MQを使ってQueueć«ć‚ˆć‚‹ć‚¤ćƒ™ćƒ³ćƒˆćƒ‰ćƒŖćƒ–ćƒ³ćŖčØ­čØˆć‚’ę¤œčØŽć—ć¦ć„ć¾ć™ć€‚Ā  Ā  Amazon MQ Ā  åæ…č¦ć«åæœć˜ć¦å­¦ēæ’ć‚Øćƒ³ć‚øćƒ³ć‚‚ é©ęé©ę‰€ ä½æć£ć¦ć„ććŸć„ćØč€ƒćˆć¦ć„ć¾ć™ć€‚ Ā  Amazon SageMaker GCP AutoML GCP ML Engine Ā  ęœ€å¾Œć« Ā  delyć§ćÆä»Šå›žē“¹ä»‹ć—ć¾ć—ćŸMLć‚¹ćƒˆćƒŖćƒ¼ćƒ ćƒ‘ć‚¤ćƒ—ćƒ©ć‚¤ćƒ³ć‚’ę ¼å„½č‰Æćć‚°ćƒ­ćƒ¼ć‚¹ć—ć¦ćć‚Œć‚‹ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ļ¼ Ā  www.wantedly.com
ć“ć‚“ć«ć”ćÆļ¼Žé–‹ē™ŗéƒØć®sakura ( @818uuu )ć§ć™ļ¼Ž ę™®ę®µćÆćƒ¬ć‚·ćƒ”å‹•ē”»ć‚µćƒ¼ćƒ“ć‚¹ ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’ę‹…å½“ć—ć¦ć„ć¾ć™ļ¼Ž ä»Šå›žćÆč¾žę›øć‚·ćƒŽćƒ‹ćƒ ē®”ē†ć®é‹ē”Øć«ć¤ć„ć¦čæ°ć¹ć¾ć™ļ¼Ž äø€čˆ¬ēš„ć«ć‚‚ćŖć‹ćŖć‹ēŸ„č¦‹ćŒå…±ęœ‰ć•ć‚Œć¦ć„ćŖć„éƒØåˆ†ćŖć®ć§ę‹…å½“č€…ć®ę–¹ćÆč¦‹ć¦ęćÆćŖć„ćØę€ć„ć¾ć™ļ¼Ž ć§ćÆļ¼Œć•ć£ććå†…å®¹ć«å…„ć£ć¦ć„ćć¾ć™ļ¼Ž ä½œę„­å†…å®¹ 1.ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™ŗč¦‹ ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę¤œē“¢ć—ćŸć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćƒ­ć‚°ć‹ć‚‰č¦‹ć¤ć‘ć‚‹ ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć”ćØć®é›¢č„±ēŽ‡ć‹ć‚‰č¦‹ć¤ć‘ć‚‹ ę°—ć„ć„ćŸę–¹ć‹ć‚‰ē›“ęŽ„ę•™ćˆć¦ć‚‚ć‚‰ć† ęœ¬ē‰©ć®č¾žę›øć‚’ä½æć† 2. ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™»éŒ² 曓新頻度 ä½œę„­ę™‚é–“ ćƒ¢ćƒćƒ™ćƒ¼ć‚·ćƒ§ćƒ³ 余談 気になっていること č‡Ŗå‹•åŒ– Sudachi ęœ€å¾Œć« ä½œę„­å†…å®¹ č¾žę›øć‚·ćƒŽćƒ‹ćƒ ä½œę„­ć«åæ…č¦ćŖę‰‹é †ćÆäø»ć«2ć¤ć§ć™ļ¼Ž ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™ŗč¦‹ ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™»éŒ² 1.ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™ŗč¦‹ ćć‚‚ćć‚‚č¾žę›øć‚·ćƒŽćƒ‹ćƒ ćŒćć”ć‚“ćØę•“ć£ć¦ćŖć„ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’ć©ć†ć‚„ć£ć¦ē™ŗč¦‹ć™ć‚‹ć‹ćØć„ć†č©±ćŒć‚ć‚Šć¾ć™ļ¼Ž č‡Ŗē¤¾ć§ćÆč‰²ć€…ćŖćƒć‚¤ćƒ³ćƒˆć‹ć‚‰č¦‹ć¤ć‘ć¦ć„ć‚‹ć®ć§ć™ćŒć„ćć¤ć‹ć”ē“¹ä»‹ć—ć¾ć™ļ¼Ž ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę¤œē“¢ć—ćŸć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ćƒ­ć‚°ć‹ć‚‰č¦‹ć¤ć‘ć‚‹ ć‚Æćƒ©ć‚·ćƒ«ć§ćÆęÆŽę—„ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę¤œē“¢ć—ćŸć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’ćƒć‚§ćƒƒć‚Æć—ć¦ć„ć¾ć™ļ¼Ž ćć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’ę¤œē“¢å›žę•°ćŒå°‘ćŖć„é †ć«ć‚½ćƒ¼ćƒˆć—ć¦č¾žę›øć‚·ćƒŽćƒ‹ćƒ ćŒć¾ć ęœŖåÆ¾åæœćć†ćŖć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’ē™ŗč¦‹ć—ć¾ć™ļ¼Ž ćŖćœę¤œē“¢å›žę•°ćŒå°‘ćŖć„é †ć«ć‚½ćƒ¼ćƒˆć™ć‚‹ć‹ćØć„ć†ćØļ¼Œę¤œē“¢å›žę•°ćŒå¤šć„ć‚‚ć®ćÆę—¢ć«åÆ¾åæœęøˆćæć§ć‚ć‚‹ć‹ć‚‰ć§ć™ļ¼Ž ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć”ćØć®é›¢č„±ēŽ‡ć‹ć‚‰č¦‹ć¤ć‘ć‚‹ 恓悌悂1ć¤äøŠć®ę–¹ę³•ćØä¼¼ćŸć‚‚ć®ć§ć™ćŒļ¼Œć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć”ćØć®é›¢č„±ēŽ‡ć‚‚ćƒć‚§ćƒƒć‚Æć—ć¦ć„ć¾ć™ļ¼Žćć‚Œć»ć©ēć—ć„å˜čŖžć§ć‚‚ćŖć„ć®ć«é›¢č„±ēŽ‡ćŒé«˜ć„ćØč¾žę›øć‚·ćƒŽćƒ‹ćƒ ćŒęœŖåÆ¾åæœćŖåÆčƒ½ę€§ć‚‚é«˜ć„ć®ć§ć“ć“ć‹ć‚‰č¦‹ć¤ć‘ć‚‹ć“ćØć‚‚ć‚ć‚Šć¾ć™ļ¼Ž ę°—ć„ć„ćŸę–¹ć‹ć‚‰ē›“ęŽ„ę•™ćˆć¦ć‚‚ć‚‰ć† 社内の方やcsć®ćƒ•ć‚£ćƒ¼ćƒ‰ćƒćƒƒć‚Æć‹ć‚‰ę•™ćˆć¦ć„ćŸć ćę°—ć„ćć“ćØć‚‚ć‚ć‚Šć¾ć™ļ¼Ž ęœ¬ē‰©ć®č¾žę›øć‚’ä½æć† ć“ć®ęœ¬ē‰©ć®č¾žę›øćØć„ć†ć®ćÆę¤œē“¢ć®ę„å‘³åˆć„ć§ćÆćŖć„åŗƒč¾žč‹‘ćØć„ć£ćŸäø€čˆ¬ć®äŗŗćŒä½æć†č¾žę›øć®ć“ćØć§ć™ļ¼Ž ć©ć†ć—ć¦ć‚‚äøŠčØ˜3ć¤ć®ę–¹ę³•ć ćØę¤œē“¢å¾Œć®åÆ¾åæœć«ćŖć£ć¦ć—ć¾ć„ć¾ć™ļ¼Žć„ć¾ć¾ć§ć«äø€åŗ¦ć‚‚ę¤œē“¢ć•ć‚ŒćŸć“ćØć®ćŖć„ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć«ćÆåÆ¾åæœć§ćć¾ć›ć‚“ļ¼Ž ćć“ć§ęœ¬ē‰©ć®č¾žę›øļ¼ˆé£Ÿęč¾žå…øć®ć‚ˆć†ćŖć‚‚ć®ļ¼‰ć‚’ć‚ć„ć†ćˆćŠé †ć«č¦‹ć¦ēć—ćć†ćŖć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚‚ē™»éŒ²ć—ć¦ć„ć‚‹ę™‚ęœŸć‚‚ć‚ć‚Šć¾ć—ćŸļ¼Žä»Šć§ćÆć‚³ć‚¹ćƒ‘ćŒę‚Ŗć„ć®ć§ć‚„ć£ć¦ć„ć¾ć›ć‚“ļ¼Ž ä»–ć«ć‚‚č‰²ć€…ćŖę–¹ę³•ć§č¾žę›øć‚·ćƒŽćƒ‹ćƒ ęœŖåÆ¾åæœć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’č¦‹ć¤ć‘ć‚‹ć“ćØćŒå‡ŗę„ć¾ć™ļ¼Ž 2. ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ē™»éŒ² ć‚Æćƒ©ć‚·ćƒ«ć«ćÆč‡Ŗē¤¾ć§é–‹ē™ŗć—ćŸMondorućØć„ć†ć‚µćƒ¼ćƒ“ć‚¹ćŒć‚ć‚Šć¾ć™ļ¼Ž tech.dely.jp Mondoruć‚’ä½æć£ć¦č©²å½“ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’č¾žę›øćƒ»ć‚·ćƒŽćƒ‹ćƒ ć«ē™»éŒ²ć—ć¦ć„ć¾ć™ļ¼Ž ē™»éŒ²ć—ćŸå¾ŒćÆļ¼Œćƒ†ć‚¹ćƒˆē’°å¢ƒć§äø€å›žę¤œē“¢ć™ć‚‹ć“ćØć‚‚åæ…ćšč”Œć£ć¦ć„ć¾ć™ļ¼Ž 曓新頻度 ć‚Æćƒ©ć‚·ćƒ«ć§ćÆć»ć¼ęÆŽę—„č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®ćƒ”ćƒ³ćƒ†ćƒŠćƒ³ć‚¹ć‚’č”Œć£ć¦ć„ć¾ć™ļ¼Ž ä½œę„­ę™‚é–“ ē™»éŒ²ć™ć‚‹ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ę•°ć«ä¾å­˜ć—ć¾ć™ćŒļ¼ŒęÆŽę—„å¹³å‡ć—ć¦15åˆ†ć‚‚ć‹ć‹ć£ć¦ć„ćŖć„ćØę€ć„ć¾ć™ļ¼Ž č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®é‹ē”Øć‚’å¼•ćē¶™ć„ć å½“åˆćÆ4ę™‚é–“ćć‚‰ć„ć‚„ć£ć¦ć„ćŸę™‚ęœŸć‚‚ć‚ć‚Šć¾ć—ćŸļ¼Ž ćƒ¢ćƒćƒ™ćƒ¼ć‚·ćƒ§ćƒ³ č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć‚’äæ®ę­£ć—ć¦ćć‚Œć„ć«å½¢ę…‹ē“ č§£ęžć•ć‚Œć¦ę¤œē“¢ć§ććŸę™‚ćÆć‚ć”ć‚ƒćć”ć‚ƒę°—ęŒć”ć„ć„ć§ć™ļ¼Ž ć“ć“åŠå¹“č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć‚’ę‹…å½“ć—ć¦ć„ć¾ć™ćŒå¹øć›ć§ć™ļ¼Ž 余談 ę¤œē“¢ćŒå„½ćć ć£ćŸć®ć§å…„ē¤¾ć™ć‚‹å‰ć«ä½•ē™¾å€‹ć‹ć®ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć§ć‚Æćƒ©ć‚·ćƒ«ć®ę¤œē“¢ć‚’čŖæęŸ»ć—ć¦ćƒ”ćƒ¢ć—ć¦ć„ć¾ć—ćŸļ¼Ž ćć®ę™‚ć®ćƒ‡ćƒ¼ć‚æć‚‚č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®ę”¹å–„ć«å¤§ć„ć«å½¹ē«‹ć”ć¾ć—ćŸļ¼Ž å…„ē¤¾å‰ć‚Æćƒ©ć‚·ćƒ«ę¤œē“¢čŖæęŸ»ć®ćƒ”ćƒ¢ 気になっていること č‡Ŗå‹•åŒ– č¾žę›øć‚·ćƒŽćƒ‹ćƒ ćÆäø€ę¦‚ć«č‡Ŗå‹•åŒ–ć§ććŖć„éƒØåˆ†ćŒć‚ć‚‹ć®ćŒé›£ć—ć„ćØć“ć‚ć§ć™ļ¼Ž ćŖćœćŖć‚‰č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć«ćÆę„å¤–ć«ć‚‚å°‚é–€ēš„ćŖēŸ„č­˜ćŒåæ…č¦ć ć£ćŸć‚Šć™ć‚‹ć‹ć‚‰ć§ć™ļ¼Ž ä¾‹ćˆć°ē§ćÆč¾žę›øć‚·ćƒŽćƒ‹ćƒ ć‚’ę‹…å½“ć—ć¦ć¦ćÆć˜ć‚ć¦ć€Œćµćå‘³å™Œć€ļ¼ć€Œć°ć£ć‘å‘³å™Œć€ćØć„ć†ć“ćØć‚’ēŸ„ć‚Šć¾ć—ćŸļ¼Žć“ć†ć„ć†ć®ć‚’ć©ć†ć‚„ć£ć¦č‡Ŗå‹•åŒ–ć™ć‚‹ć‚“ć ć‚ć†ļ¼ŒćØę€ć£ć¦ć„ć¾ć™ļ¼Ž č¾žę›øć‚·ćƒŽćƒ‹ćƒ ć®č‡Ŗå‹•åŒ–ć«ć¤ć„ć¦ēŸ„č¦‹ć‚’ć‚‚ć£ć¦ć„ć‚‹ę–¹ćŒć„ć‚Œć°ćœć²ę•™ćˆć¦ć„ćŸć ććŸć„ć§ć™ļ¼Ž Sudachi SudachiというanalyzerćŒę°—ć«ćŖć£ć¦ć„ć¾ć™ļ¼Žäø€čˆ¬ēš„ć«ćÆanalysis-kuromojić‚’ä½æć£ć¦ć„ć‚‹ćØć“ć‚ćŒå¤šć„ćØę€ć†ć®ć§ć™ćŒ(č‡Ŗē¤¾ć‚‚ćć†ć§ć™),Sudachić®ć‚¹ćƒ©ć‚¤ćƒ‰ć‚’č¦‹ć‚‹é™ć‚Šé«˜å“č³Ŗ+é«˜ę©Ÿčƒ½ćć†ćŖć®ć§ćØć¦ć‚‚čˆˆå‘³ćŒć‚ć‚Šć¾ć™ļ¼Ž Sudachi ❤︎ Elasticsearch - Speaker Deck ęœ€å¾Œć« č¾žę›øć‚·ćƒŽćƒ‹ćƒ ē®”ē†ć‚’ćć”ć‚“ćØé‹ē”Øć™ć‚‹ć“ćØć§åœ°é“ć§ćÆć‚ć‚Šć¾ć™ćŒē¢ŗå®Ÿć«ę¤œē“¢ćÆć‚ˆććŖć£ć¦ć„ćć¾ć™ļ¼Ž ä»Šå›žę›øć„ćŸå†…å®¹ćŒć©ćŖćŸć‹ć®å‚č€ƒć«ćŖć£ć¦ę¤œē“¢ćŒć‚ˆććŖć£ć¦ć„ć‘ć°å¬‰ć—ć„ć§ć™ļ¼Ž delyć§ćÆć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ļ¼Žć‚ˆć‚ć—ććŠé”˜ć„ć—ć¾ć™ļ¼Ž www.wantedly.com
ćƒ‡ćƒ¼ć‚æåÆč¦–åŒ–ęŽØé€²å®¤ć®ę·±å°¾ć§ć™ć€‚ delyではkurashirućƒŖćƒŖćƒ¼ć‚¹å½“åˆć‹ć‚‰ćƒ‡ćƒ¼ć‚æåˆ†ęžć‚’é‡č¦č¦–ć—ć¦ćć¾ć—ćŸć€‚ć§ć‚‚åˆć‚ć‹ć‚‰ä½æć„å‹ę‰‹ć®č‰Æć„åˆ†ęžåŸŗē›¤ćŒć‚ć£ćŸčØ³ć§ćÆćŖćć€ć“ć‚Œć¾ć§ć«ä½•åŗ¦ć‚‚ę”¹č‰Æć—ä»ŠćÆļ¼”äø–ä»£ē›®ćØćŖć‚‹åˆ†ęžåŸŗē›¤ć‚’äø­åæƒć«åˆ©ē”Øć—ć¦ć„ć¾ć™ć€‚ä»Šę—„ćÆćć®åˆ†ęžåŸŗē›¤ć®ćŠč©±ć§ć™ć€‚ć¾ćšć“ć‚Œć¾ć§ć®ę­“å²ć‹ć‚‰ęŒÆć‚Ščæ”ć£ć¦ćæćŸć„ćØę€ć„ć¾ć™ć€‚ Ā  ć‚Æćƒ©ć‚·ćƒ«åˆ†ęžåŸŗē›¤ć®ę­“å² ē¬¬ļ¼‘äø–ä»£ļ¼šGoogle Analytics ć‚Æćƒ©ć‚·ćƒ«ć®ćƒŖćƒŖćƒ¼ć‚¹åˆęœŸć‹ć‚‰å°Žå…„ć—ć¦ć„ćŸć®ćÆGoogle Analyticsć§ć™ć€‚ć“ć‚ŒćÆēš†ć•ć‚“ć‚‚ä½æć£ć¦ć„ć‚‹ć“ćØćŒå¤šć„ć‚“ć˜ć‚ƒćŖć„ć‹ćØę€ć„ć¾ć™ć€‚åŸŗęœ¬ēš„ć«ćÆē„”ę–™ć§ćƒ­ć‚°åŽé›†ćƒ»åˆ†ęžćƒ»åÆč¦–åŒ–ć¾ć§ć™ć¹ć¦ć‚„ć£ć¦ćć‚Œć‚‹ć®ć§å°Žå…„ć‚³ć‚¹ćƒˆćŒä½Žćä¾æåˆ©ć§ć™ć€‚ ćć®äø€ę–¹ć§ć‚«ć‚¹ć‚æćƒžć‚¤ć‚ŗę€§ćÆä½Žćć€ä¾‹ćˆć°ē‹¬č‡Ŗć®ęŒ‡ęØ™ć‚’å–å¾—ć—ć¦SQLć§åˆ†ęžć™ć‚‹ć“ćØćÆē„”ę–™ć§ćÆć§ćć¾ć›ć‚“ļ¼ˆęœ‰ę–™ć‚µćƒ¼ćƒ“ć‚¹ć‚’ä½æćˆć°BigQueryć«ć‚Øć‚Æć‚¹ćƒćƒ¼ćƒˆåÆčƒ½ļ¼‰ć€‚ć¾ćŸå½“åˆć‹ć‚‰ć€ć„ćšć‚ŒA/Bćƒ†ć‚¹ćƒˆć‚’å®Ÿę–½ć™ć‚‹ć“ćØćÆčØˆē”»ć•ć‚Œć¦ć„ćŸć®ć§ć€ćć®ćŸć‚ć®åˆ†ęžę©Ÿčƒ½ć‚‚åæ…č¦ć§ć—ćŸćŒć€Google AnalyticsćÆć§ćć‚‹ć“ćØćŒé™ć‚‰ć‚Œć¾ć™ć€‚ćć“ć§ć‚«ć‚¹ć‚æćƒ ćƒ”ćƒˆćƒŖć‚Æć‚¹ć‚’åŽé›†ć—ć¦SQLć‚’å®Ÿč”Œć™ć‚‹ćŸć‚ć®ē¬¬ļ¼’äø–ä»£ć®ē‹¬č‡Ŗåˆ†ęžåŸŗē›¤ć‚’ę§‹ēÆ‰ć—ć¾ć—ćŸć€‚ Ā  ē¬¬ļ¼’äø–ä»£ļ¼šfluentd + BigQuery + Redash Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā Ā  ćƒ¢ćƒć‚¤ćƒ«ć‚¢ćƒ—ćƒŖć‹ć‚‰č”Œå‹•ćƒ­ć‚°ć‚’é€ć‚Šć€ćć‚Œć‚’fluentdć§åŽé›†ć—ć¦BigQuery悄S3ć«é€ć‚Šć¾ć™ļ¼ˆåƒ•ćŒå…„ē¤¾ć—ć¦åˆć‚ć«å–ć‚Šēµ„ć‚“ć ć®ćŒć“ć‚Œć§ć—ćŸļ¼‰ć€‚åÆč¦–åŒ–ć«ćÆRedashć‚’ä½æć£ć¦ć„ć¾ć™ć€‚ć“ć®åŸŗē›¤ćÆē¾åœØć§ć‚‚ćƒ¬ć‚¬ć‚·ćƒ¼åŸŗē›¤ćØć—ć¦ä½æć„ē¶šć‘ć¦ć„ć¾ć™ćŒć€fluentdć®é‹ē”Øć‚³ć‚¹ćƒˆćŒć‹ć‹ć‚‹ć“ćØć‚„č¤‡é›‘ćŖSQLć‚’ę›øć‘ć‚‹äŗŗćŒé™ć‚‰ć‚Œć¦ć—ć¾ć†ć“ćØć‹ć‚‰ć€ć‚ˆć‚Šä½æć„ć‚„ć™ć„åˆ†ęžåŸŗē›¤ć‚’ęØ”ē“¢ć—ć¦ćŠć‚Šć€ćć“ć§ē›®ć‚’ć¤ć‘ćŸć®ćŒFirebase Analytics恧恗恟怂 Ā  ē¬¬ļ¼“äø–ä»£ļ¼šFirebase Analytics ćƒ­ć‚°ć®åŽé›†ćÆFirebasećŒć‚„ć£ć¦ćć‚Œć¾ć™ć—ć€BigQueryć«ć‚Øć‚Æć‚¹ćƒćƒ¼ćƒˆć™ć‚‹ę©Ÿčƒ½ć‚‚ć¤ć„ć¦ć„ć‚‹ć®ć§ć€ē¬¬ļ¼’äø–ä»£ć®åˆ©ē‚¹ć‚’ę“»ć‹ć—ćŸć¾ć¾ć€ę—¢å­˜ć®čŖ²é”Œć‚‚ę”¹å–„ć§ćć‚‹äŗˆå®šć§ć—ćŸć€‚ćØć“ć‚ćŒå®Ÿéš›ć«ä½æć£ć¦å•é”ŒćØćŖć£ćŸć®ćÆć‚«ć‚¹ć‚æćƒ ć§čØ­å®šć§ćć‚‹ćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æę•°ć«äøŠé™ćŒć‚ć‚‹ć“ćØć§ć—ćŸć€‚ć¤ć¾ć‚Šē‹¬č‡Ŗć®ęŒ‡ęØ™ć‚’åˆ†ęžć™ć‚‹ć®ć«ć„ćšć‚Œé™ē•ŒćŒćć‚‹åÆčƒ½ę€§ćŒć‚ć‚Šć¾ć™ć€‚ć¾ćŸBigQueryć«ć‚Øć‚Æć‚¹ćƒćƒ¼ćƒˆć—ćŸę™‚ć«ćƒ‡ćƒ¼ć‚æćŒē‰¹å®šć®ć‚«ćƒ©ćƒ ć«åć£ć¦ćŠć‚Šć€ć‚Æć‚ØćƒŖć®ć‚¹ć‚­ćƒ£ćƒ³ć‚³ć‚¹ćƒˆćŒå¾“å‰ć‚ˆć‚Šé«˜ććŖć‚‹ę‡øåæµć‚‚ć‚ć£ćŸćŸć‚ć€ē¬¬ļ¼”äø–ä»£ć®ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æćøåˆ‡ć‚Šę›æćˆć‚‹ć“ćØć«ćŖć‚Šć¾ć—ćŸć€‚ Ā  ē¬¬ļ¼”äø–ä»£ļ¼š Kinesis + Athena + Redshift + Metabase +Ā  ē¤¾å†…č£½ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ ć“ć‚ŒćŒē¾åœØä½æć£ć¦ć„ć‚‹ćƒ‡ćƒ¼ć‚æåˆ†ęžåŸŗē›¤ć§ć™ć€‚ę§‹ęˆå›³ć«ćÆč¼‰ć£ć¦ć„ć¾ć›ć‚“ćŒćƒ­ć‚°åŽé›†åŸŗē›¤ć«ćÆAmazon Kinesis Data Firehose悄AWS Glueを使っています。Sunnyと書いてあるのはSPAć§ä½œć£ćŸē¤¾å†…č£½ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć§ć™ć€‚ Ā  ćƒ­ć‚°åŽé›†åŸŗē›¤ćƒ»ćƒ‡ćƒ¼ć‚æé›†čØˆåŸŗē›¤ćƒ»ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć®ćć‚Œćžć‚Œć‚’ćƒŖćƒ—ćƒ¬ćƒ¼ć‚¹ć—ć¦ć„ć¾ć™ć€‚ē¤¾å†…ć®äŗŗēš„ćƒŖć‚½ćƒ¼ć‚¹ć‚’ē¢ŗäæć§ććŸć“ćØć‚‚čƒŒę™Æć«ć‚ć‚Šć¾ć™ćŒć€ē‹¬č‡Ŗćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć‚’é–‹ē™ŗć™ć‚‹ć«č‡³ć£ćŸå…·ä½“ēš„ćŖē†ē”±ćŒć‚ć‚Šć¾ć™ć€‚ Ā  ē‹¬č‡Ŗćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć®é–‹ē™ŗć«č‡³ć‚‹ēµŒē·Æ ę§‹ęˆå›³ć«ć‚‚ć‚ć‚‹ć‚ˆć†ć«Redashに加えてMetabasećØć„ć†ć‚Ŗćƒ¼ćƒ—ćƒ³ć‚½ćƒ¼ć‚¹ć®ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć‚‚å°Žå…„ć—ć¦ć„ć¾ć™ć€‚å½“åˆćÆć“ć®Metabaseć ć‘ć‚’ę–°ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ćØć—ć¦ä½æć†äŗˆå®šć§ć—ćŸć€‚ Ā  Redash &Ā  Metabase Redashに対するMetabaseć®åˆ©ē‚¹ćÆć€å‹•ēš„ć«ć‚Æć‚ØćƒŖć‚’å®Ÿč”Œć—ć‚„ć™ć„ć“ćØćŒļ¼‘ć¤ć‚ć‚‹ć‹ćØę€ć„ć¾ć™ć€‚ä¾‹ćˆć°ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć«ļ¼’ć¤ć®ę—„ä»˜ć‚’å…„ć‚Œć‚‹ćØć“ć‚ćŒć‚ć£ć¦ć€O月Oꗄ恋悉X月Xę—„ć¾ć§ć®ć‚°ćƒ©ćƒ•ć‚’č”Øē¤ŗć™ć‚‹ćØć„ć£ćŸä½æć„ę–¹ćŒć§ćć¾ć™ć€‚ćć—ć¦Redshiftć«ćƒ‡ćƒ¼ć‚æćƒžćƒ¼ćƒˆļ¼ˆć‚µćƒžćƒŖćƒ¼ćƒ†ćƒ¼ćƒ–ćƒ«ļ¼‰ć‚’ę§‹ēÆ‰ć—ć¦ćŠć‘ć°ć€ē°”å˜ćŖSELECTę–‡ć§ćƒ‡ćƒ¼ć‚æć‚’é›†čØˆć§ćć‚‹ć®ć§ć€ć“ć‚Œć¾ć§ć‚ˆć‚Šå¤šćć®äŗŗć«ä½æć£ć¦ć‚‚ć‚‰ćˆć‚‹ćØć„ć†ć®ćŒé–‹ē™ŗå‰ć®ć¼ćć®č€ƒćˆć§ć—ćŸć€‚ ć—ć‹ć—ć€å®Ÿéš›ć«ćƒ¦ćƒ¼ć‚¶ćƒ¼ćØćŖć‚‹å„éƒØē½²ć®ē¤¾å“”ć«ć„ć‚ć„ć‚č©±ć‚’čžć„ć¦ćæć‚‹ćØć€ćć‚Œć¾ć§ć®č€ƒćˆć§ćÆęµ…ć‹ć£ćŸć“ćØć«ę°—ćŒć¤ćć¾ć—ćŸć€‚ Ā  ć‚Æćƒ©ć‚·ćƒ«ē”ØčŖžć§ä½œć‚‰ć‚ŒćŸćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ ćƒ‡ćƒ¼ć‚æåˆ†ęžåŸŗē›¤ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę±‚ć‚ć¦ć„ćŸć‚‚ć®ćÆć‚Æć‚ØćƒŖćŒē°”å˜ć«ę›øć‘ć‚‹ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć§ćÆćŖćć€ć‚Æćƒ©ć‚·ćƒ«ć®ē”ØčŖžć§ę§‹ęˆć•ć‚ŒćŸē”»é¢ć§ć—ćŸć€‚ä¾‹ćˆć°Yahooć®ē¤¾å†…ć§ä½æć‚ć‚Œć¦ć„ć‚‹ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć ć£ćŸć‚‰ć€Œćƒ¤ćƒ•ć‚Ŗć‚Æć€ćØć‹ć€ŒYahoo!ćƒ‹ćƒ„ćƒ¼ć‚¹ć€ćØć„ć£ćŸćƒ”ćƒ‹ćƒ„ćƒ¼ćŒć‚ć£ć¦ćć‚Œćžć‚Œć®ćƒ”ćƒˆćƒŖć‚Æć‚¹ć‚’č¦‹ć‚‹ć“ćØćŒć§ćć‚‹ćć†ć§ć™ć€‚ Ā  ć‚Æćƒ©ć‚·ćƒ«ć®ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ćŖć‚‰ć€Œę¤œē“¢ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć€ć‚„ć€Œå†ē”Ÿę•°ć€ć€Œć™ć¹ć¦ć®ćƒ¬ć‚·ćƒ”ć€ćØć„ć£ćŸćƒ”ćƒ‹ćƒ„ćƒ¼ćŒć‚ć‚Œć°ć€SQLć‚’ä½æć‚ćŖć„ćƒ•ćƒ¼ćƒ‰ć‚³ćƒ¼ćƒ‡ć‚£ćƒćƒ¼ć‚æćƒ¼ć‚„ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆę‹…å½“č€…ć§ć‚‚ćƒ‡ćƒ¼ć‚æć‚’åˆ©ē”Øć§ćć¾ć™ć—ć€ć“ć‚Œć¾ć§SQLć‚’ä½æć£ć¦ććŸćƒžćƒ¼ć‚±ć‚æćƒ¼ć‚„ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒåˆ†ęžć«ć‹ć‘ć‚‹ę™‚é–“ć‚³ć‚¹ćƒˆć‚’ēŸ­ēø®ć™ć‚‹ć“ćØć‚‚ć§ćć¾ć™ć€‚ Ā  åˆ†ęžåŸŗē›¤ć®ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ ćƒ‡ćƒ¼ć‚æåˆ†ęžåŸŗē›¤ć§ćÆć€ć‚µćƒ¼ćƒ“ć‚¹ćŒć‚¹ć‚±ćƒ¼ćƒ«ć—ćŸę™‚ć§ć‚‚é›†čØˆć‚Æć‚ØćƒŖć«ć‹ć‹ć‚‹ę™‚é–“ć‚„č²»ē”Øć‚’ęŠ‘ćˆć‚‰ć‚Œć‚‹ć“ćØćŒę±‚ć‚ć‚‰ć‚Œć‚‹ćØę€ć„ć¾ć™ć€‚ćć—ć¦ēŸ­ęœŸé–“ć§é–‹ē™ŗć—ćŖć‘ć‚Œć°ćŖć‚‰ćŖć„äŗ‹ęƒ…ć‚‚ć‚ć£ćŸć®ć§ļ¼“ćƒ¶ęœˆä»„äø‹ć§ę§‹ēÆ‰ć™ć‚‹ę–¹ę³•ć‚’č€ƒćˆć¾ć—ćŸć€‚ć“ć®č¾ŗć‚ŠćÆć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ć‚¹ć‚­ćƒ«ć‚»ćƒƒćƒˆćØć®ē›øę€§ć‚„ć€äŗ‹ę„­ćƒ»ēµ„ē¹”ć®ćƒ•ć‚§ćƒ¼ć‚ŗć‚‚å½±éŸæćŒć‚ć‚‹ćØę€ć†ć®ć§ć€ć©ć‚“ćŖć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ć‚„ćƒ•ćƒ¬ćƒ¼ćƒ ćƒÆćƒ¼ć‚Æć§ę§‹ēÆ‰ć™ć‚‹ć®ćŒäø€ē•Ŗč‰Æć„ćØć„ć†ć“ćØćÆćŖć„ćØę€ć„ć¾ć™ć€‚ć¼ćć®å “åˆćÆRedshift悒2014å¹“ć”ć‚ć‹ć‚‰ä½æć£ć¦ćŠć‚Šćƒ”ćƒŖćƒƒćƒˆćØćƒ‡ćƒ”ćƒŖćƒƒćƒˆć‚‚ć‚ć‹ć£ć¦ć„ćŸć®ć§ć€ć“ć‚Œć‚’ć†ć¾ćä½æć£ćŸć‚Šć€å¼Šē¤¾ć®DevOpsć§ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ć‚µćƒ¼ćƒćØć—ć¦ä½æć£ć¦ććŸRUNDECKć‚’ć“ć“ć§ć‚‚ä½æć£ćŸć‚Šć™ć‚‹ć“ćØć§å…Øä½“ć®é–‹ē™ŗå·„ę•°ć‚’ęŠ‘ćˆć‚‹ć“ćØćŒć§ććŸćØę€ć„ć¾ć™ć€‚ć“ć“ć§ē¤¾å†…č£½ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰å‘Øć‚Šć®ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ć‚’ē“¹ä»‹ć—ć¾ć™ć€‚ Ā  (CoreUIć®ć‚¤ćƒ”ćƒ¼ć‚øļ¼‰ ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ CoreUI (Vue.js) 製 Single Page Application Kubernetes上のNginxć‚³ćƒ³ćƒ†ćƒŠć§é™ēš„ćƒ•ć‚”ć‚¤ćƒ«ć‚’é…åøƒ IP制限 OAuth2恧GooglečŖčØ¼ WebAPI Express (Node.js) RESTful API Redshift悄Elasticsearchć«ęŽ„ē¶š IP制限 é›†čØˆćƒćƒƒćƒ Python製 AthenaとRedshift恧SQLć‚’å®Ÿč”Œ ć‚Æć‚ØćƒŖć®ēµęžœć‚’åˆ„ć®Athenaćƒ†ćƒ¼ćƒ–ćƒ«ćØć—ć¦ä½æć†ćŸć‚ć®ē‹¬č‡Ŗćƒ•ćƒ¬ćƒ¼ćƒ ćƒÆćƒ¼ć‚Æć‚’å®Ÿč£…ļ¼ˆęœ€čæ‘CTASę©Ÿčƒ½ćŒć§ćć¾ć—ćŸć­^^) RUNDECKć‚µćƒ¼ćƒć§ć‚¹ć‚±ć‚øćƒ„ćƒ¼ćƒ«å®Ÿč”Œļ¼‹ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ē®”ē† DWH Amazon Athena + Redshift Redshift Spectrum恧Athenać®ćƒ†ćƒ¼ćƒ–ćƒ«ć«ć‚¢ć‚Æć‚»ć‚¹ AWS Data Migration Serviceć«ć‚ˆć‚ŠAurora恮DBと同期 ć‚¤ćƒ³ćƒ•ćƒ©ć€CI/CD Kubernetes on EC2 AWS CodeBuildĀ  ä»Šå¾Œć®ćƒ­ćƒ¼ćƒ‰ćƒžćƒƒćƒ— ē”»é¢čæ½åŠ  ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ć®ć‚³ćƒ¼ćƒ‰åŒ– ćƒ¦ćƒ¼ć‚¶ćƒ¼ć”ćØć®ęØ©é™ē®”ē† ć“ć‚“ćŖę„Ÿć˜ć§ć„ć‚ć„ć‚ć‚ć‚‹ć‚“ć§ć™ćŒć€ć‚‚ć—ę–°ć—ć„äŗŗć«å…„ć£ć¦ć‚‚ć‚‰ćˆćŸć‚‰č‡Ŗåˆ†ćŒć‚„ć‚ŠćŸć„ćØć“ć‚ć‚’ć‚„ć£ć¦ć‚‚ć‚‰ć£ćŸć‚‰č‰Æć„ć‚“ć˜ć‚ƒćŖć„ć‹ćŖćØå€‹äŗŗēš„ć«ćÆę€ć£ć¦ć„ć¾ć™ć€‚ćƒ‡ćƒ¼ć‚æåÆč¦–åŒ–ć®é¢ē™½ć„ćØć“ć‚ćÆć€SPA态UI/UXćƒ‡ć‚¶ć‚¤ćƒ³ć€é›†čØˆćƒćƒƒćƒć‚„ćƒÆćƒ¼ć‚Æćƒ•ćƒ­ćƒ¼ē®”ē†ć€KubernetesćŖć©ć‚’åŗƒćč§¦ć‚Œć‚‹ć“ćØćŒć‚ć‚‹ćØę€ć„ć¾ć™ć€‚ć‚‚ć—čˆˆå‘³ćŒć‚ć‚Œć°ćœć²äø€åŗ¦ć‚Ŗćƒ•ć‚£ć‚¹ć«éŠć³ć«ćć¦ćć ć•ć„ć€‚ Ā  delyć§ćÆē¾åœØć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’å¤§å¤§å¤§å‹Ÿé›†äø­ć§ć™ć‚ˆļ¼ Ā  Ā  Ā 
こんにごは。 普段はdely恮Androidć‚¢ćƒ—ćƒŖć®čØ­čØˆć€å®Ÿč£…ćØć‹ćć®ä»–ć‚‚ć‚ć‚‚ć‚ć‚’ę‹…å½“ć—ć¦ć„ć‚‹ę¢…ę£®ć§ć™ć€‚ ęœ€čæ‘å¼Šē¤¾ć§ćÆć€é•·ęœŸēš„ćŖęŠ€č”“ēš„ćŖę„ę€ę±ŗå®šć‚„ęŠ€č”“ēš„čŖ²é”Œć®åÆč¦–åŒ–ćƒ»č§£ę±ŗć®ę”Æę“ćŖć©ć€ęŠ€č”“ēš„ćŖå“é¢ć«ćŠć„ć¦delyć®é–‹ē™ŗćƒćƒ¼ćƒ ćŒęˆé•·ć—ć¦ć„ć‘ć‚‹ć‚ˆć†ćŖå–ć‚Šēµ„ćæć‚’č€ƒćˆć¦å®Ÿę–½ć—ć¦ć„ć¾ć™ć€‚ęœ¬ēØæć§ćÆćć®ć†ć”ć®å–ć‚Šēµ„ćæć®äø€ć¤ć‚’ć”ē“¹ä»‹ć—ć¾ć™ć€‚ ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćÆę™®ę®µć®ę©Ÿčƒ½å®Ÿč£…ćØäø¦č”Œć—ć¦é•·ęœŸēš„ćŖćƒ—ćƒ­ćƒ€ć‚Æćƒˆę”¹å–„ć‚’č”Œć†ćŸć‚ć®ę–½ē­–ć‚’č”Œć£ć¦ć„ćŸć‚Šć—ć¾ć™ćŒć€ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ć®ē§»č”Œć‚„ćƒŖćƒ•ć‚”ć‚Æć‚æćƒŖćƒ³ć‚°ć€č‡Ŗå‹•ćƒ†ć‚¹ćƒˆćØć„ć£ćŸę–½ē­–ćÆēŸ­ęœŸēš„ć«ćÆęˆęžœćŒč¦‹ćˆć«ćć„ćØć„ć†ć“ćØć‚‚ć‚ć‚Šć€ę„­å‹™ēš„ć«čæ‘ć„ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚„ęˆęžœćŒåˆ†ć‹ć‚Šć‚„ć™ć„ć“ćØć‚’ć‚„ć£ć¦ć„ć‚‹ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćŒć©ć‚“ćŖć“ćØć‚’ć‚„ć£ć¦ć„ć‚‹ć‹ćÆåˆ†ć‹ć‚‹ćŒć€ć‚ć¾ć‚Šä»•äŗ‹ć§é–¢ć‚ć‚‰ćŖć„ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćÆä½•ć‚’ć‚„ć£ć¦ć„ć‚‹ć‹ć‚ˆćåˆ†ć‹ć‚‰ćŖć„ćØć„ć†ēŠ¶ę…‹ć«ćŖć£ćŸć‚Šć€ä¼šē¤¾ćØć—ć¦ćÆć©ć®ć‚ˆć†ćŖęŠ€č”“ēš„ćŖę„ę€ę±ŗå®šć‚’ęŽØå„Øć—ć¦ć„ć‚‹ć‹ćØć„ć†ć“ćØćŒåˆ†ć‹ć‚‰ćŖć„ļ¼ˆć‚ć‚‹ć„ćÆćć‚‚ćć‚‚ēŸ„č¦‹ćŒå­˜åœØć—ćŖć„ļ¼‰ćØć„ć†ēŠ¶ę…‹ć«ćŖć‚ŠćŒć”ć§ć™ć€‚ é–‹ē™ŗćƒćƒ¼ćƒ ć®č¦ęØ”ćŒå¤§ćććŖć£ć¦ć„ć‘ć°ć€ä¾‹ćˆć°iOS悄Androidć€ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ć€SREćØć„ć£ćŸęŠ€č”“é ˜åŸŸć”ćØć«ćƒćƒ¼ćƒ ć‚’ēµ„ē¹”åŒ–ć—ć¦ćć“ć§ēŸ„č¦‹ć‚’å…±ęœ‰ć—ćŸć‚Šęŗœć‚ćŸć‚Šć€ęŠ€č”“ēš„ćŖę„ę€ę±ŗå®šć‚’ć—ćŸć‚ŠćØć„ć£ćŸć“ćØć‚’čØˆē”»ēš„ć«č”Œć£ć¦ć„ćć“ćØć«ćŖć‚‹ćØę€ć„ć¾ć™ćŒć€å¼Šē¤¾ćć‚‰ć„ć®č¦ęØ”ć§ć™ćØćć“ć¾ć§ć®å–ć‚Šēµ„ćæć‚’ęœ¬ę ¼ēš„ć«å§‹ć‚ć¦ć„ććØć„ć†ć®ćÆć¾ć ć¾ć é›£ć—ć„ć‚‚ć®ćŒć‚ć‚Šć¾ć™ć€‚ ćć“ć§ć€ę‰‹å§‹ć‚ć«å„ęŠ€č”“é ˜åŸŸć”ćØć§ē¾åœØå–ć‚Šēµ„ć‚“ć§ć„ć‚‹ć“ćØć‚„ęŠ€č”“ēš„ćŖčŖ²é”Œę„Ÿć€ćƒ­ćƒ¼ćƒ‰ćƒžćƒƒćƒ—ć€ęœ€čæ‘čˆˆå‘³ć®ć‚ć‚‹ęŠ€č”“é ˜åŸŸćŖć©ć‚’å®šęœŸēš„ć«é–‹ē™ŗćƒćƒ¼ćƒ ć«ćƒ’ć‚¢ćƒŖćƒ³ć‚°ć—ć¦ć€Qiita:teamć«ć¾ćØć‚ć¦å…±ęœ‰ć™ć‚‹ćØć„ć†å–ć‚Šēµ„ćæć‚’å§‹ć‚ć¦ćæć¾ć—ćŸć€‚ļ¼ˆdelyćÆå…Øē¤¾ēš„ć«ćƒ‰ć‚­ćƒ„ćƒ”ćƒ³ćƒˆć‚’Qiita:teamć«ć¾ćØć‚ć‚‹ę–‡åŒ–ć«ęœ€čæ‘ćÆćŖć£ć¦ć¾ć™ļ¼‰ ć“ć‚“ćŖę„Ÿć˜ć§ć™ å‚č€ƒć«ć—ćŸć®ćÆć€The State of Go ęœ€ę–°ē‰ˆćøć®ćƒŖćƒ³ć‚Æ という1幓に1å›žē™ŗč”Øć•ć‚Œć‚‹GočØ€čŖžć®ćć®ć‚æć‚¤ćƒŸćƒ³ć‚°ć§ć®ēŠ¶ę³ć‚’ć¾ćØć‚ćŸć‚¹ćƒ©ć‚¤ćƒ‰ļ¼ˆē™ŗč”ØćÆå®Ÿéš›ć«ę‹č¦‹ć—ćŸć“ćØćÆē„”ć„ć§ć™ćŒć€ć„ć¤ć‹ę‹č¦‹ć—ć¦ćæćŸć„ļ¼‰ć§ć™ć€‚ć“ć®ć‚ˆć†ćŖå½¢ć§å®šęœŸēš„ć«é–‹ē™ŗćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„å–ć‚Šēµ„ćæć‚’ę¦‚č¦³ć—ćŸč³‡ę–™ćŒć‚ć£ćŸć‚‰ć„ć„ć‚“ć˜ć‚ƒćŖć„ć‹ćØć„ć†ć“ćØć§ć€ć€ŒState of dely devć€ļ¼ˆćŖć‚“ć§ThećŒęŠœć‘ć¦ć‚‹ć‚“ć ć‚ć†ļ¼‰ćØć„ć†ć‚æć‚¤ćƒˆćƒ«ć§Qiita:teamć«čØ˜äŗ‹ć‚’ęŠ•ēØæć—ć¦ć„ć¾ć™ć€‚ ä»Šå›žćÆćŖć‚‹ć¹ććć‚Œć‚’ē”Ÿć«čæ‘ć„å½¢ć§ć“ć”ć‚‰ć®ćƒ–ćƒ­ć‚°ć«č»¢č¼‰ć—ć¾ć™ć€‚ē®‡ę”ę›øćć§ć–ć£ćć‚Šę›øć„ć¦ć‚ć‚‹ć ć‘ć§ć™ćŒć€é›°å›²ę°—ć ć‘ć§ć‚‚ę„Ÿć˜å–ć£ć¦ć‚‚ć‚‰ć„ć€ćŖć«ć‹ć®å‚č€ƒć«ćŖć‚Œć°å¹øć„ć§ć™ć€‚ćŖćŠć€ć“ć®ęƒ…å ±ćÆ2018幓7ęœˆę™‚ē‚¹ć®ęƒ…å ±ćŖć®ć§ć€å¤ć„ęƒ…å ±ć‚‚å¤šć€…å«ć¾ć‚Œć¦ć„ć‚‹ć“ćØć‚’ć”äŗ†ę‰æćć ć•ć„ć€‚ iOSćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œ č‡Ŗå‹•ćƒ†ć‚¹ćƒˆ ćŖć‹ćŖć‹ć‚³ćƒ¼ćƒ‰é‡å¢—åŠ ć®ć‚¹ćƒ”ćƒ¼ćƒ‰ć«čæ½ć„ä»˜ć‘ć¦ć„ćŖć„ å°†ę„ēš„ć«ćÆćƒ†ć‚¹ćƒˆć‚‚ć‚³ćƒ¼ćƒ‡ć‚£ćƒ³ć‚°ćØäø€ē·’ć«ę›øć„ć¦ć„ćć‚¹ć‚æć‚¤ćƒ«ć«ć—ćŸć„ č‡Ŗå‹•ē”Ÿęˆå‘Øć‚Š ć‚µćƒ¼ćƒćƒ¼å“ć®swagger.jsonå‡ŗåŠ›ć®ęŗ–å‚™ćŒé€²ć‚“ć§ććŸ JSON APIå½¢å¼ć®č‡Ŗå‹•ē”ŸęˆćØć®ē›øę€§ćÆę‚Ŗć„ćŒć€å¾ŒćÆę‰‹ć‚’å‹•ć‹ć™ć ć‘ćØć„ć†ēŠ¶ę…‹ ćƒ—ćƒ­ćƒ€ć‚Æćƒˆé–‹ē™ŗćØćÆé•ć†čŖ²é”ŒćŒå‡ŗć¦ććŸć‚Šć—ć¦é¢ē™½ć„ć€ć‚³ćƒ¼ćƒ‡ć‚£ćƒ³ć‚°ēš„ćŖé›£ć—ć•ć«ē›“é¢ć—ćŒć” ä½æć£ć¦ć„ć‚‹ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖč‡Ŗä½“ć®äøå…·åˆć‚‚å‡ŗć‚„ć™ć„ć€äø€å›žćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«ćƒ—ćƒ«ćƒŖć‚Æé€ć£ć¦ćƒžćƒ¼ć‚øć•ć‚ŒćŸć‚ŠćØć„ć£ćŸć“ćØć‚‚ ć‚³ćƒŸćƒƒćƒˆćƒ”ćƒƒć‚»ćƒ¼ć‚øć‚’č‹±čŖžć§ę›øć„ćŸć‚Šć—ć¦ć€č‹±čŖžćøć®åæƒē†ēš„ćƒćƒ¼ćƒ‰ćƒ«ćŒäø‹ćŒć£ćŸ äŗŗćŒå°‘ćŖć„ć‹ć‚‰ć“ćč‡Ŗå‹•åŒ–ēš„ćŖę–¹å‘ę€§ć«ęŠ•č³‡ć—ć¦ć„ć ćƒćƒ¼ćƒ é–‹ē™ŗć«ć¤ć„ć¦ å¤§ćć„ćƒ—ćƒ«ćƒŖć‚Æć®å•é”ŒćÆč§£ę±ŗć—ć¦ć„ć‚‹ć‚ć‘ć§ćÆćŖć„ć€äø€ę—„äø€å›žćÆWIPć®ēŠ¶ę…‹ć§ć‚‚ć‚³ćƒŸćƒƒćƒˆļ¼†ćƒ—ćƒƒć‚·ćƒ„ć—ć¦åˆ†å‰²ćƒ¬ćƒ“ćƒ„ćƒ¼ć®ē›®å®‰ć«ć™ć‚‹ćØć‹ć„ć†ę‰‹ćÆć‚ć‚‹ć‹ć‚‚ äø€å€‹ć‚‚ćƒ—ćƒ«ćƒŖć‚Æćć¦ćŖć„ćØSlackć§é€šēŸ„ć‚’é€ć£ćŸć‚Šć™ć‚‹ć®ćÆć„ć„ć‹ć‚‚ Danger恧500č”Œä»„äøŠć®ć‚³ćƒŸćƒƒćƒˆć®å “åˆćÆWarningć‚’å‡ŗć™ć‚ˆć†ć«ć—ć¦ć„ć‚‹ ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—é–‹ē™ŗ ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—å°‚ē”Øć®ć‚³ćƒ¼ćƒ‰ćƒ™ćƒ¼ć‚¹ć§ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—é–‹ē™ŗć—ć¦ć„ć‚‹ ćć®äø­ć§ę—¢å­˜ć‚³ćƒ¼ćƒ‰ć‚’ęØ”å†™ć—ć¤ć¤ćƒŖćƒ•ć‚”ć‚Æć‚æć§ććć†ćŖćØć“ć‚ć‚’ē™ŗč¦‹ć—ćŸć‚Šć—ć¦ć„ć‚‹ ćƒ“ćƒ«ćƒ‰ć‚‚é€Ÿć„ć®ć§iOSć®ę–°ć—ć„ę©Ÿčƒ½ć‚’č©¦ć—ćŸć‚Šć§ćć‚‹ć€ä»Šåŗ¦ćć“ć§č©¦ć—ćŸę©Ÿčƒ½ć‚’ćƒŖćƒŖćƒ¼ć‚¹ć™ć‚‹ļ¼ˆ3Dć‚æćƒƒćƒć—ćŸćØćć«ćƒ—ćƒ¬ćƒ“ćƒ„ćƒ¼å‡ŗć—ćŸć‚Šļ¼‰ Codable恧jsonćƒ‘ćƒ¼ć‚¹ć™ć‚‹ćØć‹ć‚‚č©¦ć—ć¦ćæć¦ē™ŗč¦‹ćŒć‚ć‚‹ ę¤œē“¢ē”»é¢ć®UIćØć‹ć‚‚ę–°ć—ć„å‹•ćć‚’č©¦ć—ć¦ćæćŸć‚Šć—ć¦ć„ć‚‹ ć‚¢ćƒ‹ćƒ”ćƒ¼ć‚·ćƒ§ćƒ³ćƒ†ć‚¹ćƒˆć™ć‚‹ćØććØć‹ć‚‚ć„ć„ å°†ę„ēš„ć«ćÆUIć‚³ćƒ³ćƒćƒ¼ćƒćƒ³ćƒˆć‚’åˆ†é›¢ć—ć¦ć€ćć‚Œć‚’ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—é–‹ē™ŗć§ćƒ–ćƒ©ćƒƒć‚·ćƒ„ć‚¢ćƒƒćƒ—ć—ć¦ęœ¬ä½“ć«å–ć‚Šč¾¼ć‚€ćæćŸć„ćŖć“ćØć‚‚ć—ćŸć„ ćƒšćƒ¼ćƒ‘ćƒ¼ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ”ćƒ³ć‚°ć§čŖč­˜ć‚’ć™ć‚Šåˆć‚ć›ć¦ä½œć‚Šå§‹ć‚ć‚‰ć‚Œć¦ć„ć‚‹ć®ć§ć‚¹ćƒ”ćƒ¼ćƒ‰ę„Ÿć‚’ć‚‚ć£ć¦ä½œć‚Œć¦ć„ć‚‹ ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć®ę›“ę–°å•é”Œ ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćŒę›“ę–°ć•ć‚ŒćŸć‚‰č‡Ŗå‹•ēš„ć«ćƒ—ćƒ«ćƒŖć‚Æć‚’ä½œć‚‹ć‚‚ć®ć‚’ä½œć£ćŸćŒć€ćŖć‹ćŖć‹ć†ć¾ćć„ć£ć¦ć„ćŖć„ Androidćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œ č‡Ŗå‹•ćƒ†ć‚¹ćƒˆć«ć¤ć„ć¦ KotlinćÆćƒ†ć‚¹ćƒˆć‚³ćƒ¼ćƒ‰ć‹ć‚‰å°Žå…„ć™ć‚‹äŗˆå®š まずはUIćƒ†ć‚¹ćƒˆć‹ć‚‰ć‚„ć‚‹äŗˆå®š ćƒ†ć‚¹ćƒˆć‚³ćƒ¼ćƒ‰ćÆę°—å…¼ć­ćŖćęØć¦ć‚‰ć‚Œć‚‹ć®ć§ć¾ćšćÆęØć¦ć¦ć‚‚ć„ć„ć‹ć‚‰ć‚³ćƒ¼ćƒ‰ć‚’ę›øć„ć¦ć„ć Redirectable UI恫恤恄恦 ConstraintLayout 1.0ć«ćÆć™ć£ć‹ć‚Šę…£ć‚ŒćŸ ConstraintLayout 2.0 - MotionLayoutć®åÆčƒ½ę€§ ć‚¢ć‚Æć‚»ć‚·ćƒ“ćƒŖćƒ†ć‚£åÆ¾åæœć‚’ćć‚ćć‚č€ƒćˆćŸć„ ę–‡å­—ć‚µć‚¤ć‚ŗå¤§ććć—ć¦ć‚‚ē “ē¶»ć—ćŖć„UI ē”»åƒć«ć‚­ćƒ£ćƒ—ć‚·ćƒ§ćƒ³ć¤ć‘ć‚‹ćØć‹ļ¼ˆē”»é¢čŖ­ćæäøŠć’åÆ¾åæœļ¼‰ č‰²č¦šåÆ¾åæœ é•·ęœŸēš„ć«åÆ¾åæœć—ćŸć„ ćØć‚Šć‚ćˆćšę–‡å­—ć‚µć‚¤ć‚ŗćŒäø€ē•Ŗå¤§ćć„ JetPack対応 ä»Šć®ćØć“ć‚ć™ćå°Žå…„ć™ć¹ćć‚‚ć®ćÆćŖć„ćŒ ć“ć‚ŒćÆļ½žćØć„ć†ē†ē”±ć§å°Žå…„ć—ć¦ćŖć„ćØčØ€ćˆć‚‹ćć‚‰ć„ć®ćƒ¬ćƒ™ćƒ«ć«ćÆē†č§£ć—ć¦ćŠććŸć„ ćƒ“ćƒ«ćƒ‰é…ć„å•é”Œ Firebase态Google Play Servicesć®ć‚¢ćƒƒćƒ—ćƒ‡ćƒ¼ćƒˆē­‰ć§ć ć„ć¶ćƒ“ćƒ«ćƒ‰ćŒé…ććŖć£ć¦ć—ć¾ć£ćŸ éƒ½åŗ¦éƒ½åŗ¦ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć®ä¾å­˜é–¢äæ‚ć®č¦‹ē›“ć—ē­‰ć‚’č”Œć†ć“ćØć§ćƒ“ćƒ«ćƒ‰é…ć„å•é”Œć«åÆ¾å‡¦ć—ć¦ć„ććŸć„ ćƒžćƒ«ćƒćƒ¢ć‚øćƒ„ćƒ¼ćƒ«åŒ–ć®ę¤œčØŽć‚‚ć™ć™ć‚ć‚‹ Webćƒ•ćƒ­ćƒ³ćƒˆć‚Øćƒ³ćƒ‰ćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œ ć‚‚ć‚ć‚‚ć‚é€²č”Œć—ć¦ć¾ć™ Webpackerćøć®ē§»č”ŒćÆå®Œäŗ† jQueryä¾å­˜ć‹ć‚‰ć®č„±å“ćÆå®Œäŗ† SSRå°Žå…„ćÆę±ŗå®šć€ä½œę„­äø­ PWA ć‚³ćƒ³ćƒ‘ć‚¤ćƒ«ć•ć‚ŒćŸJSć‚’åˆ†å‰²ć—ć¦ćć®ćƒšćƒ¼ć‚øć«ć‚ć£ćŸć‚‚ć®ć‚’ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ćØć„ć†ć“ćØćŒć§ćć‚‹ć‚ˆć†ć«ćŖć£ćŸ webpackć§ä»»ę„ć®ćƒćƒ£ćƒ³ć‚Æć«åˆ†å‰²ć—ć¦JSć‚’åˆ„ć€…ć«ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ć“ćØć®ć§ćć‚‹ę©Ÿčƒ½ć‚’ę“»ē”Øć—ć¦ć„ć‚‹ SPA ćƒ¬ć‚¹ćƒćƒ³ć‚·ćƒ–č”Øē¤ŗć§åŒć˜ę§‹é€ ć§č”Øē¤ŗć™ć‚‹ć®ć§ćÆćŖćć€PCとSPć«ęœ€é©åŒ–ć•ć‚ŒćŸę§‹é€ ć«ē§»č”Œć—ć¦ć„ććŸć„ ćƒ­ćƒ¼ćƒ‡ć‚£ćƒ³ć‚°ę™‚ć«čŖ­ćæč¾¼ćæåÆ¾č±”ć®ćƒ—ćƒ¬ćƒ¼ć‚¹ćƒ›ćƒ«ćƒ€ćƒ¼ć‚’å°Žå…„ć—ćŸć„ć€ä»ŠćÆčŖ­ćæč¾¼ćæć§ć‚¬ć‚æć‚¬ć‚æå‹•ć„ć¦ć—ć¾ć† ćƒ‡ćƒ—ćƒ­ć‚¤ć€ćƒ†ć‚¹ćƒˆé…ć„å•é”Œļ¼ˆćƒ‡ćƒ—ćƒ­ć‚¤40åˆ†ļ¼‰ ćƒćƒƒć‚Æć‚Øćƒ³ćƒ‰ćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œ ę—¢å­˜ć®ęŠ€č”“ēš„č² å‚µć®čæ”ęøˆ まずはRails 5.0ćøć®ć‚¢ćƒƒćƒ—ćƒ‡ćƒ¼ćƒˆ ē¾ēŠ¶ć®ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ć§ć‚‚ć‚Æćƒ©ć‚·ćƒ«ć®ćƒŖćƒ¼ćƒ‰éŽå¤šćŖć‚¢ćƒ—ćƒŖć§ć‚ć‚Œć°ć‚¹ć‚±ćƒ¼ćƒ«ć—ć¦ć„ć‘ćć† A/Bćƒ†ć‚¹ćƒˆ API偓のA/Bćƒ†ć‚¹ćƒˆć‚‚å‡ŗę„ć‚‹ć‚ˆć†ć«ć™ć‚‹äŗˆå®š ćƒ†ć‚¹ćƒˆé…ć„å•é”Œ ćƒ†ć‚¹ćƒˆć‚’ę—©ćć™ć‚‹ę–¹ę³•ćÆåˆ†ć‹ć£ć¦ć„ć‚‹ćŒä½œę„­ćÆć‚ć‚“ć©ćć•ć„ć€ElasticSearchć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚‚åˆ†é›¢ć—ćŖć„ćØę—©ćć§ććŖć„ å®Ÿéš›ć«ć©ć®ćƒ†ć‚¹ćƒˆć‚±ćƒ¼ć‚¹ćŒé…ć„ć‹ć‚’čŖæć¹ćŸć‚ŠćØć‹ ćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹ć®ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«ćŖć£ć¦ć„ć‚‹ć‚Æć‚ØćƒŖć‚’ę½°ć—ć¦ć„ć‚‹ćŒć€å…ˆå›žć‚Šć—ć¦ę¤œå‡ŗć—ć¦ć‚„ć‚ŠćŸć„ Swagger swagger.jsonć®č‡Ŗå‹•ē”Ÿęˆć«ć¤ć„ć¦ćÆē›®é€”ćÆē«‹ć£ćŸć®ć§ćƒžć‚¤ćƒ«ć‚¹ćƒˆćƒ¼ćƒ³ć‚’ē«‹ć¦ć‚‹ iOSćØć®é€£ęŗć‚‚é€²č”Œäø­ APIå®šē¾©ć‚’yamlć§čØ˜čæ°ć™ć‚‹ćƒˆćƒ¬ćƒ³ćƒ‰ API悒yamlć§čØ˜čæ°ć™ć‚‹ć®ćŒęµč”Œć£ć¦ć„ć‚‹ Google恧yamlć§ę›øć„ćŸę§‹é€ ć«APIć«ę²æć£ć¦ć„ć‚‹ć‹ćƒ†ć‚¹ćƒˆć§ćć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć‚’å‡ŗć—ćŸć‚Šć—ć¦ć„ć‚‹ API꧋造悒yamlć§čØ˜čæ°ć—ć¦ć„ć‚‹ć®ćŒćƒ”ć‚¤ćƒ³ć‚¹ćƒˆćƒŖćƒ¼ćƒ ć«ćŖć‚Šćć† ćć®å…ˆć®ć‚¢ć‚Æć‚·ćƒ§ćƒ³ļ¼ˆAPIć‚’äøøć”ćØč‡Ŗå‹•ē”Ÿęˆć—ćŸć‚Šļ¼‰ćŒć‚ć‚Šćć† ę©Ÿę¢°å­¦ēæ’ćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œ ćƒ¬ć‚·ćƒ”ćƒ‡ćƒ¼ć‚æć®ę§‹é€ åŒ–ć‚’é€²ć‚ć‚‹ ćƒ¬ć‚·ćƒ”ęƒ…å ±ć®ę§‹é€ åŒ–ć‚’é€²ć‚ć¦ć„ć‚‹ ćƒ¬ć‚·ćƒ”ć®ē‰¹å¾“é‡ć‚’å‡ŗć—ć¦ć„ćć«ć‚ćŸć£ć¦ć€ćƒ¬ć‚·ćƒ”ć‚’å…„åŠ›ć™ć‚‹å“ć®ę‰‹é †ć‚’ę•“ē†ć—ćŸć„ć€‚ćƒ¬ć‚·ćƒ”ęƒ…å ±ć®ę§‹é€ åŒ–ć‚’é€²ć‚ć‚‰ć‚Œć‚Œć°ć€ę–™ē†ć®é›£ę˜“åŗ¦ć‚’åˆ¤ę–­ć—ćŸć‚Šć‚‚ć§ććć† ćƒ«ćƒ¼ćƒ«ćƒ™ćƒ¼ć‚¹ć®ćƒćƒŖćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ć§ćƒć‚§ćƒƒć‚Æć™ć‚‹ćŖć©ć®ę–¹ę³•ć§ć‚ć‚Œć°ć€ćć“ć¾ć§ć‚³ć‚¹ćƒˆćŒć‹ć‹ć‚‰ćŖćå½¹ć«ć‚‚ē«‹ć”ćć† SREćƒćƒ¼ćƒ ć®ęŠ€č”“ēš„čŖ²é”Œć€ćƒ­ćƒ¼ćƒ‰ćƒžćƒƒćƒ— ćƒ‡ćƒ¼ć‚æåÆč¦–åŒ–ćƒ—ćƒ­ć‚øć‚§ć‚Æćƒˆ ē‹¬č‡Ŗć®ćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ć‚’ä½œć£ć¦ć„ć‚‹ Vue.js+Express ćƒ”ć‚¤ćƒ³ć®ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚ÆćÆć‚Øć‚æćƒ¼ćƒŠćƒ«ćƒćƒ¼ć‚¹ SQLę›øć‹ćŖć„äŗŗćŒä½æć†ć‚ˆć†ćŖćƒ€ćƒƒć‚·ćƒ„ćƒœćƒ¼ćƒ‰ćŒć»ć—ć„ ę—¢å­˜ć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć«ć¤ć„ć¦ Metabase态Re:dashなどはSQLę›øćäŗŗē”Øć®ćƒ—ćƒ­ćƒ€ć‚Æćƒˆ ć‚µćƒ¼ćƒ“ć‚¹ć®ē”ØčŖžć‚’ä½æć£ć¦ćƒ‡ćƒ¼ć‚æć‚’åˆ†ęžć§ćć‚‹ć‚ˆć†ćŖćƒ„ćƒ¼ćƒ«ćŒćŖć„ ć‚°ćƒ©ćƒ•ć«ć¤ć„ć¦ć‚‚ćƒ—ćƒŖć‚»ćƒƒćƒˆć®ć‚‚ć®ć§ćŖćć€ć‚ˆć‚Šč¦‹ć‚„ć™ć„ć‚‚ć®ćŒę¬²ć—ć„ å¤‰ę•°ć«ć¤ć„ć¦ć‚‚ē“°ć‹ć„åˆ¶å¾”ćŒć§ććŖć„ ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—é–‹ē™ŗ ć¾ćšćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—ć‚’ä½œć£ć¦ć€ä»Šć‚Æć‚Ŗćƒ¼ć‚æćƒ¼äø­ć«ćƒ—ćƒ­ćƒˆć‚æć‚¤ćƒ—ć‚’ć‚‚ćØć«ę©Ÿčƒ½čæ½åŠ ć®åœŸå°ć«ćŖć‚‹ć‚‚ć®ć‚’ćƒŖćƒŖćƒ¼ć‚¹ć—ć€ć‚¢ć‚øćƒ£ć‚¤ćƒ«ćæćŸć„ćŖé–‹ē™ŗćƒ•ćƒ­ćƒ¼ć«č¼‰ć›ćŸć„ äø€ćƒćƒ¼ćƒ ć„ć¦ć‚‚ć„ć„ćć‚‰ć„ć®č¦ęØ” 1å¹“å¾Œć‚’č€ƒćˆćŸę™‚ć«ć€č‡Ŗåˆ†ćŸć”ć®ć‚µćƒ¼ćƒ“ć‚¹ć®ē”ØčŖžć§ę•“ē†ć•ć‚ŒćŸåÆč¦–åŒ–ćƒ„ćƒ¼ćƒ«ćŒć‚ć£ćŸę–¹ćŒć„ć„ ē¾ēŠ¶ćÆćƒ¬ćƒćƒ¼ćƒ†ć‚£ćƒ³ć‚°ć€ćƒ‡ćƒ¼ć‚æåˆ†ęžć‚’ćƒćƒ©ćƒćƒ©ć€å±žäŗŗēš„ć«ć‚„ć£ć¦ć„ć‚‹ć€ćć‚Œć‚’ēµ±åˆć—ćŸć„ ćƒ‡ćƒ¼ć‚æćƒ¬ć‚¤ć‚Æć®ē§»č”Œļ¼ˆć‚Øć‚æćƒ¼ćƒŠćƒ«ćƒćƒ¼ć‚¹ļ¼‰ ć§ććŸć€čæ½åŠ ć§ć‚„ć‚‹ć“ćØćÆćŖć„ åæ…č¦ć«ćŖć£ćŸć‚‰éŽåŽ»ćƒ‡ćƒ¼ć‚æļ¼ˆFirebase, Logposeļ¼‰ć®ē§»č”Œć‚‚ć‚„ć‚‹ ć“ć¾ć”ć¾ć‚µćƒ¼ćƒćƒ¼ć‚¤ćƒ³ćƒ•ćƒ©ę•“ē†ćƒ—ćƒ­ć‚øć‚§ć‚Æćƒˆ ć“ć¾ć”ć¾ćØć—ć¦ć„ć‚‹ē¤¾å†…ć‚·ć‚¹ćƒ†ćƒ ēš„ćŖćƒ—ćƒ­ć‚øć‚§ć‚ÆćƒˆćŒć‚ć‚Šć€ćƒ”ćƒ³ćƒ†ć•ć‚Œć¦ć„ćŖć„ ćć‚Œć‚‰ć®ćƒ‡ćƒ—ćƒ­ć‚¤ćŒć†ć¾ćć„ć‹ćŖććŖć£ć¦ć„ć‚‹ć€ę–¹ę³•ć‚’ēµ±äø€ć—ćŸć„ ć©ć†ć„ć†ć‚‚ć®ćŒć‚ć£ć¦ć©ć®ć‚ˆć†ćŖę§‹ęˆć«ćŖć£ć¦ć„ć‚‹ć‹ćÆęŠŠę”ć§ćć¦ć„ć‚‹ ę¤œē“¢å‘Øć‚Šć®ęŠ€č”“ēš„čŖ²é”Œ ę¤œē“¢ć‚¢ćƒ«ć‚“ćƒŖć‚ŗćƒ č‡Ŗä½“ć®ę”¹å–„ ćƒćƒƒć‚Æć‚Øćƒ³ćƒ‰ć®ćƒ­ć‚øćƒƒć‚Æć®A/Bćƒ†ć‚¹ćƒˆć‚’ć‚„ć‚‹ć‹ć‚‚ć—ć‚ŒćŖć„ć®ć§ć€ćć‚ŒćŒå…„ć£ćŸć‚‰ćƒ­ć‚øćƒƒć‚ÆéƒØåˆ†ć®ę¤œčØ¼ć‚’ć‚„ć‚‹ć‹ć‚‚ ę¤œē“¢ćƒ­ć‚°ć®åˆ†ęžć®ēŸ„č¦‹ć‚’é–‹ē™ŗéƒØä»„å¤–ć§ć‚‚ę“»ē”Øć™ć‚‹ ę¤œē“¢ć®ćƒ­ć‚°ćƒ‡ćƒ¼ć‚æć‚’ę“»ē”Øć—ć¦ć€ć„ć‚ć„ć‚ćŖćØć“ć‚ć«ćƒ‡ćƒ¼ć‚æć‚’ęø”ć›ć‚‹ć‚ˆć†ć«ćŖć£ć¦ććŸ ę—„ć”ćØć®ę¤œē“¢ćƒ©ćƒ³ć‚­ćƒ³ć‚°ć‚’Slackć§č‡Ŗå‹•ć§å…±ęœ‰ć—ćŸć‚Š ę¤œē“¢å…±ęœ‰MTGć§ę¤œē“¢ćƒˆćƒ¬ćƒ³ćƒ‰ć‚’å…±ęœ‰ć—ćŸć‚Šć—ć¦ć„ć‚‹ć€ęœ€čæ‘ćÆć‚æć‚¤ć‚¢ćƒƒćƒ—ć‚„ćƒžćƒ¼ć‚±ć®äŗŗć«ć‚‚å…±ęœ‰ć—ć¦ć„ć‚‹ ę¤œē“¢č‡Ŗä½“ć®ę”¹å–„ć‚‚ćć†ć ć‘ć©ć€ćƒ¬ć‚·ćƒ”éøå®šć‚‚ćƒ‡ćƒ¼ć‚æć«åŸŗć„ć„ć¦č”Œć£ćŸć‚Šć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ććŸ čŖæē†éƒØć®ä½œę„­ćƒ•ćƒ­ćƒ¼č‡Ŗä½“ć®ę”¹å–„ć«ć‚‚č²¢ēŒ®ć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ććŸ ęœ€čæ‘ć§ćÆć€2ć‹ęœˆå…ˆå‘ć‘ć®ćƒ¬ć‚·ćƒ”ć®ęę”ˆć‚’č”Œćˆć‚‹ć‚ˆć†ć«ćŖć£ć¦ććŸ ę¤œē“¢å†…å®¹ć®ę”¹å–„ ę¤œē“¢ć•ć‚Œć¦ć‚‚å­˜åœØć—ćŖć„ć‚Æć‚ØćƒŖćŒćŸćć•ć‚“ć‚ć£ćŸć®ćŒć€ęœ€čæ‘ćÆć„ć„ę„Ÿć˜ć«åŸ‹ć¾ć£ć¦ććŸ ć”ć‚‡ć£ćØé•·ććŖć£ć¦ć—ć¾ć„ć¾ć—ćŸćŒć€delyć®é–‹ē™ŗćƒćƒ¼ćƒ ć§ćÆęœ€čæ‘ć“ć®ć‚ˆć†ćŖå–ć‚Šēµ„ćæć‚’ć—ć¦ć„ć¾ć™ćØć„ć†ć”ē“¹ä»‹ć§ć—ćŸć€‚ delyć§ćÆć€ä¼šē¤¾ć®é–‹ē™ŗę–‡åŒ–č‡Ŗä½“ć®ē™ŗå±•ć€äæƒé€²ć«čˆˆå‘³ćŒć‚ć‚‹äŗŗć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ ļ¼ˆć‚ćØAndroidć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚‚å‹Ÿé›†ć—ć¦ć¾ć™ć€‚ļ¼‰
こんにごは! ćƒ—ćƒ­ćƒ€ć‚Æćƒˆćƒžćƒćƒ¼ć‚øćƒ£ćƒ¼ć‚’ć—ć¦ć„ć‚‹å„„åŽŸ ( @okutaku0507 ) ć§ć™ć€‚å‰ć¾ć§ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ć®ćƒŖćƒ¼ćƒ‰ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’ć—ć¦ć„ć¾ć—ćŸć€‚ delyć®é–‹ē™ŗćƒ–ćƒ­ć‚°ćŒé•·ć‚‰ćę›“ę–°ć•ć‚Œć¦ćŠć‚‰ćšć€äøē”²ę–ćŖć„ć§ć™ć€‚ć“ć‚Œć‹ć‚‰ćÆę“»ē™ŗć«delyćŒå–ć‚Šå…„ć‚Œć¦ć„ć‚‹ęœ€ę–°ęŠ€č”“ć‚„å®Ÿéš›ć«ć‚ć£ćŸäŗ‹ä¾‹ć€å–ć‚Šå…„ć‚Œć¦ć„ć‚‹ć‚¢ćƒ¼ć‚­ćƒ†ć‚Æćƒćƒ£ćŖć©ć‚’äø­åæƒć«ē™ŗäæ”ć—ć¦ć„ććŸć„ćØę€ć£ć¦ć„ć¾ć™ć€‚Ā  ä¹…ć—ć¶ć‚Šć®ä»Šå›žćÆć€delyćŒé‹å–¶/é–‹ē™ŗć—ć¦ć„ć‚‹ćƒ¬ć‚·ćƒ”å‹•ē”»ć‚µćƒ¼ćƒ“ć‚¹ć§ć‚ć‚‹ kurashiru ć®ę¶™ć‚ć‚Šć€ē¬‘ć„ć‚ć‚Šć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ęˆ¦ē•„ć«ć¤ć„ć¦ę­“å²ćØå®Ÿéš›ć®äŗ‹ä¾‹ć‚’å…ƒć«ę›øć„ć¦ć„ććŸć„ćØč€ƒćˆć¦ć„ć¾ć™ć€‚ęœ€å¾Œć«ćÆć€åƒ•ćŒä½œęˆć—ćŸć‚Æćƒ©ć‚·ćƒ«ć«ē”Øć„ć‚‰ć‚Œć¦ć„ć‚‹ć‚­ćƒ£ćƒƒć‚·ćƒ„ęˆ¦ē•„ć‚’gemć«ć—ćŸćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć‚’ē“¹ä»‹ć„ćŸć—ć¾ć™ć€‚ ćÆć˜ć‚ć« ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ćƒćƒ¼ćƒ ćÆć‚Æćƒ©ć‚·ćƒ«ć®é–‹ē™ŗć‹ć‚‰1å¹“åŠēØ‹åŗ¦ć¾ć§ć€äø»ć«åƒ•äø€äŗŗć—ć‹ć„ć¾ć›ć‚“ć§ć—ćŸć€‚ TVCMć«ć‚ˆć‚‹ę€„ęæ€ćŖćƒ¦ćƒ¼ć‚¶ćƒ¼ę•°å¢—åŠ ć‚„ę–°ę©Ÿčƒ½é–‹ē™ŗ 态 社哔100äŗŗć‚’ę”Æćˆć‚‹ē®”ē†ć‚µć‚¤ćƒˆ 開発などの ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰é¢ć‚’äø€äŗŗć§ę‹…å½“ ć›ć–ć‚‹ć‚’å¾—ć¾ć›ć‚“ć§ć—ćŸć€‚čØ€ć„čØ³ć«ćŖć£ć¦ć—ć¾ć†ć‹ć‚‚ć—ć‚ŒćŖć„ć§ć™ćŒć€ęœ€å°å·„ę•°ć§ęœ€å¤§é™ć„ć„ę„Ÿć˜ć«ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„å‘Øć‚Šć«ååˆ†ćŖę™‚é–“ćŒå‰²ć‘ćšć€ä»–ć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ę–¹ć€…ć‹ć‚‰č¦‹ć‚Œć°ē¶™ćŽęŽ„ćŽć§äøę°å„½ćŖå°č±”ć‚’å—ć‘ć‚‹ć‹ć‚‚ēŸ„ć‚Œć¾ć›ć‚“ć€‚ćƒŖć‚½ćƒ¼ć‚¹ćŒęć‚ć—ćęžÆęø‡ć—ć¦ć„ć‚‹ć‚¹ć‚æćƒ¼ćƒˆć‚¢ćƒƒćƒ—ć®äø€ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č‹¦ę‚©ćØę ¼é—˜ć®ę­“å²ć ćØę€ć£ć¦ć„ćŸć ć‘ć‚Œć°ćØę€ć„ć¾ć™ć€‚ć‚‚ć—ć‚ˆć‘ć‚Œć°ć€å»ŗčØ­ēš„ćŖę„č¦‹ć‚’ć„ćŸć ćć‹ć‚ć‚‹ć„ćÆä»²é–“ć«åŠ ć‚ć£ć¦ć„ćŸć ćć€äø€ē·’ć«ę”¹å–„ć—ć¦ć„ć‘ć‚Œć°å¹øć„ć§ć™ć€‚ ćć—ć¦ć€ć“ć®čØ˜äŗ‹ćÆć“ć‚“ćŖę–¹ć«ćŠć™ć™ć‚ć§ć™ć€‚ć‚‚ć”ć‚ć‚“ć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ęˆ¦ē•„č‡Ŗä½“ćÆć©ć®čØ€čŖžć§čØ˜čæ°ć•ć‚Œć¦ć„ć¦ć‚‚å½¹ē«‹ć¤ćØę€ć„ć¾ć™ć€‚ ćƒ¦ćƒ¼ć‚¶ćƒ¼å“ć§DBćøć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒć»ć¼ćƒŖćƒ¼ćƒ‰ åŒć˜ē”»é¢ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒå¤šćć€ć‚­ćƒ£ćƒƒć‚·ćƒ„åŠ¹ēŽ‡ćŒč‰Æć„ ć‚µćƒ¼ćƒćƒ¼ć‚µć‚¤ćƒ‰ćƒŖć‚½ćƒ¼ć‚¹ćŒę’åøøēš„ć«ęžÆęø‡ēŠ¶ę…‹ Ā  1. å…ØćƒŖć‚Æć‚Øć‚¹ćƒˆćŒDBにアクセス時代 ELBćŖć©ćÆēœćć€åæ…č¦ęœ€ä½Žé™ć®ę§‹ęˆć‚’ęććØć“ć‚“ćŖę„Ÿć˜ć§ć—ćŸć€‚ Ā  Ā  Railsć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćŒäø€ć¤ć®ćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹ć‚’å‚ē…§ć™ć‚‹ćØć„ć†ć€ćØć¦ć‚‚ć‚·ćƒ³ćƒ—ćƒ«ćŖę§‹ęˆć§ć™ć€‚ć“ć®ę§‹ęˆć§å•é”ŒćŖć®ćŒć€å…Øć¦ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć§ćƒ‡ćƒ¼ć‚æćƒ™ćƒ¼ć‚¹ćøå•ć„åˆć‚ć›ć‚’č”ŒćŖć£ć¦ć„ć‚‹ē‚¹ć§ć™ć€‚ćŸćØćˆåŒć˜ć‚Æć‚ØćƒŖćŒčµ°ć£ć¦åŒć˜ēµęžœćŒå¾—ć‚‰ć‚ŒćŸćØć—ć¦ć‚‚ć€å…Øć¦å•ć„åˆć‚ć›ćŒč”Œć‚ć‚Œć¦ć„ć‚‹ćŸć‚ć€ćØć¦ć‚‚åŠ¹ēŽ‡ćŒę‚Ŗć„ć§ć™ć€‚Ā  ćć—ć¦ć€ć‚µćƒ¼ćƒ“ć‚¹ćŒć‚°ćƒ­ćƒ¼ć‚¹ć—ć¦ć„ćäø­ć§äø€ć¤ć®å•é”ŒćŒčµ·ććÆć˜ć‚ć¾ć—ćŸć€‚Ā  ćƒ—ćƒƒć‚·ćƒ„ę‰“ć¤ćØć‚µćƒ¼ćƒćƒ¼č½ć”ć‚‹äøåÆéæå•é”Œć€‚ å…Øē«Æęœ«ć‚’ć‚æćƒ¼ć‚²ćƒƒćƒˆć«ćƒ—ćƒƒć‚·ćƒ„ć‚’ę‰“ć¤ćØć‚µćƒ¼ćƒćƒ¼ćŒč½ć”ć‚‹ćØć„ć†å•é”Œć«č”Œćē€ćć¾ć—ćŸć€‚ćć®åŽŸå› ćØć—ć¦ć€ę§˜ć€…ćŖåŽŸå› ćŒč€ƒćˆć‚‰ć‚Œć‚‰ć‚Œć€ćƒ”ćƒ¢ćƒŖć‚„CPUćŖć©ę§˜ć€…ćŖćƒ”ćƒˆćƒŖć‚Æć‚¹ć‚’čŖæć¹ć¾ć—ćŸćŒć€ć‚ć‹ć‚‰ćšä»•čˆžć„ć§ć—ćŸć€‚ ćć‚“ćŖć“ć‚“ćŖć‚ć‚Šć€å¤œć‚‚ēœ ć‚‰ć‚ŒćŖć„ę—„ć€…ćŒē¶šćć¾ć—ćŸ... ※ ć€Œć‚†ć†ć™ć“ć€ćÆå¼Šē¤¾ä»£č”Øć§ć™ Ā  Ā  ćć—ć¦ć€DBćŒćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«ćŖć£ć¦ēµęžœēš„ć«ćƒ¬ć‚¤ćƒ†ćƒ³ć‚·ćŒäøŠćŒć‚Šć€LBć®ćƒ˜ćƒ«ć‚¹ćƒć‚§ćƒƒć‚ÆćŒč½ć”ć¦ć„ć‚‹ć®ć§ćÆćŖć„ć‹ćØć„ć†č€ƒćˆć«č‡³ć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚’å°Žå…„ć™ć‚‹ć“ćØć«ćŖć‚Šć¾ć—ćŸć€‚ ä½•ćÆćØć‚‚ć‚ć‚Œć€ CTOćŒå¾¹å¤œć§ć‚³ćƒ¼ćƒ‰ć‚’ę›øć ćØć„ć†ę¶™ćć¾ć—ć„åŠŖåŠ›ć«ć‚ˆć‚Šć€åƒ•ć‚‰ćÆć„ć£ćØćć®å¹³å’Œć‚’ę‰‹ć«ć—ć¾ć—ćŸć€‚ Ā  後にSREćŒć‚øćƒ§ć‚¤ćƒ³ć—ć€čŖæć¹ć‚‹ćØćƒŖć‚½ćƒ¼ć‚¹ćŒåŠ¹ēŽ‡ēš„ć«ä½æć‚ć‚Œć¦ćŖć‹ć£ćŸć“ćØć‚‚åŽŸå› ć ćØć‚ć‹ć‚Šć¾ć—ćŸć€‚ tech.dely.jp Ā  2. ć‚Ŗćƒ¼ć‚½ćƒ‰ćƒƒć‚Æć‚¹ćŖć‚­ćƒ£ćƒƒć‚·ćƒ„ę™‚ä»£ AWSć®ćƒžćƒćƒ¼ć‚øćƒ‰ć‚µćƒ¼ćƒ“ć‚¹ć§ć‚ć‚‹ElastiCacheć‚’å°Žå…„ć—ć¾ć—ćŸć€‚ ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć«čæ”ć™APIćƒ¬ć‚¹ćƒćƒ³ć‚¹(json)ć‚’ć€ćƒ‘ćƒ©ćƒ”ćƒ¼ć‚æć‚’å«ć‚ćŸć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆęÆŽć«ElastiCacheć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ć™ć‚‹ć‚ˆć†ć«ć—ć¾ć—ćŸć€‚ćć†ć™ć‚‹ć“ćØć§ć€DBćøéŽåŗ¦ć«äøč¦ćŖå•ć„åˆć‚ć›ćŒē™ŗē”Ÿć—ćŖććŖć‚Šć¾ć—ćŸć€‚ē°”å˜ć§ć™ćŒć€ę§‹ęˆćÆä»„äø‹ć®ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚ Ā  Ā  ć“ć‚Œć«ć‚ˆć‚Šć—ć°ć‚‰ććÆęž•ć‚’é«˜ćć—ć¦åÆć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ ć—ć‹ć—ć€ē¾å®ŸćÆćć‚“ćŖć«ē”˜ććÆć‚ć‚Šć¾ć›ć‚“ć€‚ å¼Šē¤¾ć§ćÆć‚¤ćƒ³ć‚·ćƒ‡ćƒ³ćƒˆē“šć®ć‚¢ćƒ©ćƒ¼ćƒˆćÆć‚¤ćƒÆć•ć‚“ćŒę•™ćˆć¦ćć‚Œć¾ć™ć€‚ć“ć‚ŒćÆćƒ¬ć‚¤ćƒ†ćƒ³ć‚·ćŒ1ē§’ć‚’č¶…ćˆć¦ć‚‹ć‚ˆćØć„ć†ęę€–ć®é€šēŸ„ć§ć™ć€‚ć“ć®é€šēŸ„ćŒćƒ—ćƒƒć‚·ćƒ„ć®ę™‚ć«é »ē¹ć«ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć—ćŸć€‚ ć“ć®ć‚¤ćƒ³ć‚·ćƒ‡ćƒ³ćƒˆć«ć¤ć„ć¦čŖæęŸ»ć—ć¦ć„ććØć€ElastiCache恮GetHitsćØć„ć†ćƒ”ćƒˆćƒŖć‚Æć‚¹ćŒå¼•ć£ć‹ć‹ć‚Šć¾ć—ćŸć€‚ 当時はElastiCache悒3å°ē«‹ć¦ć¦ć„ćŸć®ć§ć™ćŒć€ć“ć®å›³ć‹ć‚‰ć‚ć‹ć‚‹ć‚ˆć†ć«ć€ę˜Žć‚‰ć‹ć«1ć¤ć®ć‚µćƒ¼ćƒćƒ¼ć«ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒåć£ć¦ć„ć¾ć™ć€‚ć¾ćŸć€ć“ć®ę™‚é–“ć®Railsć®ćƒ­ć‚°ć‚’čŖæęŸ»ć™ć‚‹ćØä»„äø‹ć®ć‚ˆć†ćŖć‚Øćƒ©ćƒ¼ćŒå‡ŗć¦ć„ć‚‹ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸć€‚ W, [2016-08-13T12:13:26.663212 #6100] WARN -- : localhost:11211 failed (count: 0) Timeout::Error: IO timeout D, [2016-08-13T12:13:27.053149 #6100] DEBUG -- : #<Dalli::NetworkError: Socket operation failed, retrying...> D, [2016-08-13T12:13:27.553223 #6100] DEBUG -- : Dalli::Server#connect localhost:11211 D, [2016-08-13T12:13:28.311837 #6111] DEBUG -- : #<Dalli::NetworkError: Socket operation failed, retrying...> å½“åˆć€äø€ć¤ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć«åÆ¾ć—ć¦äø€ę„ć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚’å–å¾—ć™ć‚‹ćŸć‚ć®ć‚­ćƒ¼ćŒę±ŗć¾ć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć—ćŸć€‚ćƒ—ćƒƒć‚·ćƒ„ć§ćƒ›ćƒ¼ćƒ ć‚’é–‹ć‹ć›ć‚‹ć‚ˆć†ć«ć€ē‰¹å®šć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć«ć‚¢ć‚Æć‚»ć‚¹ćŒé›†äø­ć™ć‚‹å “åˆć€TCPćƒćƒ¼ćƒˆć®äøŠé™ć«é”ć—ć¦ćƒćƒ¼ćƒˆćŒč¶³ć‚ŠćŖććŖć£ć¦ć—ć¾ć„ć¾ć™ć€‚ćć†ć™ć‚‹ćØć€Railså“ć§ć‚­ćƒ£ćƒƒć‚·ćƒ„ćŒäøŠę‰‹ćå–å¾—ć§ććšć€RailsćŒć‚æć‚¤ćƒ ć‚¢ć‚¦ćƒˆć™ć‚‹ć¾ć§å¾…ć£ć¦ć—ć¾ć†ćŸć‚ć€ēµęžœēš„ć«ćƒ¬ć‚¤ćƒ†ćƒ³ć‚·ćŒäøŠćŒć£ć¦ć„ćŸćØć„ć†ć“ćØć«ćŖć‚Šć¾ć™ć€‚ ć“ć®č§£ę±ŗē­–ćÆå˜ē“”ć§ć€é›†äø­ć—ć¦ć—ć¾ć†ćŖć‚‰åˆ†ę•£ć•ć›ć‚Œć°ć„ć„ćØå½“ę™‚ćÆč€ƒćˆć¾ć—ćŸć€‚ cache_key = ā€œtest-keyā€ cacher = Cacher::ObjectCacher.new(key: cache_key) cacher.write(ā€œtest-strā€) # Cache write: test-key-1 # Cache write: test-key-2 # Cache write: test-key-3 äøŠčØ˜ć®ć‚ˆć†ć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć®å¾Œć‚ć«ę•°å­—ć‚’ć¤ć‘ć‚‹ć‚ˆć†ć«ć™ć‚‹ć“ćØć§ć€åŒć˜å†…å®¹ć‚’åˆ†ę•£ć•ć›ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚åŽ³åÆ†ć«čØ€ćˆć°ć€ć‚Æćƒ©ć‚·ćƒ«ć§ä½æć£ć¦ć„ć‚‹ dalli というgemć®ćƒ­ć‚øćƒƒć‚Æć«ć‚ˆć‚‹ćŸć‚ć€å‡ē­‰ć«åˆ†ę•£ć•ć›ć‚‹ć“ćØćÆć§ćć¾ć›ć‚“ćŒć€ē›®ēš„ćÆęžœćŸć™ć“ćØćŒć§ćć¾ć—ćŸć€‚ ć“ć†ć—ć¦ć€å†ć³å¼Šē¤¾ć«å¹³å’ŒćŒčØŖć‚Œć¾ć—ćŸć€‚ ※ ē¾åœØć®ćƒ”ćƒˆćƒŖć‚Æć‚¹ć‚’ć‚¹ć‚Æć‚·ćƒ§ć—ćŸćŸć‚äøŠćØē•°ćŖć‚Šć¾ć™ Ā  3. ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ†ę•£ę™‚ä»£ ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć®å¾Œć‚ć«ę•°å­—ć‚’ć¤ć‘ć‚‹ć“ćØć§ć€ć„ć„ę„Ÿć˜ć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ćŒåˆ†ę•£ć•ć‚Œć€ć‚¤ćƒÆć•ć‚“ć‹ć‚‰ę€’ć‚‰ć‚Œć‚‹ć“ćØćÆåŠ‡ēš„ć«ęø›ć‚Šć¾ć—ćŸć€‚ ć—ć‹ć—ć€ć¾ć ć¾ć ē¾å®ŸćÆē”˜ćć‚ć‚Šć¾ć›ć‚“ć§ć—ćŸć€‚ ćŸć¾ćƒ¼ć«ć§ć™ćŒć€ćƒ—ćƒƒć‚·ćƒ„ę™‚ć«ć‚¤ćƒÆć•ć‚“ć‹ć‚‰ę€’ć‚‰ć‚Œć‚‹ć“ćØćŒć‚ć‚Šć¾ć—ćŸć€‚ č©³ć—ćčŖæęŸ»ć‚’ć™ć‚‹ćØć€ć©ć†ć‚„ć‚‰ć‚¤ćƒÆć•ć‚“ć‹ć‚‰ę€’ć‚‰ć‚Œć‚‹ę™‚ćÆć€ElastiCacheć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ćƒŸć‚¹ćŒę€„ęæ€ć«å¢—åŠ ć—ć¦ć„ć‚‹ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸć€‚ć¤ć¾ć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć§ć™ć€‚åˆ†ę•£ć•ć›ćŸć®ćÆć„ć„ć§ć™ćŒć€ å…Øć¦åŒć˜ęœ‰åŠ¹ęœŸé™ć‚’čØ­å®šć—ć¦ć„ćŸćŒę•…ć«ć€åˆ‡ć‚Œć‚‹ę™‚ćÆåˆ†ę•£ć•ć‚ŒćŸå…Øć¦ć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ćŒåˆ‡ć‚Œć¦ć„ćŸ ということです。 ćŖć‚‰ć°ć€ęœ‰åŠ¹ęœŸé™ć‚’é•·ćć™ć‚Œć°ć„ć„ćØć„ć†č©±ć«ćŖć‚Šć¾ć™ćŒć€ ć‚æć‚¤ć‚¢ćƒƒćƒ—åŗƒå‘ŠćŒęŒ‡å®šć•ć‚ŒćŸę™‚é–“ć«å…¬é–‹ć•ć‚Œć‚‹ć“ćØ ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚’é•·ćć—ć¦ćƒ‡ćƒ¼ć‚æć®äøę•“åˆćŒćŠćć‚‹ć“ćØ ćŖć©ć®ē†ē”±ć«ć‚ˆć‚Šćć‚ŒćÆé›£ć—ć„ēŠ¶ę³ć§ć—ćŸć€‚ ć¾ćŸć€čØ­čØˆćÆć‚·ćƒ³ćƒ—ćƒ«ć«äæć”ćŸć‹ć£ćŸć®ć§ć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‹ć‚‰ę„ć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆć®ć‚Øć‚³ć‚·ć‚¹ćƒ†ćƒ ć®äø­ć§ć„ć„ę„Ÿć˜ć«ć‚„ć£ć¦ćć‚Œć‚‹ć“ćØć‚’ē›®ęŒ‡ć—ćŸę–¹ćŒč³¢ę˜Žć§ć™ć€‚ ćć“ć§ć€ćƒ’ćƒ©ćƒ”ć‚­ć¾ć—ćŸļ¼ å…ˆć»ć©ć®åˆ†ę•£ć•ć‚ŒćŸć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć«åÆ¾ć—ć¦ć€ ęœ‰åŠ¹ęœŸé™ć®ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ ć‚’ć¤ć‘ć‚Œć°ć„ć„ć®ć§ćÆćŖć„ć‹ć€‚ć¤ć¾ć‚Šć€å›³ć§ę›øććØć“ć®ć‚ˆć†ćŖę„Ÿć˜ć§ć™ć€‚ ć“ć®å›³ć«ćŠć„ć¦ć€ key-1~3ćÆåŒć˜å†…å®¹ć‚’ć‚­ćƒ£ćƒƒć‚·ćƒ„ ć—ć¦ćŠć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ć®ęœ‰åŠ¹ęœŸé™ć ć‘ćŒē•°ćŖć£ć¦ć„ć¾ć™ć€‚ć“ć®å “åˆć€key-1ć®ęœ‰åŠ¹ęœŸé™ćŒęœ€ć‚‚ēŸ­ć„ćŸć‚ć€ęœ€åˆć«ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć‚’ē”Ÿć˜ć¾ć™ćŒć€ęœ‰åŠ¹ęœŸé™ćŒćć‚Œć‚ˆć‚Šć‚‚é•·ć„key-2~3ćÆē”Ÿćę®‹ć£ć¦ć„ć‚‹ć®ć§ć€ć“ć®ć‚­ćƒ¼ć‚’å‚ē…§ć—ć¦ć„ć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćÆDBćøć®å•ć„åˆć‚ć›ć‚’č”Œć„ć¾ć›ć‚“ć€‚ ć¾ćŸć€ ēŸ¢å°ć®č‰²ć®é•ć„ćÆć‚­ćƒ£ćƒƒć‚·ćƒ„å†…å®¹ć®äø–ä»£ć‚’č”Øć—ć¦ć„ć¾ć™ ć€‚ä¾‹ćˆć°ć€key-1ćŒć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć«ćŖć‚Šć€ ę–°ćŸć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ć®å†…å®¹ć‚’ę›“ę–°ć—ć‚ˆć†ćØć—ćŸéš›ć«ć€ä»–ć®key-2~3ć‚‚åŒę™‚ć«äøŠę›øćć‚’č”Œć„ć¾ć™ ć€‚ć“ć†ć™ć‚‹ć“ćØć§ć€ć‚ćØå°‘ć—ć§ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć«ćŖć‚ć†ćØć—ć¦ć„ćŸkey-2~3ćŒę–°ćŸć«ęœ‰åŠ¹ęœŸé™ćŒčØ­å®šć•ć‚Œć¾ć™ć€‚ć“ć®ä»•ēµ„ćæć‚’ē¹°ć‚Ščæ”ć™ć“ćØć§ć€å®Ÿč³Ŗēš„ć«ć‚­ćƒ£ćƒƒć‚·ćƒ„ćƒŸć‚¹ćŒē”Ÿć˜ć‚‹ć®ćÆęœ‰åŠ¹ęœŸé™ćŒęœ€ć‚‚ēŸ­ć„key-1ć«ćŖć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ćƒŸć‚¹ć«ćŖć‚‹ē¢ŗēŽ‡ćŒć“ć®ć‚±ćƒ¼ć‚¹ć§ćÆ1/3ć«ćŖć‚Šć¾ć™ć€‚ cache = ActiveSupport::Cache::DalliStore.new cache.write('millas', 'cake', expires_in: 1.minutes) # Cache write: millas-1 ({:expires_in=>60 seconds}) # Cache write: millas-2 ({:expires_in=>120 seconds}) # Cache write: millas-3 ({:expires_in=>180 seconds}) ć“ć‚Œć§ć€å¼Šē¤¾ć«ę’ä¹…ć®å¹³å’ŒćŒčØŖć‚Œć¾ć—ćŸć€‚ ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćÆćƒ—ćƒƒć‚·ćƒ„ć®åŗ¦ć«ę€ÆćˆćŸę—„ć€…ć‚’éŽć”ć™ć“ćØćŖćć€č‡Ŗåˆ†ćŒćƒŖć‚½ćƒ¼ć‚¹ć‚’å‰²ćć¹ćć“ćØć«é›†äø­ć™ć‚‹ć“ćØćŒć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć—ćŸć€‚ ć“ć“ć¾ć§ć®ć‚¹ćƒˆćƒ¼ćƒŖćƒ¼ć‚’Qiitać«ć‚‚ę›øćć¾ć—ćŸć®ć§ć€ćƒŖćƒ³ć‚Æć‚’č²¼ć£ć¦ćŠćć¾ć™ć€‚ć¾ćŸć€ć“ć®ä»•ēµ„ćæć‚’Railsć«ē°”å˜ć«å°Žå…„ć™ć‚‹ć“ćØćŒć§ćć‚‹gemć‚‚ä½œć£ćŸć®ć§ć€Railsć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ćƒŖć‚½ćƒ¼ć‚¹ćŒęžÆęø‡ć—ć¦ć„ć¦ć€ć‚Æćƒ©ć‚·ćƒ«ć®ć‚ˆć†ć«ćƒŖćƒ¼ćƒ‰ćŒęæ€ć—ć„ćƒ”ćƒ‡ć‚£ć‚¢ć®ę–¹ć€å‚č€ƒć«ć—ć¦ć‚‚ć‚‰ćˆć‚Œć°å¹øć„ć§ć™ć€‚ qiita.com github.com Ā  追記 ć“ć®ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć®å•é”Œć‚’Thundering Herdå•é”ŒćØčØ€ć†ć‚ˆć†ć§ć™ć€‚ Kazuho@Cybozu Labs: ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚·ć‚¹ćƒ†ćƒ ć® Thundering Herd 問锌 Ā  4. ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ†ę•£ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ę™‚ä»£ ć€Œć¤ć„ć«å¹³å’ŒćŒčØŖć‚ŒćŸć€ćØčŖ°ć—ć‚‚ćŒē¢ŗäæ”ć—ć¦ć„ć¾ć—ćŸć€‚ ć—ć‹ć—ć€å¹³å’ŒćØć„ć†ć‚‚ć®ćÆćć‚“ćŖć«ę°øććÆē¶šćć¾ć›ć‚“ć§ć—ćŸć€‚ äøŠčØ˜ć®åÆ¾åæœć‚’ć—ćŸå¾Œć§ć‚‚ć€ć”ćć”ćēØ€ć«ćƒ—ćƒƒć‚·ćƒ„ę™‚ć«ć‚¤ćƒÆć•ć‚“ć‹ć‚‰ę€’ć‚‰ć‚Œć‚‹ć“ćØćŒć‚ć‚Šć¾ć—ćŸć€‚ć¾ć ę•µć„ćŸć®!?ćØć„ć†ę„Ÿć˜ć®å°‘å¹“ć‚øćƒ£ćƒ³ćƒ—ćæćŸć„ćŖäø–ē•Œč¦³ć€‚ ※ ć”ćŖćæć«ć€ć‚¤ćƒÆć•ć‚“ćÆćƒ«ćƒ•ć‚£ć®åæƒå¼·ć„å‘³ę–¹ć§ć™ Ā  åŽŸå› ć‚’ē²¾ęŸ»ć™ć‚‹ćØć€ē†ē”±ćÆåŒę§˜ć§ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚Œć®ć‚ˆć†ć§ć™ć€‚ć‚ˆćć‚ˆćč€ƒćˆć‚‹ćØć€ęœ‰åŠ¹ęœŸé™ć‚’ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ć—ćŸćØć—ć¦ć‚‚ć€äø€ć¤ć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ć«å‰²ć‚Šå½“ć¦ć‚‰ć‚Œć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćÆ1/nć«ćŖć‚Šć¾ć™ć€‚ć¤ć¾ć‚Šć€å›³ć§ę›øććØć“ć†ć„ć†ć“ćØć§ć™ć€‚ć“ć®å›³ć§ę³Øē›®ć—ć¦ę¬²ć—ć„ć®ćÆć€1ć¤ć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć«å‰²ć‚Šå½“ć¦ć‚‰ć‚Œć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆć®å‰²åˆćŒć€3割強ということです。 ä¾‹ćˆć°ć€ćƒ—ćƒƒć‚·ćƒ„ę™‚ć«10,000ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒę„ćŸéš›ć«ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚ŒćŒē”Ÿć˜ć‚‹ćØć€ē“„3,000ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒElastiCacheć‚’ć™ć‚ŠęŠœć‘ć¦DBćøå•ć„åˆć‚ć›ć‚‹ć“ćØć«ćŖć‚Šć¾ć™ć€‚ć“ć‚ŒćÆć¾ćšć„ćžć€ćØć„ć†ć“ćØć«ćŖć‚Šć¾ć™ć€‚ ć“ć“ć§ć‚‚ćƒ’ćƒ©ćƒ”ć‚­ć¾ć—ćŸļ¼ ć“ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’å„ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć«å‰²ć‚Šå½“ć¦ć‚‹é…åˆ†ć«ć‚‚ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ć‚’ć‹ć‘ć‚Œć°ć„ć„ć®ć§ćÆćŖć„ć‹ćØč€ƒćˆć¾ć—ćŸć€‚ć‚­ćƒ£ćƒƒć‚·ćƒ„ć®ęœ‰åŠ¹ęœŸé™ćŒēŸ­ć„ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć»ć©å°‘ćŖć„ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’å—ć‘å–ć‚‹ć‚ˆć†ć€ć„ć„ę„Ÿć˜ć®ćƒ­ć‚øćƒƒć‚Æć‚’ä½œć£ć¦ćƒŖć‚Æć‚Øć‚¹ćƒˆę•°ć«ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ć‚’ć‹ć‘ć‚‹ć“ćØć«ć—ć¾ć—ćŸć€‚å›³ć«ć™ć‚‹ć“ćØć“ć®ć‚ˆć†ćŖę„Ÿć˜ć«ćŖć‚Šć¾ć™ć€‚ ć“ć®å›³ćŒę„å‘³ć™ć‚‹ćØć“ć‚ćÆć€ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć®å¾Œć‚ć«ć¤ć‘ć‚‹ę•°å­— (magic number) ćŒå°ć•ć„ć»ć©ć€é »åŗ¦ (ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒå‰²ć‚Šå½“ć¦å‰²ć‚Œć‚‹é…åˆ†) ćŒä½ŽććŖć‚‹ćØć„ć†ć“ćØć§ć™ć€‚äøŠć®å›³ćØē…§ć‚‰ć—åˆć‚ć›ć‚‹ćØć€ ęœ‰åŠ¹ęœŸé™ćŒęœ€ć‚‚ēŸ­ć„ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚­ćƒ¼ć«å‰²ć‚Šå½“ć¦ć‚‰ć‚Œć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆć®å‰²åˆćŒäø€ē•Ŗå°ć•ć„ ćØć„ć†ć“ćØć‚’ę„å‘³ć—ć¾ć™ć€‚ć¤ć¾ć‚Šć€ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚ŒćŒē”Ÿć˜ć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆć®å‰²åˆćŒę•°%ć«ćŖć‚‹ć“ćØć§ć€ć»ćØć‚“ć©ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒDBć«å•ć„åˆć‚ć›ć«ć„ćć“ćØćŒćŖććŖć‚Šć¾ć—ćŸć€‚ ć“ć‚Œć‚’å°Žå…„ć—ć¦ć‹ć‚‰ć€ć‚­ćƒ£ćƒƒć‚·ćƒ„åˆ‡ć‚ŒćŒē”Ÿć˜ć‚‹ć“ćØćÆå…Øćē„”ććŖć‚Šć¾ć—ćŸć€‚ ęœ¬å½“ć«ęœ¬å½“ć®å¹³å’ŒćŒå¼Šē¤¾ć‚’åŒ…ćæč¾¼ćæć¾ć—ćŸć€‚ Ā  ēµ‚ć‚ć‚Šć« delyć§ćÆć€ęŠ€č”“ć‚’ä½æć£ć¦äø–ć®äø­ć«å¹øć›ć‚’å±Šć‘ćŸć„ćØäø€ē·’ć«ęˆ¦ć£ć¦ćć‚Œć‚‹ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć‚’å¼·ćå‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ć©ć®ćƒć‚øć‚·ćƒ§ćƒ³ć‚‚č²“é‡ćŖćƒŖć‚½ćƒ¼ć‚¹ćŒé™ć‚‰ć‚Œć¦ć„ć‚‹ćƒ™ćƒ³ćƒćƒ£ćƒ¼ć§ćÆć€ć‚„ć‚ŠćŸć„ć“ćØćŒå±±ć®ć‚ˆć†ć«ć‚ć‚‹äø­ć§ä½•ć«ę³ØåŠ›ć™ć‚‹ć‹ć€ćć—ć¦ćć‚Œć‚’å¦‚ä½•ć«ć—ć¦ęœ€é€Ÿć§ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«å±Šć‘ć‚‰ć‚Œć‚‹ć‹ćŒé‡č¦ć«ćŖć‚Šć¾ć™ć€‚ćć®äø­ć§ć‚‚č‡Ŗåˆ†ć®å¼·ćæć‚’ę“»ć‹ć—ć¦é ­ćŒć”ćŽć‚Œć‚‹ć¾ć§č€ƒćˆć¦å®Ÿč£…ć™ć‚‹ć“ćØćŒåƒ•ć‚‰ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č¦‹ć›ę‰€ć ćØę€ć£ć¦ć„ć¾ć™ć€‚ Ā  äø€ę–¹ć§ć€ę–°ć—ć„ć‚½ćƒŖćƒ„ćƒ¼ć‚·ćƒ§ćƒ³ć‚‚ē©ę„µēš„ć«å–ć‚Šå…„ć‚Œć€ęœ¬ē•Ŗē’°å¢ƒć«é©åæœć—ć¦ć„ć¾ć™ć€‚ćć®å–ć‚Šēµ„ćæć®äø€ć¤ćŒč©•ä¾”ć•ć‚Œć€AWS Summit Tokyo 2018で弊社CTOćŒåŸŗčŖæč¬›ę¼”ć•ć›ć¦ć„ćŸć ć„ćŸå‹•ē”»ć‚’č²¼ć£ć¦ćŠćć¾ć™ć€‚ Day3 åŸŗčŖæč¬›ę¼”ļ¼ˆę—„ęœ¬čŖžåŒę™‚é€ščØ³ļ¼‰ | AWS Summit Tokyo 2018 Ā  åƒ•ć‚‰ćÆć‚µćƒ¼ćƒ“ć‚¹ć‚’ä¼øć°ć—ć¤ć¤ć€ć‚Øćƒ³ć‚øćƒ‹ć‚¢å€‹äŗŗćŒęŠ€č”“ēš„ć«ęŒ‘ęˆ¦ć—ćŸć„ć“ćØć«ć€ć©ć‚“ć©ć‚“ćƒćƒ£ćƒ¬ćƒ³ć‚øć—ć¦ć€ć‚µćƒ¼ćƒ“ć‚¹ćØćØć‚‚ć«ęˆé•·ć—ć¦ć„ććŸć„ćØå¼·ćę€ć£ć¦ć„ć¾ć™ć€‚ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć«é™ć‚‰ćšć€ćć®ć‚ˆć†ćŖćƒžć‚¤ćƒ³ćƒ‰ć‚’ćŠęŒć”ć®ę–¹ćØäø€ē·’ć«ä»•äŗ‹ćŒć§ćć‚‹ę—„ć‚’åæƒå¾…ć”ć«ć—ć¦ćŠć‚Šć¾ć™ć€‚ę˜Æéžäø€åŗ¦ćŠčŒ¶ć§ć‚‚ć•ć›ć¦ćć ć•ć„ć€‚Ā  Ā  Ā ćƒ‡ć‚¶ć‚¤ćƒ³ćƒ–ćƒ­ć‚°ć‚‚å§‹ć‚ć¾ć—ćŸć€‚ delyć®ćƒ‡ć‚¶ć‚¤ćƒ³ćƒ–ćƒ­ć‚°ć§ę–°ć—ć„čØ˜äŗ‹ę›øćć¾ć—ćŸļ¼šŸ“ Appleć®ć€ŒEssential Design Principlesć€ć®äŗ‹ä¾‹ć‚’ć¾ćØć‚ć¾ć—ćŸć€‚ https://t.co/tsFsp8obWl — 大竹 é›…ē™» / dely (@EntreGulss) July 19, 2018 Ā 
こんにごは。 dely恧ISE(In-house System Engineer)をやっている @_skuwa 恧恙怂 kurashiru[ć‚Æćƒ©ć‚·ćƒ«]ć®ć‚°ćƒ­ćƒ¼ć‚¹ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆę”¹å–„ć®ē‚ŗć®åŸŗē›¤ć®čØ­čØˆćƒ»é–‹ē™ŗć‚’č”Œć£ć¦ć„ć¾ć™ć€‚ ä»Šę—„ćÆćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ę¤œē“¢č”Œå‹•ć®UXć‚’å‘äøŠć•ć›ć‚‹ćŸć‚ć«ē«‹ć”äøŠćŒć£ćŸć€ę¤œē“¢ę”¹å–„ćƒ—ćƒ­ć‚øć‚§ć‚Æćƒˆć«ć¤ć„ć¦ę›øć“ć†ćØę€ć„ć¾ć™ć€‚ ę¤œē“¢ę©Ÿčƒ½ć«ćŠć‘ć‚‹ć€UXäøŠć®čŖ²é”Œē‚¹ ę¤œē“¢ć—ćŸć‚‚ć®ć®ć€ćƒ¬ć‚·ćƒ”ę•°ćŒå°‘ćŖć„ č±šč‚‰ć€ćƒ‘ć‚¹ć‚æćŖć©ć®ę›–ę˜§ćŖćƒÆćƒ¼ćƒ‰ć§ć®ę¤œē“¢ę™‚ć«ēµęžœćŒå¤šć™ćŽć‚‹ļ¼ˆćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę±‚ć‚ć¦ć„ć‚‹ćƒ¬ć‚·ćƒ”ć®å‰²åˆćŒä½ŽććŖć£ć¦ć—ć¾ć†ļ¼‰ ę˜Žć‚‰ć‹ć«äøé©åˆ‡ćŖćƒ¬ć‚·ćƒ”ćŒę¤œē“¢ēµęžœć«ę··ć–ć‚Šč¾¼ć‚“ć§ć—ć¾ć£ć¦ć„ć‚‹ ćć®ēµęžœć€ę¤œē“¢å¾Œć®é›¢č„±ēŽ‡ļ¼ˆå‹•ē”»å†ē”Ÿć›ćšć«ē›“åø°ć—ćŸå‰²åˆļ¼‰ćŒé«˜ć„ēŠ¶ę…‹ć«ćŖć£ć¦ć„ć¾ć—ćŸć€‚ čŖ²é”Œč§£ę±ŗćøć®ć‚¢ćƒ—ćƒ­ćƒ¼ćƒ delyć§ćÆåŸŗęœ¬ēš„ć«ć‚°ćƒ­ćƒ¼ć‚¹ćÆé–‹ē™ŗćƒćƒ¼ćƒ ćŒč”Œć£ć¦ć„ć¾ć™ć€‚ ć—ć‹ć—ć€ä»Šå›žć®ę¤œē“¢ćÆćƒ‰ćƒ”ć‚¤ćƒ³ć®å°‚é–€ēŸ„č­˜ćŒć‚ć£ćŸć»ć†ćŒč³Ŗć®č‰Æć„ä»®čŖ¬ćŒē«‹ć¦ć‚‰ć‚Œć‚‹ćØć„ć†ć“ćØć§ć€čŖæē†éƒØćŖć©ć®å„éƒØē½²ćØé€£ęŗć—ćŸćƒ—ćƒ­ć‚øć‚§ć‚ÆćƒˆćŒē«‹ć”äøŠćŒć‚Šć¾ć—ćŸć€‚ ć‚„ć£ćŸć“ćØ éƒØē½²ęØŖę–­ć§ć®ę¤œē“¢ę”¹å–„ćƒ—ćƒ­ć‚øć‚§ć‚Æćƒˆćƒćƒ¼ćƒ ć®ē«‹ć”äøŠć’ ę–™ē†äŗŗć®ę–¹ć€…ćŒPDCAć‚’å›žć›ć‚‹ć‚ˆć†ć«ć€SQLć‚’ę›øć‹ćŖćć¦ć‚‚äø»č¦ćŖćƒ‡ćƒ¼ć‚æåˆ†ęžć‚’č”Œćˆć‚‹Webć‚¢ćƒ—ćƒŖć®ä½œęˆļ¼ˆMondoru) Mondoru上でElasticsearchć®č¾žę›øć€ć‚·ćƒŽćƒ‹ćƒ ē®”ē† 数値やKPI恮Slacké€šēŸ„ ę¤œē“¢ę•°ćŒå¤šć„ć®ć«ēµęžœćŒå°‘ćŖć„ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć‚’ęŠ½å‡ŗć—ć€ćƒ¬ć‚·ćƒ”ć‚’é–‹ē™ŗ Mondoru delyć§ćÆćƒŖćƒć‚øćƒˆćƒŖåć‚„ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³åć‚’ćƒÆćƒ³ćƒ”ćƒ¼ć‚¹ć®ć‚­ćƒ£ćƒ©ć«ć™ć‚‹ćØć„ć†ēæ’ę…£ćŒć‚ć‚‹ć®ć§ć€ä»Šå›žćÆćć‚Œć£ć½ć„ć€Ž ć‚·ćƒ£ćƒ¼ćƒ­ćƒƒćƒˆćƒ»ćƒ¢ćƒ³ćƒ‰ćƒ¼ćƒ« ć€ć‹ć‚‰åå‰ć‚’ä»˜ć‘ć¾ć—ćŸć€‚ Mondoruć«ćÆäø»ć«ä»„äø‹ć®ę©Ÿčƒ½ćŒć‚ć‚Šć¾ć™ć€‚ č¾žę›øć€ć‚·ćƒŽćƒ‹ćƒ ć®čæ½åŠ  ć‚¹ć‚³ć‚¢ćƒŖćƒ³ć‚°ć®čŖæę•“ äøŠčØ˜ćƒćƒ„ćƒ¼ćƒ‹ćƒ³ć‚°ć§ć®ę¤œē“¢ēµęžœć‚’ćƒ†ć‚¹ćƒˆć™ć‚‹ Elasitcsearchの箔理 ę¤œē“¢é›¢č„±ēŽ‡ćŖć©ć®äø»č¦ćƒ‡ćƒ¼ć‚æć‚’ē”»é¢ć‚’ćƒćƒćƒćƒć—ć¦é›†čØˆć€å‡ŗåŠ›ć™ć‚‹ ćƒ‡ćƒ¼ć‚æć®ćƒ“ć‚øćƒ„ć‚¢ćƒ©ć‚¤ć‚ŗ ćć®ę—„ć®ę¤œē“¢ćƒ‡ćƒ¼ć‚æé€Ÿå ±ć‚’Slackćøé€šēŸ„ ę”¹å–„ć§ć‚„ć£ćŸć“ćØć€ęˆęžœ åŸŗęœ¬ēš„ć«ćÆå­£ēÆ€ć”ćØć®ę¤œē“¢å‚¾å‘ć‚„é›¢č„±ēŽ‡ć‚’č¦‹ćŖćŒć‚‰č¾žę›øćØć‚·ćƒŽćƒ‹ćƒ ć‚’čæ½åŠ ć—ć¦ć„ćć“ćØć«ćŖć‚Šć¾ć™ć€‚ čŖæę•“ć—ćŸę¤œē“¢ćƒÆćƒ¼ćƒ‰ć®é›¢č„±ēŽ‡ćØå‹•ē”»å†ē”Ÿē”»é¢ćøć®é·ē§»ę•°ć®å¤‰åŒ–ć‚’č¦‹ćŖćŒć‚‰ć€ćƒ™ć‚¹ćƒˆćŖę¤œē“¢ēµęžœć‚’ęŽ¢ć£ć¦ć„ćć¾ć™ć€‚ ę—„ć€…ć®ę¤œē“¢ćƒ‡ćƒ¼ć‚æć‚’ēœŗć‚ćŖćŒć‚‰ćƒŽć‚¤ć‚ŗć®å‰²åˆćŒå¤šć„ć‚‚ć®ć«é–¢ć—ć¦ćÆč¾žę›øćØć‚·ćƒŽćƒ‹ćƒ ć‚’ę“»ē”Øć—ćŸćƒćƒ„ćƒ¼ćƒ‹ćƒ³ć‚°ć‚’ć€ę¤œē“¢ēµęžœę•°ćŒå°‘ćŖć„ć‚‚ć®ćÆč©²å½“ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰å‘ć‘ć®ćƒ¬ć‚·ćƒ”é–‹ē™ŗć‚’č”Œć„ć¾ć™ć€‚ ā†“ę¤œē“¢ēµęžœę”¹å–„ć«ć‚ˆć£ć¦ć€ę¤œē“¢å¾Œć«å‹•ē”»å†ē”Ÿć•ć‚Œć‚‹å‰²åˆćŒ ę€„é€Ÿć« å¢—ćˆć¦ćć¦ć„ć¾ć™ć€‚ 今後の課锌 ćƒ¬ć‚·ćƒ”é–‹ē™ŗć«ć‚ˆć£ć¦ćƒ‹ćƒ¼ć‚ŗć®ć‚ć‚‹ę¤œē“¢ēµęžœć‚’å……å®Ÿć•ć›ć€č¾žę›øć‚„ć‚·ćƒŽćƒ‹ćƒ ć§ę¤œē“¢ēµęžœć«å«ć¾ć‚Œć‚‹ćƒŽć‚¤ć‚ŗć‚’ęø›ć‚‰ć™ć“ćØć«ęˆåŠŸć—ć¾ć—ćŸć€‚ ćŸć ć€å†’é ­ć«čæ°ć¹ćŸć‚ˆć†ć«ę¤œē“¢ēµęžœćŒå¤šć™ćŽć‚‹ę™‚ć«ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«åˆŗć•ć‚‹ćƒ¬ć‚·ćƒ”ć®å‰²åˆćŒå°‘ćŖć„ćØć„ć†å•é”ŒćÆč§£ę±ŗć§ćć¦ć„ć¾ć›ć‚“ć€‚ćƒ‡ćƒ¼ć‚æć§č¦‹ć¦ć‚‚ć€å…·ä½“ēš„ćŖę–™ē†åć§ć®é›¢č„±ēŽ‡ćÆęø›å°‘ć—ć¦ć„ć¾ć™ćŒäø€čˆ¬ēš„ćŖé£Ÿęåć§ć®é›¢č„±ēŽ‡ćÆć‚ć¾ć‚Šå¤‰åŒ–ćŒč¦‹ć‚‰ć‚Œć¾ć›ć‚“ć€‚ ćć“ć§ć€ę¤œē“¢é–¢é€£ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼č”Œå‹•ćƒ‡ćƒ¼ć‚æć‚’å…ƒć«ć—ćŸć‚µć‚øć‚§ć‚¹ćƒˆę©Ÿčƒ½ć‚’å®Ÿč£…äø­ć§ć™ć€‚ ć‚µć‚øć‚§ć‚¹ćƒˆć«ćÆ2ēØ®é”žć‚ć£ć¦ć€ēµžć‚Šč¾¼ćæć®ć‚µć‚øć‚§ć‚¹ćƒˆćØē½®ćę›ćˆć®ć‚µć‚øć‚§ć‚¹ćƒˆćŒć‚ć‚Šć¾ć™ć€‚ ēµžć‚Šč¾¼ćæć‚µć‚øć‚§ć‚¹ćƒˆ ć€Žćƒ‘ć‚¹ć‚æć€ć‚’å…„åŠ›ć—ćŸćƒ¦ćƒ¼ć‚¶ćƒ¼ć«åÆ¾ć—ć¦ć€ ć€Žćƒ‘ć‚¹ć‚æć€€ćƒˆćƒžćƒˆć‚½ćƒ¼ć‚¹ć€ ć€Žćƒ‘ć‚¹ć‚æć€€é­šä»‹ć€ ć‚’ć‚µć‚øć‚§ć‚¹ćƒˆć™ć‚‹ć€‚ äø€čˆ¬ēš„ćŖć‚µć‚øć‚§ć‚¹ćƒˆę©Ÿčƒ½ć§ć™ć€‚ ć‚­ćƒ¼ćƒÆćƒ¼ćƒ‰ć®ę¤œē“¢ę•°ć‚„ć€ę¤œē“¢ēµęžœć®ä»¶ę•°ćŖć©ć‚’å…ƒć«ć‚¹ć‚³ć‚¢ćƒŖćƒ³ć‚°ć—ć¦č”Øē¤ŗć‚’č”Œć„ć¾ć™ć€‚ ē½®ćę›ćˆć‚µć‚øć‚§ć‚¹ćƒˆ ć€Žč±šč‚‰ć€ć‚’å…„åŠ›ć—ćŸćƒ¦ćƒ¼ć‚¶ćƒ¼ć«åÆ¾ć—ć¦ć€ ć€Žč±šć“ć¾č‚‰ć€ ć€Žč±šć²ćč‚‰ć€ ć‚’ć‚µć‚øć‚§ć‚¹ćƒˆć™ć‚‹ć€‚ ć€Žč±šč‚‰ć€ćØć„ć£ćŸć‚«ćƒ†ć‚“ćƒŖć«čæ‘ć„ę¤œē“¢ćƒÆćƒ¼ćƒ‰ćÆć€ć‚µć‚øć‚§ć‚¹ćƒˆć§ć‚ˆć‚Šē“°ć‹ć„ć‚«ćƒ†ć‚“ćƒŖć«ē½®ćę›ćˆć™ć‚‹ć“ćØć§ę¤œē“¢ēµęžœć‚’ęœ€é©åŒ–ć§ćć‚‹ć‚ˆć†ć«ć—ć¾ć™ć€‚ å†·č”µåŗ«ć«ć€Žč±šć“ć¾č‚‰ć€ćŒå…„ć£ć¦ć„ć‚‹ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒć€Žč±šč‚‰ć€ć§ę¤œē“¢ć—ć‚ˆć†ćØć—ćŸéš›ć«ć€ć€Žč±šć“ć¾č‚‰ć€ć‚’ć‚µć‚øć‚§ć‚¹ćƒˆć™ć‚‹ć“ćØć§ć€ć‚ˆć‚Šęœ€é©ćŖę¤œē“¢ēµęžœć«ćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚’čŖ˜å°Žć™ć‚‹ć“ćØćŒåÆčƒ½ć§ć™ć€‚ まとめ ćƒ‰ćƒ”ć‚¤ćƒ³ć®å°‚é–€ēŸ„č­˜ć‚’ę“»ć‹ć™ć‚°ćƒ­ćƒ¼ć‚¹åŸŗē›¤ć‚’ä½œć‚‹ć“ćØć§č³Ŗć®č‰Æć„ä»®čŖ¬ć‚’ē«‹ć¦ć‚‹ć“ćØćŒć§ćć€ć€Žč¶…é€Ÿć€ć§ć®ć‚°ćƒ­ćƒ¼ć‚¹ć‚’ć™ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ delyć§ćÆćć®ä»–ć«ć‚‚ć‚°ćƒ­ćƒ¼ć‚¹ć®č³ŖćØé€Ÿåŗ¦ć‚’ēˆ†é€Ÿć«ć™ć‚‹åŸŗē›¤ć‚„ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®é–‹ē™ŗć«ęŠ•č³‡ć‚’ć—ć¦ćŠć‚Šć€Mondoruć®ć‚ˆć†ćŖć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®é–‹ē™ŗć‚’å¤šę•°č”Œć£ć¦ć„ć¾ć™ć€‚ äø–ē•Œęœ€é€Ÿć®ć‚°ćƒ­ćƒ¼ć‚¹ ć«ęŒ‘ęˆ¦ć—ćŸć„ćØć„ć†ę–¹ć€ę˜Æéžåæœå‹Ÿć—ć¦ćæć¦ćć ć•ć„ļ¼ www.wantedly.com
iOSć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®č„æå·ć§ć™ļ¼ kurashiru(ć‚Æćƒ©ć‚·ćƒ«)恮iOSć‚¢ćƒ—ćƒŖć®é–‹ē™ŗć‚’ę‹…å½“ć—ć¦ć„ć¾ć™ć€‚ å‰å›žć®dely engineering blogć§ē“¹ä»‹ć•ć›ć¦ć„ćŸć ć„ćŸAPOLLOčØˆē”»ć«ć‚¢ć‚¹ćƒˆćƒ­ćƒŽćƒ¼ćƒˆäø€å·ćØć—ć¦éøć°ć‚ŒćŸåƒ•ćŒć“ć®čØˆē”»ć®ę„Ÿęƒ³ć‚’ę›øć„ć¦ć„ććŸć„ćØę€ć„ć¾ć™ć€‚ ęœŖę„ć®SREć‚’ęœ€é€Ÿć§č‚²ć¦ć‚‹ļ¼dely굁SREč‚²ęˆč”“ć€APOLLOčØˆē”»ć®ē“¹ä»‹ APOLLOčØˆē”»ć§ćÆSREå€™č£œč€…ć®ć“ćØć‚’ć‚¢ć‚¹ćƒˆćƒ­ćƒŽćƒ¼ćƒˆćØå‘¼ć‚“ć§ć„ć¾ć™ć€‚ ć‚¢ć‚¹ćƒˆćƒ­ćƒŽćƒ¼ćƒˆ1å·ćøć®é“ć®ć‚Š 私のdelyć§ć®ę„­å‹™ćÆå†’é ­ć§ć‚‚čæ°ć¹ćŸé€šć‚Škurashiru(ć‚Æćƒ©ć‚·ćƒ«)恮iOSć‚¢ćƒ—ćƒŖé–‹ē™ŗć§ć™ć€‚ 恗恋恗态dely恧ꗄ怅過恔恗恦恄悋恆恔恫kurashiru(ć‚Æćƒ©ć‚·ćƒ«)ć®å¤§č¦ęØ”ćƒˆćƒ©ćƒ•ć‚£ćƒƒć‚Æć‚’ęŒćSREć®ę„­å‹™ć«čˆˆå‘³ćŒć§ć¦ćć¾ć—ćŸć€‚ 恝恓恧SREć®ę„­å‹™ć«čˆˆå‘³ćŒć‚ć‚‹ć“ćØć‚’ä¼ćˆć€ä»Šå›žć®ć“ć®APOLLOčØˆē”»ć«å‚åŠ ć™ć‚‹ć“ćØć«ćŖć‚Šć¾ć—ćŸć€‚ APOLLOčØˆē”» 1.ć‚¤ćƒ³ćƒ•ćƒ©ę§‹ēÆ‰ APOLLOčØˆē”»ć‚’å—ć‘ć‚‹å‰ć®åƒ•ć®ć‚¹ć‚­ćƒ«ć‚»ćƒƒćƒˆćÆć‚¢ćƒ—ćƒŖAPI用のVPSć‚µćƒ¼ćƒćƒ¼ć‚’ę§‹ēÆ‰ć—ćŸēØ‹åŗ¦ć§AWSć«ć¤ć„ć¦ćÆć»ćØć‚“ć©ēŸ„č­˜ćŒćŖć„ēŠ¶ę…‹ć§ć—ćŸć€‚ ćŖć®ć§äŗ‹å‰ć«AWSć®ē”ØčŖžć®ēŸ„č­˜ć‚’ē°”å˜ć«ć¾ćØć‚ć¦ćć‚ŒćŸć‚‚ć®ć‚’ęø”ć—ć¦ć‚‚ć‚‰ć„ćć‚Œć‚’é ­ć«ć„ć‚Œć¦ęœ¬ē•Ŗć«ć„ć©ćæć¾ć—ćŸć€‚ćć®ćŠć‹ć’ć§ć‚¤ćƒ³ćƒ•ćƒ©ę§‹ēÆ‰č‡Ŗä½“ćÆć‚¹ćƒ ćƒ¼ć‚ŗć«é€²ć‚“ć§ć„ćć¾ć—ćŸć€‚ å…·ä½“ēš„ć«ćÆElastic Load Balancerć®ä½œęˆć€EC2ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć®ä½œęˆć€ć‚»ć‚­ćƒ„ćƒŖćƒ†ć‚£ć‚°ćƒ«ćƒ¼ćƒ—ć‚„Auto Scalingć‚°ćƒ«ćƒ¼ćƒ—ć®ä½œęˆć§ć™ć€‚ ć—ć‹ć—ć€ćć‚Œćžć‚ŒćŒć©ć®ć‚ˆć†ć«å‹•ä½œć—ć¦ć„ć¦ć©ć†ć„ć†å½¹å‰²ć‚’ć—ć¦ć„ć‚‹ć®ć‹ć‚’äø€äŗŗć§ē†č§£ć™ć‚‹ć“ćØćÆåŽ³ć—ć‹ć£ćŸć®ć§ćć®éƒ½åŗ¦č³Ŗå•ć—ć¦ć„ć¾ć—ćŸć€‚č³Ŗå•ć™ć‚‹ćØć™ćć«ēš„ē¢ŗćŖē­”ćˆćŒć‹ćˆć£ć¦ćć‚‹ć®ć§ćć®å “ć§ē†č§£ć™ć‚‹ć“ćØćŒć§ćć¾ć—ćŸć€‚ ć¾ćŸć©ć“ć¾ć§ćŒę­£åøøć«å‹•ć„ć¦ć„ć¦ć©ć“ćŒåŽŸå› ć§å‹•ć„ć¦ć„ćŖć„ć‹ć‚’ē¢ŗčŖć™ć‚‹ćŸć‚ć«Nginxć®ć‚¢ć‚Æć‚»ć‚¹ćƒ­ć‚°ć‚„Fluentdć®ć‚Øćƒ©ćƒ¼ćƒ­ć‚°ć®č¦‹ę–¹ćŖć©ć‚’ęœ€å¾Œć«ę•™ć‚ć‚Šć¾ć—ćŸć€‚iOSé–‹ē™ŗć§ć‚‚ćƒ‡ćƒćƒƒć‚°ć®ćŸć‚ć«ćƒ­ć‚°ć‚’ćæć¾ć™ćŒć€ćć‚ŒćØćÆé•ć„ā€ć“ć†ć‚†ć†ćØć“ć‚ć‚’č¦‹ć‚‹ć®ć‹ć€œā€ćØćØć¦ć‚‚ę–°é®®ć§å­¦ć¶ć“ćØćŒå¤šć‹ć£ćŸć§ć™ć€‚ 2.障害対応 ć„ć‚ˆć„ć‚ˆęœ¬ē•Ŗć§ć™ć€‚čŖ²é”Œå†…å®¹ć®ē°”å˜ćŖčŖ¬ę˜Žć‚’å—ć‘éšœå®³åÆ¾åæœć‚¹ć‚æćƒ¼ćƒˆć§ć™ć€‚ ä»Šå›žć®éšœå®³ćÆ EC2ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹å†…ć§ć®å¤‰ę›“ä½œę„­ć«ć‚ˆć£ć¦ć€ę­£åøøēØ¼åƒć—ćŖć„AMIćŒćƒŖćƒŖćƒ¼ć‚¹ć•ć‚Œć¾ć—ćŸć€‚éšœå®³ć‹ć‚‰å¾©ę—§ć•ć›ć€åŽŸå› ć®čæ½ę±‚ćØåÆ¾åæœć‚’ć—ć¦ćć ć•ć„ć€‚ ćØć„ć†å†…å®¹ć®ć‚‚ć®ć§ć—ćŸć€‚ 障害対応中はslackć§åˆ†å ±ćƒćƒ£ćƒ³ćƒćƒ«ć‚’ä½œć£ć¦ćć“ć«ä»Šć©ć‚“ćŖä½œę„­ć‚’ć‚„ć£ć¦ć„ć¦ć€ć©ć‚“ćŖć“ćØć‚’č€ƒćˆćŖćŒć‚‰ćć®ä½œę„­ć‚’ć—ć¦ć„ć‚‹ć®ć‹ć‚’ę›øć„ć¦ć„ćć¾ć™ć€‚ć“ć‚Œć‚’ć‚„ć‚‹ć“ćØć§ć©ć®éƒØåˆ†ć§č©°ć¾ć£ć¦ć„ć‚‹ć‹ć‚’ä¼ćˆć‚‹ć“ćØćŒć§ćć‚‹ćØćØć‚‚ć«éšœå®³ć®ćƒ­ć‚°ć‚’ę®‹ć›ć‚‹ć®ć§ć‚‚ć—åŒć˜ć“ćØćŒčµ·ććŸćØćć«ć™ćåÆ¾å‡¦ćŒć§ćć¾ć™ć€‚ ć¾ćšćÆć©ć“ć«ćƒœćƒˆćƒ«ćƒćƒƒć‚ÆćŒć‚ć‚‹ć®ć‹ć®ę¤œčØ¼ć‚’č”Œć£ć¦ć„ćć¾ć—ćŸć€‚å…·ä½“ēš„ć«ćÆnginxć®ć‚¢ć‚Æć‚»ć‚¹ćƒ­ć‚°ć‚’tailć—ćŖćŒć‚‰curlć§ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’é€ć£ć¦ćæć¦ć©ć†ćŖć‚‹ć‹ć‚„ć€td-agentć®ćƒ­ć‚°ć‚’čæ½ć£ć¦ćæćŸć‚Šć—ć¦ć„ć¾ć—ćŸć€‚å®Ÿéš›ć«ć‚„ć£ć¦ćæć‚‹ćØć‚Øćƒ©ćƒ¼ć‚’ćæć¤ć‘ć‚‹ć“ćØćÆć§ćć‚‹ć‚‚ć®ć®ćć‚ŒćŒć©ć‚“ćŖč¦å› ć§ć‚Øćƒ©ćƒ¼ć«ćŖć£ć¦ć„ć‚‹ć®ć‹ć‚’ćŖć‹ćŖć‹ēŖćę­¢ć‚ć‚‹ć“ćØćŒć§ćć¾ć›ć‚“ć€‚ćƒ’ćƒ³ćƒˆć‚’ć‚‚ć‚‰ć„ćŖćŒć‚‰č©¦č”ŒéŒÆčŖ¤ć—ć¦å‹•ć„ć¦ć„ćŖć„éƒØåˆ†ć‚’ē‰¹å®šć—ć¦ć„ćć¾ć™ć€‚ę€ć£ć¦ć„ćŸä»„äøŠć«å¤§å¤‰ć§ę™‚é–“ć ć‘ćŒć©ć‚“ć©ć‚“éŽćŽć¦ć„ćē„¦ć‚ŠćŖćŒć‚‰åæ…ę­»ć§ć‚„ć£ć¦ć„ć¾ć—ćŸć€‚ēµå±€ć™ć¹ć¦ć®å•é”Œć‚’č§£ę±ŗć™ć‚‹ć“ćØćÆć§ććšć«ēµ‚ć‚ć‚Šć¾ć—ćŸćŒć€ä»Ščµ·ćć¦ć„ć‚‹éšœå®³ć«ć©ć†ć„ć†ćƒ•ćƒ­ćƒ¼ć§åÆ¾å‡¦ć—ć¦ć„ć£ćŸć‚‰ć„ć„ć®ć‹ć‚’å®Ÿéš›ć«ä½“éØ“ć§ććŸć®ćÆęœ¬å½“ć«č²“é‡ćŖä½“éØ“ć«ćŖć‚Šć¾ć—ćŸć€‚ åēœćØć—ć¦ćÆä»Ščµ·ćć¦ć„ć‚‹éšœå®³ćŒć©ć‚“ćŖéšœå®³ć‹ć‚’ē†č§£ć™ć‚‹ćŸć‚ć«ę™‚é–“ć‚’ä½æć„éŽćŽćŸć“ćØć§ć™ć€‚ å„Ŗå…ˆć•ć›ć‚‹ć¹ććÆć„ć”ę—©ćę­£åøøćŖēŠ¶ę…‹ć«å›žå¾©ć•ć›ć€č¢«å®³ć®å½±éŸæć‚’ęœ€å°é™ć«ęŠ‘ćˆć‚‹ć“ćØć§ć—ćŸć€‚ 3.ęŒÆć‚Ščæ”ć‚Š ä»Šå›žć“ć®APOLLOčØˆē”»ć«å‚åŠ ć—ć¦å­¦ć‚“ć ć“ćØćÆä»„äø‹ć®2恤恧恙怂 AWS恮EC2ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚„ELBć®ä»•ēµ„ćæćŒä»Šć¾ć§ć‚ˆć‚Šę˜Žē¢ŗć«ćŖć£ćŸ éšœå®³ćŒčµ·ććŸćØćć®ćƒ‡ćƒćƒƒć‚°ć®ä»•ę–¹ć‚’å®Ÿéš›ć«ä½“éØ“ć§ćć€éšœå®³ćŒčµ·ććć†ćŖéƒØåˆ†ć€ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«ćŖć‚Šćć†ćŖéƒØåˆ†ć‚’č¦‹åˆ†ć‘ć‚‹ę€č€ƒćŒå°‘ć—čŗ«ć«ć¤ć„ćŸ 恓恮APOLLOčØˆē”»ć‚’ē¹°ć‚Ščæ”ć™ć“ćØć«ć‚ˆć£ć¦SREćØć—ć¦ć‚¹ć‚­ćƒ«ć‚’ęœ€é€Ÿć§čŗ«ć«ć¤ć‘ć‚‹ć“ćØćŒć§ćć‚‹åÆčƒ½ę€§ć‚’ę„Ÿć˜ć¾ć—ćŸć€‚ delyではAPOLLOčØˆē”»ć§SREć«ćŖć£ć¦ćæćŸć„ćØć„ć†ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ę–¹ć€ęˆ‘ć“ććÆćØć„ć†ęœ€å¼·SREć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ ę˜ÆéžWantedlyć‹ć‚‰åæœå‹Ÿć—ć¦ćć ć•ć„ļ¼ļ¼ www.wantedly.com www.wantedly.com
こんにごは。SRE恮 @_skuwa 恧恙怂 kurashiru(ć‚Æćƒ©ć‚·ćƒ«)ć‚’ę”Æćˆć‚‹ć‚¤ćƒ³ćƒ•ćƒ©ä½œć‚Šć‚„ć€ćƒŸćƒ‰ćƒ«ć‚¦ć‚§ć‚¢ć®é–‹ē™ŗē­‰ć‚’ć‚„ć£ć¦ć„ć¾ć™ć€‚ ä»Šę—„ćÆdely SREćƒćƒ¼ćƒ ćŒč”Œć£ć¦ć„ć‚‹éšœå®³åÆ¾åæœčØ“ē·“ć€APOLLOčØˆē”»ć‚’ć”ē“¹ä»‹ć—ć¾ć™ć€‚ SREチームの課锌 ć‚Æćƒ©ć‚·ćƒ«ćÆä»–ć«é”žć‚’č¦‹ćŖć„ć‚¹ćƒ”ćƒ¼ćƒ‰ć§ęˆé•·ć—ć¦ć„ć‚‹ć‚µćƒ¼ćƒ“ć‚¹ć®ćŸć‚ć€äø€čˆ¬ēš„ć«ćÆåŠå¹“ć‹ć‚‰ę•°å¹“ć”ćØć«č”Œć‚ćŖć‘ć‚Œć°ć„ć‘ćŖć„ć‚ˆć†ćŖč² č·åÆ¾ē­–ć‚’ę•°é€±é–“ć§ć©ć‚“ć©ć‚“č”Œć£ć¦ć„ćåæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚ SREćØć—ć¦ćÆéžåøøć«é«˜ć„ć‚¹ć‚­ćƒ«ć‚„ēµŒéØ“ć‚’č¦ę±‚ć•ć‚Œć¾ć™ćŒć€ćć‚Œć‚’ęŒć”åˆć‚ć›ć¦ć„ć‚‹SREćŒåø‚å “ēš„ć«ćÆć‚ć¾ć‚Šć„ćŖć„ćØć„ć†ć®ćŒčŖ²é”Œć§ć—ćŸć€‚ 私はdelyć«å…„ē¤¾ć—ćŸę™‚ē‚¹ć§ćÆSREćØć—ć¦ć®ć‚¹ć‚­ćƒ«ćÆęŒć£ć¦ć„ć¾ć›ć‚“ć§ć—ćŸćŒć€å…„ē¤¾ć—ć¦åŠå¹“ēØ‹åŗ¦ć§SREę„­å‹™ć‚’č”Œćˆć‚‹ć¾ć§ć«ćŖć‚Šć¾ć—ćŸć€‚ 私がSREćØć—ć¦ęˆ¦ćˆć‚‹ć¾ć§ć«åŸ¹ć£ć¦ććŸćƒŽć‚¦ćƒć‚¦ć‚’å…ƒć«ä½œć£ćŸć€ęœ€é€Ÿć§SREć‚’č‚²ć¦ć‚‹ę•™č‚²ä½“åˆ¶ćŒAPOLLOčØˆē”»ć§ć™ć€‚ APOLLOčØˆē”» APOLLOčØˆē”»ć®åå‰ć®ē”±ę„ćÆćÆNASAć®ć‚¢ćƒćƒ­čØˆē”»ć§ć™ć€‚ äŗŗé”žć®ęœˆé¢ē€é™øćØć„ć†å›°é›£ćŖćƒŸćƒƒć‚·ćƒ§ćƒ³ć‚’å®Ÿē¾ć•ć›ćŸć‚¢ćƒćƒ­čØˆē”»ć®ć‚ˆć†ć«ć€SREć‚’ēŸ­ęœŸé–“ć§č‚²ęˆć™ć‚‹ćØć„ć†å¤§ććŖē›®ęØ™ć‚’é”ęˆć•ć›ćŸć„ćØć„ć†é”˜ć„ć‚’č¾¼ć‚ć¦ć®å‘½åć§ć™ć€‚ APOLLOčØˆē”»ć§ćÆå¤§äŗ‹ć«ć—ć¦ć„ć‚‹ćƒć‚¤ćƒ³ćƒˆćŒ3ć¤ć‚ć‚Šć¾ć™ć€‚ ć‚³ćƒžćƒ³ćƒ‰ć‚„ć‚³ćƒ¼ćƒ‰ć«é–¢ć—ć¦ć®ēŸ„č­˜ćŖć©ć€å¤§å‰ęćØć—ć¦åæ…č¦ćŖēŸ„č­˜ć‚’čŗ«ć«ä»˜ć‘ć¦ć‚‚ć‚‰ć†ć“ćØć€‚ "äŗ‹å®Ÿē¢ŗčŖā†’ä»®čŖ¬ā†’ę¤œčØ¼ā†’å†ē™ŗé˜²ę­¢ē­–ć®ę¤œčØŽ"ćØć„ć†ćƒ•ćƒ­ćƒ¼ć‚’å¾¹åŗ•ēš„ć«å©ćč¾¼ć‚€ć“ćØć€‚ éšœå®³ćŒčµ·ććć†ćŖéƒØåˆ†ć€ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć«ćŖć‚Šćć†ćŖéƒØåˆ†ć‚’å—…ćŽåˆ†ć‘ć‚‹å—…č¦šć‚’čŗ«ć«ä»˜ć‘ć¦ć‚‚ć‚‰ć†ć“ćØć€‚ å„ćƒć‚¤ćƒ³ćƒˆć«ć¤ć„ć¦ć€APOLLOčØˆē”»ć§ćÆć©ć®ć‚ˆć†ć«ę•™č‚²ć—ć¦ć„ć‚‹ć®ć‹ć‚’ć”ē“¹ä»‹ć—ć¾ć™ć€‚ 1. ćƒšć‚¢ć‚¤ćƒ³ćƒ•ćƒ©ę§‹ēÆ‰ APOLLOčØˆē”»ć‚’å—ć‘ć¦ć‚‚ć‚‰ć†ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®å¤šććÆć‚Æćƒ©ć‚¦ćƒ‰ē’°å¢ƒć‚„ć‚¤ćƒ³ćƒ•ćƒ©ę§‹ęˆć«ć¤ć„ć¦ć®ēŸ„č­˜ćŒć‚ć‚Šć¾ć›ć‚“ć€‚ ē§ćØäø€ē·’ć«ęœ¬ē•ŖćØåŒē­‰ć®ē’°å¢ƒć‚’ä½œęˆć™ć‚‹ćØć“ć‚ć‹ć‚‰ćŒć‚¹ć‚æćƒ¼ćƒˆć§ć™ć€‚ ć©ć†ć„ć£ćŸēµŒē·ÆćŒć‚ć£ć¦ä»Šć®ę§‹ęˆć«ćŖć£ćŸć®ć‹ć€ćć‚‚ćć‚‚ćƒ­ćƒ¼ćƒ‰ćƒćƒ©ćƒ³ć‚µćƒ¼ć£ć¦ć©ć†ć„ć†å½¹å‰²ćŖć®ļ¼ŸćæćŸć„ćŖćØć“ć‚ć‚’č§£čŖ¬ć—ćŖćŒć‚‰ć€0ć‹ć‚‰ć®ę§‹ēÆ‰ć‚’ć—ć¦ć„ćć¾ć™ć€‚ ćć®éš›ć«ćÆć€å°‘ć—ć§ć‚‚ē–‘å•ćŒć‚ć‚‹ē®‡ę‰€ć€ę°—ć«ćŖć£ćŸē®‡ę‰€ćÆåæ…ćšč³Ŗå•ć—ć¦ć‚‚ć‚‰ć†ć‚ˆć†ć«ć—ć¦ć„ć¾ć™ć€‚ ć¾ćŸć€ę§‹ēÆ‰å¾ŒćÆē°”å˜ćŖć‚·ć‚§ćƒ«ć‚¹ć‚ÆćƒŖćƒ—ćƒˆć‚„curlćŖć©ć‚’åˆ©ē”Øć—ć¦å‹•ä½œć®ä»•ēµ„ćæć‚’čæ½ć£ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ 恓恓恧Linuxć‚³ćƒžćƒ³ćƒ‰ć‚„ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ä»•ēµ„ćæć‚’ēŸ„ć£ć¦ć‚‚ć‚‰ć†ćØćØć‚‚ć«ć€ć©ć“ć¾ć§ćŒå‹•ć„ć¦ć„ć¦ć€ć©ć“ć¾ć§ćŒå‹•ć„ć¦ć„ćŖć„ć®ć‹ć‚’ęŠŠę”ć§ćć‚‹ć‚ˆć†ć«ćŖć£ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ Linuxć‚³ćƒžćƒ³ćƒ‰ć‚„ć‚·ć‚§ćƒ«ć‚’1ć‹ć‚‰č¦šćˆć‚‹ć®ćÆéžåøøć«å¤§å¤‰ć§ć™ćŒć€å®Ÿéš›ć®ę„­å‹™ć§ćÆäø€éƒØć—ć‹ä½æć‚ćŖć„ć“ćØćŒå¤šć„ć§ć™ć€‚ćć®ćŸć‚ć€ć‚ˆć‚Šå®Ÿč·µēš„ćŖćƒ†ć‚Æćƒ‹ćƒƒć‚Æć‚’ćƒšć‚¢ćƒ—ćƒ­å½¢å¼ć§č¦šćˆć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ 2. å°ć•ćŖčŖ²é”Œć‚’ćŸćć•ć‚“ć“ćŖć™ å®Ÿéš›ć®éšœå®³ć§ćÆä½•ć‹ćŒćƒˆćƒŖć‚¬ćƒ¼ćØćŖć£ć¦é€£éŽ–ēš„ć«å•é”ŒćŒē™ŗē”Ÿć™ć‚‹ć‚±ćƒ¼ć‚¹ćŒå¤šć„ć§ć™ć€‚ć—ć‹ć—ć€ć„ććŖć‚Šćć‚Œć‚’č§£ę±ŗć—ć¦ć‚‚ć‚‰ć†ć®ćÆē„”ē†ćŒć‚ć‚Šć¾ć™ć€‚ ćć“ć§ć€ć¾ćšćÆ1ć¤ć®ćƒˆćƒŖć‚¬ćƒ¼ć«ć‚ˆć£ć¦ć©ć“ć‹ćŒåœę­¢ć—ć¦ć—ć¾ć†ćØć„ć£ćŸć‚±ćƒ¼ć‚¹ć®čŖ²é”Œć‚’ćŸćć•ć‚“ē”Øę„ć—ć€ćć‚Œć‚’č§£ę±ŗć—ć¦ć‚‚ć‚‰ć†ćØć„ć†ć“ćØć«å–ć‚Šēµ„ć‚“ć§ć‚‚ć‚‰ć„ć¾ć™ć€‚ å…·ä½“ēš„ć«ćÆčØ­å®šćƒ•ć‚”ć‚¤ćƒ«ć®čØ˜čæ°ćƒŸć‚¹ć€ć‚»ć‚­ćƒ„ćƒŖćƒ†ć‚£ć‚°ćƒ«ćƒ¼ćƒ—ć®čØ­å®šćƒŸć‚¹ć€ęœ€é©åŒ–ć•ć‚Œć¦ć„ćŖć„ć‚³ćƒ¼ćƒ‰ć«ć‚ˆć‚‹ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ä½Žäø‹ē­‰ć§ć™ć€‚ ā€ć“ć†ć„ć£ćŸć“ćØćŒćƒˆćƒŖć‚¬ćƒ¼ć«ćŖć£ć¦ć€ć“ć‚“ćŖē¾č±”ćŒē™ŗē”Ÿć™ć‚‹ć®ć‹ć€œā€ćØć„ć†ēŸ„č¦‹ć‚’å¾—ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ ć©ć“ć¾ć§ćŒå‹•ć„ć¦ć„ć¦ć€ć©ć“ć‹ć‚‰å‹•ć„ć¦ć„ćŖć„ć®ć‹ć€‚ć˜ć‚ƒć‚ć‚ć‚Šćˆć‚‹åÆčƒ½ę€§ćÆļ¼ŸćØć„ć£ćŸę€č€ƒćƒ•ćƒ­ćƒ¼ć‚’å¾¹åŗ•ēš„ć«å©ćč¾¼ćæć¾ć™ć€‚ ā€ć‚ć€ć“ć‚ŒAPOLLOčØˆē”»ć§ć‚„ć£ćŸå•é”Œć ļ¼ā€ ćØć€å®Ÿéš›ć®ę„­å‹™ć§ę€ć£ć¦ć‚‚ć‚‰ćˆć‚‹ć“ćØćŒē†ęƒ³ć§ć™ć€‚ 3. å®Ÿéš›ć«ē™ŗē”Ÿć—ćŸéšœå®³ć®å®Œå…Øå†ē¾ ć¾ćšćÆå¼Šē¤¾ć®ē’°å¢ƒ(AWS态Nginx态Fluentd态Rails态Goć«ć‚ˆć‚‹ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć‚µćƒ¼ćƒćƒ¼ē­‰)ć§ć—ć£ć‹ć‚ŠćØSREę„­å‹™ć‚’č”Œćˆć‚‹ć‚ˆć†ć«ćŖć‚‹ć“ćØć«ćƒ•ć‚©ćƒ¼ć‚«ć‚¹ć‚’å½“ć¦ć¦ć„ć¾ć™ć€‚ å¼Šē¤¾ć§ćÆć‚Ŗćƒ©ć‚¤ćƒŖćƒ¼ć®SREęœ¬ć‚’å‚č€ƒć«ć—ć¦ć€éšœå®³ē™ŗē”Ÿę™‚ć«ćÆPostmortemを残しています。 (Postmortemに関してはSRE本の15ē« ć«č©³ć—ćę›øć‹ć‚Œć¦ć„ć¾ć™ć€‚č‹±čŖžē‰ˆć—ć‹ć‚ć‚Šć¾ć›ć‚“ćŒć€8月12ę—„ć«ę—„ęœ¬čŖžē‰ˆćŒē™ŗå£²äŗˆå®šć§ć™ć€‚ļ¼‰ Postmortemć‚’å…ƒć«å®Ÿéš›ć«ē™ŗē”Ÿć—ćŸéšœå®³ć‚’å®Œå…Øå†ē¾ć—ć¦ć€ćć‚Œć®č§£ę±ŗć‚’čŖ²é”ŒćØć—ć¦å–ć‚Šēµ„ć‚“ć§ć‚‚ć‚‰ć£ć¦ć„ć¾ć™ć€‚ éšœå®³ć‚’å†ē¾ć™ć‚‹ć®ćÆé‹ē”Øå“ć®ć‚³ć‚¹ćƒˆćŒć‹ćŖć‚Šć‹ć‹ć‚‹ć®ć§ć€ VacuumDecay というGoč£½ć®ć‚³ćƒžćƒ³ćƒ‰ćƒ©ć‚¤ćƒ³ćƒ„ćƒ¼ćƒ«ć‚’ä½œęˆć—ć€ć‚³ćƒžćƒ³ćƒ‰äø€ć¤ć§åÆčƒ½ćŖé™ć‚Šéšœå®³ć‚’å†ē¾ć•ć›ć‚‰ć‚Œć‚‹ć‚ˆć†ćŖä½“åˆ¶ć‚’ä½œć£ć¦ć„ć¾ć™ć€‚ ć“ć“ć¾ć§å­¦ēæ’ć—ć¦ććŸć“ćØć‚’ę“»ć‹ć—ćŖćŒć‚‰ć€å®Ÿéš›ć®éšœå®³åÆ¾åæœćØåŒę§˜ć®ä½“åˆ¶ć§å¾©ę—§ć—ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ å–ć‚Šēµ„ć‚“ć§ć„ć‚‹ć‚Øćƒ³ć‚øćƒ‹ć‚¢é”ćÆć€ć¾ćšćÆćƒœćƒˆćƒ«ćƒćƒƒć‚Æć‚„ć©ć“ć§å•é”ŒćŒčµ·ćć¦ć„ć‚‹ć®ć‹ć‚’åæ…ę­»ć«čæ½ć£ć¦ć„ć“ć†ćØć—ć¾ć™ć€‚ ć—ć‹ć—ć€ć“ć‚ŒćÆå®Ÿéš›ć®éšœå®³ć§ć™ć€‚ć¾ćšå„Ŗå…ˆć•ć›ć‚‹ć¹ććÆę­£åøøćŖēŠ¶ę…‹ć«å›žå¾©ć•ć›ć‚‹ć“ćØć€č¢«å®³ć®å½±éŸæć‚’ęœ€å°é™ć«ęŠ‘ćˆć‚‹ć“ćØć§ć™ć€‚ ćć®ćŸć‚ć€ē©ę„µēš„ć«ēµŒéŽę™‚é–“ć‚’ę•™ćˆć¦ćƒ—ćƒ¬ćƒƒć‚·ćƒ£ćƒ¼ć‚’äøŽćˆć¦ć„ćć¾ć™ć€‚ å½±éŸæēÆ„å›²ćŒć“ć‚Œćć‚‰ć„ć§ć€ćƒ¦ćƒ¼ć‚¶ćƒ¼ćÆć‚‚ć†ęˆ»ć£ć¦ć“ćŖć„ć‹ć‚‚ć—ć‚ŒćŖć„ć­ć€œć€ćƒŖćƒ†ćƒ³ć‚·ćƒ§ćƒ³ć‚ć£ć”ć‚ƒč½ć”ćć†ć ć‚ˆć­ć€œćØć€ć©ć‚“ć©ć‚“ćƒ—ćƒ¬ćƒƒć‚·ćƒ£ćƒ¼ć‚’äøŽćˆć¾ć™ć€‚ ć“ć†ć—ćŸäø­ć§čŖ²é”Œć«å–ć‚Šēµ„ć‚“ć§ć‚‚ć‚‰ć†ć“ćØć§ć€SREとして大事な"ć‚·ć‚¹ćƒ†ćƒ ć‚’ę­£åøøēØ¼åƒć•ć›ć‚‹ć“ćØć®é‡č¦ę€§"ć‚’ēŸ„ć£ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ ć¾ćŸć€å®Ÿéš›ć®éšœå®³åÆ¾åæœćØåŒę§˜ć®ä½“åˆ¶ć§ć®ä½œę„­ćØćŖć‚‹ć®ć§Postmortemć‚’ć—ć£ć‹ć‚Šę›øć„ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ ćć“ć§č‡Ŗåˆ†ć®č”Œå‹•ć®ęŒÆć‚Ščæ”ć‚ŠćØć€åŒę§˜ć®ć“ćØćŒäŗŒåŗ¦ćØē™ŗē”Ÿć—ćŖć„ćŸć‚ć®ä»•ēµ„ćæć„ćć‚Šć‚„é‹ē”Øę–¹ę³•ć‚’ę¤œčØŽć—ć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚delyć®ć‚Øćƒ³ć‚øćƒ‹ć‚¢ćÆęœ¬å½“ć«å„Ŗē§€ćŖć®ć§ć€ć“ć®ćƒ¬ćƒ™ćƒ«ć«ćŖć£ć¦ćć‚‹ćØć€ē§ć‚‚ćŖć‚‹ć»ć©ćć†ć„ć†č€ƒćˆćŒć‚ć£ćŸć®ć‹ćØę°—ä»˜ć‹ć•ć‚Œć‚‹ć“ćØć‚‚å¤šć„ć§ć™ć€‚ ć“ć®čŖ²é”Œć«å–ć‚Šēµ„ć‚“ć§ć‚‚ć‚‰ć†ć“ćØć§ć€ć‚¤ćƒ³ćƒ•ćƒ©ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć§ćÆćŖćć€SREćØć—ć¦ć®ä»•äŗ‹ć‚’č¦šćˆć¦ć‚‚ć‚‰ć„ć¾ć™ć€‚ ę–°ć—ć„ę©Ÿčƒ½ć®å®Ÿč£…ćÆęÆŽę—„ć®ć‚ˆć†ć«č”Œć‚ć‚Œć¦ć„ć¾ć™ćŒć€éšœå®³ćÆć‚ć¾ć‚Šē™ŗē”Ÿć—ć¾ć›ć‚“ć€‚ ćć®ćŸć‚ć€äø€čˆ¬ēš„ć«ćÆéšœå®³åÆ¾åæœć‚„ćƒŖć‚¹ć‚ÆäŗˆēŸ„ć®ćƒŽć‚¦ćƒć‚¦ćØć„ć†ć®ćÆēŸ­ę™‚é–“ć§čŗ«ć«ć¤ćć«ćć„ć‚‚ć®ć§ć™ć€‚ 恧恙恌态delyć§ćÆéšœå®³ć‚’PostmortemćØć—ć¦čØ˜éŒ²ć—ć€ā€č³‡ē”£ā€ćØć—ć¦ę“»ē”Øć™ć‚‹ć“ćØć«ć‚ˆć£ć¦ć€ć‚¹ćƒ”ćƒ¼ćƒ‰ę„Ÿć®ć‚ć‚‹SREćƒćƒ¼ćƒ ć‚’ä½œć£ć¦ć„ć¾ć™ć€‚ ęœ€å¾Œć«SREćƒćƒ¼ćƒ ć®ē“¹ä»‹ćØå‹Ÿé›† dely恮SREćƒćƒ¼ćƒ ćÆć€č¶…ć‚¹ćƒ”ćƒ¼ćƒ‰ć§ęˆé•·ć™ć‚‹ć‚Æćƒ©ć‚·ćƒ«ć‚’ę”Æćˆć‚‹ćƒćƒ¼ćƒ ć§ć™ć€‚ Rails态Goč£½ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®é‹ē”Ø é–‹ē™ŗćƒćƒ¼ćƒ ć®ä½œę„­åŠ¹ēŽ‡ć‚¢ćƒƒćƒ—ć®ćŸć‚ć®é–‹ē™ŗē’°å¢ƒä½œć‚Š ćƒ—ćƒƒć‚·ćƒ„é…äæ”åŸŗē›¤ē­‰ć®ćƒŸćƒ‰ćƒ«ć‚¦ć‚§ć‚¢é–‹ē™ŗ Fluentd悄Kinesisć‚’åˆ©ē”Øć—ćŸćƒ­ć‚°é›†čØˆåŸŗē›¤ć€åˆ†ęžåŸŗē›¤ć®ę§‹ēÆ‰ CloudWatch悄Prometheusć§ć®ē›£č¦–åŸŗē›¤ć®ę§‹ēÆ‰ kubernetesćŖć©ć®ć‚³ćƒ³ćƒ†ćƒŠęŠ€č”“ć®å°Žå…„ ćŖć©ć€ę„­å‹™å†…å®¹ćÆå¤šå²ć«ć‚ćŸć‚Šć¾ć™ć€‚ ēµ„ē¹”ć‚‚ć€ćƒ—ćƒ­ćƒ€ć‚Æćƒˆć‚‚ć€ćć—ć¦APOLLOčØˆē”»ć‚‚ć¾ć ć¾ć ęœŖē†Ÿć§ćÆć‚ć‚Šć¾ć™ćŒć€ä»Šć®ćƒ•ć‚§ćƒ¼ć‚ŗć‹ć‚‰äø€ē·’ć«äø–ē•Œäø€ć‚¤ć‚±ć¦ć‚‹SREćƒćƒ¼ćƒ ć‚’ä½œć£ć¦ćć‚Œć‚‹ćƒ”ćƒ³ćƒćƒ¼ć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ ęˆ‘ć“ććÆćØć„ć†ęœ€å¼·SRE态APOLLOčØˆē”»ć§SREć«ćŖć£ć¦ćæćŸć„ćØć„ć†ć‚Øćƒ³ć‚øćƒ‹ć‚¢ć®ę–¹ļ¼ ę˜ÆéžWantedlyć‹ć‚‰åæœå‹Ÿć—ć¦ćć ć•ć„ļ¼ļ¼ www.wantedly.com www.wantedly.com
SRE恮 深尾 恧恙怂kurashiru [ć‚Æćƒ©ć‚·ćƒ«] ć®ć‚¤ćƒ³ćƒ•ćƒ©ć‚’ę‹…å½“ć—ć¦ć„ć¾ć™ć€‚ ć‚æć‚¤ćƒˆćƒ«ć®ćØćŠć‚Šć€ć‚Æćƒ©ć‚·ćƒ«ć®webć‚µć‚¤ćƒˆć§ćÆRailsć‚’ä½æć£ć¦ćŠć‚Šć€ļ¼‘ć‚µćƒ¼ćƒć‚ćŸć‚Š10,000äŗŗēØ‹åŗ¦ć®ć‚¢ć‚Æć‚»ć‚¹ć«č€ćˆć‚‹ć“ćØćŒć§ćć¾ć™ć€‚å®Ÿéš›ć«ćÆä½™č£•ć‚’ęŒćŸć›ć¦5,000äŗŗ/ć‚µćƒ¼ćƒć‚’ē›®å®‰ć«ć‚¹ć‚±ćƒ¼ćƒ«ć•ć›ć¦ćŠć‚Šć€TV CMć‚’ć‚¬ćƒ³ć‚¬ćƒ³ć‚„ć£ćŸć‚Šć€å›½å†…å¤–ć®TVē•Ŗēµ„ć§ē‰¹é›†ć•ć‚ŒćŸć‚Šć€čŠøčƒ½äŗŗć«SNSć§ę‹”ę•£ć•ć‚Œć¦ć‚‚å‹•ć˜ć¾ć›ć‚“ćŒć€å®ŸćÆéŽåŽ»ć«ļ¼‘åŗ¦ć ć‘Webć‚µć‚¤ćƒˆćŒćƒ€ć‚¦ćƒ³ć—ć¦ć—ć¾ć£ćŸć“ćØćŒć‚ć‚Šć¾ć™ć€‚ćć‚ŒćÆ2017幓3月11ꗄ恫SmaSTATION!!というTVē•Ŗēµ„ć§ć‚Æćƒ©ć‚·ćƒ«ćŒå–ć‚ŠäøŠć’ć‚‰ć‚ŒćŸę™‚ć®ć“ćØć§ć—ćŸć€‚ ä»„äø‹ćÆćć®ę™‚ć®ćƒŖć‚Æć‚Øć‚¹ćƒˆę•°ć‚’č”Øć™ć‚°ćƒ©ćƒ•ć§ć™ć€‚ćƒ€ć‚¦ćƒ³ć—ć¦ć—ć¾ć£ćŸć®ć§čØˆęø¬ć§ććŖć‹ć£ćŸćƒ¦ćƒ¼ć‚¶ć®ę•°å­—ćÆå«ć¾ć‚Œć¾ć›ć‚“ćŒćć‚Œć§ć‚‚ć‚¢ć‚Æć‚»ć‚¹ę•°ćÆļ¼‘åˆ†ć§ę•°äø‡äŗŗć‚’č¶…ćˆć¦ć„ć¾ć—ćŸć€‚ ćć‚Œć¾ć§ć€Webć‚µć‚¤ćƒˆć®č² č·åÆ¾ē­–ćÆć‚ć¾ć‚Šč”Œć£ć¦ćŠć‚‰ćšć€ļ¼’å°ć®Webć‚µćƒ¼ćƒć‚’Load Balancerć«ē¹‹ć„ć§å†—é•·åŒ–ć—ć¦ć„ć‚‹ć ć‘ć§ć—ćŸć€‚ć¾ćšč² č·åÆ¾ē­–ć«ćŠć„ć¦ć‚µćƒ¼ćƒć®ę•°ć‚’å¢—ć‚„ć™ć ć‘ć§ćÆćƒ€ćƒ”ćŖć®ć‹ćØć„ć†ć“ćØć«ć¤ć„ć¦č€ƒćˆćŸćØćć€ä»„äø‹ć®ē†ē”±ć‹ć‚‰ć‚µćƒ¼ćƒć‚’å¢—ć‚„ć™ć ć‘ć§ćÆćŖććƒœćƒˆćƒ«ćƒćƒƒć‚Æć‚’čŖæęŸ»ć—ćŸę–¹ćŒč‰Æć„ćØčØ€ćˆć¾ć™ć€‚ ćƒœćƒˆćƒ«ćƒćƒƒć‚ÆćŒć‚ć‹ć‚‰ćŖć„ćØć‚¹ć‚±ćƒ¼ćƒ©ćƒ“ćƒŖćƒ†ć‚£ć‚’äæčØ¼ć§ććŖć„ ä»•ēµ„ćæć‚’ē†č§£ć—ć¦ć„ćŖć„ćØéšœå®³åŽŸå› ć®ē‰¹å®šćŒé›£ć—ć„ ļ¼‘å°ć‚ćŸć‚Šć®é™ē•ŒćŒć‚ć‹ć‚‰ćŖć„ćØé©åˆ‡ć«ć‚µć‚¤ć‚øćƒ³ć‚°ć§ććŖć„ ćƒŖć‚½ćƒ¼ć‚¹ć‚’ä½æć„åˆ‡ć‚ŒćŖć„ćØć‚¤ćƒ³ćƒ•ćƒ©č²»ē”ØćŒä½•å€ć«ć‚‚č†Øć‚ŒäøŠćŒć‚‹ ć‚¹ćƒžć‚¹ćƒ†ć§ć‚µćƒ¼ćƒ“ć‚¹ćŒćƒ€ć‚¦ćƒ³ć—ćŸę™‚ć€CPUä½æē”ØēŽ‡ćŒ20%ć‚’č¶…ćˆć‚‹ć“ćØćÆćŖćä»„äø‹ć®ć‚ˆć†ćŖć‚Øćƒ©ćƒ¼ćƒ­ć‚°ć‚’å‡ŗć—ć€nginxが502ć‚’čæ”ć—ć¦ć„ć¾ć—ćŸć€‚ [error] 2820#0: *10321 connect() to unix:/tmp/web/unicorn.sock failed (111: Connection refused) while connecting to upstream, 恝恓恧CPUć®åˆ©ē”ØåŠ¹ēŽ‡ć‚’äøŠć’ć‚‹ćŸć‚ć«åŒę™‚ć«ęŒććƒŖć‚Æć‚Øć‚¹ćƒˆć®ę•°ć‚’å¢—ć‚„ć™ć“ćØć‚’č€ƒćˆć¾ć—ćŸć€‚ Ā Unicornć®ćƒ—ćƒ­ć‚»ć‚¹ę•°ć‚’å¢—ć‚„ć™ UnicornćÆļ¼‘ćƒ—ćƒ­ć‚»ć‚¹ć‚ćŸć‚Šļ¼‘ćƒŖć‚Æć‚Øć‚¹ćƒˆćšć¤ęŒćčØ­čØˆć«ćŖć£ć¦ć„ć¾ć™ć€‚ćć®ćŸć‚ļ¼‘ć‚µćƒ¼ćƒć‚ćŸć‚ŠåŒę™‚ć«ęŒć‘ć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćÆworker_processesć§čØ­å®šć•ć‚ŒćŸå€¤ć«ćŖć‚Šć¾ć™ć€‚ ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§ćÆļ¼•ć«ćŖć£ć¦ć„ć¾ć—ćŸć€‚ć“ć‚Œć‚’å¢—ć‚„ć›ć°åŒę™‚ć«ęŒććƒŖć‚Æć‚Øć‚¹ćƒˆć‚’å¢—ć‚„ć™ć“ćØćŒć§ćć¾ć™ć€‚ć©ć‚Œćć‚‰ć„ćŒé©åˆ‡ć‹ćÆć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć«ć‚ˆć£ć¦å¤‰ć‚ć‚Šć¾ć™ć€‚ä¾‹ćˆć°ć€ćƒŖć‚Æć‚Øć‚¹ćƒˆć®č£å“ć§DBć‚„å…Øę–‡ę¤œē“¢ć‚Øćƒ³ć‚øćƒ³ćŖć©ć€åˆ„ć®ć‚µćƒ¼ćƒć«ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’ęŠ•ć’ć¦ćć®ćƒ¬ć‚¹ćƒćƒ³ć‚¹ć‚’å¾…ć£ć¦ć„ć‚‹é–“ćÆć€Railså“ć®ć‚µćƒ¼ćƒć®CPUćÆä½æć‚ć‚Œć¾ć›ć‚“ć€‚ćć®åˆ†Rails偓のCPUćÆä½™č£•ćŒć‚ć‚‹ć“ćØć«ćŖć‚Šć¾ć™ćŒć€ćƒ—ćƒ­ć‚»ć‚¹ę•°ć‚’å¢—ć‚„ć™ćØćƒ”ćƒ¢ćƒŖä½æē”Øé‡ć‚‚å¢—ćˆć¾ć™ć€‚ä»®ć«ćƒ”ćƒ¢ćƒŖä½æē”ØēŽ‡ćŒ100%čæ‘ćć«ćŖć£ć¦ć—ć¾ć†ćØć€OSćŒä½æć†ćƒ•ć‚”ć‚¤ćƒ«ć‚·ć‚¹ćƒ†ćƒ ć‚­ćƒ£ćƒƒć‚·ćƒ„ć®ćƒ”ćƒ¢ćƒŖćŒå°‘ćŖććŖć£ć¦ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ćŒę‚ŖććŖć£ć¦ć—ć¾ć†ć“ćØćŒć‚ć‚Šć¾ć™ć€‚ćć®ćŸć‚ć€ä»„äø‹ć®ć“ćØć‚’č€ƒę…®ć—ćŖćŒć‚‰ć€ęœ¬ē•Ŗē’°å¢ƒć§ćƒ¬ć‚¤ćƒ†ćƒ³ć‚·ćŖć©ć®ćƒ‘ćƒ•ć‚©ćƒ¼ćƒžćƒ³ć‚¹ć‚’ęø¬ć‚ŠćŖćŒć‚‰ē“°ć‹ććƒćƒ„ćƒ¼ćƒ‹ćƒ³ć‚°ć™ć‚‹ćØęœ€é©ćŖå€¤ćŒč¦‹ć¤ć‹ć‚‹ćØę€ć„ć¾ć™ć€‚ ćƒ—ćƒ­ć‚»ć‚¹ę•°ć«ęÆ”ä¾‹ć—ć¦ćƒ”ćƒ¢ćƒŖä½æē”Øé‡ćŒå¢—ćˆć‚‹ ć‚³ć‚¢ę•°ć«åÆ¾ć—ć¦å¤šć™ćŽć‚‹ćØćƒ­ćƒ¼ćƒ‰ć‚¢ćƒ™ćƒ¬ćƒ¼ć‚øćŒäøŠćŒć‚Šć€ć‚Ŗćƒ¼ćƒćƒ¼ćƒ˜ćƒƒćƒ‰ćŒå¤§ćććŖć‚‹ ćƒ”ćƒ¢ćƒŖć®ęœŖä½æē”Øé ˜åŸŸćÆćƒ•ć‚”ć‚¤ćƒ«ć‚·ć‚¹ćƒ†ćƒ ć‚­ćƒ£ćƒƒć‚·ćƒ„ć«åˆ©ē”Øć•ć‚Œć‚‹ ćƒ—ćƒ­ć‚»ć‚¹ę•°ć‚’å¢—ć‚„ć™ć“ćØć§CPUć‚’ä½æć„ćć‚Œć‚‹ć‹ćØę€ć£ćŸć®ć§ć™ćŒć€abć‚³ćƒžćƒ³ćƒ‰ć§ē°”å˜ćŖč² č·ćƒ†ć‚¹ćƒˆć‚’å®Ÿę–½ć—ćŸćØć“ć‚ć€å®Ÿéš›ć«ćÆåŒę™‚ęŽ„ē¶šćŒćŠć‚ˆć1000ć‚’č¶…ćˆć‚‹ćØCPUć‚„ćƒ”ćƒ¢ćƒŖćÆć¾ć ä½™č£•ćŒć‚ć‚‹ć®ć«nginxćŒć‚Øćƒ©ćƒ¼ć‚’čæ”ć—ć¦ć„ć¾ć—ćŸć€‚ćć“ć§ę¬”ć®ćƒćƒ„ćƒ¼ćƒ‹ćƒ³ć‚°ć§ć™ć€‚ UNIXć‚½ć‚±ćƒƒćƒˆć®ćƒćƒƒć‚Æćƒ­ć‚°ć‚’å¢—ć‚„ć™ ēž¬é–“ēš„ć«ćŠć‚ˆć1000ć‚’č¶…ćˆć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒććŸå “åˆćÆć‚Øćƒ©ćƒ¼ć«ćŖć£ć¦ć—ć¾ć†ć“ćØćŒć‚ć‹ć‚Šć¾ć—ćŸćŒć€ļ¼‘å°ć®ć‚µćƒ¼ćƒć§åŒę™‚ć«å‡¦ē†ć§ćć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćÆUnicornć®ćƒ—ćƒ­ć‚»ć‚¹ę•°ćŖć®ć§ć€ćƒ—ćƒ­ć‚»ć‚¹ę•°ć‚’č¶…ćˆć‚‹ćƒŖć‚Æć‚Øć‚¹ćƒˆćÆ1000ćć‚‰ć„ć¾ć§ć©ć“ć‹ć§é †ē•Ŗå¾…ć”ć‚’ć—ć¦ć„ć‚‹ć“ćØć«ćŖć‚Šć¾ć™ć€‚ 弊社ではNginx恋悉UnicornćøćƒŖćƒćƒ¼ć‚¹ćƒ—ćƒ­ć‚­ć‚·ć«UNIXć‚½ć‚±ćƒƒćƒˆć‚’åˆ©ē”Øć—ć¦ćŠć‚Šć€Unicornć§ć“ć®ć‚½ć‚±ćƒƒćƒˆć®backlogćŒćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§1024ć«ćŖć£ć¦ć„ć‚‹ć®ć§ćÆćŖć„ć‹ćØć„ć†ä»®čŖ¬ć‚’ē«‹ć¦ć¾ć—ćŸć€‚ć¤ć¾ć‚Šć€backlogć‚’å¢—ć‚„ć›ć°äø€ę™‚ēš„ć«ę•°åƒä»„äøŠć®ćƒŖć‚Æć‚Øć‚¹ćƒˆćŒę„ć¦ć‚‚é †ē•Ŗå¾…ć”ć‚’ć•ć›ć¦čæ”ć™ć“ćØćŒć§ćć‚‹ć®ć§ćÆćŖć„ć‹ćØć„ć†ć‚ć‘ć§ć™ć€‚ćć“ć§ē’°å¢ƒå¤‰ę•°ć§ä»„äø‹ć®ć‚ˆć†ć«čØ­å®šć—ć¾ć™ć€‚ unicorn socket backlog backlog悒4096ć«å¤‰ę›“ć—ćŸćØć“ć‚ć€1500悄2000ä»„äøŠć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’åŒę™‚ć«ęŠ•ć’ć¦ć‚‚ć‚Øćƒ©ćƒ¼ć«ćŖć‚‰ćšć«ļ¼ˆå°‘ć—ę™‚é–“ćÆć‹ć‹ć‚‹ć‘ć‚Œć©ļ¼‰ę­£åøøćŖHTTPćƒ¬ć‚¹ćƒćƒ³ć‚¹ć‚’čæ”ć™ć“ćØćŒć§ćć¾ć—ćŸć€‚ć¾ćŸć€č² č·ćƒ†ć‚¹ćƒˆć‚’č”Œć£ćŸćØć“ć‚ć€CPU悒100%čæ‘ćć¾ć§ä½æćˆć‚‹ēŠ¶ę…‹ć«ćŖć‚Šć¾ć—ćŸć€‚ ęœ€å¾Œć« ć“ć®ć‚ˆć†ć«ćƒœćƒˆćƒ«ćƒćƒƒć‚Æć‚’ļ¼‘ć¤ćšć¤č§£ę¶ˆć™ć‚‹ćØć„ć†ćƒ—ćƒ­ć‚»ć‚¹ć‚’ē¹°ć‚Ščæ”ć™ć“ćØć§ćƒćƒ¼ćƒ‰ć‚¦ć‚§ć‚¢ćƒŖć‚½ćƒ¼ć‚¹ć‚’ä½æć„åˆ‡ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ć¾ćŸäøŠčØ˜ä»„å¤–ć«Nginxć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚’åˆ©ē”Øć—ć¦ć€ēž¬é–“ēš„ćŖć‚¢ć‚Æć‚»ć‚¹ć«ćÆNginxć®ć‚­ćƒ£ćƒƒć‚·ćƒ„ć‚’čæ”ć™ć“ćØć§ļ¼‘å°ć‚ćŸć‚Š10,000äŗŗēØ‹åŗ¦ć§ć‚‚é«˜é€Ÿć«ęŒć‘ć‚‹ć‚µćƒ¼ćƒćØćŖć£ć¦ć„ć¾ć™ć€‚ęœ€å¾Œć«ć‚µćƒ¼ćƒć®ć‚µć‚¤ć‚ŗćØćƒ—ćƒ­ć‚»ć‚¹ę•°ćØćƒćƒƒć‚Æćƒ­ć‚°ć®å‚č€ƒå€¤ć‚’ä»„äø‹ć«čØ˜č¼‰ć—ć¾ć™ć€‚ ć‚µćƒ¼ćƒļ¼šCPUļ¼’ć‚³ć‚¢ć€ćƒ”ćƒ¢ćƒŖ8GB worker_processes:24 backlog:8192Ā  Ā  delyć§ćÆć€ę€„é€ŸćŖć‚µćƒ¼ćƒ“ć‚¹ęˆé•·ć‚’ę”Æćˆć‚‹SREć‚’å‹Ÿé›†ć—ć¦ć„ć¾ć™ć€‚ www.wantedly.com www.wantedly.com