è€éãªãªããžã§ã¯ããæ§ç¯ããããã®é«åºŠãªJavaScriptã¢ãžã¥ãŒã«ãã¿ãŒã³ãæ¢æ±ããã«ããŒãã¿ãŒã³ã®å©ç¹ããã¹ã±ãŒã©ãã«ã§ä¿å®æ§ã®é«ãã¢ããªãæ§ç¯ããããã®å®è·µçãªå®è£ äŸã解説ããŸãã
JavaScriptã®ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ïŒè€éãªãªããžã§ã¯ãã®æ§ç¯
çŸä»£ã®JavaScriptéçºã«ãããŠãè€éãªãªããžã§ã¯ããå¹ççã«äœæã»ç®¡çããããšã¯ãã¹ã±ãŒã©ãã«ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã¯ããªããžã§ã¯ãã®æ§ç¯ããžãã¯ãã¢ãžã¥ãŒã«æ§é å ã«ã«ãã»ã«åããããã®åŒ·åãªã¢ãããŒããæäŸããŸãããã®ãã¿ãŒã³ã¯ãã¢ãžã¥ãŒã«æ§ããªããžã§ã¯ãã³ã³ããžã·ã§ã³ããããŠãã«ããŒãã¶ã€ã³ãã¿ãŒã³ã®å©ç¹ãçµã¿åãããããšã§ã倿°ã®ããããã£ãäŸåé¢ä¿ãæã€è€éãªãªããžã§ã¯ãã®äœæãç°¡çŽ åããŸãã
JavaScriptã¢ãžã¥ãŒã«ãçè§£ãã
JavaScriptã¢ãžã¥ãŒã«ã¯ãæ©èœãã«ãã»ã«åããçžäºäœçšã®ããã®ç¹å®ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå ¬éããèªå·±å®çµåã®ã³ãŒãåäœã§ããã¢ãžã¥ãŒã«ã¯ãå éšã®å€æ°ã颿°ã«ãã©ã€ããŒãã¹ã³ãŒããæäŸããããšã§ãã³ãŒãã®æŽçãåå©çšæ§ãä¿é²ããåœåã®ç«¶åãé²ããŸãã
ã¢ãžã¥ãŒã«ã®åœ¢åŒ
æŽå²çã«ãJavaScriptã¯ããŸããŸãªã¢ãžã¥ãŒã«åœ¢åŒãçµãŠé²åããŠããŸããããããããç¬èªã®æ§æãšæ©èœãåããŠããŸãïŒ
- IIFE (峿å®è¡é¢æ°åŒ): ã³ãŒãã峿ã«å®è¡ããã颿°ã§ã©ããããããšã§ãã©ã€ããŒãã¹ã³ãŒããäœæããåæã®ã¢ãããŒãã
- CommonJS: Node.jsã§åºã䜿çšãããŠããã¢ãžã¥ãŒã«ã·ã¹ãã ã§ã
require()ãšmodule.exportsã䜿çšããŠã¢ãžã¥ãŒã«ãå®çŸ©ããŸãã - AMD (éåæã¢ãžã¥ãŒã«å®çŸ©): ãã©ãŠã¶ã§ã®ã¢ãžã¥ãŒã«ã®éåæèªã¿èŸŒã¿çšã«èšèšãããRequireJSã®ãããªã©ã€ãã©ãªã§ãã䜿çšãããŸãã
- ESã¢ãžã¥ãŒã« (ECMAScriptã¢ãžã¥ãŒã«): ES6 (ECMAScript 2015)ã§å°å
¥ãããæšæºã®ã¢ãžã¥ãŒã«ã·ã¹ãã ã§ã
importãšexportããŒã¯ãŒãã䜿çšããŸãã
ESã¢ãžã¥ãŒã«ã¯ããã®æšæºåãšãã©ãŠã¶ããã³Node.jsã§ã®ãã€ãã£ããµããŒãã«ãããçŸåšã§ã¯çŸä»£ã®JavaScriptéçºã«ãããŠæšå¥šãããã¢ãããŒããšãªã£ãŠããŸãã
ã¢ãžã¥ãŒã«ã䜿çšããå©ç¹
- ã³ãŒãã®æŽç: ã¢ãžã¥ãŒã«ã¯ãé¢é£ããæ©èœãå¥ã ã®ãã¡ã€ã«ã«ã°ã«ãŒãåããããšã§ãæ§é åãããã³ãŒãããŒã¹ãä¿é²ããŸãã
- åå©çšæ§: ã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåãè€æ°ã®ãããžã§ã¯ãã§ç°¡åã«åå©çšã§ããŸãã
- ã«ãã»ã«å: ã¢ãžã¥ãŒã«ã¯å éšã®å®è£ 詳现ãé èœããçžäºäœçšã«å¿ èŠãªã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ãå ¬éããŸãã
- äŸåé¢ä¿ã®ç®¡ç: ã¢ãžã¥ãŒã«ã¯äŸåé¢ä¿ãæç€ºçã«å®£èšãããããã³ãŒãã®ç°ãªãéšåéã®é¢ä¿ãçè§£ãã管çãããããªããŸãã
- ä¿å®æ§: ã¢ãžã¥ãŒã«åãããã³ãŒãã¯ãããã¢ãžã¥ãŒã«ã§ã®å€æŽãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«åœ±é¿ãäžããå¯èœæ§ãäœããããä¿å®ãæŽæ°ã容æã§ãã
ãã«ããŒãã¶ã€ã³ãã¿ãŒã³
ãã«ããŒãã¿ãŒã³ã¯ãè€éãªãªããžã§ã¯ãã®æ§ç¯ãšãã®è¡šçŸãåé¢ããçæã«é¢ãããã¶ã€ã³ãã¿ãŒã³ã§ããããã«ãããè€éãªãªããžã§ã¯ããæ®µéçã«æ§ç¯ã§ããæ§ç¯ããã»ã¹ããã现ããå¶åŸ¡ããã³ã³ã¹ãã©ã¯ã¿ã倿°ã®ãã©ã¡ãŒã¿ã§éè² è·ã«ãªãããã¬ã¹ã³ãŒãã³ã°ã³ã³ã¹ãã©ã¯ã¿åé¡ããåé¿ã§ããŸãã
ãã«ããŒãã¿ãŒã³ã®äž»èŠã³ã³ããŒãã³ã
- ãã«ã㌠(Builder): ãªããžã§ã¯ãã®ããŸããŸãªéšåãæ§ç¯ããããã®ã¡ãœãããå®çŸ©ããã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯æœè±¡ã¯ã©ã¹ã
- å ·è±¡ãã«ã㌠(Concrete Builder): ãã«ããŒã€ã³ã¿ãŒãã§ãŒã¹ã®å ·äœçãªå®è£ ã§ããªããžã§ã¯ãã®åéšåãæ§ç¯ããããã®ç¹å®ã®ããžãã¯ãæäŸããŸãã
- ãã£ã¬ã¯ã¿ãŒ (Director): (ãªãã·ã§ã³) é©åãªãã«ããŒã¡ãœãããç¹å®ã®é åºã§åŒã³åºãããšã§ãæ§ç¯ããã»ã¹ãçµ±æ¬ããã¯ã©ã¹ã
- ãããã¯ã (Product): æ§ç¯ãããè€éãªãªããžã§ã¯ãã
ãã«ããŒãã¿ãŒã³ã䜿çšããå©ç¹
- å¯èªæ§ã®åäž: ãã«ããŒãã¿ãŒã³ã¯ããªããžã§ã¯ãã®æ§ç¯ããã»ã¹ãããèªã¿ããããçè§£ããããããŸãã
- æè»æ§: åãæ§ç¯ããã»ã¹ã䜿çšããŠããªããžã§ã¯ãã®ããŸããŸãªããªãšãŒã·ã§ã³ãäœæã§ããŸãã
- å¶åŸ¡æ§: æ§ç¯ããã»ã¹ããã现ããå¶åŸ¡ã§ãããããç¹å®ã®èŠä»¶ã«åºã¥ããŠãªããžã§ã¯ããã«ã¹ã¿ãã€ãºã§ããŸãã
- è€éãã®è»œæž: 倿°ã®ããããã£ãäŸåé¢ä¿ãæã€è€éãªãªããžã§ã¯ãã®äœæãç°¡çŽ åããŸãã
JavaScriptã§ã®ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã®å®è£
ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã¯ãJavaScriptã¢ãžã¥ãŒã«ãšãã«ããŒãã¶ã€ã³ãã¿ãŒã³ã®åŒ·ã¿ãçµã¿åãããŠãè€éãªãªããžã§ã¯ããæ§ç¯ããããã®å ç¢ã§æè»ãªã¢ãããŒããçã¿åºããŸããESã¢ãžã¥ãŒã«ã䜿çšããŠãã®ãã¿ãŒã³ãå®è£ ããæ¹æ³ãæ¢ã£ãŠã¿ãŸãããã
äŸïŒèšå®ãªããžã§ã¯ãã®æ§ç¯
Webã¢ããªã±ãŒã·ã§ã³çšã®èšå®ãªããžã§ã¯ããäœæããå¿ èŠããããšæ³åããŠãã ããããã®ãªããžã§ã¯ãã«ã¯ãAPIãšã³ããã€ã³ããããŒã¿ããŒã¹æ¥ç¶ãèªèšŒãããã€ããŒããã®ä»ã®ã¢ããªã±ãŒã·ã§ã³åºæã®èšå®ãå«ãŸãããããããŸããã
1. èšå®ãªããžã§ã¯ãã®å®çŸ©
ãŸããèšå®ãªããžã§ã¯ãã®æ§é ãå®çŸ©ããŸãïŒ
// config.js
export class Configuration {
constructor() {
this.apiEndpoint = null;
this.databaseConnection = null;
this.authenticationProvider = null;
this.cacheEnabled = false;
this.loggingLevel = 'info';
}
// ãªãã·ã§ã³ïŒèšå®ãæ€èšŒããã¡ãœããã远å
validate() {
if (!this.apiEndpoint) {
throw new Error('APIãšã³ããã€ã³ãã¯å¿
é ã§ãã');
}
if (!this.databaseConnection) {
throw new Error('ããŒã¿ããŒã¹æ¥ç¶ã¯å¿
é ã§ãã');
}
}
}
2. ãã«ããŒã€ã³ã¿ãŒãã§ãŒã¹ã®äœæ
次ã«ãããŸããŸãªèšå®ããããã£ãèšå®ããããã®ã¡ãœããã®æŠèŠã瀺ããã«ããŒã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŸãïŒ
// configBuilder.js
export class ConfigurationBuilder {
constructor() {
this.config = new Configuration();
}
setApiEndpoint(endpoint) {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
setDatabaseConnection(connection) {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
setAuthenticationProvider(provider) {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
enableCache() {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
setLoggingLevel(level) {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
build() {
throw new Error('ã¡ãœãããå®è£
ãããŠããŸããã');
}
}
3. å ·è±¡ãã«ããŒã®å®è£
ããã§ããã«ããŒã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããå ·è±¡ãã«ããŒãäœæããŸãããã®ãã«ããŒã¯ãèšå®ããããã£ãèšå®ããããã®å®éã®ããžãã¯ãæäŸããŸãïŒ
// appConfigBuilder.js
import { Configuration } from './config.js';
import { ConfigurationBuilder } from './configBuilder.js';
export class AppConfigurationBuilder extends ConfigurationBuilder {
constructor() {
super();
}
setApiEndpoint(endpoint) {
this.config.apiEndpoint = endpoint;
return this;
}
setDatabaseConnection(connection) {
this.config.databaseConnection = connection;
return this;
}
setAuthenticationProvider(provider) {
this.config.authenticationProvider = provider;
return this;
}
enableCache() {
this.config.cacheEnabled = true;
return this;
}
setLoggingLevel(level) {
this.config.loggingLevel = level;
return this;
}
build() {
this.config.validate(); // ãã«ãåã«æ€èšŒ
return this.config;
}
}
4. ãã«ããŒã®äœ¿çš
æåŸã«ããã«ããŒã䜿çšããŠèšå®ãªããžã§ã¯ããäœæããŸãïŒ
// main.js
import { AppConfigurationBuilder } from './appConfigBuilder.js';
const config = new AppConfigurationBuilder()
.setApiEndpoint('https://api.example.com')
.setDatabaseConnection('mongodb://localhost:27017/mydb')
.setAuthenticationProvider('OAuth2')
.enableCache()
.setLoggingLevel('debug')
.build();
console.log(config);
äŸïŒãŠãŒã¶ãŒãããã¡ã€ã«ãªããžã§ã¯ãã®æ§ç¯
ãŠãŒã¶ãŒãããã¡ã€ã«ãªããžã§ã¯ããæ§ç¯ãããå¥ã®äŸãèããŠã¿ãŸãããããã®ãªããžã§ã¯ãã«ã¯ãå人æ å ±ãé£çµ¡å 詳现ããœãŒã·ã£ã«ã¡ãã£ã¢ã®ãªã³ã¯ãããã³èšå®ãå«ãŸããå ŽåããããŸãã
1. ãŠãŒã¶ãŒãããã¡ã€ã«ãªããžã§ã¯ãã®å®çŸ©
// userProfile.js
export class UserProfile {
constructor() {
this.firstName = null;
this.lastName = null;
this.email = null;
this.phoneNumber = null;
this.address = null;
this.socialMediaLinks = [];
this.preferences = {};
}
}
2. ãã«ããŒã®äœæ
// userProfileBuilder.js
import { UserProfile } from './userProfile.js';
export class UserProfileBuilder {
constructor() {
this.userProfile = new UserProfile();
}
setFirstName(firstName) {
this.userProfile.firstName = firstName;
return this;
}
setLastName(lastName) {
this.userProfile.lastName = lastName;
return this;
}
setEmail(email) {
this.userProfile.email = email;
return this;
}
setPhoneNumber(phoneNumber) {
this.userProfile.phoneNumber = phoneNumber;
return this;
}
setAddress(address) {
this.userProfile.address = address;
return this;
}
addSocialMediaLink(platform, url) {
this.userProfile.socialMediaLinks.push({ platform, url });
return this;
}
setPreference(key, value) {
this.userProfile.preferences[key] = value;
return this;
}
build() {
return this.userProfile;
}
}
3. ãã«ããŒã®äœ¿çš
// main.js
import { UserProfileBuilder } from './userProfileBuilder.js';
const userProfile = new UserProfileBuilder()
.setFirstName('John')
.setLastName('Doe')
.setEmail('john.doe@example.com')
.setPhoneNumber('+1-555-123-4567')
.setAddress('123 Main St, Anytown, USA')
.addSocialMediaLink('LinkedIn', 'https://www.linkedin.com/in/johndoe')
.addSocialMediaLink('Twitter', 'https://twitter.com/johndoe')
.setPreference('theme', 'dark')
.setPreference('language', 'en')
.build();
console.log(userProfile);
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
æµæ¢ãªã€ã³ã¿ãŒãã§ãŒã¹ (Fluent Interface)
äžèšã®äŸã§ã¯ãåãã«ããŒã¡ãœããããã«ããŒã€ã³ã¹ã¿ã³ã¹èªäœãè¿ãæµæ¢ãªã€ã³ã¿ãŒãã§ãŒã¹ã®äœ¿çšã瀺ããŠããŸããããã«ãããã¡ãœãããã§ãŒã³ãå¯èœã«ãªãããªããžã§ã¯ãã®æ§ç¯ããã»ã¹ãããç°¡æœã§èªã¿ããããªããŸãã
ãã£ã¬ã¯ã¿ãŒã¯ã©ã¹ (ãªãã·ã§ã³)
å Žåã«ãã£ãŠã¯ãæ§ç¯ããã»ã¹ãçµ±æ¬ããããã«ãã£ã¬ã¯ã¿ãŒã¯ã©ã¹ã䜿çšãããããšããããŸãããã£ã¬ã¯ã¿ãŒã¯ã©ã¹ã¯ãç¹å®ã®é åºã§ãªããžã§ã¯ããæ§ç¯ããããã®ããžãã¯ãã«ãã»ã«åããåãæ§ç¯ããã»ã¹ãç°ãªããã«ããŒã§åå©çšã§ããããã«ããŸãã
// director.js
export class Director {
constructor(builder) {
this.builder = builder;
}
constructFullProfile() {
this.builder
.setFirstName('Jane')
.setLastName('Smith')
.setEmail('jane.smith@example.com')
.setPhoneNumber('+44-20-7946-0532') // ã€ã®ãªã¹ã®é»è©±çªå·
.setAddress('10 Downing Street, London, UK');
}
constructMinimalProfile() {
this.builder
.setFirstName('Jane')
.setLastName('Smith');
}
}
// main.js
import { UserProfileBuilder } from './userProfileBuilder.js';
import { Director } from './director.js';
const builder = new UserProfileBuilder();
const director = new Director(builder);
director.constructFullProfile();
const fullProfile = builder.build();
console.log(fullProfile);
director.constructMinimalProfile();
const minimalProfile = builder.build();
console.log(minimalProfile);
éåææäœã®åŠç
ãªããžã§ã¯ãã®æ§ç¯ããã»ã¹ã«éåææäœïŒäŸïŒAPIããã®ããŒã¿ååŸïŒãå«ãŸããå Žåã¯ããã«ããŒã¡ãœããå
ã§async/awaitã䜿çšããŠãããã®æäœãåŠçã§ããŸãã
// asyncBuilder.js
import { Configuration } from './config.js';
import { ConfigurationBuilder } from './configBuilder.js';
export class AsyncConfigurationBuilder extends ConfigurationBuilder {
async setApiEndpoint(endpointUrl) {
try {
const response = await fetch(endpointUrl);
const data = await response.json();
this.config.apiEndpoint = data.endpoint;
return this;
} catch (error) {
console.error('APIãšã³ããã€ã³ãã®ååŸäžã«ãšã©ãŒãçºçããŸãã:', error);
throw error; // äžæµã§åŠçãããããã«ãšã©ãŒãåã¹ããŒ
}
}
build() {
return this.config;
}
}
// main.js
import { AsyncConfigurationBuilder } from './asyncBuilder.js';
async function main() {
const builder = new AsyncConfigurationBuilder();
try {
const config = await builder
.setApiEndpoint('https://example.com/api/endpoint')
.build();
console.log(config);
} catch (error) {
console.error('èšå®ã®æ§ç¯ã«å€±æããŸãã:', error);
}
}
main();
æ€èšŒ
ãªããžã§ã¯ããæ§ç¯ãããåã«ãå¿
èŠãªåºæºãæºãããŠããããšã確èªããããã«æ€èšŒããããšãéèŠã§ãããªããžã§ã¯ãã¯ã©ã¹ãŸãã¯ãã«ããŒå
ã«validate()ã¡ãœããã远å ããŠãæ€èšŒãã§ãã¯ãå®è¡ã§ããŸãã
äžå€æ§ (Immutability)
ãªããžã§ã¯ããæ§ç¯ãããåŸãæå³ããªã倿Žãé²ãããã«äžå€ã«ããããšãæ€èšããŠãã ãããObject.freeze()ã®ãããªãã¯ããã¯ã䜿çšããŠããªããžã§ã¯ããèªã¿åãå°çšã«ããããšãã§ããŸãã
ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã®å©ç¹
- ã³ãŒãã®æŽçã®åäž: ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã¯ããªããžã§ã¯ãæ§ç¯ããžãã¯ãã¢ãžã¥ãŒã«æ§é å ã«ã«ãã»ã«åããããšã§ãæ§é åãããã³ãŒãããŒã¹ãä¿é²ããŸãã
- åå©çšæ§ã®åäž: ãã«ããŒã¯ãç°ãªãæ§æãæã€ãªããžã§ã¯ãã®ããŸããŸãªããªãšãŒã·ã§ã³ãäœæããããã«åå©çšã§ããŸãã
- å¯èªæ§ã®åäž: ãã«ããŒãã¿ãŒã³ã¯ãç¹ã«å€æ°ã®ããããã£ãæã€è€éãªãªããžã§ã¯ãã®å Žåããªããžã§ã¯ãã®æ§ç¯ããã»ã¹ãããèªã¿ããããçè§£ããããããŸãã
- æè»æ§ã®åäž: æ§ç¯ããã»ã¹ããã现ããå¶åŸ¡ã§ãããããç¹å®ã®èŠä»¶ã«åºã¥ããŠãªããžã§ã¯ããã«ã¹ã¿ãã€ãºã§ããŸãã
- è€éãã®è»œæž: 倿°ã®ããããã£ãäŸåé¢ä¿ãæã€è€éãªãªããžã§ã¯ãã®äœæãç°¡çŽ åãããã¬ã¹ã³ãŒãã³ã°ã³ã³ã¹ãã©ã¯ã¿åé¡ãåé¿ããŸãã
- ãã¹ãã®å®¹ææ§: ãªããžã§ã¯ãçæããžãã¯ãåé¢ããŠãã¹ããããããªããŸãã
å®äžçã§ã®äœ¿çšäŸ
- èšå®ç®¡ç: Webã¢ããªã±ãŒã·ã§ã³ãAPIããã€ã¯ããµãŒãã¹çšã®èšå®ãªããžã§ã¯ãã®æ§ç¯ã
- ããŒã¿è»¢éãªããžã§ã¯ã (DTO): ã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãã¬ã€ã€ãŒéã§ããŒã¿ã転éããããã®DTOã®äœæã
- APIãªã¯ãšã¹ããªããžã§ã¯ã: ããŸããŸãªãã©ã¡ãŒã¿ãããããŒãæã€APIãªã¯ãšã¹ããªããžã§ã¯ãã®æ§ç¯ã
- UIã³ã³ããŒãã³ãã®äœæ: 倿°ã®ããããã£ãšã€ãã³ããã³ãã©ãæã€è€éãªUIã³ã³ããŒãã³ãã®æ§ç¯ã
- ã¬ããŒãçæ: ã«ã¹ã¿ãã€ãºå¯èœãªã¬ã€ã¢ãŠããšããŒã¿ãœãŒã¹ãæã€ã¬ããŒãã®äœæã
çµè«
JavaScriptã®ã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã¯ãè€éãªãªããžã§ã¯ããã¢ãžã¥ãŒã«åãããä¿å®æ§ã®é«ãæ¹æ³ã§æ§ç¯ããããã®åŒ·åã§æè»ãªã¢ãããŒããæäŸããŸããJavaScriptã¢ãžã¥ãŒã«ãšãã«ããŒãã¶ã€ã³ãã¿ãŒã³ã®å©ç¹ãçµã¿åãããããšã§ãè€éãªãªããžã§ã¯ãã®äœæãç°¡çŽ åããã³ãŒãã®æŽçãæ¹åããã¢ããªã±ãŒã·ã§ã³å šäœã®å質ãåäžãããããšãã§ããŸããèšå®ãªããžã§ã¯ãããŠãŒã¶ãŒãããã¡ã€ã«ããŸãã¯APIãªã¯ãšã¹ããªããžã§ã¯ããæ§ç¯ããŠããå Žåã§ããã¢ãžã¥ãŒã«ãã«ããŒãã¿ãŒã³ã¯ãããå ç¢ã§ãã¹ã±ãŒã©ãã«ã§ãä¿å®æ§ã®é«ãã³ãŒããäœæããã®ã«åœ¹ç«ã¡ãŸãããã®ãã¿ãŒã³ã¯ãããŸããŸãªã°ããŒãã«ãªæèã§åºãé©çšå¯èœã§ãããäžçäžã®éçºè ãçè§£ãä¿®æ£ãæ¡åŒµã容æãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãå¯èœã«ããŸãã