ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããŠããã©ãŒãã³ã¹ãã¹ã±ãŒã©ããªãã£ãä¿å®æ§ãåäžãããããã®JavaScriptãã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ãããªãŒæé©åææ³ã解説ããŸãã
JavaScriptãã¬ãŒã ã¯ãŒã¯ã¢ãŒããã¯ãã£ïŒã³ã³ããŒãã³ãããªãŒã®æé©å
çŸä»£ã®Webéçºã®äžçã§ã¯ãReactãAngularãVue.jsãšãã£ãJavaScriptãã¬ãŒã ã¯ãŒã¯ãäž»æµãšãªã£ãŠããŸãããããã¯éçºè ãè€éã§ã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ¯èŒç容æã«æ§ç¯ããããšãå¯èœã«ããŸãããããã®ãã¬ãŒã ã¯ãŒã¯ã®äžå¿ã«ããã®ãã³ã³ããŒãã³ãããªãŒã§ãããããã¯ã¢ããªã±ãŒã·ã§ã³ã®UIå šäœã衚ãéå±€æ§é ã§ããããããã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ãè€éããå¢ãã«ã€ããŠãã³ã³ããŒãã³ãããªãŒã¯ããã©ãŒãã³ã¹ãä¿å®æ§ã«åœ±é¿ãäžããããã«ããã¯ã«ãªãå¯èœæ§ããããŸãããã®èšäºã§ã¯ãã³ã³ããŒãã³ãããªãŒã®æé©åãšããéèŠãªãããã¯ãæãäžããããããJavaScriptãã¬ãŒã ã¯ãŒã¯ã«é©çšå¯èœã§ãã°ããŒãã«ã«äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«èšèšãããæŠç¥ãšãã¹ããã©ã¯ãã£ã¹ãæäŸããŸãã
ã³ã³ããŒãã³ãããªãŒã®çè§£
æé©åæè¡ã«é£ã³èŸŒãåã«ããŸãã¯ã³ã³ããŒãã³ãããªãŒãã®ãã®ã«ã€ããŠã®çè§£ãæ·±ããŸãããããŠã§ããµã€ãããã«ãã£ã³ã°ãããã¯ã®éåäœã ãšæ³åããŠãã ãããåãã«ãã£ã³ã°ãããã¯ãã³ã³ããŒãã³ãã§ãããããã®ã³ã³ããŒãã³ãã¯äºãã«å ¥ãåã«ãªããã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªæ§é ãäœãåºããŸããäŸãã°ããããŠã§ããµã€ãã«ã¯ã«ãŒãã³ã³ããŒãã³ãïŒäŸïŒ`App`ïŒãããããã®äžã«`Header`ã`MainContent`ã`Footer`ãšãã£ãä»ã®ã³ã³ããŒãã³ããå«ãŸããŠãããããããŸããã`MainContent`ã¯ããã«`ArticleList`ã`Sidebar`ãšãã£ãã³ã³ããŒãã³ããå«ããããããŸããããã®å ¥ãåæ§é ãããªãŒã®ãããªæ§é ãã€ãŸãã³ã³ããŒãã³ãããªãŒãäœãåºããŸãã
JavaScriptãã¬ãŒã ã¯ãŒã¯ã¯ãå®éã®DOMã®ã¡ã¢ãªå 衚çŸã§ããä»®æ³DOMïŒDocument Object ModelïŒãå©çšããŸããã³ã³ããŒãã³ãã®ç¶æ ãå€åãããšããã¬ãŒã ã¯ãŒã¯ã¯ä»®æ³DOMã以åã®ããŒãžã§ã³ãšæ¯èŒããå®éã®DOMãæŽæ°ããããã«å¿ èŠãªæå°éã®å€æŽã»ãããç¹å®ããŸãããã®ããã»ã¹ã¯å調æŽïŒreconciliationïŒãšããŠç¥ãããããã©ãŒãã³ã¹ã«ãšã£ãŠéåžžã«éèŠã§ããããããéå¹çãªã³ã³ããŒãã³ãããªãŒã¯äžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ãããä»®æ³DOMã®å©ç¹ãæã¡æ¶ããŠããŸãå¯èœæ§ããããŸãã
æé©åã®éèŠæ§
ã³ã³ããŒãã³ãããªãŒã®æé©åã¯ãããã€ãã®çç±ããéåžžã«éèŠã§ãã
- ããã©ãŒãã³ã¹ã®åäžïŒé©åã«æé©åãããããªãŒã¯äžèŠãªåã¬ã³ããªã³ã°ãæžãããèªã¿èŸŒã¿æéã®ççž®ãšã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸããããã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé ãããŸãã¯æ§èœã®äœãããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãããããã¯äžçã®ã€ã³ã¿ãŒãããå©çšè ã®ããªãã®éšåãå ããçŸå®ã§ãã
- ã¹ã±ãŒã©ããªãã£ã®åŒ·åïŒã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ãè€éããå¢ããŠããæé©åãããã³ã³ããŒãã³ãããªãŒã¯ããã©ãŒãã³ã¹ã®äžè²«æ§ãä¿ã¡ãã¢ããªã±ãŒã·ã§ã³ãé ããªãã®ãé²ããŸãã
- ä¿å®æ§ã®åäžïŒæ§é åããæé©åãããããªãŒã¯ãçè§£ããããã°ãä¿å®ã容æã«ãªããéçºäžã«ããã©ãŒãã³ã¹ã®äœäžïŒãªã°ã¬ãã·ã§ã³ïŒãåŒãèµ·ããå¯èœæ§ãæžãããŸãã
- ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒå¿çæ§ãé«ãããã©ãŒãã³ã¹ã®è¯ãã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®æºè¶³åºŠãé«ãããšã³ã²ãŒãžã¡ã³ããšã³ã³ããŒãžã§ã³çã®åäžã«ã€ãªãããŸããããããªé å»¶ã売äžã®æå€±ã«ã€ãªããå¯èœæ§ãããEã³ããŒã¹ãµã€ããžã®åœ±é¿ãèããŠã¿ãŠãã ããã
æé©åã®ææ³
ããã§ã¯ãJavaScriptãã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ãããªãŒãæé©åããããã®å®è·µçãªãã¯ããã¯ãããã€ãèŠãŠãããŸãããã
1. ã¡ã¢åã«ããåã¬ã³ããªã³ã°ã®æå°å
ã¡ã¢åïŒMemoizationïŒã¯ãé«ã³ã¹ããªé¢æ°åŒã³åºãã®çµæããã£ãã·ã¥ããåãå ¥åãåã³çºçãããšãã«ãã£ãã·ã¥ãããçµæãè¿ããšãã匷åãªæé©åæè¡ã§ããã³ã³ããŒãã³ãã®æèã§ã¯ãã¡ã¢åã¯ã³ã³ããŒãã³ãã®propsã倿ŽãããŠããªãå Žåã«åã¬ã³ããªã³ã°ãé²ããŸãã
React: Reactã¯ã颿°ã³ã³ããŒãã³ããã¡ã¢åããããã®é«éã³ã³ããŒãã³ã`React.memo`ãæäŸããŸãã`React.memo`ã¯propsã®æµ ãæ¯èŒãè¡ããã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããå¿ èŠããããã©ããã倿ããŸãã
äŸïŒ
const MyComponent = React.memo(function MyComponent(props) {
// Component logic
return <div>{props.data}</div>;
});
ããè€éãªpropã®æ¯èŒã®ããã«ã`React.memo`ã®ç¬¬äºåŒæ°ãšããŠã«ã¹ã¿ã æ¯èŒé¢æ°ãæäŸããããšãã§ããŸãã
Angular: Angularã¯`OnPush`倿޿€ç¥æŠç¥ãå©çšããŸããããã¯ãå ¥åããããã£ã倿ŽããããããŸãã¯ã³ã³ããŒãã³ãèªäœããã€ãã³ããçºçããå Žåã«ã®ã¿ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããããã«Angularã«æç€ºããŸãã
äŸïŒ
import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent {
@Input() data: any;
}
Vue.js: Vue.jsã¯`memo`颿°ïŒVue 3ïŒãæäŸããäŸåé¢ä¿ãå¹ççã«è¿œè·¡ãããªã¢ã¯ãã£ãã·ã¹ãã ã䜿çšããŸããã³ã³ããŒãã³ãã®ãªã¢ã¯ãã£ããªäŸåé¢ä¿ã倿ŽããããšãVue.jsã¯èªåçã«ã³ã³ããŒãã³ããæŽæ°ããŸãã
äŸïŒ
<template>
<div>{{ data }}</div>
</template>
<script>
import { defineComponent } from 'vue';
export default defineComponent({
props: {
data: {
type: String,
required: true
}
}
});
</script>
ããã©ã«ãã§ã¯ãVue.jsã¯äŸåé¢ä¿ã®è¿œè·¡ã«åºã¥ããŠæŽæ°ãæé©åããŸããããã现ããå¶åŸ¡ã®ããã«ã¯ã`computed`ããããã£ã䜿çšããŠé«ã³ã¹ããªèšç®ãã¡ã¢åããããšãã§ããŸãã
2. äžèŠãªProp Drillingã®é²æ¢
Prop Drillingã¯ãäžéšã®ã³ã³ããŒãã³ããå®éã«ã¯ããŒã¿ãå¿ èŠãšããŠããªãã«ãããããããè€æ°ã®ã³ã³ããŒãã³ãå±€ãéããŠpropsãæž¡ãç¶ããå Žåã«çºçããŸããããã¯äžèŠãªåã¬ã³ããªã³ã°ã«ã€ãªãããã³ã³ããŒãã³ãããªãŒã®ä¿å®ãå°é£ã«ããå¯èœæ§ããããŸãã
Context API (React): Context APIã¯ãããªãŒã®ãã¹ãŠã®ã¬ãã«ãéããŠæåã§propsãæž¡ãããšãªããã³ã³ããŒãã³ãéã§ããŒã¿ãå ±æããæ¹æ³ãæäŸããŸããããã¯ãçŸåšã®èªèšŒæžã¿ãŠãŒã¶ãŒãããŒããåªå èšèªãªã©ãReactã³ã³ããŒãã³ãã®ããªãŒã«ãšã£ãŠãã°ããŒãã«ããšèŠãªãããããŒã¿ã«ç¹ã«äŸ¿å©ã§ãã
Services (Angular): Angularã¯ãã³ã³ããŒãã³ãéã§ããŒã¿ãšããžãã¯ãå ±æããããã«ãµãŒãã¹ã®äœ¿çšãæšå¥šããŠããŸãããµãŒãã¹ã¯ã·ã³ã°ã«ãã³ã§ãããã¢ããªã±ãŒã·ã§ã³å šäœã§ãµãŒãã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯1ã€ããååšããŸãããã³ã³ããŒãã³ãã¯ãµãŒãã¹ãæ³šå ¥ããŠå ±æããŒã¿ãã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãã
Provide/Inject (Vue.js): Vue.jsã¯ãReactã®Context APIã«äŒŒã`provide`ãš`inject`æ©èœãæäŸããŸãã芪ã³ã³ããŒãã³ããããŒã¿ã`provide`ã§ããä»»æã®åå«ã³ã³ããŒãã³ããã³ã³ããŒãã³ãéå±€ã«é¢ä¿ãªããã®ããŒã¿ã`inject`ã§ããŸãã
ãããã®ã¢ãããŒãã«ãããã³ã³ããŒãã³ãã¯äžéã³ã³ããŒãã³ãã«propsãæž¡ããŠãããããšã«é Œãããå¿ èŠãªããŒã¿ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã
3. é å»¶èªã¿èŸŒã¿ãšã³ãŒãåå²
é å»¶èªã¿èŸŒã¿ïŒLazy loadingïŒã¯ããã¹ãŠãäºåã«èªã¿èŸŒãã®ã§ã¯ãªããå¿ èŠãªãšãã«ã®ã¿ã³ã³ããŒãã³ããã¢ãžã¥ãŒã«ãèªã¿èŸŒãããšã§ããããã«ãããç¹ã«å€ãã®ã³ã³ããŒãã³ããæã€å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠãã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãããŸãã
ã³ãŒãåå²ïŒCode splittingïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããããå°ããªãã³ãã«ã«åå²ãããªã³ããã³ãã§èªã¿èŸŒããããã«ããããã»ã¹ã§ããããã«ãããåæJavaScriptãã³ãã«ã®ãµã€ãºãå°ãããªããåæèªã¿èŸŒã¿æéãççž®ãããŸãã
React: Reactã¯ãã³ã³ããŒãã³ããé å»¶èªã¿èŸŒã¿ããããã®`React.lazy`颿°ãšãã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ãã©ãŒã«ããã¯UIã衚瀺ããããã®`React.Suspense`ãæäŸããŸãã
äŸïŒ
const MyComponent = React.lazy(() => import('./MyComponent'));
function App() {
return (
<React.Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</React.Suspense>
);
}
Angular: Angularã¯ããã®ã«ãŒãã£ã³ã°ã¢ãžã¥ãŒã«ãéããŠé å»¶èªã¿èŸŒã¿ããµããŒãããŠããŸãããŠãŒã¶ãŒãç¹å®ã®ã«ãŒãã«ããã²ãŒããããšãã«ã®ã¿ã¢ãžã¥ãŒã«ãèªã¿èŸŒãããã«ã«ãŒããèšå®ã§ããŸãã
äŸïŒ`app-routing.module.ts`å ïŒïŒ
const routes: Routes = [
{ path: 'my-module', loadChildren: () => import('./my-module/my-module.module').then(m => m.MyModuleModule) }
];
Vue.js: Vue.jsã¯åçã€ã³ããŒãã«ããé å»¶èªã¿èŸŒã¿ããµããŒãããŠããŸãã`import()`颿°ã䜿çšããŠã³ã³ããŒãã³ããéåæã«èªã¿èŸŒãããšãã§ããŸãã
äŸïŒ
const MyComponent = () => import('./MyComponent.vue');
export default {
components: {
MyComponent
}
}
ã³ã³ããŒãã³ãã®é å»¶èªã¿èŸŒã¿ãšã³ãŒãåå²ã«ãããã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãå€§å¹ ã«æ¹åããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
4. å€§èŠæš¡ãªã¹ãã®ããã®ä»®æ³å
å€§èŠæš¡ãªããŒã¿ãªã¹ããã¬ã³ããªã³ã°ããéããã¹ãŠã®ãªã¹ãé ç®ãäžåºŠã«ã¬ã³ããªã³ã°ããã®ã¯éåžžã«éå¹çã§ããä»®æ³åïŒVirtualizationïŒãå¥åãŠã£ã³ããŠã€ã³ã°ïŒwindowingïŒã¯ãçŸåšãã¥ãŒããŒãã«è¡šç€ºãããŠããé ç®ã®ã¿ãã¬ã³ããªã³ã°ããæè¡ã§ãããŠãŒã¶ãŒãã¹ã¯ããŒã«ãããšããªã¹ãé ç®ãåçã«ã¬ã³ããªã³ã°ããã³ã¢ã³ã¬ã³ããªã³ã°ãããéåžžã«å€§ããªããŒã¿ã»ããã§ãã¹ã ãŒãºãªã¹ã¯ããŒã«äœéšãæäŸããŸãã
åãã¬ãŒã ã¯ãŒã¯ã§ä»®æ³åãå®è£ ããããã«å©çšã§ããã©ã€ãã©ãªãããã€ããããŸãã
- React: `react-window`, `react-virtualized`
- Angular: `@angular/cdk/scrolling`
- Vue.js: `vue-virtual-scroller`
ãããã®ã©ã€ãã©ãªã¯ãå€§èŠæš¡ãªãªã¹ããå¹ççã«ã¬ã³ããªã³ã°ããããã®æé©åãããã³ã³ããŒãã³ããæäŸããŸãã
5. ã€ãã³ããã³ãã©ã®æé©å
DOMå ã®èŠçŽ ã«ããŸãã«ãå€ãã®ã€ãã³ããã³ãã©ãã¢ã¿ããããããšããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã以äžã®æŠç¥ãæ€èšããŠãã ããã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒãããŠã³ã¹ãšã¹ããããªã³ã°ã¯ã颿°ã®å®è¡é »åºŠãå¶éããæè¡ã§ãããããŠã³ã¹ã¯ã颿°ãæåŸã«åŒã³åºãããŠããäžå®æéãçµéãããŸã§é¢æ°ã®å®è¡ãé å»¶ãããŸããã¹ããããªã³ã°ã¯ã颿°ãå®è¡ãããé »åºŠãå¶éããŸãããããã®æè¡ã¯ã`scroll`ã`resize`ã`input`ãªã©ã®ã€ãã³ããåŠçããã®ã«åœ¹ç«ã¡ãŸãã
- ã€ãã³ãå§è²ïŒã€ãã³ãå§è²ã¯ãåäžã®ã€ãã³ããªã¹ããŒã芪èŠçŽ ã«ã¢ã¿ãããããã®ãã¹ãŠã®åèŠçŽ ã®ã€ãã³ããåŠçããããšã§ããããã«ãããDOMã«ã¢ã¿ããããå¿ èŠãããã€ãã³ããªã¹ããŒã®æ°ãæžå°ããŸãã
6. äžå€ïŒImmutableïŒãªããŒã¿æ§é
äžå€ãªããŒã¿æ§é ã䜿çšãããšã倿Žã®æ€åºã容æã«ãªããããããã©ãŒãã³ã¹ãåäžããŸããããŒã¿ãäžå€ã§ããå ŽåãããŒã¿ãžã®ãããªã倿Žãæ¢åã®ãªããžã§ã¯ãã倿Žããã®ã§ã¯ãªããæ°ãããªããžã§ã¯ããäœæããŸããããã«ãããå€ããªããžã§ã¯ããšæ°ãããªããžã§ã¯ããåçŽã«æ¯èŒããã ãã§ãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããå¿ èŠããããã©ããã倿ãããããªããŸãã
Immutable.jsã®ãããªã©ã€ãã©ãªã¯ãJavaScriptã§äžå€ãªããŒã¿æ§é ãæ±ãã®ã«åœ¹ç«ã¡ãŸãã
7. ãããã¡ã€ãªã³ã°ãšã¢ãã¿ãªã³ã°
æåŸã«ãæœåšçãªããã«ããã¯ãç¹å®ããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããã¢ãã¿ãªã³ã°ããããšãäžå¯æ¬ ã§ããåãã¬ãŒã ã¯ãŒã¯ã¯ãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããã³ã¢ãã¿ãªã³ã°ããããã®ããŒã«ãæäŸããŠããŸãã
- React: React DevTools Profiler
- Angular: AuguryïŒéæšå¥šãChrome DevToolsã®Performanceã¿ãã䜿çšïŒ
- Vue.js: Vue Devtoolsã®Performanceã¿ã
ãããã®ããŒã«ã䜿çšãããšãã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°æéãèŠèŠåããæé©åã®äœå°ãããé åãç¹å®ã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã«ã³ã³ããŒãã³ãããªãŒãæé©åããéã«ã¯ãç°ãªãå°åããŠãŒã¶ãŒå±€ã«ãã£ãŠç°ãªãå¯èœæ§ã®ããèŠå ãèæ ®ããããšãéèŠã§ãã
- ãããã¯ãŒã¯æ¡ä»¶ïŒç°ãªãå°åã®ãŠãŒã¶ãŒã¯ãã€ã³ã¿ãŒãããé床ããããã¯ãŒã¯é å»¶ãç°ãªãå ŽåããããŸãããã³ãã«ãµã€ãºãæå°åããé å»¶èªã¿èŸŒã¿ã䜿çšããããŒã¿ãç©æ¥µçã«ãã£ãã·ã¥ããããšã§ãäœéãªãããã¯ãŒã¯æ¥ç¶åãã«æé©åããŸãã
- ããã€ã¹ã®èœåïŒãŠãŒã¶ãŒã¯ããã€ãšã³ãã®ã¹ããŒããã©ã³ããå€ããŠæ§èœã®äœãããã€ã¹ãŸã§ãããŸããŸãªããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããå¯èœæ§ããããŸããã³ã³ããŒãã³ãã®è€éããæžãããå®è¡ããå¿ èŠãããJavaScriptã®éãæå°éã«æããããšã§ãããŒãšã³ãã®ããã€ã¹åãã«æé©åããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ïŒã¢ããªã±ãŒã·ã§ã³ãç°ãªãèšèªãå°åã«é©åã«ããŒã«ã©ã€ãºãããŠããããšã確èªããŸããããã«ã¯ãããã¹ãã®ç¿»èš³ãæ¥ä»ãšæ°å€ã®ãã©ãŒããããããŸããŸãªç»é¢ãµã€ãºãåããžã®ã¬ã€ã¢ãŠãã®é©å¿ãå«ãŸããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒã¢ããªã±ãŒã·ã§ã³ãé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããããã«ã¯ãç»åã«ä»£æ¿ããã¹ããæäŸããããšãã»ãã³ãã£ãã¯HTMLã䜿çšããããšãã¢ããªã±ãŒã·ã§ã³ãããŒããŒãã§æäœå¯èœã§ããããšãä¿èšŒããããšãå«ãŸããŸãã
ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ãããäžçäžã®ãµãŒããŒã«é ä¿¡ããããšãæ€èšããŠãã ãããããã«ãããç°ãªãå°åã®ãŠãŒã¶ãŒã®é å»¶ãå€§å¹ ã«åæžã§ããŸãã
çµè«
ã³ã³ããŒãã³ãããªãŒã®æé©åã¯ã髿§èœã§ä¿å®æ§ã®é«ãJavaScriptãã¬ãŒã ã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§éèŠãªåŽé¢ã§ãããã®èšäºã§æŠèª¬ãããã¯ããã¯ãé©çšããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã匷åããã¢ããªã±ãŒã·ã§ã³ã广çã«ã¹ã±ãŒã«ããããšã確èªã§ããŸããæœåšçãªããã«ããã¯ãç¹å®ããæé©åæŠç¥ãç¶ç¶çã«æŽç·Žãããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã宿çã«ãããã¡ã€ãªã³ã°ããã¢ãã¿ãªã³ã°ããããšãå¿ããªãã§ãã ãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããŒãºã念é ã«çœ®ãããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠé«éã§å¿çæ§ãé«ããã¢ã¯ã»ã¹ããããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã