ã¯ãããŠã®console.log
å æ¥Meguro.es #8ã§ç»å£ãããŠããã£ããšãã®LTè³æã§ã

Product Placement
will byers stan first human second

@theartofmadeline

shark vs the universe
Jules of Nature
ojovivo
Show & Tell

izzy's playlists!
Monterey Bay Aquarium

blake kathryn

JBB: An Artblog!

⣠Chile in a Photography â£
Not today Justin

$LAYYYTER
Cosmic Funnies
art blog(derogatory)

#extradirty
Xuebing Du

JVL
seen from Poland
seen from United States
seen from United States

seen from United States
seen from United States
seen from India
seen from United States
seen from Netherlands
seen from Estonia
seen from United States
seen from United States

seen from United States

seen from United States

seen from Japan
seen from TÃŒrkiye

seen from Philippines

seen from TÃŒrkiye
seen from United States
seen from United States
seen from Germany
@edwardkenfox
ã¯ãããŠã®console.log
å æ¥Meguro.es #8ã§ç»å£ãããŠããã£ããšãã®LTè³æã§ã

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
JSãšåã¿ãããªè©±ãæè¿ããèããå®éã«JSã«åã·ã¹ãã ãå°å ¥ããããšããããããããããäžçªã®ã¡ãªããã¯ãªããªã®ã ããããè€éåããããã³ããšã³ãéçºã§ãåå®å šãæã«å ¥ãããã¿ãããªè©±ã¯ããèãããšã¯ãããJSã«åãå°å ¥ããäžçªã®ã¡ãªããã¯ããããJSãæžãåŽã«ãšã£ãŠã®ãã®ããããçµå±ã¯ããã©ãŒãã³ã¹ãªãã ãããªãããšæãã
éä¿¡ã¯ã©ãã©ãéããªãããã¯ã©ã€ã¢ã³ãã®ãã·ã³ã¹ããã¯ãïŒã ãŒã¢ã®æ³åãçµçãã€ã€ããããšãã話ã¯çœ®ããŠãããŠïŒè¯ããªã£ãŠãããHTTP/2ãQUICãäž»å°ãã圢ã§ãéä¿¡ãããã³ã«ãæ¥ã«æ¥ã«é²åãéããŠãããããããç¶æ³äžã§ã¯ãã¯ã©ã€ã¢ã³ãã§ã®ã¹ã¯ãªããã®å®è¡é床ãããã©ãŠã¶ã®ããã©ãŒãã³ã¹ã®ããã«ããã¯ãšãªãããã ã©ã®ãã©ãŠã¶ã®JSãšã³ãžã³ãã¹ã¯ãªããã®å®è¡ç¶æ³ã«å¿ããŠé©çšããæé©åæŠç¥ãå€ããããã§ããããªããã£ãåææ®µéããåä»ãã®ããã°ã©ã ãå®è¡ã§ããã°ãããã©ãŒãã³ã¹è¯ããªãã¯ãã§ãããasm.jsãªããã¯ãŸãã«ãã®çºæ³ããæ¥ãŠããã ãããWebAssemblyã®éçºãé²ãã§ããããã²ãŒã ãšã3Dã®ã¬ã³ããªã³ã°ãäž»ãªçšéã ãããšèšãããŠããŠãããã®æµããèããŠããJSã«åãå°å ¥ããããšãããããã©ãŠã¶ãã³ããããã©ãŒãã³ã¹æ¹åãç®çãšããŠé²ããŠãããã ãããªããšæã£ããããã
ãã€ããã©ãŒãã³ã¹ ãã©ãŠã¶ãããã¯ãŒãã³ã° èªã¿çµãã£ã
C++ã§æžããã¯ã©ã¹ãemscriptenãçµç±ããŠVue.jsã§å©çšãã
ãã®èšäºã¯ @janus_wel ããã® emscripten ã§ãã¡ã€ã³å±€ã«åãšé床ãæã¡èŸŒã ã«~~è§Šçºããã~~ããã³ãæããçè ããC++ã§æžãããã¯ã©ã¹ãemscriptenãéããŠVue.jsã«ãã€ã³ãããŠã¿ãèšäºã§ããããªããããããããªããšé¢åãªããšãïŒããšæãããæ¹ãããããå èšäºã®ãã³ã³ã»ãããããçµç·¯ãã®éšåãèªãã§ããããã°ãšæããŸãããèŠããã«ããã³ã§ããã§ãã
æŠèŠ
ãªããžããª: edwardkenfox/vue-emscripten-todo ãã¢: vue-emscripten-todo
Todoã¯ã©ã¹ã¯C++ã§å®è£
æè¿è¶£å³ã§C++è§Šãå§ããŠããã®ã§èªåã§æžããŠãè¯ãã£ããã§ãããTodo.cppããã«ãçšã®ã¹ã¯ãªããã¯å ã®å®è£ ãæåããŸãã
Appã³ã³ããŒãã³ãããã³Todoã³ã³ããŒãã³ããVueã§å®è£
Appã³ã³ããŒãã³ãïŒã³ã³ããïŒã¯è€æ°ã®Todoã³ã³ããŒãã³ããæã€
Todoã³ã³ããŒãã³ãïŒVueïŒã¯Todoã¯ã©ã¹ïŒC++ã ã£ããã€ïŒã®ã€ã³ã¹ã¿ã³ã¹ãæã¡ãTodoã®ãã¡ã€ã³ç¥èã¯Todoã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã管çãã
ãããããã§ãããã§ãããã³ããããããããã§ãã
課é¡
Todoãªããžã§ã¯ããVue.jsããå©çšããéã«ãTodoã¯ã©ã¹ãæã£ãŠãããããã£ããªã¢ã¯ãã£ãã«ãªããªãïŒïŒïŒ
emscriptenãéããŠåºåãããTodo.jsãã¡ã€ã«ã®äžèº«ãèŠãŠããªãã®ã§ãªããšãèšããªãã§ãããChange Detection Caveats ã«æžãããŠããå 容ã«è©²åœããããããªãããšæšæž¬
this.$set(todo, 'isDone', Boolean)ãããŸãããã
ãŸãšã
C++ã§æžããã¯ã©ã¹ã®ããããã£ããªã¢ã¯ãã£ãã«ãªããªãç¹ã¯èŠèª¿æ»
ãããåºæ¥ãªããšãããšãå šã䜿ããã®ã«ãªããªãïœ
emscriptenãWebAssemblyãªã©ã®æè¡ã¯ããã©ãŠã¶ã²ãŒã ã3Dã¬ã³ããªã³ã°ãäž»ãªç®çãšããŠå©çšãããã ãããšæ³å®ããŠããŸããããããããæãã§ã«ãžã¥ã¢ã«ã«åã蟌ãããšãã§ãããªããWebã¢ããªã±ãŒã·ã§ã³ãå©çšããããšãåºæ¥ãªãã¯ãªãããšããå°è±¡ã§ãã
ãšã¯ããã1KBã®cppãã¡ã€ã«ã500KBã®jsãã¡ã€ã«ã«ãªãæç¹ã§å šç¶ã«ãžã¥ã¢ã«ã§ã¯ãªã
â
Vue.jsã䜿ãéã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠèãã
Vue.jsã¯å ¬åŒã®ããã¥ã¡ã³ããéåžžã«å å®ããŠããããŸããã©ãŒã©ã ã§ã®è°è«ãã³ãã¥ãã±ãŒã·ã§ã³ããšãŠã掻çºã§ããéçºäžã«äœãåé¡ã«ééããéã«ã¯ãããã¥ã¡ã³ãããã©ãŒã©ã ã«èŒã£ãŠããæ å ±ãåç §ããããšã§ãå€ãã®åé¡ã¯è§£æ±ºã§ãããšãã£ãŠå·®ãæ¯ããªãã§ããããããããªãããçŸå®äžçã®ã¢ããªã±ãŒã·ã§ã³ãéçºããŠãããšããããã£ãæ å ±ã ãã§ã¯è§£æ±ºãé£ããåå¥å ·äœçãªåé¡ããããããã©ãå®è£ ããã°è¯ãã®ãããããªãããšãã£ãå Žé¢ã«ééããããšãå€ã ãããŸãã
çè èªèº«ãVue.jsãå©çšããŠããã³ããšã³ãéçºãããŠããçµéšã«å ããVue.jsã®å ¬åŒã®ããã¥ã¡ã³ãããµã³ãã«ãããžã§ã¯ãããããŠVue.jsãå©çšããŠããOSSã®ãããžã§ã¯ããVue.jsã®ãã©ã°ã€ã³ãªã©ã®ãœãŒã¹ãèªãã§èããŠããããŠããŠãæ¬è³æã«ãŸãšããŸããã
ããã¹ããã©ã¯ãã£ã¹ããšéæã£ãŠã¯ãããã®ã®ãçè ã®å¥œã¿ãéçºçµéšã«äŸåããéšåã¯å€§ããã§ããããæ¬è³æãããæçŸ©ã®ãããã®ã«ããããã«ãVue.jsãå©çšããŠéçºãããéã®ããŠããŠããã©ã¯ãã£ã¹ããæã¡ã®æ¹ã¯ããã²ã³ã¡ã³ããç·šéãªã¯ãšã¹ããéããŠæããŠãã ããïŒ
ããŒãžã§ã³
åœããåã®è©±ã®ããã§ãããæ°èŠã§éçºãã¯ããããããžã§ã¯ãã§ããã°ãVue.jsã®ææ°ã®ããŒãžã§ã³ã䜿ãã«è¶ããããšã¯ãªãã§ãããã2016/12/18ã®æç¹ã§ã¯v2.1.6ãææ°ãšãªã£ãŠããŸãã
ãŸã1ç³»ã®ããŒãžã§ã³ãå©çšããŠãããããžã§ã¯ãã¯ã2ç³»ã«ã¢ããã°ã¬ãŒãããããšããªã¹ã¹ã¡ããŸããç Žå£çãªå€æŽãå«ãŸããŠããã®ã§ã1ç³»ãã2ç³»ãžã®ã¢ããã°ã¬ãŒãã¯å®¹æã§ã¯ãªããããããŸããããããã§ãå€ãã®ã¡ãªããã享åã§ããã§ãããã1ç³»ãã2ç³»ã«ã¢ããã°ã¬ãŒãããéã«å©çšã§ãããã€ã°ã¬ãŒã·ã§ã³ããŒã«ãããã»ããdeprecateãããAPIã«ã€ããŠã®æ¡å ãã¢ããã°ã¬ãŒãã¬ã€ããäžå¯§ã«æžãããŠããã®ã§ãããããåç §ããŠãã ããã
ref:
vue-migration-helper
Migration from Vue 1.x
ããã±ãŒãžç®¡çããŒã«
Vueãã©ã°ã€ã³ã®ãªããžããªãè²ã ãšèŠãŠã¿ããšãåŸæ¥éãnpmããã±ãŒãžã®ç®¡çã«ã¯npmãå©çšããŠãããšãããã»ãšãã©ã®ããã§ãããéçºãçããªäžéšã®ãªããžããªã§ã¯ãyarnãå©çšããŠãããšãããèŠãããŸããããæ°ãšããŠã¯å€ãã¯ãªãããã§ãã
ããããªãããnpmãšæ¯èŒããŠyarnã¯äŸåããã©ã€ãã©ãªãå€ããšãã»ã©ã€ã³ã¹ããŒã«ãéããšãããã³ãããŒã¯çµæãåºãŠããã®ã§ãæ°èŠã®ãããžã§ã¯ãã§ã¯yarnã䜿ããªãçç±ã¯ãªããããããŸãããCIãªã©ã§yarnã䜿ãå Žåã¯ããã£ãã·ã¥åšãã«æ°ãã€ããŠäœ¿ãå¿ èŠãããããã§ãã
ref:
yarn vs npm@2 vs npm@3
ãã«ãããŒã«
Vue.jså ¬åŒã«ãã£ãŠçšæãããŠããvuejs-templatesã«ã¯ãwebpackãšbrowserifyçšã®ãµã³ãã«ã®èšå®ãã¡ã€ã«ãšå®è£ ããããŸããããããã®ãªããžããªã®ã¹ã¿ãŒæ°ãèŠããšãwebpackã®æ¹ãå§åçã«äººæ°ã®ããã§ãã Vue.jsã®ã©ã€ãã©ãªãªã©ãèŠãŠããwebpackãå©çšããŠãããšãããã»ãšãã©ã§ãããã¢ã»ããåšãã®åŒ·åãªæ©èœãåããwebpackã䜿ãã®ãè¯ãããã§ãã
èšæ³
v-onãv-bindãå©çšããéã¯ããã¯ãç°¡æœãªççž®èšæ³ãå©çšããæžãæ¹ã奜ãŸããããã§ãããŸãè€æ°äººã§éçºãè¡ããããžã§ã¯ãã§ããã°ãeslintã.editorconfigãªã©ãå©çšããŠãèšæ³ãæ§æã®çµ±äžåãå³ãã®ãäžè¬çã«ãªã£ãŠããŸãã
propsã®åãã§ãã¯
propsãéããŠæž¡ã£ãŠããå€ã®åãã§ãã¯ã¯ãåºæ¥ãéã䜿ã£ãæ¹ãè¯ãã§ããããäŸãã°æ£ã®æŽæ°ãæåŸ ããpropsã§ããå Žåã¯ãNumberåã®ãã§ãã¯ã ãã§ã¯ãªãã蚱容ããŠã¯ãããªãå€ãvalidateããããšïŒãã€ãã¹ã®å€ã§ãªãããšããã§ãã¯ããïŒãªã©ããæ°ã¥ãã«ãããã°ãæžãã倧ããªå©ãã«ãªããŸãã
// not so good Vue.component('child', { props: ['age'] }) // good Vue.component('child', { props: { age: { type: Number } } }) // better Vue.component('child', { props: { age: { type: Number, required: true, validator: function(value) { return value >= 0; } } } })
propsã®åãã§ãã¯ã«ã¯ãè€æ°ã®åãæå®ãããããããã¯nullãšæå®ããããšã§ãã¹ãŠã®åã蚱容ããããšãå¯èœã§ããããããã¯åºæ¥ãéã䜿ããªãããšããªã¹ã¹ã¡ããŸããã©ãããŠãnullãæå®ããªããã°ãªããªããããªå Žåã¯ããã 1ã€ã®åã®å€ãæž¡ããããã«ãã³ã³ããŒãã³ããpropsãšããŠæž¡ãã¹ãããŒã¿ã®æ§é ãèŠçŽããŠã¿ããšè¯ãã§ãããã
ref:
Prop Validation
ã©ã€ããµã€ã¯ã«ããã¯ã®æŽ»çš
Vue.jsã«ã¯äŸ¿å©ãªAPIãããããçšæãããŠããŸãããã€ãã³ãç³»ã®ã¡ãœããã现ããã³ã³ããŒãã³ããªãã·ã§ã³ãé§äœ¿ããåã«ãå®è£ ããããšããŠããåŠçãæåãã©ã€ããµã€ã¯ã«ããã¯ãããŸã掻çšããããšã§å®çŸã§ããªããæ€èšããŠã¿ãŸããããçè ã®çµéšäžãã³ã³ããŒãã³ãå士ãæã£ããšããã«å調ããªããšãã¯ãã©ã€ããµã€ã¯ã«ããã¯ã®äœ¿ãæ¹ãæªãã£ãããšããããšããããããŸããããããå Žåã¯ãåŸãŠããŠwatchã$emitãå¿ èŠä»¥äžã«è€éãªåœ¢ã§æ¿«çšããŠããŸã£ãŠããŸãããã©ã€ããµã€ã¯ã«ããã¯ãããŸãçµã¿åãããããšã§ãå®è£ ã¯èªç¶ãšã·ã³ãã«ãªåœ¢ã«èœã¡çããŸãã
ã³ã³ããŒãã³ããåäœã§ååšãããããªãããã«ãªç¶æ³äžã§ã¯ãcreatedãšmountedã®ã©ã¡ãã®ã©ã€ããµã€ã¯ã«ãå©çšããŠãããŸã倧ããªå·®ã¯ãªããããããŸãããããããã³ã³ããŒãã³ãå士ãpropsãéããŠå調åäœããããããªå Žåã§ã¯ã芪ã³ã³ããŒãã³ãã®createdãšåã³ã³ããŒãã³ãã®mountedãªã©ã®ã¿ã€ãã³ã°ã®å·®ãããçè§£ããŠã³ã³ããŒãã³ããçµãå¿ èŠããããŸãã
new Vue({ mounted: function() { console.log("Hello from parent"); } }) // => "Hello from parent"
Vue.component('child', { mounted: function() { console.log("Hello from child"); } }) new Vue({ mounted: function() { console.log("Hello from parent"); } }) // => "Hello from child" // => "Hello from parent"
Vue.component('child', { mounted: function() { console.log("Hello from child"); } }) new Vue({ created: function() { console.log("Hello from parent"); } }) // => "Hello from parent" // => "Hello from child"
v-forã§è¡šç€ºãããèŠçŽ ã®åé€
v-forã§ã¬ã³ããªã³ã°ãããã¢ã€ãã ã®ãªã¹ãã®ãã¡ããŠãŒã¶ãŒã®æäœã«ãã£ãŠç¹å®ã®èŠçŽ ãåé€ããããšãããããªå Žé¢ã¯ãããããšæããŸãããããå®çŸããæ¹æ³ã¯è²ã ãšèããããŸãããå€ãã®ã¯ä»¥äžã®2ã€ã®ã¢ãããŒãã®ããã§ãã
åé€å¯Ÿè±¡ã®èŠçŽ ïŒåã³ã³ããŒãã³ãïŒããèªèº«ã®åé€ã芪ã³ã³ããŒãã³ãã«ç§»è²ãããã¿ãŒã³ïŒåé€ãã€ãã³ããšããŠ$emitããå®éã®åé€åŠçã¯èŠªãè¡ãããããã¯storeã«ã³ãããããïŒ
芪ã³ã³ããŒãã³ãã®é¢æ°ãšããŠåé€åŠçãå®è£ ããåé€é¢æ°ãåã³ã³ããŒãã³ãã«propsãšããŠæž¡ããå®éã«åé€ããéã¯åã³ã³ããŒãã³ããåãåã£ãŠãã颿°ãå®è¡ããèªèº«ãåé€ãã
çè å人çã«ã¯ãã©ã¡ãã®æ¹æ³ãããäžæ¹ã«æ¯ã¹ãŠç¹ã«åªããŠãããšã¯æããŸããããUIãã³ã³ããŒãã³ãã®åå²åäœã®èгç¹ããèŠãŠãåŠçã®æµããããèªç¶ãªæ¹ãéžã¶ã®ãè¯ããšæããŸãããªããåèŠçŽ ã®åé€ã«å ããŠã远å ã®åŠçãããããä»éãããããªå Žåã¯ã2ã€ãã®æ¹æ³ã®æ¹ãæ±ãããããããããŸããã
// ãã¿ãŒã³1 Vue.component('child', { methods: { removeItem: function() { this.$parent.$emit('removeItem', this.index); } } })
// ãã¿ãŒã³2 Vue.component('child', { props: { removeItem: { type: Function } } })
å€éšã©ã€ãã©ãªã®ã³ã³ããŒãã³ãå
ãµãŒãããŒãã£ã®ã©ã€ãã©ãªãç¹ã«UIé¢é£ã®ã©ã€ãã©ãªã®å Žåã¯ãVueã€ã³ã¹ã¿ã³ã¹ã®äžããçŽæ¥ã©ã€ãã©ãªãå©çšããã®ã§ã¯ãªããVueã®ã³ã³ããŒãã³ããšããŠã©ããããããšãæ€èšããŠã¿ãŠãã ãããå¥ã®ã³ã³ããŒãã³ãããã§ãã£ãŠããVueã®APIãéããŠå調ãåœä»€ãã§ããããã«ãªãããµãŒãããŒãã£ã©ã€ãã©ãªã®APIã«ã€ããŠé¢å¿ãå¯ããå¿ èŠããªããªããŸãã
ãŸããæ±çšçã«äœ¿ãããUIã®å¹æïŒã¢ãã¡ãŒã·ã§ã³ããã©ã³ãžã·ã§ã³ãªã©ïŒãªã©ã¯ãã³ã³ããŒãã³ããšãã£ã¬ã¯ãã£ãã®äž¡æ¹ãçšæããŠããããšããã®ã1ã€ã®æãããããŸãããããããããšã§ããã®å¹æãå©çšããåŽã®ã³ã³ããŒãã³ãã®äºæ ã«åãããŠãã³ã³ããŒãã³ããšããŠå©çšãããããããã¯ãã£ã¬ã¯ãã£ããéããŠå©çšããããéžã¶ããšãã§ããŸãã
ref:
Wrapper Component
vue-touch-ripple
éåæéä¿¡ã©ã€ãã©ãª
å°ãåãŸã§ã¯vue-resourceãVue.jså ¬åŒã®éåæéä¿¡ã©ã€ãã©ãªã§ããããçŸåšVue.jsãå ¬åŒãšããŠæäŸããŠããéåæéä¿¡ã©ã€ãã©ãªã¯ãããŸããããããããVue.jsã¯å€éšã©ã€ãã©ãªãçµã¿èŸŒã¿ãããããã«ã§ããŠããã®ã§ãæ®æ®µäœ¿ã£ãŠããŠæ £ããŠããéåæéä¿¡ã©ã€ãã©ãªã䜿ãã®ãè¯ãã§ãããã
å ¬åŒããã¯å€ãããã®ã®ãvue-resourceãå©çšããŠãããããžã§ã¯ããå€ãããã§ãããJavaScriptçéã®ç¶æ³ãèŠããšaxiosãrequestãªã©ã人æ°ã®ããã§ãããŸãããã©ãŠã¶ã®fetch APIãå©çšããã®ãã¢ãªã§ãããïŒSafariã§ã¯ãŸã ãã€ãã£ãå®è£ ãããŠããªããããpolyfillã®å©çšãå¿ èŠã§ãïŒã
ref:
Retiring vue-resource â
fluxã¢ãŒããã¯ãã£ã®å°å ¥
æšå¹Žããããfluxã¢ãŒããã¯ãã£ãããã³ããšã³ãã«æ°ããæœ®æµããããããVue.jsã®äžçã«ãVuexãšããfluxã©ã€ã¯ãªã©ã€ãã©ãªãå ¬åŒããæäŸãããŠããŸããVuexèªäœã¯éåžžã«ããåºæ¥ãã©ã€ãã©ãªã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ãè€é床ãšããç §ããåãããŠãå©çšãããã©ãããæ€èšããã¹ãã ãšçè ã¯æããŸãã
çè åäººã®æèŠãšããŠã¯ãå°ãäžèŠæš¡ã®ã¢ããªã±ãŒã·ã§ã³ã§ããã°ãVuexãå°å ¥ãããããåã«ãVue.jså ¬åŒããã¥ã¡ã³ãã«æžãããŠãããããªstoreãã¿ãŒã³ã®å°å ¥ã«ããç¶æ 管çãªã©ãé©çšããæ¹ããã¿ãŒã ãšèããŠããŸããVuexã¯ç¶æ ã®ç®¡çãæŽæ°ã«ç§©åºããããããã®ã®ãäžéå端ã«å°å ¥ããŠããŸããšããã£ãŠæŽåæ§ããšããªããªã£ããããŸãå°ããã¢ããªã±ãŒã·ã§ã³ã®å Žåã§ã¯ãfluxã¢ãŒããã¯ãã£ã®å°å ¥ã«ããç¡çšãªè€éããçãã§ããŸãæžå¿µããããŸãã
Vue.jsã¢ããã³ãã«ã¬ã³ããŒ2016ã«ãããã@nekobatoããã«ããæ§é ã®è€éããšVuexæžãåã ãéåžžã«åèã«ãªãã®ã§ãèå³ã®ããæ¹ã¯ãã¡ããåç §ããŠã¿ãŠãã ããã
ã·ã³ã°ã«ãã¡ã€ã«ã³ã³ããŒãã³ã
ãã«ãç°å¢ããããžã§ã¯ãã®éçºç°å¢ã«å€§ããäŸåããŸãããã·ã³ã°ã«ãã¡ã€ã«ã³ã³ããŒãã³ãïŒ.vueãã¡ã€ã«ïŒãå©çšã§ããå Žåã¯ãç©æ¥µçã«å©çšããæ¹ãè¯ãã§ããããã³ã³ããŒãã³ããšã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®ãèŠãç®ããšãæ¯ãèãããããšã«åå²ããéšåã®åäœã§ããããã³ãã¬ãŒãïŒHTMLïŒãšè£ 食ïŒCSSïŒããããŠæ¯ãèãïŒJavaScriptïŒã1ã€ã®ãã¡ã€ã«ã§å®çµããŠããããšã¯çã«ããªã£ãŠãããšèããŠããŸããããã³ããšã³ãéçºè ãšãã¶ã€ããŒãååãããããªå Žåã«ãããŠããã·ã³ã°ã«ãã¡ã€ã«ã³ã³ããŒãã³ãã¯çµ±äžçãªäœæ¥ç°å¢ãçšæããŠãããã®ã§ãå¹çè¯ãåèª¿äœæ¥ãã§ãããšæåŸ ããŠããŸãã
ã³ã³ããŒãã³ãã®åå©çš
ãã·ã³ã°ã«ãã¡ã€ã«ã³ã³ããŒãã³ããã®é ã§ãæžããããã«ãã³ã³ããŒãã³ããšã¯æ¥µç«¯ã«èšãã°UIãåå²ããéšåã§ããããŸãUIã®éšåã¯ãããæå±ããããŒãžã®æèåã«ãããŸããåãããã«èŠããUIã§ãã£ãŠããå®ã¯æ¯ãèããéã£ãŠããããç°ãªããšããžã±ãŒã¹ãæã€ããšãã£ãããšã¯å°ãªããããŸããã
ãããã£ããäžèŠåãããã«èŠããŠå®ã¯éããéšåãå ±éã®ã³ã³ããŒãã³ããšããŠå®è£ ããŠããŸããšãåŒæ°ãpropsã«ããå¶åŸ¡ã«å ããã³ã³ããŒãã³ãå ã®æ¡ä»¶åå²ãå¢ããããšã«ãªããããŸãããããã¯å ±éåãããã³ã³ããŒãã³ããå©çšããåŽã«ã倧ããªè² æ ã匷ããããšã«ãªãããã°ã®æž©åºã«ããªãããããšã¯æ³åã«é£ããããŸããã
ãããã£ãç¶æ³ã¯ãUIã®èšèšãèŠçŽãè¯ãã¿ã€ãã³ã°ãšæããããšãã§ããŸããããããã«ããç¡çãªå ±éåïŒæ±çšåã¯è¯ãçµæããããããªãããšãå€ãããšã¯åŒ·èª¿ããŠãããŸããç°ãªãã³ã³ããŒãã³ãããå ±ééšåãèŠåºããŠå ±éåããããããäžåºŠå ±éåããããã®ããã©ãæ¹ããã¯ããã«é£ããã§ãããã©ãŠã¶ã®ããã©ãŒãã³ã¹ãæ¥ã åäžããã»ãšãã©ã®ã¯ã©ã€ã¢ã³ãã¯é«éãªãããã¯ãŒã¯ããWebã¢ããªã±ãŒã·ã§ã³ãå©çšããŸããå€å°ãã¡ã€ã«ãµã€ãºã倧ãããªã£ãŠããŸã£ããšããŠããç¡çãªå ±éåã¯æ§ããã³ãŒãããŒã¹ãæ±ããããç¶æ ã«ä¿ã€ããšã®æ¹ãã¡ãªããã¯å€§ããã®ã§ã¯ãªãã§ãããããã³ã³ããŒãã³ããåå©çšïŒå ±éåããåã«ã¯ãäžåºŠå ±éåã®pros/consãå¿ èŠæ§ããã£ãããšæ€èšããŠã¿ãããšããªã¹ã¹ã¡ããŸãã
ref:
Authoring Reusable Components
ãã¹ã
Vue.jsã¢ããã³ãã«ã¬ã³ã㌠2016ã«ãããã€ããã¹ãé¢é£ã®èšäºãäžãã£ãŠããŸãããããã³ããšã³ãéçºãã©ãã©ããšè€éåããŠããŠããæšä»ãVue.jsãå©çšããã³ã³ããŒãã³ãã®ãŠããããã¹ããæžãå¿ èŠæ§ã¯é«ãŸã£ãŠããŠãããšæããŠããŸãã
ãã®ã³ã³ããŒãã³ãã®å®è£ ãèŠãã ãã§ãã³ã³ããŒãã³ãã®åããåŠçããã¹ãŠçè§£ã§ãããããªéããã³ã³ããŒãã³ãã§ããã°ããããããã¹ãã¯æžããªããŠãè¯ããããããŸãããããããã³ã³ããŒãã³ãéã§propsãåãæž¡ãããããããããšã«ã³ã³ããŒãã³ãã®æåãå€ãããããªã±ãŒã¹ã§ã¯ããã®ã³ã³ããŒãã³ãã®æ¯ãèãã宣èšçã«èšè¿°ããããã¹ãã³ãŒãããããšå®å¿ã§ãããŸãçè èªèº«ã¯ãã³ã³ããŒãã³ãå ã§éåæéä¿¡ãçºè¡ããã¬ã¹ãã³ã¹ã®å 容ã«ããšã¥ããŠVueã€ã³ã¹ã¿ã³ã¹ã«å€ãã»ãããããããªæ¯ãèããã³ã³ããŒãã³ããæã€ãšããããŠããããã¹ããæžãããã«ããŠããŸãããã®ãããã®ãã¹ããæžãã³ã¹ããšããã«ãã£ãŠåããæ©æµã®ãã©ã³ã¹ã¯é£ããã§ããããã¯ããã¹ãããããšãªãã¡ã¯ã¿ãªã³ã°ãããéã®å®å¿æã¯çµ¶å€§ã§ãã
ref:
Unit Testing
Vue.js Vueã³ã³ããŒãã³ãã®ãŠããããã¹ããæžããŠã¿ãã
axiosãå©çšããVue componentã®UnitTest
ãŸãšã
Vue.jsã«éãããã©ããªãã¬ãŒã ã¯ãŒã¯ã§ãã£ãŠãããã¬ãŒã ã¯ãŒã¯ã®æ§è³ªãçãçè§£ããŠå©çšããããšãéèŠã§ããããšã¯çãããããããŸããããŸããéçºããã¢ããªã±ãŒã·ã§ã³ãããŸããŸã§ãããéçºè ã«ã¯å¿ èŠãšãããŠããèŠä»¶ã«åèŽããèšèšãå®è£ ãã©ã€ãã©ãªã®å©çšãããããšãæ±ããããŠããŸããæ¬è³æãVue.jsãå©çšããŠããã³ããšã³ãéçºãããŠãã人ãããããããããšããŠãã人ã®äžå©ã«ãªãã°å¹žãã§ãã

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
Swiftæå¥œäŒå宿 â åå é²
è«žäºæ ãã£ãŠfeature specã¯dockerã³ã³ããäžã§å®è¡ããå¿ èŠããããdocker cpã«ãã¡ãã¡ã³ã³ããIDãæž¡ãã®ãé¢åã ã£ãã®ã§ã·ã§ãŒãã«ãããã€ããããã¹ãããã»ã¹å ã§ãã¡ã€ã«åååŸããªãããããªãã®ããŸã é¢åã ãã©ãpryããã·ã§ã«ãå®è¡ãããšãã«åŒæ°ãæž¡ãæ¹æ³ãããããªãã£ãã®ã§ãšããããããã§åãã
#!/bin/bash function docker-cp() { usage_exit() { echo "Usage:\tdocker-cp /path/to/your/file" 1>&2 return 0 } if [ $# -eq 0 ] then usage_exit return 0 fi FILE_PATH=$1 CONTAINER_ID=`docker ps | grep your_app | head -1 | awk '{print $1;}'` docker cp $CONTAINER_ID:$FILE_PATH ~/Desktop/capybara/ }
Railsã®jquery-ujsã«çµ¡ãã æåããããã°ããŠããŠãdata-methodã€ãã®aã¿ã°ãã¯ãªãã¯ããããšã§ã¹ãããå®è¡ããããã ãã©ãã©ãã«åŠçãè¡ãã®ã远ãã¥ããã£ããšãçš
window.startDebug = function() { debugger };
= link_to "Foo", "/foo", method: :post, "onclick": "window.startDebug()"
ããããC++ 第4ç èªã¿çµãã£ã
ãããã¯ãã§ãŒã³ ä»çµã¿ãšçè« ãµã³ãã«ã§åŠã¶FinTechã®ã³ã¢æè¡ èªã¿çµãã£ã

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
ã¯ããã«
Railsã§ã¢ããªã±ãŒã·ã§ã³ãéçºããŠãããšãE2Eã®è©ŠéšãšããŠfeature specãæžãããšã¯ãããããšæããŸãããJavaScriptã§å®è£ ããããã³ããšã³ãã®ã¢ãžã¥ãŒã«ãã©ã€ãã©ãªã®ãŠããããã¹ãã¯ãfeature specããããã倧äžå€«ããšãããªãã«ãªã£ãŠããŸãããïŒE2Eãã¹ãã§ãã¹ãŠç¶²çŸ çã«æ€èšŒã§ããŠããã°è¯ããšããæèŠã«ã¯äžçããã®ã§ãããUIãUXãã¯ãããšããŠãããã³ããšã³ãã®èŠä»¶ã倧ããè€éã«ãªãåŸåã«ããæè¿ã®WEBã¢ããªã±ãŒã·ã§ã³ã«ãããŠã¯ãããã³ããšã³ãã®ãŠããããã¹ããããããšã®ã¡ãªããã¯å€§ãããšèããŠããŸãããŸãfeature specã¯ããŠããŠå®è¡æéãé·ãããŠãŒã¶ãŒã®æäœãã¿ãŒã³ããã¹ãŠç¶²çŸ çã«æ€èšŒããã®ã¯çŸå®çã§ã¯ãããŸããã
ä»åã®èšäºã§ã¯ãããã¯ãšã³ãã®ãã¬ãŒã ã¯ãŒã¯ãšããŠRailsãããã³ããšã³ãã®ãã¬ãŒã ã¯ãŒã¯ãšããŠVue.jsãå©çšããŠç°¡åãªTodoã¢ããªã±ãŒã·ã§ã³ãäœæããVue.jsã§æžããã³ã³ããŒãã³ãã®ãŠããããã¹ããæžããŸããæ¬èšäºãããã³ããšã³ãã®ãŠããããã¹ããæžããã£ããã«ãªããå ç¢ãªããã³ããšã³ãéçºã®äžå©ãšãªãã°å¹žãã§ãã
ãªãä»åæ¬èšäºã§ç޹ä»ããã¢ããªã±ãŒã·ã§ã³ãšåããã®ãGitHubã«çœ®ããŸããã®ã§ãé©å®ãµã³ãã«ã³ãŒããèŠãŠããããã°ãšæããŸãã edwardkenfox/rails-vue-unit-test-sample
ä»åå©çšããã©ã€ãã©ãª
Rails: 5.0.0.1
Vue.js: 2.0.1
npm: 3.10.8
webpack: 1.13.2
泚ïŒRailsãVue.jsãçŸæç¹ã§ææ°ã®ããŒãžã§ã³ãå©çšããŠããŸãããããã§äœæããã¢ããªã±ãŒã·ã§ã³ããã³ãã¹ãã¯éåžžã«ã·ã³ãã«ãªãã®ãªã®ã§ããããããå€ãããŒãžã§ã³ã§ãåé¡ãªãåäœããã¯ãã§ãïŒæªæ€èšŒïŒã
Railsã§ãã¥ãŒã®äœæ
ãŸãã¯æ°ããRailsã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
$ rails new rails-vue-unit-test-sample $ cd rails-vue-unit-test-sample
ç°¡åãªç»é¢ãäœã£ãŠãããŸããããããã§ã¯ãŸã Vue.jsã¯å©çšããããã®ããšå®è£ ããVueã³ã³ããŒãã³ããä¹ã£ããããã®åå°ãšãªããã¥ãŒãRailsã§äœæããŸãã
次ã«ã«ãŒãã£ã³ã°ãçšæããŸããrootãžã®ã¢ã¯ã»ã¹ïŒlocalhost:3000/ïŒãçŽæ¥TodosController#indexãžã«ãŒãã£ã³ã°ããŸãã
root to: "todos#index"
ã€ã¥ããŠãªã¯ãšã¹ããå¶åŸ¡ããã³ã³ãããŒã©ãäœæããŸããããã»ã©æžããã«ãŒãã£ã³ã°ã«æ²¿ã£ãã¢ã¯ã·ã§ã³ãçšæããã°ååã§ãã
class TodosController < ApplicationController def index end end
ããã§ç»é¢ãäœæããæºåãæŽããŸãããæ¬¡ã¯ãã¥ãŒãæžããŠãããŸãããã
Railsã®èŠçŽã«æ²¿ãããã«ãã³ã³ãããŒã©åãšã¢ã¯ã·ã§ã³åã«åèŽãããã³ãã¬ãŒããã¡ã€ã«ãçšæããŸãã<todos></todos>ãšããã®ãåºãŠããŠããŸãããããããã®ããšVue.jsã䜿ã£ãŠå®è£ ããVueã³ã³ããŒãã³ãã«è©²åœããŸãã
<article id="todos-sample"> <h1>Todos</h1> <todos></todos> </article>
ãããŸã§æžãçµãã£ããlocalhost:3000/ã«ã¢ã¯ã»ã¹ããŠã¿ãŸããããäžå³ã®ããã«è¡šç€ºããããæåã§ãã<todos>ã®å®è£ ããŸã ãªãã®ã§ãåœç¶<h1>以å€ã«ã¯äœã衚瀺ãããŸããã
Todosã³ã³ããŒãã³ãã®å®è£
ã€ã¥ããŠVueã³ã³ããŒãã³ãã®å®è£ ã«å ¥ããŸããpure JavaScriptã§æžãããšãå¯èœã§ããããã£ãããªã®ã§ã¢ãã³ãªæãã®ã»ããã¢ããã§éçºããŠã¿ãããšã«ããŸãã
ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãçŽäžã«/frontendãã£ã¬ã¯ããªãäœããŸããããã«ãã®äžã«/configã/srcã/testãšãããã£ã¬ã¯ããªãäœããŸããããããã®ãã£ã¬ã¯ããªã«å¿ èŠãªãã¡ã€ã«ãé ã远ã£ãŠäœæããŠãããŸãã
/frontend âââ /config -- webpackã®èšå®ãã¡ã€ã«ãªã© âââ /src -- Vueã³ã³ããŒãã³ããªã©ã®å®è£ âââ /test -- ãã¹ãçšã®èšå®ãã¡ã€ã«ãå®éã«ãã¹ããã¡ã€ã«
å¿ èŠãªnpmããã±ãŒãžãã€ã³ã¹ããŒã«ã»ç®¡çããããã«package.jsonãäœããVue.jsãã¯ããä»åŸå¿ èŠãšãªãã©ã€ãã©ãªããã¹ãŠã€ã³ã¹ããŒã«ããŸãã
$ npm init # ã³ãã³ãã©ã€ã³äžã®è³ªåã«å¯ŸããŠã¯ãšããããå šéšEnterã§OK $ npm install --save-dev babel-core babel-loader babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-0 babel-runtime function-bind karma karma-mocha karma-phantomjs-launcher karma-spec-reporter karma-webpack mocha vue-html-loader vue-loader webpack webpack-dev-server
npm installãå®äºãããšpackage.jsonã¯ãããªæãã«ã«ãªã£ãŠããã¯ãã§ãã
{ "name": "rails-vue-unit-test-sample", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "build": "webpack --config ./config/webpack.config.js", "test": "karma start ./karma.conf.js" }, "author": "Edward Fox", "license": "ISC", "dependencies": { "vue": "^2.0.1" }, "devDependencies": { "babel-core": "^6.0.0", "babel-loader": "^6.0.0", "babel-plugin-transform-runtime": "^6.0.0", "babel-preset-es2015": "^6.0.0", "babel-preset-stage-0": "^6.16.0", "babel-runtime": "^6.0.0", "function-bind": "^1.1.0", "karma": "^1.3.0", "karma-mocha": "^1.2.0", "karma-phantomjs-launcher": "^1.0.2", "karma-spec-reporter": "0.0.26", "karma-webpack": "^1.8.0", "mocha": "^3.1.0", "vue-html-loader": "^1.2.3", "vue-loader": "^8.0.0", "webpack": "^1.12.2", "webpack-dev-server": "^1.12.0" } }
次ã«webpackãã»ããã¢ããããŸãã以äžã®ãã¡ã€ã«ãäœæããŸãã
var webpack = require('webpack') var path = require('path') module.exports = { entry: { application: './src/javascripts/main.js', }, output: { path: '../app/assets/javascripts', filename: '[name].js' }, module: { loaders: [ { test: /\.vue$/, loader: 'vue' }, { test: /\.js$/, loader: 'babel', exclude: /node_modules/ } ] }, babel: { presets: ['es2015'], plugins: ['transform-runtime'] }, resolve: { alias: { vue: 'vue/dist/vue.js' } } }
ããã«ES2015ã®èšæ³ã§æžããããã¡ã€ã«ãJavaScriptã«ãã©ã³ã¹ãã€ã«ããããã«å¿ èŠãªBabelã®èšå®ã远å ããŸãã
{ "presets": ["es2015", "stage-0"], "plugins": ["transform-runtime"] }
ããã§ãã£ãšVueã§ã³ã³ããŒãã³ãæžãæºåãã§ããŸããïŒãã£ããVueã³ã³ããŒãã³ããæžããŠãããŸãããã
ãŸãã¯Todosã³ã³ããŒãã³ãã®å ãšãªããã¡ã€ã«ãçšæããŸããVue.jså ¬åŒã®ãµã³ãã«ãªã©ãèŠããšãApp.vueãšããã¢ããªã±ãŒã·ã§ã³å šäœã®ã³ã³ããå±€ãèšããæ¹åŒãæ¡ãããŠããããã§ãããããã§ã¯ãªãã¹ãç°¡æœã«ããããmain.jsã§çŽæ¥å¿ èŠãªã³ã³ããŒãã³ããimportããŸãã
import Vue from 'vue' import Todos from './todos.vue' new Vue({ el: '#todos-sample', components: { Todos } })
Todosã³ã³ããŒãã³ããã€ã³ã¹ã¿ã³ã¹åããæºåãã§ããŸãããæ¬¡ã«å®éã®Todosã³ã³ããŒãã³ããäœæããŸãããã
<template> <div> <ul> <li v-for="(todo, index) in todos"> {{ todo.title }} </li> </ul> <input type="text" placeholder="Create new todo" v-if="showTodoInput" v-model="newTodoTitle"> <button @click="addTodo">+ Add Todo</button> </div> </template> <script> export default { data () { return { todos: [], showTodoInput: false, newTodoTitle: null } }, methods: { addTodo: function() { if (this.showTodoInput && this.newTodoTitle) { let newTodo = { title: this.newTodoTitle, completed: false } this.todos.push(newTodo) this.newTodoTitle = null } else { this.showTodoInput = true } } } } </script>
ããã§ã¢ããªã±ãŒã·ã§ã³ã宿ããŸããïŒãããŸã§ãå®äºããç¶æ ã§frontendãã£ã¬ã¯ããªã«ç§»åãã$ webpack --config ./config/webpack.config.jsãå®è¡ããŠã¿ãŸããããfrontendé äžã«æžããVue.jsã®å®è£ ãwebpackããã«ãããapp/assets/javascripts/application.jsãšããŠåºåããŸãããã«ããå®äºãããlocalhost:3000/ããªããŒãããŠã¿ãŸãããã
ããã»ã©ã¯ãªãã£ãã+ Add Todoããšãããã¿ã³ã远å ãããŠããã®ãããããŸããå®éã«ãã¿ã³ãã¯ãªãã¯ããŠæ°ããTodoãäœã£ãŠã¿ãŸãããã
ããã§Todoã¢ããªã±ãŒã·ã§ã³ã宿ã§ãïŒãã®ãŸãŸã§ã¯Todoã¢ããªã±ãŒã·ã§ã³ãšããŠäœã®é¢çœã¿ããªãã§ãããæ¬èšäºã®ç®çã¯Vueã³ã³ããŒãã³ãã®ãã¹ããæžãããšãªã®ã§ã次ã«é²ã¿ãããšæããŸãã
Vueã³ã³ããŒãã³ãã®ãŠããããã¹ããæžã
ããã³ããšã³ãã®ãã¹ããå®è¡ããããã®ç°å¢ãæºåããŸããä»åãã¹ãã©ã³ããŒã«ã¯karmaããã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ã«ã¯mochaãå©çšããŸããå¿ èŠãªã©ã€ãã©ãªã¯ãã§ã«ã€ã³ã¹ããŒã«æžã¿ãªã®ã§ãkarmaã®èšå®ãã¡ã€ã«ã以äžã®èŠé ã§äœæããŸãããã
var webpackConf = require('./config/webpack.config.js') module.exports = function (config) { config.set({ browsers: ['PhantomJS'], frameworks: ['mocha'], reporters: ['spec'], files: ['./test/index.js'], preprocessors: { './test/index.js': ['webpack'] }, webpack: webpackConf, webpackMiddleware: { noInfo: true }, singleRun: true }) }
ãã¹ããES2015ã§æžããŠããã®ã§ãå ã«ã»ããã¢ããããwebpackã®èšå®ãããã§ãæµçšããŸããã»ãã«ãããã¹ãã®å®è¡ç°å¢ïŒãã©ãŠã¶ïŒããã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ïŒmochaïŒããã¹ãã®ãšã³ããªãã€ã³ããšãªããã¡ã€ã«ïŒindex.jsïŒãªã©ãæå®ããŠããŸãã
ã€ã¥ããŠãã¹ãã®ãšã³ããªãã€ã³ããšãªãindex.jsãäœæããŸãã
// Polyfill fn.bind() for PhantomJS /* eslint-disable no-extend-native */ Function.prototype.bind = require('function-bind') // require all test files (files that ends with .spec.js) var testsContext = require.context('.', true, /\.spec$/) testsContext.keys().forEach(testsContext)
ããã§ãã£ã£ã£ãšãŠããããã¹ããæžãæºåãã§ããŸããïŒãããããåŸ ã¡ããã®ãã¹ããæžãäœæ¥ã«å ¥ããŸãããã
Todosã³ã³ããŒãã³ãã®å®è£ ã«æ²¿ã£ãŠããæ°ããTodoã®å 容ïŒnewTodoTitleïŒãäžããäžã§Todosã³ã³ããŒãã³ãã®addTodo()ã¡ãœãããã³ãŒã«ãããšãtodosã«æ°ãããªããžã§ã¯ããåºæ¥ãããšããæ€èšŒãããã¹ããæžããããšæããŸãããŸãã¯æçµçã«æåŸ ããã¢ãµãŒã·ã§ã³ã ããæžãããã®ç¶æ ã§ãã¹ãã倱æããããšã確èªããŠã¿ãŸãã
import assert from 'assert' import Vue from 'vue' import Todos from '../src/javascripts/todos.vue' describe('Todos', () => { it('#addTodo creates new todo', function(done) { const vm = new Vue({ template: '<div><todos ref="todos"></todos></div>', components: { 'todos': Todos } }).$mount() let todosComponent = vm.$refs.todos; // Assert new todo is added assert.equal(todosComponent.todos.length, 1) assert.equal(todosComponent.todos[0].title, "Buy milk") done() }) })
$ npm testãå®è¡ããŠã¿ãŸãããã$ npm testã³ãã³ãã¯package.jsonã«æžããã·ã§ãŒãã«ããã§ãå®äœã¯$ karma start ./karma.conf.jsã§ãã
ã¡ãããšãã¹ãã倱æããŸããããšã©ãŒã®å 容ãèŠããšãtodosã®æ°ãæåŸ ããå€ïŒ1ïŒãšå®éã®çµæïŒ0ïŒãšã§ãºã¬ãŠããã®ãããããŸããTodosã³ã³ããŒãã³ããåæåããæ®µéã§ã¯1ã€ãtodoã¯ã§ããŠããªãã®ã§ãæåŸ éãã®çµæã§ããã
ã§ã¯ãã®ãã¹ããæ£ããéãããã«ãå¿ èŠãªæé ã远èšããŸããããshowTodoInputãšnewTodoTitleãã»ããããaddTodo()ãã³ãŒã«ããåŠçãã¢ãµãŒã·ã§ã³ã®åã«è¿œå ããŸãã
... describe('Todos', () => { it('#addTodo creates new todo', function(done) { const vm = new Vue({ template: '<div><todos ref="todos"></todos></div>', components: { 'todos': Todos } }).$mount() let todosComponent = vm.$refs.todos; // Create new todo todosComponent.showTodoInput = true todosComponent.newTodoTitle = "Buy milk" todosComponent.addTodo() // Assert new todo is added assert.equal(todosComponent.todos.length, 1) assert.equal(todosComponent.todos[0].title, "Buy milk") done() }) })
ãµããã³$ npm testãå®è¡ããŠã¿ãŸãã
ãã¹ããéããŸããïŒããã§ãã£ãšVue.jsã§å®è£ ããTodosã³ã³ããŒãã³ãã®ãŠããããã¹ããæžããŸããã
å®éã®ã¢ããªã±ãŒã·ã§ã³ã§åäœããã³ã³ããŒãã³ãã¯ãã£ãšè€éãªããžãã¯ãæã£ãŠããããšãå€ããšæããŸãããVueã³ã³ããŒãã³ãã®ãã¹ããæžãèŠé ã¯ãããŸã§æžããå 容ãšåãã§ããããã³ããšã³ãã®ãŠããããã¹ããå å®ããããã°ããã°ã¬ãæªç¶ã«é²ãå ç¢ãªããã³ããšã³ãéçºãããŠãããŸãããïŒ
Appendix
ããããã³ããšã³ãã®ãŠããããã¹ããæžãå§ããŠã¿ããšããã¹ããæžãã«ãããšæããããšããããŸããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ãè€éããããããŠãŒã¶ãŒã®æäœã«ããšã¥ãäžæçãªUIã®ç¶æ ãå€ããšãã®åŸåã¯åŒ·ããªãããã§ãããã¹ããæžãã«ãããšæããå Žåã¯ãå®ã¯ãã¹ãã§ã¯ãªãå®è£ ãèŠçŽãã¹ãã§ããããšãå€ã ãããŸãããã¹ãããããã³ãŒãã¯ä¿å®æ§ãå¯èªæ§ã®åäžã«ãã€ãªããã®ã§ããã¹ããæžãã«ãããšæããéã¯ã³ã³ããŒãã³ãã®ç²åºŠãèšèšãèŠçŽããŠã¿ãŠãã ããã
XMLHttpRequestãå©çšããŠéåæã§ãªã¯ãšã¹ããçºè¡ããŠããã³ã³ããŒãã³ããªã©ã«ã¯ãsinon.jsãªã©ã®ã¢ãã¯ã©ã€ãã©ãªãå©çšãããšäŸ¿å©ã§ãã
ãªãæ¬èšäºãæžãã«ããã£ãŠã以äžã®ããŒãžãåèã«ããŸããã
Unit Testing - vue.js
vuejs/vue-loader-example
ã³ã³ãã¥ãŒã¿ãŒã§ãè³ããã€ãããã èªã¿çµãã£ã
GitHubæ°æ©èœãrequired reviewãã®äœ¿ãæ¹
GitHubã«æ°ãããrequired reviewããšããæ©èœã远å ãããŸããããã®æ©èœãå©çšãããšãä¿®æ£ãæ±ããã³ã¡ã³ããä»ããå Žåã远å ã®å€æŽãæ¿èªãããªãéãã¯ãã«ãªã¯ãšã¹ããããŒãžã§ããªãããã«ããããšãã£ã峿 Œãªãã«ãªã¯ãšã¹ãéçšãå¯èœã«ãªããŸãããããŸã§ã®ããã«ããã«ãªã¯ãšã¹ãã§äžãã£ãŠããå·®åã«ã³ã¡ã³ããä»ããã ãã§ãªããä¿®æ£ãèŠæ±ãããæ¿èªã§ããããã«ãªã£ãŠããã®ãç¹åŸŽã§ããè¥å¹²è€éã«ã¯ãªããŸãããmasterãã©ã³ãããããŒãžã«ããã¯ããŠCIã§ã®ãã«ãããããã€ãå®è¡ããããããªãã©ã³ãã«å¯ŸããŠã¯å³æ Œãªéçšãåºæ¥ãã®ã§ãéšåçã«åãå ¥ããã¡ãªããã¯å€§ãããã§ãã
GitHubããå ¬åŒã®ãªãªãŒã¹ããŒãã¯çºè¡šãããŠããŸãããæ¥æ¬èªã§ã®è³æããªãã£ããã翻蚳ããŠã¿ãŸãããåæã«å¿ å®ããããšããã翻蚳æã®èªã¿ããããæèããæèš³ããŠããéšåããããŸãã
âââ以äžç¿»èš³æâââ
ãã«ãªã¯ãšã¹ãã®ã¬ãã¥ãŒã³ã¡ã³ãã«ã€ããŠ
ãã«ãªã¯ãšã¹ããäœããããšããªããžããªã®readæš©éãæã£ãŠãã人ãªã誰ã§ããã®ãã«ãªã¯ãšã¹ãã®å·®åãã¬ãã¥ãŒãã³ã¡ã³ãããããšãå¯èœã§ããã¬ãã¥ãŒã³ã¡ã³ãã¯ãããã§äžãã£ãŠããå·®åã«ã€ããŠè°è«ãããããªããžããªã®ã³ã³ããªãã¥ãŒã·ã§ã³ã»ã¬ã€ãã©ã€ã³ã«æ²¿ã£ãŠãããããªã©ã®ã¯ãªãªãã£ãã§ãã¯ãä¿é²ããåãããããŸãã
ã¬ãã¥ãŒã³ã¡ã³ãã«ã¯ä»¥äž3ã€ã®çš®é¡ããããŸãã
ã³ã¡ã³ãïŒcommentïŒ: 倿Žå å®¹ãæ¿èªããã远å ä¿®æ£ãèŠæ±ããããšã¯ãããäžè¬çãªãã£ãŒãããã¯ãšããŠã³ã¡ã³ããæ®ã
æ¿èªïŒapproveïŒ: 該åœãã倿Žã®ããŒãžãæ¿èªããã³ã¡ã³ããæ®ã
ä¿®æ£èŠæïŒrequest changesïŒ: ãã«ãªã¯ãšã¹ããããŒãžãããåã«ä¿®æ£ãæ±ããããã®ã³ã¡ã³ããæ®ã
Tips:
ãå¿ é ã¬ãã¥ãŒã³ã¡ã³ãïŒrequired reviewïŒãããªã³ã«ãªã£ãŠããããªããžããªã«writeã»adminã»owneræš©éãæã€ãŠãŒã¶ãŒããä¿®æ£èŠæãã³ã¡ã³ããæ®ããšããã®ã³ã¡ã³ãããããŠãŒã¶ãŒã«ãã£ãŠãæ¿èªãã³ã¡ã³ããã€ããªãéãããã«ãªã¯ãšã¹ãã¯ããŒãžã§ããªããªããŸãã
ãªããžããªã®ownerãããã¯administratorã¯ãã¬ãã¥ãŒã³ã¡ã³ãããæ¿èªããããŠããªãããããä¿®æ£èŠæ±ãã³ã¡ã³ããæ®ããã¬ãã¥ã¯ãŒããã®organizationãé¢ãããããŠããŠãããã«ãªã¯ãšã¹ããããŒãžããããšãã§ããŸãã
ãå¿ é ã¬ãã¥ãŒã³ã¡ã³ããã«ã€ããŠ
ãªããžããªã®administratorã¯ãä¿è·ããããã©ã³ãïŒprotected branchïŒãæ©èœã䜿ãããšã§ãã©ããªãã«ãªã¯ãšã¹ãã§ãã£ãŠããããŒãžããããŸã§ã«æäœã§ã1ã€ã¯ãæ¿èªãã¬ãã¥ãŒã³ã¡ã³ããã€ããªãéãããŒãžã§ããªãããã«ããããšãå¯èœã§ãããã§ã«ãä¿®æ£èŠæãã³ã¡ã³ãã®ä»ãããã«ãªã¯ãšã¹ããååšããå Žåãä¿è·ããããã©ã³ãã«å¯ŸããŠãå¿ é ã¬ãã¥ãŒãã³ã¡ã³ããã€ããããšã¯ã§ããŸããã
ããã«è©³ãã
Reviewing proposed changes in a pull request
Enabling required reviews for pull requests
æ ç±ããã°ã©ã㌠èªã¿çµãã£ã
JavaScriptãã¶ã€ã³ãã¿ãŒã³ èªã¿çµãã£ã

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
å®è¡ç°å¢
npm: 3.9.5
karma: 0.13.10
æé
ãã¹ã察象ã®JavaScriptã³ãŒãããããã¯ãã¹ãã³ãŒãã§ãã¬ã€ã¯ãã€ã³ã貌ãããç®æã« debugger ãèšè¿°
--single-run=false ãªãã·ã§ã³ã远å ããŠkarmaãå®è¡
äŸ: $ karma start ./karma.conf.js --browsers=PhantomJS_custom --single-run=false
package.jsonã«scriptsãšããŠä¿åããŠãããšãnpm testãšãã£ãã·ã§ãŒãã«ããã§å®è¡ã§ããã®ã§æ¥œ
karmaã®ããã»ã¹ã«debuggerãåºããã®ã§ãhttp://localhost:9000/webkit/inspector/inspector.html?page=2 ãéã
Happy debugging!
åè: Debugging Karma Unit Tests
fetchãšCORSã«æœãçœ
Meguro.es #4ã§çºè¡šããè³æã§ã