ãã¬ãŒã ã¯ãŒã¯ã䜿çšãããŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹æé©åã«é¢ããå æ¬çã¬ã€ããã°ããŒãã«ãªãŠã§ãéçºã®ããã®æŠç¥ããã¯ããã¯ããã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
ãŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãã¬ãŒã ã¯ãŒã¯ïŒæé©åæŠç¥ã®å®è£ ã¬ã€ã
ãŠã§ãã³ã³ããŒãã³ãã¯ãåå©çšå¯èœã§ä¿å®æ§ã®é«ãUIèŠçŽ ãæ§ç¯ããããã®åŒ·åãªããŒã«ã§ããæ©èœãšã¹ã¿ã€ãªã³ã°ãã«ãã»ã«åãããããè€éãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ããã¶ã€ã³ã·ã¹ãã ã«æé©ã§ããããããä»ã®æè¡ãšåæ§ã«ããŠã§ãã³ã³ããŒãã³ããæ£ããå®è£ ãããªããã°ããã©ãŒãã³ã¹ã®åé¡ã«æ©ãŸãããå¯èœæ§ããããŸãããã®ã¬ã€ãã§ã¯ãããŸããŸãªãã¬ãŒã ã¯ãŒã¯ãæŠç¥ãçšããŠãŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãæé©åããæ¹æ³ã«ã€ããŠå æ¬çã«æŠèª¬ããŸãã
ãŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ããã«ããã¯ãçè§£ãã
æé©åæè¡ã«é£ã³èŸŒãåã«ããŠã§ãã³ã³ããŒãã³ãã«é¢é£ããæœåšçãªããã©ãŒãã³ã¹ããã«ããã¯ãçè§£ããããšãéèŠã§ãããããã¯ããã€ãã®é åããçºçããå¯èœæ§ããããŸãïŒ
- åæèªã¿èŸŒã¿æéïŒ å€§èŠæš¡ãªã³ã³ããŒãã³ãã©ã€ãã©ãªã¯ãã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãå€§å¹ ã«å¢å ãããå¯èœæ§ããããŸãã
- ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ïŒ è€éãªã³ã³ããŒãã³ãæ§é ãé »ç¹ãªæŽæ°ã¯ããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãšã³ãžã³ã«è² è·ããããå¯èœæ§ããããŸãã
- ã¡ã¢ãªæ¶è²»éïŒ éå°ãªã¡ã¢ãªäœ¿çšã¯ãããã©ãŒãã³ã¹ã®äœäžããã©ãŠã¶ã®ã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸãã
- ã€ãã³ãåŠçïŒ éå¹çãªã€ãã³ããªã¹ããŒããã³ãã©ã¯ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãé ãããå¯èœæ§ããããŸãã
- ããŒã¿ãã€ã³ãã£ã³ã°ïŒ éå¹çãªããŒã¿ãã€ã³ãã£ã³ã°ã¡ã«ããºã ã¯ãäžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããå¯èœæ§ããããŸãã
é©åãªãã¬ãŒã ã¯ãŒã¯ã®éžæ
ãŠã§ãã³ã³ããŒãã³ãã®æ§ç¯ãšæé©åãæ¯æŽããããã€ãã®ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªããããŸããé©åãªãã®ãéžæãããã¯ãç¹å®ã®èŠä»¶ãšãããžã§ã¯ãã®èŠæš¡ã«äŸåããŸãã以äžã«äžè¬çãªéžæè¢ãããã€ã玹ä»ããŸãïŒ
- LitElementïŒ Googleã®LitElementïŒçŸåšã¯LitïŒã¯ãé«éã§è»œéãªãŠã§ãã³ã³ããŒãã³ããäœæããããã®è»œéãªåºæ¬ã¯ã©ã¹ã§ãããªã¢ã¯ãã£ãããããã£ãå¹ççãªã¬ã³ããªã³ã°ãç°¡åãªãã³ãã¬ãŒãæ§æãªã©ã®æ©èœãæäŸããŸãããã®å°ããªãããããªã³ãã¯ãããã©ãŒãã³ã¹ãéèŠãããã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
- StencilïŒ Ionic瀟ã®Stencilã¯ããŠã§ãã³ã³ããŒãã³ããçæããã³ã³ãã€ã©ã§ããããã©ãŒãã³ã¹ã«éç¹ã眮ããŠãããTypeScriptãšJSXã䜿çšããŠã³ã³ããŒãã³ããèšè¿°ã§ããŸããStencilã¯é å»¶èªã¿èŸŒã¿ãããªã¬ã³ããªã³ã°ãªã©ã®æ©èœããµããŒãããŠããŸãã
- FASTïŒ Microsoftã®FASTïŒæ§FAST ElementïŒã¯ãé床ã䜿ãããããçžäºéçšæ§ã«çŠç¹ãåœãŠããŠã§ãã³ã³ããŒãã³ãããŒã¹ã®UIãã¬ãŒã ã¯ãŒã¯ãšæè¡ã®ã³ã¬ã¯ã·ã§ã³ã§ããã³ã³ããŒãã³ãã®ããŒãèšå®ãã¹ã¿ã€ãªã³ã°ãå¹ççã«è¡ãã¡ã«ããºã ãæäŸããŸãã
- PolymerïŒ Polymerã¯åæã®ãŠã§ãã³ã³ããŒãã³ãã©ã€ãã©ãªã®1ã€ã§ãããããã®åŸç¶ã§ããLitã¯ããã©ãŒãã³ã¹ã®åäžãšãµã€ãºã®å°ãããããæ°ãããããžã§ã¯ãã«ã¯äžè¬çã«æšå¥šãããŸãã
- Vanilla JavaScriptïŒ ãã¬ãŒã ã¯ãŒã¯ãªãã§ãã¬ãŒã³ãªJavaScriptã䜿çšããŠãŠã§ãã³ã³ããŒãã³ããäœæããããšãã§ããŸããããã«ãããå®è£ ãå®å šã«å¶åŸ¡ã§ããŸãããããå€ãã®æäœæ¥ãå¿ èŠã«ãªããŸãã
äŸïŒLitElement
以äžã¯LitElementã§æ§ç¯ããããŠã§ãã³ã³ããŒãã³ãã®ç°¡åãªäŸã§ãïŒ
import { LitElement, html, css } from 'lit';
import { customElement, property } from 'lit/decorators.js';
@customElement('my-element')
export class MyElement extends LitElement {
static styles = css`
p {
color: blue;
}
`;
@property({ type: String })
name = 'World';
render() {
return html`Hello, ${this.name}!
`;
}
}
ãã®äŸã¯ãã¹ã¿ã€ãªã³ã°ããªã¢ã¯ãã£ãããããã£ãå«ãLitElementã³ã³ããŒãã³ãã®åºæ¬çãªæ§é ã瀺ããŠããŸãã
æé©åæŠç¥ãšãã¯ããã¯
ãã¬ãŒã ã¯ãŒã¯ãéžæãããããŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãåäžãããããã«æ§ã ãªæé©åæŠç¥ãå®è£ ã§ããŸãããããã®æŠç¥ã¯ã倧ãŸãã«æ¬¡ã®ããã«åé¡ã§ããŸãïŒ
1. åæèªã¿èŸŒã¿æéã®åæž
- ã³ãŒãåå²ïŒ ã³ã³ããŒãã³ãã©ã€ãã©ãªãããªã³ããã³ãã§èªã¿èŸŒããå°ããªãã£ã³ã¯ã«åå²ããŸããããã«ãããåæãã€ããŒããåæžãããäœæããã©ãŒãã³ã¹ãåäžããŸããStencilã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãã³ãŒãåå²ãçµã¿èŸŒã¿ã§ãµããŒãããŠããŸãã
- é
å»¶èªã¿èŸŒã¿ïŒ ãã¥ãŒããŒãã«è¡šç€ºããããšãã«ã®ã¿ã³ã³ããŒãã³ããèªã¿èŸŒã¿ãŸããããã«ãããããã«ã¯å¿
èŠãªãã³ã³ããŒãã³ãã®äžèŠãªèªã¿èŸŒã¿ãé²ããŸããã³ã³ããŒãã³ãå
ã®ç»åãiframeã«ã¯ãé©åãªå Žåã«
loading="lazy"屿§ã䜿çšããŸããIntersection Observerã䜿çšããŠã«ã¹ã¿ã ã®é å»¶èªã¿èŸŒã¿ã¡ã«ããºã ãå®è£ ããããšãã§ããŸãã - ããªãŒã·ã§ã€ãã³ã°ïŒ ã³ã³ããŒãã³ãã©ã€ãã©ãªããæªäœ¿çšã®ã³ãŒããåé€ããŸããWebpackãRollupã®ãããªææ°ã®ãã³ãã©ã¯ããã«ãããã»ã¹äžã«èªåçã«ãããã³ãŒããåé€ã§ããŸãã
- æå°åãšå§çž®ïŒ 空çœãã³ã¡ã³ããäžèŠãªæåãåé€ããŠãJavaScriptãCSSãHTMLãã¡ã€ã«ã®ãµã€ãºãçž®å°ããŸããTerserãGzipã®ãããªããŒã«ã䜿çšããŠã³ãŒããæå°åããå§çž®ããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒïŒ CDNã䜿çšããŠãã³ã³ããŒãã³ãã©ã€ãã©ãªãè€æ°ã®ãµãŒããŒã«åæ£ãããŸããããã«ããããŠãŒã¶ãŒã¯èªåã®æåšå°ã«è¿ããµãŒããŒããã³ã³ããŒãã³ããããŠã³ããŒãã§ããé å»¶ãæžå°ããŸããCloudflareãAkamaiã®ãããªäŒæ¥ãCDNãµãŒãã¹ãæäŸããŠããŸãã
- ããªã¬ã³ããªã³ã°ïŒ ã³ã³ããŒãã³ãã®åæHTMLããµãŒããŒäžã§ã¬ã³ããªã³ã°ããŸããããã«ãããåæèªã¿èŸŒã¿æéãšSEOããã©ãŒãã³ã¹ãåäžããŸããStencilã¯ããªã¬ã³ããªã³ã°ãæšæºã§ãµããŒãããŠããŸãã
äŸïŒIntersection Observerã«ããé å»¶èªã¿èŸŒã¿
class LazyLoadElement extends HTMLElement {
constructor() {
super();
this.observer = new IntersectionObserver(this.onIntersection.bind(this), { threshold: 0.2 });
}
connectedCallback() {
this.observer.observe(this);
}
disconnectedCallback() {
this.observer.unobserve(this);
}
onIntersection(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
this.loadContent();
this.observer.unobserve(this);
}
});
}
loadContent() {
// ããã§ã³ã³ããŒãã³ãã®ã³ã³ãã³ããèªã¿èŸŒã
this.innerHTML = 'ã³ã³ãã³ããèªã¿èŸŒãŸããŸããïŒ
'; // å®éã®ã³ã³ããŒãã³ãèªã¿èŸŒã¿ããžãã¯ã«çœ®ãæãã
}
}
customElements.define('lazy-load-element', LazyLoadElement);
ãã®äŸã¯ãIntersection Observerã䜿çšããŠãã³ã³ããŒãã³ãããã¥ãŒããŒãã«è¡šç€ºããããšãã«ã®ã¿ãã®ã³ã³ãã³ããèªã¿èŸŒãæ¹æ³ã瀺ããŠããŸãã
2. ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã®æé©å
- ä»®æ³DOMïŒ ä»®æ³DOMã䜿çšããŠãå®éã®DOMæŽæ°ã®æ°ãæå°éã«æããŸããLitElementã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãä»®æ³DOMã䜿çšããŠUIãå¹ççã«æŽæ°ããŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ã€ãã³ããã³ãã©ããããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°ããããšã§ãæŽæ°ã®é »åºŠãå¶éããŸããããã«ãããã€ãã³ããæ¥éã«ããªã¬ãŒããããšãã®äžèŠãªåã¬ã³ããªã³ã°ãé²ããŸãã
- Should Updateã©ã€ããµã€ã¯ã«ããã¯ïŒ ã³ã³ããŒãã³ãã®ããããã£ã倿ŽãããŠããªãå Žåã«äžèŠãªåã¬ã³ããªã³ã°ãé²ãããã«ã
shouldUpdateã©ã€ããµã€ã¯ã«ããã¯ãå®è£ ããŸãããã®ããã¯ã䜿çšãããšãã³ã³ããŒãã³ãããããã£ã®çŸåšå€ãšä»¥åã®å€ãæ¯èŒããæŽæ°ãå¿ èŠãªå Žåã«ã®ã¿trueãè¿ãããšãã§ããŸãã - ã€ãã¥ãŒã¿ãã«ããŒã¿ïŒ ã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é ã䜿çšããŠã倿޿€åºãããå¹ççã«ããŸããã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é ã«ãããã³ã³ããŒãã³ãã®çŸåšãšä»¥åã®ç¶æ ãç°¡åã«æ¯èŒããæŽæ°ãå¿ èŠãã©ããã倿ã§ããŸãã
- Web WorkersïŒ èšç®éã®å€ãã¿ã¹ã¯ãWeb Workerã«ãªãããŒãããŠãã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãé²ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããŸãã
- RequestAnimationFrameïŒ
requestAnimationFrameã䜿çšããŠUIã®æŽæ°ãã¹ã±ãžã¥ãŒã«ããŸããããã«ãããæŽæ°ããã©ãŠã¶ã®åæç»ãµã€ã¯ã«äžã«å®è¡ããããžã£ã³ã¯ïŒã«ã¯ã€ãïŒãé²ããŸãã - å¹ççãªãã³ãã¬ãŒããªãã©ã«ïŒ ã¬ã³ããªã³ã°ã«ãã³ãã¬ãŒããªãã©ã«ã䜿çšããå Žåããã³ãã¬ãŒãã®åçãªéšåã®ã¿ãåæŽæ°ã§åè©äŸ¡ãããããã«ããŸãããã³ãã¬ãŒãå ã§äžèŠãªæååé£çµãè€éãªåŒãé¿ããŠãã ããã
äŸïŒLitElementã«ãããShould Updateã©ã€ããµã€ã¯ã«ããã¯
import { LitElement, html, css } from 'lit';
import { customElement, property } from 'lit/decorators.js';
@customElement('my-element')
export class MyElement extends LitElement {
static styles = css`
p {
color: blue;
}
`;
@property({ type: String })
name = 'World';
@property({ type: Number })
count = 0;
shouldUpdate(changedProperties) {
// 'name'ããããã£ã倿Žãããå Žåã®ã¿æŽæ°ãã
return changedProperties.has('name');
}
render() {
return html`Hello, ${this.name}! Count: ${this.count}
`;
}
updated(changedProperties) {
console.log('æŽæ°ãããããããã£:', changedProperties);
}
}
ãã®äŸã§ã¯ãcount ããããã£ãæŽæ°ãããŠããã³ã³ããŒãã³ã㯠name ããããã£ã倿Žããããšãã«ã®ã¿åã¬ã³ããªã³ã°ãããŸãã
3. ã¡ã¢ãªæ¶è²»éã®åæž
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒ äžèŠãªãªããžã§ã¯ãã倿°ãäœæããªãããã«ããŸããäžèŠã«ãªã£ããªããžã§ã¯ããé©åã«ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããããã«ããŠãã ããã
- 匱ãåç §ïŒWeak ReferencesïŒïŒ DOMèŠçŽ ãžã®åç §ãæ ŒçŽããéã«ã¡ã¢ãªãªãŒã¯ãé¿ããããã«ã匱ãåç §ã䜿çšããŸãã匱ãåç §ã«ããããªããžã§ã¯ããžã®åç §ããŸã ååšããŠããŠããã¬ããŒãžã³ã¬ã¯ã¿ãã¡ã¢ãªãè§£æŸã§ããããã«ãªããŸãã
- ãªããžã§ã¯ãããŒãªã³ã°ïŒ æ°ãããªããžã§ã¯ããäœæãã代ããã«ããªããžã§ã¯ããåå©çšããŸããããã«ãããã¡ã¢ãªå²ãåœãŠãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããå€§å¹ ã«åæžã§ããŸãã
- DOMæäœã®æå°åïŒ DOMæäœã¯ã¡ã¢ãªãšããã©ãŒãã³ã¹ã®èгç¹ããã³ã¹ããããããããé »ç¹ãªDOMæäœã¯é¿ããŠãã ãããå¯èœãªéãDOMã®æŽæ°ããããåŠçããŸãã
- ã€ãã³ããªã¹ããŒã®ç®¡çïŒ ã€ãã³ããªã¹ããŒãæ éã«ç®¡çããŸããäžèŠã«ãªã£ãã€ãã³ããªã¹ããŒã¯åé€ããŠãã¡ã¢ãªãªãŒã¯ãé²ããŸãã
4. ã€ãã³ãåŠçã®æé©å
- ã€ãã³ãããªã²ãŒã·ã§ã³ïŒ åã ã®åèŠçŽ ã«ã€ãã³ããªã¹ããŒãã¢ã¿ãããã代ããã«ã芪èŠçŽ ã«ã€ãã³ããªã¹ããŒãã¢ã¿ããããã€ãã³ãããªã²ãŒã·ã§ã³ã䜿çšããŸããããã«ãããã€ãã³ããªã¹ããŒã®æ°ãæžããããã©ãŒãã³ã¹ãåäžããŸãã
- ããã·ãã€ãã³ããªã¹ããŒïŒ ã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãåäžãããããã«ãããã·ãã€ãã³ããªã¹ããŒã䜿çšããŸããããã·ãã€ãã³ããªã¹ããŒã¯ãã€ãã³ããªã¹ããŒãã€ãã³ãã®ããã©ã«ãã®åäœã劚ããªãããšããã©ãŠã¶ã«äŒãããã©ãŠã¶ãã¹ã¯ããŒã«ãæé©åã§ããããã«ããŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ åè¿°ã®éãããããŠã³ã¹ãšã¹ããããªã³ã°ã¯ãã€ãã³ããã³ãã©ã®å®è¡é »åºŠãå¶éããããšã§ãã€ãã³ãåŠçã®æé©åã«ã䜿çšã§ããŸãã
äŸïŒã€ãã³ãããªã²ãŒã·ã§ã³
<ul id="my-list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script>
const list = document.getElementById('my-list');
list.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('ã¯ãªãã¯ãããã¢ã€ãã :', event.target.textContent);
}
});
</script>
ãã®äŸã§ã¯ãåäžã®ã€ãã³ããªã¹ããŒã ul èŠçŽ ã«ã¢ã¿ãããããã€ãã³ããã³ãã©ã¯ã¯ãªãã¯ãããèŠçŽ ã li èŠçŽ ã§ãããã©ããããã§ãã¯ããŸããããã«ãããå li èŠçŽ ã«åå¥ã®ã€ãã³ããªã¹ããŒãã¢ã¿ããããã®ãé¿ããããšãã§ããŸãã
5. ããŒã¿ãã€ã³ãã£ã³ã°ã®æé©å
- å¹ççãªããŒã¿æ§é ïŒ ããŒã¿ã®ä¿åãšç®¡çã«ã¯å¹ççãªããŒã¿æ§é ã䜿çšããŸããæ±ã£ãŠããããŒã¿ã®çš®é¡ãšå®è¡ããå¿ èŠã®ããæäœã«é©ããããŒã¿æ§é ãéžæããŠãã ããã
- ã¡ã¢åïŒ ã³ã¹ãã®é«ãèšç®ã®çµæããã£ãã·ã¥ããããã«ã¡ã¢åã䜿çšããŸããããã«ãããåãå ¥åãè€æ°åæäŸãããå Žåã®äžèŠãªåèšç®ãé²ããŸãã
- Track ByïŒ ããŒã¿ã®ãªã¹ããã¬ã³ããªã³ã°ããéã«ã¯ã
trackBy颿°ã䜿çšããŠãªã¹ãå ã®åã¢ã€ãã ãäžæã«èå¥ããŸããããã«ããããªã¹ãã倿Žããããšãã«ãã©ãŠã¶ãå¹ççã«DOMãæŽæ°ã§ããŸããå€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãäžæã®IDãå²ãåœãŠãããšãªã©ã§ãã¢ã€ãã ãå¹ççã«è¿œè·¡ããã¡ã«ããºã ãæäŸããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ããã©ãŒãã³ã¹ã®æé©åã¯ãã¢ã¯ã»ã·ããªãã£ãç ç²ã«ããŠã¯ãªããŸããã以äžã®ã¬ã€ãã©ã€ã³ã«åŸã£ãŠããŠã§ãã³ã³ããŒãã³ããé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããïŒ
- ã»ãã³ãã£ãã¯HTMLïŒ ã»ãã³ãã£ãã¯HTMLèŠçŽ ã䜿çšããŠãã³ã³ãã³ãã«æå³ãšæ§é ãæäŸããŸãã
- ARIA屿§ïŒ ARIA屿§ã䜿çšããŠãã³ã³ããŒãã³ãã®åœ¹å²ãç¶æ ãããããã£ã«é¢ããè¿œå æ å ±ãæäŸããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒ ã³ã³ããŒãã³ããããŒããŒãã䜿çšããŠå®å šã«æäœå¯èœã§ããããšã確èªããŸãã
- ã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ïŒ ã³ã³ããŒãã³ããæ£ããèªã¿äžããããããšã確èªããããã«ãã¹ã¯ãªãŒã³ãªãŒããŒã§ãã¹ãããŸãã
- è²ã®ã³ã³ãã©ã¹ãïŒ ã³ã³ããŒãã³ãã®è²ã®ã³ã³ãã©ã¹ããã¢ã¯ã»ã·ããªãã£åºæºãæºãããŠããããšã確èªããŸãã
åœéåïŒi18nïŒ
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ãŠã§ãã³ã³ããŒãã³ããæ§ç¯ããéã«ã¯ãåœéåãèæ ®ããŠãã ããã以äžã¯ãäž»èŠãªi18nã®èæ ®äºé ã§ãïŒ
- ããã¹ãã®æ¹åïŒ å·Šããå³ïŒLTRïŒãšå³ããå·ŠïŒRTLïŒã®äž¡æ¹ã®ããã¹ãæ¹åããµããŒãããŸãã
- æ¥ä»ãšæå»ã®ãã©ãŒãããïŒ ãã±ãŒã«åºæã®æ¥ä»ãšæå»ã®ãã©ãŒãããã䜿çšããŸãã
- æ°å€ã®ãã©ãŒãããïŒ ãã±ãŒã«åºæã®æ°å€ãã©ãŒãããã䜿çšããŸãã
- é貚ã®ãã©ãŒãããïŒ ãã±ãŒã«åºæã®é貚ãã©ãŒãããã䜿çšããŸãã
- ç¿»èš³ïŒ ã³ã³ããŒãã³ãå ã®ãã¹ãŠã®ããã¹ãã®ç¿»èš³ãæäŸããŸãã
- è€æ°åœ¢ïŒ ç°ãªãèšèªã«å¯ŸããŠè€æ°åœ¢ãæ£ããåŠçããŸãã
äŸïŒæ°å€ãã©ãŒãããã®ããã®Intl APIã®äœ¿çš
const number = 1234567.89;
const locale = 'de-DE'; // ãã€ãã®ãã±ãŒã«
const formatter = new Intl.NumberFormat(locale, {
style: 'currency',
currency: 'EUR',
});
const formattedNumber = formatter.format(number);
console.log(formattedNumber); // åºå: 1.234.567,89 â¬
ãã®äŸã¯ãIntl.NumberFormat APIã䜿çšããŠããã€ãã®ãã±ãŒã«ã«åŸã£ãŠæ°å€ããã©ãŒãããããæ¹æ³ã瀺ããŠããŸãã
ãã¹ããšã¢ãã¿ãªã³ã°
宿çãªãã¹ããšã¢ãã¿ãªã³ã°ã¯ãããã©ãŒãã³ã¹ã®åé¡ãç¹å®ãã察åŠããããã«äžå¯æ¬ ã§ãã以äžã®ããŒã«ãšãã¯ããã¯ã䜿çšããŠãã ããïŒ
- ããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ïŒ ãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããŸããããã«ããã¯ãšæé©åã®äœå°ãããé åãç¹å®ããŸãã
- è² è·ãã¹ãïŒ å€æ°ã®ãŠãŒã¶ãŒãã·ãã¥ã¬ãŒãããŠãè² è·ãããã£ãç¶æ ã§ã®ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ããã¹ãããŸãã
- èªåãã¹ãïŒ èªåãã¹ãã䜿çšããŠã倿Žãå ããããåŸãã³ã³ããŒãã³ããè¯å¥œãªããã©ãŒãã³ã¹ãç¶æããããšã確èªããŸããWebdriverIOãCypressã®ãããªããŒã«ã¯ããŠã§ãã³ã³ããŒãã³ãã®ãšã³ãããŒãšã³ããã¹ãã«äœ¿çšã§ããŸãã
- ãªã¢ã«ãŠãŒã¶ãŒã¢ãã¿ãªã³ã°ïŒRUMïŒïŒ å®éã®ãŠãŒã¶ãŒããããã©ãŒãã³ã¹ããŒã¿ãåéããçŸå Žã§ã®ããã©ãŒãã³ã¹åé¡ãç¹å®ããŸãã
- ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒïŒ ããã©ãŒãã³ã¹ãã¹ããCIãã€ãã©ã€ã³ã«çµ±åããŠãããã©ãŒãã³ã¹ã®äœäžãæ©æã«çºèŠããŸãã
çµè«
ãŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãæé©åããããšã¯ãé«éã§å¿çæ§ã®é«ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããæœåšçãªããã©ãŒãã³ã¹ã®ããã«ããã¯ãçè§£ããé©åãªãã¬ãŒã ã¯ãŒã¯ãéžæãããã®ã¬ã€ãã§æŠèª¬ããæé©åæŠç¥ãå®è£ ããããšã§ããŠã§ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ã³ã³ããŒãã³ããæ§ç¯ããéã¯ãã¢ã¯ã»ã·ããªãã£ãšåœéåãèæ ®ããããã©ãŒãã³ã¹ã®åé¡ãç¹å®ããŠå¯ŸåŠããããã«å®æçã«ã³ã³ããŒãã³ãããã¹ãããã³ç£èŠããããšãå¿ããªãã§ãã ããã
ãããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãåå©çšå¯èœã§ä¿å®æ§ãé«ãã ãã§ãªããããã©ãŒãã³ã¹ãé«ãããã¹ãŠã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ãããŠã§ãã³ã³ããŒãã³ããäœæã§ããŸãã