Webã¢ããªã®é«åºŠãªãã«ãã¹ã¯ãªãŒã³ç®¡çãå®çŸããããã³ããšã³ããã¬ãŒã³ããŒã·ã§ã³API飿ºãšã³ãžã³ãè€æ°ã®ãã£ã¹ãã¬ã€ã§é åçãã€åæããäœéšãæ§ç¯ããæ¹æ³ã解説ããŸãã
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³API 飿ºãšã³ãžã³ïŒãã«ãã¹ã¯ãªãŒã³ç®¡ç
仿¥ã®çžäºæ¥ç¶ãããäžçã§ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã¯ãã¯ãåäžã®ç»é¢ã«éå®ãããŸãããã€ã³ã¿ã©ã¯ãã£ããªããžã¿ã«ãµã€ããŒãžãããå ±åäœæ¥ãè¡ãäŒè°å®€ãæ²¡å ¥åã®ã²ãŒã äœéšãŸã§ããã«ãã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ã®éèŠã¯æ¥éã«é«ãŸã£ãŠããŸããããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³APIã¯ãéçºè ã«æŽç·Žããããã«ãã¹ã¯ãªãŒã³äœéšãæ§ç¯ããããã®ããŒã«ãæäŸããé©åã«èšèšããã飿ºãšã³ãžã³ã¯ãè€éãã管çããã·ãŒã ã¬ã¹ãªåæã確ä¿ããããã«äžå¯æ¬ ã§ãã
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³APIãšã¯ïŒ
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³APIã¯ãäž»ã«Google ChromeãMicrosoft Edgeãªã©ã®ChromiumããŒã¹ã®ãã©ãŠã¶ã§ãµããŒããããŠãããWebã¢ããªã±ãŒã·ã§ã³ãã»ã«ã³ããªãã£ã¹ãã¬ã€äžã§ãã¬ãŒã³ããŒã·ã§ã³ãéå§ãã管çããããšãå¯èœã«ããŸããããã¯ãWebããŒãžããããžã§ã¯ã¿ãŒãã¹ããŒãTVããããã¯åãããã€ã¹ããããã¯ãŒã¯ã«æ¥ç¶ãããå¥ã®ã³ã³ãã¥ãŒã¿ãŒã¢ãã¿ãŒãªã©ãä»ã®ç»é¢äžã®ã³ã³ãã³ããå¶åŸ¡ããããã®æšæºåãããæ¹æ³ãšèããããšãã§ããŸãããã®APIã¯ã以äžã®ããã®ã¡ã«ããºã ãæäŸããŸãïŒ
- å©çšå¯èœãªãã£ã¹ãã¬ã€ã®çºèŠïŒ å©çšå¯èœãªãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ãæ€åºã»åæããŸãã
- ãã¬ãŒã³ããŒã·ã§ã³ã®èŠæ±ïŒ éžæãããã£ã¹ãã¬ã€äžã§ãã¬ãŒã³ããŒã·ã§ã³ãéå§ããŸãã
- ãã¬ãŒã³ããŒã·ã§ã³ã®å¶åŸ¡ïŒ ã³ã³ãã³ãã®æŽæ°ãããã²ãŒã·ã§ã³ããã®ä»ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã«ããã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ã«ã¡ãã»ãŒãžãã³ãã³ããéä¿¡ããŸãã
- ãã¬ãŒã³ããŒã·ã§ã³ã®ã©ã€ããµã€ã¯ã«ç®¡çïŒ ãã¬ãŒã³ããŒã·ã§ã³ã®æ¥ç¶ãåæããšã©ãŒãªã©ã®ã€ãã³ããåŠçããŸãã
ãã¬ãŒã³ããŒã·ã§ã³APIã¯åºæ¬çãªæ§æèŠçŽ ãæäŸããŸãããè€éãªãã«ãã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ã管çããã«ã¯ãããæŽç·Žãããã¢ãŒããã¯ãã£ãã€ãŸã飿ºãšã³ãžã³ãå¿ èŠã§ãã
飿ºãšã³ãžã³ã®å¿ èŠæ§
Webã¢ããªã±ãŒã·ã§ã³ã3ã€ã®ç»é¢ïŒçºè¡šè çšã®ã¡ã€ã³ãã£ã¹ãã¬ã€ãèŽè¡èŠèŽçšã®ã»ã«ã³ããªãã£ã¹ãã¬ã€ãã€ã³ã¿ã©ã¯ãã£ããªæç¥šçšã®ãµãŒããã£ã¹ãã¬ã€ïŒã«ããã£ãŠãã¬ãŒã³ããŒã·ã§ã³ãå¶åŸ¡ããã·ããªãªãæ³åããŠã¿ãŠãã ãããäžå€®éæš©çãªé£æºã¡ã«ããºã ããªããã°ããããã®ç»é¢éã§ã³ã³ãã³ããšåæã管çããããšã¯éåžžã«å°é£ã«ãªããŸããå ç¢ãªé£æºãšã³ãžã³ã¯ãããã€ãã®äž»èŠãªèª²é¡ã«å¯ŸåŠããŸãïŒ
- ç¶æ 管çïŒ ãã¹ãŠã®ãã£ã¹ãã¬ã€ã§äžè²«ããç¶æ ãç¶æããåç»é¢ãé©åãªã¿ã€ãã³ã°ã§æ£ããæ å ±ãåæ ããããã«ããŸãã
- ã¡ãã»ãŒãžã«ãŒãã£ã³ã°ïŒ å¶åŸ¡ã¢ããªã±ãŒã·ã§ã³ãšãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€éã§ã¡ãã»ãŒãžãå¹ççã«ã«ãŒãã£ã³ã°ããç°ãªãã¡ãã»ãŒãžã¿ã€ããåªå 床ãåŠçããŸãã
- åæïŒ ã³ã³ãã³ãã®æŽæ°ãã¢ã¯ã·ã§ã³ããã¹ãŠã®ãã£ã¹ãã¬ã€ã§åæãããããã«ããé å»¶ãæå°éã«æããäžæŽåãé²ããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ ãšã©ãŒãåæãé©åã«åŠçãããã©ãŒã«ããã¯ã¡ã«ããºã ãæäŸãããŠãŒã¶ãŒã«ãã¬ãŒã³ããŒã·ã§ã³ã®ç¶æ³ãéç¥ããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ ããã©ãŒãã³ã¹ãæãªãããšãªããå¢ãç¶ãããã£ã¹ãã¬ã€ããŠãŒã¶ãŒã«å¯Ÿå¿ã§ããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããŸãã
- ã¢ãžã¥ãŒã«æ§ãšä¿å®æ§ïŒ ã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«åããæŽçãããç¶æ ã«ä¿ã€ããšã§ãä¿å®ãæŽæ°ãæ¡åŒµã容æã«ããŸãã
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³API 飿ºãšã³ãžã³ã®äž»èŠã³ã³ããŒãã³ã
é©åã«èšèšããã飿ºãšã³ãžã³ã¯ãéåžžã以äžã®äž»èŠãªã³ã³ããŒãã³ãã§æ§æãããŸãïŒ
1. ãã£ã¹ãã¬ã€ãããŒãžã£ãŒ
ãã£ã¹ãã¬ã€ãããŒãžã£ãŒã¯ããã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ã®çºèŠãæ¥ç¶ã管çãæ åœããŸãããã¬ãŒã³ããŒã·ã§ã³APIãå©çšããŠãå©çšå¯èœãªãã£ã¹ãã¬ã€ãåæããæ¥ç¶ã確ç«ããŸãããã®è²¬åã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ãã£ã¹ãã¬ã€ã®çºèŠïŒ
navigator.presentation.getAvailability()
ã䜿çšããŠãå©çšå¯èœãªãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ãæ€åºããŸãã - ãã¬ãŒã³ããŒã·ã§ã³èŠæ±ïŒ
navigator.presentation.requestPresent()
ã䜿çšããŠããã¬ãŒã³ããŒã·ã§ã³ã»ãã·ã§ã³ãèŠæ±ããŸãã - æ¥ç¶ç®¡çïŒ
connect
ãdisconnect
ãterminate
ã€ãã³ããåŠçããŠãåãã£ã¹ãã¬ã€ã®ç¶æ ãç¶æããŸãã - ãšã©ãŒãã³ããªã³ã°ïŒ ãã£ã¹ãã¬ã€ã®æ¥ç¶ãšéä¿¡ã«é¢é£ãããšã©ãŒããã£ããããŠåŠçããŸãã
ã³ãŒãäŸïŒæŠå¿µïŒïŒ
class DisplayManager {
constructor() {
this.displays = [];
this.availability = navigator.presentation.getAvailability();
this.availability.onchange = this.updateAvailability.bind(this);
}
async requestPresentation() {
try {
const connection = await navigator.presentation.requestPresent(['presentation.html']);
this.displays.push(connection);
connection.onmessage = this.handleMessage.bind(this);
connection.onclose = this.handleDisconnect.bind(this);
} catch (error) {
console.error('ãã¬ãŒã³ããŒã·ã§ã³èŠæ±ã«å€±æããŸããïŒ', error);
}
}
updateAvailability(event) {
console.log('ãã¬ãŒã³ããŒã·ã§ã³ã®å©çšå¯èœæ§ã倿ŽãããŸããïŒ', event.value);
}
handleMessage(event) {
// ãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ããã®ã¡ãã»ãŒãžãåŠç
console.log('åä¿¡ã¡ãã»ãŒãžïŒ', event.data);
}
handleDisconnect(event) {
// ãã£ã¹ãã¬ã€ã®åæãåŠç
console.log('ãã£ã¹ãã¬ã€ãåæãããŸããïŒ', event);
}
}
2. ã¡ãã»ãŒãžã«ãŒã¿ãŒ
ã¡ãã»ãŒãžã«ãŒã¿ãŒã¯ãå¶åŸ¡ã¢ããªã±ãŒã·ã§ã³ãšãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€éã®ã¡ãã»ãŒãžã®ã«ãŒãã£ã³ã°ãæ åœããŸããéä¿¡ã®äžå€®ãããšããŠæ©èœããã¡ãã»ãŒãžãæ£ããå®å ã«é ä¿¡ãããé©åã«åŠçãããããšãä¿èšŒããŸããã¡ãã»ãŒãžã«ãŒã¿ãŒã®äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãïŒ
- ã¡ãã»ãŒãžåŠçïŒ æ§ã ãªãœãŒã¹ïŒãŠãŒã¶ãŒå ¥åãAPIåŒã³åºããä»ã®ã¢ãžã¥ãŒã«ïŒããã¡ãã»ãŒãžãåä¿¡ããåŠçããŸãã
- ã¡ãã»ãŒãžã«ãŒãã£ã³ã°ïŒ åã¡ãã»ãŒãžã®é©åãªå®å ïŒç¹å®ã®ãã£ã¹ãã¬ã€ããã¹ãŠã®ãã£ã¹ãã¬ã€ããã£ã¹ãã¬ã€ã®ã°ã«ãŒãïŒã決å®ããŸãã
- ã¡ãã»ãŒãžãã©ãŒãããïŒ ã¡ãã»ãŒãžãéä¿¡ã«é©ãã圢åŒïŒäŸïŒJSONã·ãªã¢ã©ã€ãºïŒã«ãªã£ãŠããããšã確èªããŸãã
- ã¡ãã»ãŒãžãã¥ãŒã€ã³ã°ïŒ ã¡ãã»ãŒãžã®ãã¥ãŒã管çããç¹ã«ãã©ãã£ãã¯ãå€ãã·ããªãªã§æ£ããé åºã§é ä¿¡ãããããã«ããŸãã
- åªå é äœä»ãïŒ ã¡ãã»ãŒãžã®éèŠåºŠã«åºã¥ããŠåªå é äœãä»ããŸãïŒäŸïŒéèŠã§ãªãæŽæ°ã®åã«éèŠãªæŽæ°ãé ä¿¡ããïŒã
ã³ãŒãäŸïŒæŠå¿µïŒïŒ
class MessageRouter {
constructor() {
this.routes = {};
}
registerRoute(messageType, handler) {
this.routes[messageType] = handler;
}
routeMessage(message) {
const handler = this.routes[message.type];
if (handler) {
handler(message);
} else {
console.warn('ã¡ãã»ãŒãžã¿ã€ãã«ãã³ãã©ãŒãç»é²ãããŠããŸããïŒ', message.type);
}
}
sendMessage(displayConnection, message) {
displayConnection.postMessage(JSON.stringify(message));
}
}
3. ã¹ããŒããããŒãžã£ãŒ
ã¹ããŒããããŒãžã£ãŒã¯ããã¹ãŠã®ãã£ã¹ãã¬ã€ã§äžè²«ããç¶æ ãç¶æãã責任ããããŸããã¢ããªã±ãŒã·ã§ã³ããŒã¿ã®ä¿¡é Œã§ããå¯äžã®æ å ±æºïŒSingle Source of TruthïŒãšããŠæ©èœãããã¹ãŠã®ãã£ã¹ãã¬ã€ãçŸåšã®ç¶æ ãšåæãããããšãä¿èšŒããŸããã¹ããŒããããŒãžã£ãŒã®äž»ãªè²¬åã¯æ¬¡ã®ãšããã§ãïŒ
- ç¶æ ã®ä¿åïŒ ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãäžå€®ã®å ŽæïŒäŸïŒJavaScriptãªããžã§ã¯ããReduxã¹ãã¢ãããŒã¿ããŒã¹ïŒã«ä¿åããŸãã
- ç¶æ ã®æŽæ°ïŒ æ§ã ãªãœãŒã¹ïŒãŠãŒã¶ãŒå ¥åãAPIåŒã³åºããä»ã®ã¢ãžã¥ãŒã«ïŒããã®ç¶æ æŽæ°ãåŠçããŸãã
- ç¶æ ã®åæïŒ æ¥ç¶ãããŠãããã¹ãŠã®ãã£ã¹ãã¬ã€ã«ç¶æ ã®æŽæ°ããããŒããã£ã¹ããããããããã¹ãŠææ°ã®ç¶æ ãšåæãããããã«ããŸãã
- ããŒã¿ã®äžè²«æ§ïŒ ãããã¯ãŒã¯ãšã©ãŒãåæãçºçããå Žåã§ãããã¹ãŠã®ãã£ã¹ãã¬ã€ã§ããŒã¿ã®äžè²«æ§ã確ä¿ããŸãã
- ããŒãžã§ãã³ã°ïŒ ããŒãžã§ã³ç®¡çã·ã¹ãã ãå®è£ ããŠç¶æ ã®å€æŽã远跡ããå¿ èŠãªå Žåã«ã®ã¿ãã£ã¹ãã¬ã€ãå¹ççã«æŽæ°ããŸãã
ã³ãŒãäŸïŒæŠå¿µ - ã·ã³ãã«ãªãªããžã§ã¯ãã䜿çšïŒïŒ
class StateManager {
constructor() {
this.state = {};
this.listeners = [];
}
subscribe(listener) {
this.listeners.push(listener);
return () => {
this.listeners = this.listeners.filter(l => l !== listener);
};
}
getState() {
return this.state;
}
setState(newState) {
this.state = { ...this.state, ...newState };
this.listeners.forEach(listener => listener(this.state));
}
}
4. ã³ã³ãã³ãã¬ã³ãã©ãŒ
ã³ã³ãã³ãã¬ã³ãã©ãŒã¯ãåç»é¢ã«è¡šç€ºãããã³ã³ãã³ããçæãã責任ããããŸããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãå ¥åãšããŠåãåããã³ã³ãã³ããã¬ã³ããªã³ã°ããããã®é©åãªHTMLãCSSãJavaScriptã³ãŒããçæããŸããã³ã³ãã³ãã¬ã³ãã©ãŒã®äž»ãªè²¬åã¯æ¬¡ã®ãšããã§ãïŒ
- ãã³ãã¬ãŒã管çïŒ ããŸããŸãªã¿ã€ãã®ã³ã³ãã³ãïŒäŸïŒã¹ã©ã€ãããã£ãŒãããããªïŒã®ãã³ãã¬ãŒãã管çããŸãã
- ããŒã¿ãã€ã³ãã£ã³ã°ïŒ ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãããã³ãã¬ãŒãã«ããŒã¿ããã€ã³ãããŸãã
- ã³ã³ãã³ãçæïŒ åç»é¢ã®æçµçãªHTMLãCSSãJavaScriptã³ãŒããçæããŸãã
- æé©åïŒ ããã©ãŒãã³ã¹ã®ããã«ã³ã³ãã³ããæé©åããåãã£ã¹ãã¬ã€ã§è¿ éãã€å¹ççã«ã¬ã³ããªã³ã°ãããããã«ããŸãã
- é©å¿æ§ïŒ ç»é¢ãµã€ãºãè§£å床ããã£ã¹ãã¬ã€ã®èœåã«åºã¥ããŠã³ã³ãã³ãã®ã¬ã³ããªã³ã°ãé©å¿ãããŸãã
ã³ãŒãäŸïŒæŠå¿µ - ã·ã³ãã«ãªãã³ãã¬ãŒããšã³ãžã³ã䜿çšïŒïŒ
class ContentRenderer {
constructor() {
this.templates = {};
}
registerTemplate(templateName, templateFunction) {
this.templates[templateName] = templateFunction;
}
render(templateName, data) {
const template = this.templates[templateName];
if (template) {
return template(data);
} else {
console.warn('ãã³ãã¬ãŒããç»é²ãããŠããŸããïŒ', templateName);
return '';
}
}
}
// ãã³ãã¬ãŒã颿°ã®äŸ
const slideTemplate = (data) => `
`;
5. ãšã©ãŒãã³ãã©ãŒ
ãšã©ãŒãã³ãã©ãŒã¯ãå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãæäŸããããã®éèŠãªã³ã³ããŒãã³ãã§ãããã¬ãŒã³ããŒã·ã§ã³äžã«çºçãããšã©ãŒïŒãããã¯ãŒã¯ãšã©ãŒããã£ã¹ãã¬ã€ã®åæãç¡å¹ãªããŒã¿ãªã©ïŒããã£ããããŠåŠçãã責任ããããŸãããšã©ãŒãã³ãã©ãŒã®äž»ãªè²¬åã¯æ¬¡ã®ãšããã§ãïŒ
- ãšã©ãŒæ€åºïŒ æ§ã ãªãœãŒã¹ïŒãã£ã¹ãã¬ã€ãããŒãžã£ãŒãã¡ãã»ãŒãžã«ãŒã¿ãŒãã¹ããŒããããŒãžã£ãŒãã³ã³ãã³ãã¬ã³ãã©ãŒïŒããã®ãšã©ãŒããã£ããããŸãã
- ãšã©ãŒãã®ã³ã°ïŒ ãããã°ãšåæã®ããã«ãšã©ãŒããã°ã«èšé²ããŸãã
- ãŠãŒã¶ãŒãžã®éç¥ïŒ ãšã©ãŒã«ã€ããŠæç¢ºãã€ç°¡æœãªæ¹æ³ã§ãŠãŒã¶ãŒã«éç¥ããŸãã
- ãã©ãŒã«ããã¯ã¡ã«ããºã ïŒ ãšã©ãŒãé©åã«åŠçããããã®ãã©ãŒã«ããã¯ã¡ã«ããºã ïŒäŸïŒããã©ã«ãç»é¢ã®è¡šç€ºããã£ã¹ãã¬ã€ãžã®åæ¥ç¶è©Šè¡ïŒãæäŸããŸãã
- å ±åïŒ ãŠãŒã¶ãŒããšã©ãŒãå ±åãããªãã·ã§ã³ãæäŸããåé¡ã®è¿ éãªè§£æ±ºãšãã©ãããã©ãŒã ã®æ¹åãä¿é²ããŸãã
ã³ãŒãäŸïŒæŠå¿µïŒïŒ
class ErrorHandler {
constructor() {
this.errorListeners = [];
}
subscribe(listener) {
this.errorListeners.push(listener);
return () => {
this.errorListeners = this.errorListeners.filter(l => l !== listener);
};
}
handleError(error, context) {
console.error('ãšã©ãŒ:', error, 'ã³ã³ããã¹ã:', context);
this.errorListeners.forEach(listener => listener(error, context));
}
}
å®è£ ã«é¢ããèæ ®äºé
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³API 飿ºãšã³ãžã³ãå®è£ ããéã«ã¯ã以äžã®èŠçŽ ãèæ ®ããŠãã ããïŒ
- æè¡ã¹ã¿ãã¯ïŒ ãã«ãã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«é©ããæè¡ã¹ã¿ãã¯ãéžæããŸããReactãAngularãVue.jsãªã©ã®JavaScriptãã¬ãŒã ã¯ãŒã¯ã¯ãéçºããã»ã¹ãç°¡çŽ åã§ããŸãã
- éä¿¡ãããã³ã«ïŒ å¶åŸ¡ã¢ããªã±ãŒã·ã§ã³ãšãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€éã§ã¡ãã»ãŒãžãéä¿¡ããããã®éä¿¡ãããã³ã«ãéžæããŸããWebSocketã¯ãæ°žç¶çã§åæ¹åã®éä¿¡ãã£ãã«ãæäŸããŸãã
- ç¶æ 管çã©ã€ãã©ãªïŒ ReduxãVuexãªã©ã®ç¶æ 管çã©ã€ãã©ãªã䜿çšããŠãç¶æ 管çãšåæãç°¡çŽ åããããšãæ€èšããŸãã
- ã»ãã¥ãªãã£ïŒ äžæ£ãªã¢ã¯ã»ã¹ããã¬ãŒã³ããŒã·ã§ã³ã®æ¹ããããä¿è·ããããã®ã»ãã¥ãªãã£å¯Ÿçãå®è£ ããŸããHTTPSã䜿çšããèªèšŒããã³èªå¯ã¡ã«ããºã ã®å®è£ ãæ€èšããŸãã
- ããã©ãŒãã³ã¹ïŒ ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããé å»¶ãæå°éã«æããç»é¢éã®ã¹ã ãŒãºãªç§»è¡ã確ä¿ããŸãããã£ãã·ã³ã°ãã³ãŒãåå²ãç»åæé©åãªã©ã®æè¡ã䜿çšããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ ãŠãŒã¶ãŒããã¬ãŒã³ããŒã·ã§ã³ãç°¡åã«å¶åŸ¡ããã³ã³ãã³ããšå¯Ÿè©±ã§ãããããªããŠãŒã¶ãŒãã¬ã³ããªãŒãªã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ ãã¬ãŒã³ããŒã·ã§ã³ãé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããARIA屿§ã䜿çšããç»åã«ã¯ä»£æ¿ããã¹ããæäŸããŸãã
䜿çšäŸ
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³API 飿ºãšã³ãžã³ã¯ã以äžã®ãããªæ§ã ãªã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãïŒ
- ã€ã³ã¿ã©ã¯ãã£ãããžã¿ã«ãµã€ããŒãžïŒ ãŠãŒã¶ãŒã®æäœãç°å¢æ¡ä»¶ã«å¿çããããã€ãããã¯ã§é åçãªããžã¿ã«ãµã€ããŒãžãã£ã¹ãã¬ã€ãäœæããŸããäŸãšããŠã空枯ãã·ã§ããã³ã°ã¢ãŒã«ã®ã€ã³ã¿ã©ã¯ãã£ããããã顧客ã®å±æ§ã«åºã¥ããŠã³ã³ãã³ãã倿Žããå°å£²åºã®ããã¢ãŒã·ã§ã³ãã£ã¹ãã¬ã€ãªã©ããããŸãã
- å ±åäœæ¥çšäŒè°å®€ïŒ è€æ°ã®ãŠãŒã¶ãŒãå ±æãã£ã¹ãã¬ã€äžã§ã³ã³ãã³ããå ±æã»å¶åŸ¡ã§ããããã«ããããšã§ãäŒè°å®€ã§ã®ã·ãŒã ã¬ã¹ãªå ±åäœæ¥ãå¯èœã«ããŸããç°ãªãå ŽæïŒäŸïŒæ±äº¬ããã³ãã³ããã¥ãŒãšãŒã¯ïŒããã®åå è ãããªã¢ã«ã¿ã€ã ã§åãã³ã³ãã³ããæç€ºããæäœã§ããŸãã
- æ²¡å ¥åã²ãŒã äœéšïŒ è€æ°ã®ç»é¢ã«ãŸãããæ²¡å ¥åã²ãŒã äœéšãäœæããããåºãèŠéãšé åçãªã²ãŒã ãã¬ã€ãæäŸããŸããäŸãã°ãã¬ãŒã¹ã²ãŒã ã§ã¯3ã€ã®ç»é¢ãå©çšããŠãã©ããã¢ã©ãŠã³ãåã®ã³ãã¯ããããã¥ãŒãã·ãã¥ã¬ãŒãã§ããŸãã
- æè²çšã¢ããªã±ãŒã·ã§ã³ïŒ è€æ°ã®ç»é¢ã䜿çšããŠåŠç¿ã匷åããã€ã³ã¿ã©ã¯ãã£ããªæè²ã¢ããªã±ãŒã·ã§ã³ãéçºããŸããäŸãã°ãä»®æ³è§£åããã°ã©ã ã§ã¯ãäžæ¹ã®ç»é¢ã«è§£åã¢ãã«ã衚瀺ããããäžæ¹ã®ç»é¢ã«è©³çްæ å ±ã衚瀺ã§ããŸãã
- ã³ã³ãããŒã«ã«ãŒã ãšç£èŠã·ã¹ãã ïŒ ã³ã³ãããŒã«ã«ãŒã ã®è€æ°ã®ç»é¢ã«éèŠãªæ å ±ã衚瀺ããããã·ã¥ããŒããç£èŠã·ã¹ãã ãäœæãããªãã¬ãŒã¿ãŒãè¿ éã«ç¶æ³ãè©äŸ¡ããæ å ±ã«åºã¥ããæææ±ºå®ãè¡ããããã«ããŸããäŸãšããŠããªã¢ã«ã¿ã€ã ã®ãšãã«ã®ãŒäœ¿çšéããããã¯ãŒã¯ç¶æ³ãã¢ã©ãŒãã衚瀺ããé»åç¶²ã®ç®¡å¶ã»ã³ã¿ãŒãªã©ãèããããŸãã
ç°¡åãªäŸã®æ§ç¯ïŒãã«ãã¹ã¯ãªãŒã³ã¹ã©ã€ãã·ã§ãŒ
ããã§ã¯ããã¬ãŒã³ããŒã·ã§ã³APIãšåæ©çãªé£æºãšã³ãžã³ã䜿çšããŠãã«ãã¹ã¯ãªãŒã³ã¹ã©ã€ãã·ã§ãŒãäœæããããã®åºæ¬æ§é ãæŠèª¬ãããç°¡ç¥åãããäŸã瀺ããŸãïŒ
**1. ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ïŒå¶åŸ¡åŽã¢ããªïŒïŒ** ```javascript // main.js const displayManager = new DisplayManager(); const messageRouter = new MessageRouter(); const stateManager = new StateManager(); // ã¡ãã»ãŒãžã«ãŒããç»é² messageRouter.registerRoute('nextSlide', () => { const currentSlide = stateManager.getState().currentSlide; stateManager.setState({ currentSlide: currentSlide + 1 }); }); messageRouter.registerRoute('previousSlide', () => { const currentSlide = stateManager.getState().currentSlide; stateManager.setState({ currentSlide: currentSlide - 1 }); }); // ç¶æ 倿Žãè³Œèª stateManager.subscribe((state) => { displayManager.displays.forEach(display => { messageRouter.sendMessage(display, { type: 'updateSlide', slideIndex: state.currentSlide }); }); }); // åæå displayManager.requestPresentation(); stateManager.setState({ currentSlide: 0 }); ``` **2. ãã¬ãŒã³ããŒã·ã§ã³ãã£ã¹ãã¬ã€ïŒpresentation.htmlïŒïŒ** ```htmlçµè«
ããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³APIã¯ãéçºè ãé åçã§ã€ã³ã¿ã©ã¯ãã£ããªãã«ãã¹ã¯ãªãŒã³äœéšãåµé ããåãšãªããŸããé©åã«èšèšããã飿ºãšã³ãžã³ãå®è£ ããããšã§ãéçºè ã¯ãã«ãã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ã®è€éãã广çã«ç®¡çããã·ãŒã ã¬ã¹ãªåæãä¿¡é Œæ§ã®é«ãéä¿¡ããããŠè¯å¥œãªãŠãŒã¶ãŒäœéšãä¿èšŒã§ããŸããWebæè¡ãé²åãç¶ããã«ã€ããŠããã«ãã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ãžã®éèŠã¯å¢ãã°ããã§ãããããã³ããšã³ã ãã¬ãŒã³ããŒã·ã§ã³APIãšé£æºãšã³ãžã³ã¯çŸä»£ã®Webéçºã«äžå¯æ¬ ãªããŒã«ãšãªã£ãŠããŸãããããã®æŠå¿µãçè§£ããããšã§ãéçºè ã¯æ§ã ãªæ¥çåãã«é©æ°çãªãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããäžçäžã®ãŠãŒã¶ãŒã«è±ãã§ããã€ã³ã¿ã©ã¯ãã£ããªäœéšãæäŸã§ããããã«ãªããŸãã