JavaScriptãã³ã¬ãŒã¿ãŒã掻çšããå ç¢ãªãã©ã¡ãŒã¿æ€èšŒãæ¢æ±ããŸãããã³ã¬ãŒã¿ãŒã«ããåŒæ°ãã§ãã¯ãå®è£ ããããã¯ãªãŒã³ã§ä¿¡é Œæ§ã®é«ãã³ãŒããå®çŸããæ¹æ³ãåŠã³ãŸãããã
JavaScriptãã³ã¬ãŒã¿ãŒã«ãããã©ã¡ãŒã¿æ€èšŒïŒããŒã¿æŽåæ§ã®ç¢ºä¿
çŸä»£ã®JavaScriptéçºã«ãããŠã颿°ãã¡ãœããã«æž¡ãããããŒã¿ã®æŽåæ§ã確ä¿ããããšã¯æãéèŠã§ãããããéæããããã®åŒ·åãªææ³ã®äžã€ãããã©ã¡ãŒã¿æ€èšŒã®ããã®ãã³ã¬ãŒã¿ãŒã®äœ¿çšã§ãããã³ã¬ãŒã¿ãŒã¯ãBabelãä»ããŠJavaScriptã§å©çšã§ããæ©èœããŸãã¯TypeScriptã«ãã€ãã£ãã§æèŒãããŠããæ©èœã§ããã颿°ãã¯ã©ã¹ãããããã£ã«æ©èœã远å ããããã®ã¯ãªãŒã³ã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸãããã®èšäºã§ã¯ãJavaScriptãã³ã¬ãŒã¿ãŒã®äžçãæ·±ãæãäžããç¹ã«åŒæ°ãã§ãã¯ã«ããããã®å¿çšã«çç®ããããããã¬ãã«ã®éçºè åãã«å®è·µçãªäŸãšæŽå¯ãæäŸããŸãã
JavaScriptãã³ã¬ãŒã¿ãŒãšã¯ïŒ
ãã³ã¬ãŒã¿ãŒã¯ãæ¢åã®ã¯ã©ã¹ã颿°ããŸãã¯ããããã£ã«åçãã€éçã«æ¯ãèãã远å ã§ãããã¶ã€ã³ãã¿ãŒã³ã§ããæ¬è³ªçã«ãå ã®ã³ãŒãèªäœã倿Žããããšãªããæ¢åã®ã³ãŒããæ°ããæ©èœã§ãè£ é£ŸïŒãã³ã¬ãŒãïŒãããŸããããã¯ããœãããŠã§ã¢ãšã³ãã£ãã£ïŒã¯ã©ã¹ãã¢ãžã¥ãŒã«ã颿°ãªã©ïŒã¯æ¡åŒµã«å¯ŸããŠéããŠããã¹ãã ããä¿®æ£ã«å¯ŸããŠã¯éããŠããã¹ãã§ãããšè¿°ã¹ããSOLIDèšèšã®ãªãŒãã³/ã¯ããŒãºãã®ååã«æºæ ããŠããŸãã
JavaScriptã§ã¯ããã³ã¬ãŒã¿ãŒã¯ã¯ã©ã¹å®£èšãã¡ãœãããã¢ã¯ã»ãµãŒãããããã£ããŸãã¯ãã©ã¡ãŒã¿ã«æ·»ä»ã§ããç¹æ®ãªçš®é¡ã®å®£èšã§ãããããã¯@expressionæ§æã䜿çšããexpressionã¯è£
食ããã宣èšã«é¢ããæ
å ±ãšãšãã«å®è¡æã«åŒã³åºããã颿°ã«è©äŸ¡ãããªããã°ãªããŸããã
JavaScriptã§ãã³ã¬ãŒã¿ãŒã䜿çšããã«ã¯ãéåžžã@babel/plugin-proposal-decoratorsãã©ã°ã€ã³ãæå¹ã«ããBabelã®ãããªãã©ã³ã¹ãã€ã©ã䜿çšããå¿
èŠããããŸããTypeScriptã¯ãã³ã¬ãŒã¿ãŒããã€ãã£ãã§ãµããŒãããŠããŸãã
ãã©ã¡ãŒã¿æ€èšŒã«ãã³ã¬ãŒã¿ãŒã䜿çšããå©ç¹
ãã©ã¡ãŒã¿æ€èšŒã«ãã³ã¬ãŒã¿ãŒã䜿çšããããšã«ã¯ãããã€ãã®å©ç¹ããããŸãïŒ
- ã³ãŒãã®å¯èªæ§åäžïŒãã³ã¬ãŒã¿ãŒã¯æ€èšŒã«ãŒã«ã宣èšçã«è¡šçŸããæ¹æ³ãæäŸããã³ãŒãã®çè§£ãšä¿å®ã容æã«ããŸãã
- å®åã³ãŒãã®åæžïŒè€æ°ã®é¢æ°ã§æ€èšŒããžãã¯ãç¹°ãè¿ã代ããã«ããã³ã¬ãŒã¿ãŒã䜿çšãããšäžåºŠå®çŸ©ããã°ã³ãŒãããŒã¹å šäœã§é©çšã§ããŸãã
- ã³ãŒãã®åå©çšæ§åäžïŒãã³ã¬ãŒã¿ãŒã¯ç°ãªãã¯ã©ã¹ã颿°éã§åå©çšã§ããã³ãŒãã®åå©çšãä¿é²ããåé·æ§ãåæžããŸãã
- é¢å¿ã®åé¢ïŒæ€èšŒããžãã¯ã颿°ã®ã³ã¢ããžãã¹ããžãã¯ããåé¢ãããããã¯ãªãŒã³ã§ã¢ãžã¥ãŒã«åãããã³ãŒãã«ãªããŸãã
- æ€èšŒããžãã¯ã®äžå åïŒãã¹ãŠã®æ€èšŒã«ãŒã«ã1ãæã§å®çŸ©ããããããæŽæ°ãšä¿å®ã容æã«ãªããŸãã
ãã³ã¬ãŒã¿ãŒã«ãããã©ã¡ãŒã¿æ€èšŒã®å®è£
JavaScriptãã³ã¬ãŒã¿ãŒã䜿çšããŠãã©ã¡ãŒã¿æ€èšŒãå®è£ ããæ¹æ³ãæ¢ã£ãŠã¿ãŸããããç°¡åãªäŸããå§ããããè€éãªã·ããªãªã«é²ã¿ãŸãã
åºæ¬äŸïŒæååãã©ã¡ãŒã¿ã®æ€èšŒ
æååãã©ã¡ãŒã¿ãæåŸ ãã颿°ãèããŠã¿ãŸãããããã©ã¡ãŒã¿ãå®éã«æååã§ããããšãä¿èšŒãããã³ã¬ãŒã¿ãŒãäœæã§ããŸãã
function validateString(target: any, propertyKey: string | symbol, parameterIndex: number) {
let existingParameters: any[] = Reflect.getOwnMetadata('validateParameters', target, propertyKey) || [];
existingParameters.push({ index: parameterIndex, validator: (value: any) => typeof value === 'string' });
Reflect.defineMetadata('validateParameters', existingParameters, target, propertyKey);
const originalMethod = target[propertyKey];
target[propertyKey] = function (...args: any[]) {
const metadata = Reflect.getOwnMetadata('validateParameters', target, propertyKey);
if (metadata) {
for (const item of metadata) {
const { index, validator } = item;
if (!validator(args[index])) {
throw new Error(`Parameter at index ${index} is invalid`);
}
}
}
return originalMethod.apply(this, args);
};
}
function validate(...validators: ((value: any) => boolean)[]) {
return function (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
for (let i = 0; i < validators.length; i++) {
if (!validators[i](args[i])) {
throw new Error(`Parameter at index ${i} is invalid`);
}
}
return originalMethod.apply(this, args);
};
};
}
function isString(value: any): boolean {
return typeof value === 'string';
}
class Example {
@validate(isString)
greet( @validateString name: string) {
return `Hello, ${name}!`;
}
}
const example = new Example();
try {
console.log(example.greet("Alice")); // Output: Hello, Alice!
// example.greet(123); // Throws an error
} catch (error:any) {
console.error(error.message);
}
説æïŒ
validateStringãã³ã¬ãŒã¿ãŒã¯greetã¡ãœããã®nameãã©ã¡ãŒã¿ã«é©çšãããŸãã- ã¡ãœããã«é¢é£ä»ããããæ€èšŒã¡ã¿ããŒã¿ãæ ŒçŽããã³ååŸããããã«
Reflect.defineMetadataãšReflect.getOwnMetadataã䜿çšããŸãã - å ã®ã¡ãœãããåŒã³åºãåã«ãæ€èšŒã¡ã¿ããŒã¿ãå埩åŠçããåãã©ã¡ãŒã¿ã«ããªããŒã¿ãŒé¢æ°ãé©çšããŸãã
- ããããã®ãã©ã¡ãŒã¿ãæ€èšŒã«å€±æããå Žåããšã©ãŒãã¹ããŒãããŸãã
validateãã³ã¬ãŒã¿ãŒã¯ããã©ã¡ãŒã¿ã«ããªããŒã¿ãŒãé©çšããããã®ããæ±çšçã§æ§æå¯èœãªæ¹æ³ãæäŸããåãã©ã¡ãŒã¿ã«è€æ°ã®ããªããŒã¿ãŒãæå®ã§ããŸããisString颿°ã¯ãå€ãæååã§ãããã©ããããã§ãã¯ããåçŽãªããªããŒã¿ãŒã§ããExampleã¯ã©ã¹ã¯ããã³ã¬ãŒã¿ãŒã䜿çšããŠgreetã¡ãœããã®nameãã©ã¡ãŒã¿ãæ€èšŒããæ¹æ³ã瀺ããŠããŸãã
é«åºŠãªäŸïŒã¡ãŒã«åœ¢åŒã®æ€èšŒ
æååãã©ã¡ãŒã¿ãæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ããããšãæ€èšŒãããã³ã¬ãŒã¿ãŒãäœæããŸãããã
function validateEmail(target: any, propertyKey: string | symbol, parameterIndex: number) {
let existingParameters: any[] = Reflect.getOwnMetadata('validateParameters', target, propertyKey) || [];
existingParameters.push({ index: parameterIndex, validator: (value: any) => {
const emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g;
return typeof value === 'string' && emailRegex.test(value);
} });
Reflect.defineMetadata('validateParameters', existingParameters, target, propertyKey);
const originalMethod = target[propertyKey];
target[propertyKey] = function (...args: any[]) {
const metadata = Reflect.getOwnMetadata('validateParameters', target, propertyKey);
if (metadata) {
for (const item of metadata) {
const { index, validator } = item;
if (!validator(args[index])) {
throw new Error(`Parameter at index ${index} is not a valid email address`);
}
}
}
return originalMethod.apply(this, args);
};
}
class User {
register( @validateEmail email: string) {
return `Registered with email: ${email}`;
}
}
const user = new User();
try {
console.log(user.register("test@example.com")); // Output: Registered with email: test@example.com
// user.register("invalid-email"); // Throws an error
} catch (error:any) {
console.error(error.message);
}
説æïŒ
validateEmailãã³ã¬ãŒã¿ãŒã¯ããã©ã¡ãŒã¿ãæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ãããã©ããããã§ãã¯ããããã«æ£èŠè¡šçŸã䜿çšããŸãã- ãã©ã¡ãŒã¿ãæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ãªãå Žåããšã©ãŒãã¹ããŒãããŸãã
è€æ°ã®ããªããŒã¿ãŒã®çµã¿åãã
validateãã³ã¬ãŒã¿ãŒãšã«ã¹ã¿ã ããªããŒã¿ãŒé¢æ°ã䜿çšããŠãè€æ°ã®ããªããŒã¿ãŒãçµã¿åãããããšãã§ããŸãã
function isNotEmptyString(value: any): boolean {
return typeof value === 'string' && value.trim() !== '';
}
function isPositiveNumber(value: any): boolean {
return typeof value === 'number' && value > 0;
}
class Product {
@validate(isNotEmptyString, isPositiveNumber)
create(name: string, price: number) {
return `Product created: ${name} - $${price}`;
}
}
const product = new Product();
try {
console.log(product.create("Laptop", 1200)); // Output: Product created: Laptop - $1200
// product.create("", 0); // Throws an error
} catch (error:any) {
console.error(error.message);
}
説æïŒ
isNotEmptyStringããªããŒã¿ãŒã¯ãæååã空çœãããªãã³ã°ããåŸã«ç©ºã§ãªãããšããã§ãã¯ããŸããisPositiveNumberããªããŒã¿ãŒã¯ãå€ãæ£ã®æ°ã§ãããã©ããããã§ãã¯ããŸããvalidateãã³ã¬ãŒã¿ãŒã¯ãProductã¯ã©ã¹ã®createã¡ãœããã«äž¡æ¹ã®ããªããŒã¿ãŒãé©çšããããã«äœ¿çšãããŸãã
ãã©ã¡ãŒã¿æ€èšŒã§ãã³ã¬ãŒã¿ãŒã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
ãã©ã¡ãŒã¿æ€èšŒã«ãã³ã¬ãŒã¿ãŒã䜿çšããéã«èæ ®ãã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- ãã³ã¬ãŒã¿ãŒãã·ã³ãã«ã«ä¿ã€ïŒãã³ã¬ãŒã¿ãŒã¯æ€èšŒããžãã¯ã«éäžããè€éãªèšç®ãé¿ããã¹ãã§ãã
- æç¢ºãªãšã©ãŒã¡ãã»ãŒãžãæäŸããïŒãšã©ãŒã¡ãã»ãŒãžãæçã§ãéçºè ãæ€èšŒã®å€±æãçè§£ããã®ã«åœ¹ç«ã€ããã«ããŸãã
- æå³ã®ããååã䜿çšããïŒãã³ã¬ãŒã¿ãŒã«ã¯ãã³ãŒãã®å¯èªæ§ãåäžãããããã«èª¬æçãªååãéžæããŸãã
- ãã³ã¬ãŒã¿ãŒãææžåããïŒãã³ã¬ãŒã¿ãŒã®ç®çãšäœ¿çšæ³ãææžåããçè§£ãšä¿å®ã容æã«ããŸãã
- ããã©ãŒãã³ã¹ãèæ ®ããïŒãã³ã¬ãŒã¿ãŒã¯æ©èœã远å ãã䟿å©ãªæ¹æ³ãæäŸããŸãããç¹ã«ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã«æ³šæããŠãã ããã
- åå®å šæ§ãé«ããããã«TypeScriptã䜿çšããïŒTypeScriptã¯ãã³ã¬ãŒã¿ãŒã®çµã¿èŸŒã¿ãµããŒããæäŸããåå®å šæ§ã匷åããããããã³ã¬ãŒã¿ãŒããŒã¹ã®æ€èšŒããžãã¯ã®éçºãšä¿å®ã容æã«ãªããŸãã
- ãã³ã¬ãŒã¿ãŒã培åºçã«ãã¹ãããïŒåäœãã¹ããäœæããŠããã³ã¬ãŒã¿ãŒãæ£ããæ©èœããããŸããŸãªã·ããªãªãé©åã«åŠçããããšã確èªããŸãã
å®äžçã®äŸãšãŠãŒã¹ã±ãŒã¹
ãã³ã¬ãŒã¿ãŒããã©ã¡ãŒã¿æ€èšŒã«ã©ã®ããã«äœ¿çšã§ãããã®å®äžçã®äŸãããã€ã玹ä»ããŸãïŒ
- APIãªã¯ãšã¹ãã®æ€èšŒïŒãã³ã¬ãŒã¿ãŒã¯ãåä¿¡APIãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ãæ€èšŒããæåŸ
ãããããŒã¿åãšåœ¢åŒã«æºæ ããŠããããšã確èªããããã«äœ¿çšã§ããŸããããã«ãããããã¯ãšã³ãããžãã¯ã§ã®äºæããªãåäœãé²ããŸãã APIãšã³ããã€ã³ãã
usernameãemailãpasswordãªã©ã®ãã©ã¡ãŒã¿ãæã€ãŠãŒã¶ãŒç»é²ãªã¯ãšã¹ããæåŸ ããã·ããªãªãèããŠã¿ãŸãããããã³ã¬ãŒã¿ãŒã䜿çšããŠããããã®ãã©ã¡ãŒã¿ãååšããæ£ããåïŒæååïŒã§ãããç¹å®ã®åœ¢åŒïŒäŸïŒæ£èŠè¡šçŸã䜿çšããã¡ãŒã«ã¢ãã¬ã¹ã®æ€èšŒïŒã«æºæ ããŠããããšãæ€èšŒã§ããŸãã - ãã©ãŒã å ¥åã®æ€èšŒïŒãã³ã¬ãŒã¿ãŒã¯ããã©ãŒã å ¥åãã£ãŒã«ããæ€èšŒãããŠãŒã¶ãŒãæå¹ãªããŒã¿ãå ¥åããããšãä¿èšŒããããã«äœ¿çšã§ããŸããäŸãã°ãéµäŸ¿çªå·ãã£ãŒã«ããç¹å®ã®åœã®æå¹ãªéµäŸ¿çªå·åœ¢åŒãå«ãã§ããããšãæ€èšŒãããªã©ã§ãã
- ããŒã¿ããŒã¹ã¯ãšãªã®æ€èšŒïŒãã³ã¬ãŒã¿ãŒã¯ãããŒã¿ããŒã¹ã¯ãšãªã«æž¡ããããã©ã¡ãŒã¿ãæ€èšŒããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ãé²ãããã«äœ¿çšã§ããŸãããŠãŒã¶ãŒãæäŸããããŒã¿ãããŒã¿ããŒã¹ã¯ãšãªã§äœ¿çšãããåã«é©åã«ãµãã¿ã€ãºãããŠããããšãä¿èšŒããŸããããã«ã¯ãããŒã¿åãé·ãã圢åŒã®ãã§ãã¯ãããã³æªæã®ããã³ãŒãã®æ¿å ¥ãé²ãããã®ç¹æ®æåã®ãšã¹ã±ãŒããå«ãŸããŸãã
- èšå®ãã¡ã€ã«ã®æ€èšŒïŒãã³ã¬ãŒã¿ãŒã¯ãèšå®ãã¡ã€ã«ã®èšå®ãæ€èšŒãããããã蚱容ç¯å²å ã§ãããæ£ããåã§ããããšãä¿èšŒããããã«äœ¿çšã§ããŸãã
- ããŒã¿ã®ã·ãªã¢ã«å/ãã·ãªã¢ã«åïŒãã³ã¬ãŒã¿ãŒã¯ãã·ãªã¢ã«åããã³ãã·ãªã¢ã«åããã»ã¹äžã«ããŒã¿ãæ€èšŒããããŒã¿ã®æŽåæ§ã確ä¿ããããŒã¿ã®ç Žæãé²ãããã«äœ¿çšã§ããŸããJSONããŒã¿ãåŠçããåã«ãã®æ§é ãæ€èšŒããå¿ é ãã£ãŒã«ããããŒã¿åãããã³åœ¢åŒã匷å¶ããŸãã
ãã³ã¬ãŒã¿ãŒãšä»ã®æ€èšŒæè¡ãšã®æ¯èŒ
ãã³ã¬ãŒã¿ãŒã¯ãã©ã¡ãŒã¿æ€èšŒã®ããã®åŒ·åãªããŒã«ã§ãããä»ã®æ€èšŒæè¡ãšæ¯èŒããŠãã®é·æãšçæãçè§£ããããšãäžå¯æ¬ ã§ãïŒ
- æåæ€èšŒïŒæåæ€èšŒã§ã¯ãæ€èšŒããžãã¯ã颿°å ã«çŽæ¥èšè¿°ããŸãããã®ã¢ãããŒãã¯ãç¹ã«è€éãªæ€èšŒã«ãŒã«ã®å Žåãé¢åã§ãšã©ãŒãçºçãããããªãå¯èœæ§ããããŸãããã³ã¬ãŒã¿ãŒã¯ããã宣èšçã§åå©çšå¯èœãªã¢ãããŒããæäŸããŸãã
- æ€èšŒã©ã€ãã©ãªïŒæ€èšŒã©ã€ãã©ãªã¯ãäºåã«æ§ç¯ãããæ€èšŒé¢æ°ãšã«ãŒã«ã®ã»ãããæäŸããŸãããããã®ã©ã€ãã©ãªã¯äŸ¿å©ã§ããããã³ã¬ãŒã¿ãŒã»ã©æè»æ§ãã«ã¹ã¿ãã€ãºæ§ããªãå ŽåããããŸããJoiãYupã®ãããªã©ã€ãã©ãªã¯ãªããžã§ã¯ãå šäœãæ€èšŒããããã®ã¹ããŒããå®çŸ©ããã®ã«åªããŠããŸããããã³ã¬ãŒã¿ãŒã¯åã ã®ãã©ã¡ãŒã¿ãæ€èšŒããã®ã«åªããŠããŸãã
- ããã«ãŠã§ã¢ïŒããã«ãŠã§ã¢ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã§ã®ãªã¯ãšã¹ãæ€èšŒã«ãã䜿çšãããŸããããã«ãŠã§ã¢ã¯ãªã¯ãšã¹ãå šäœãæ€èšŒããã®ã«é©ããŠããŸããããã³ã¬ãŒã¿ãŒã¯åã ã®é¢æ°ãã©ã¡ãŒã¿ã®ããè©³çŽ°ãªæ€èšŒã«äœ¿çšã§ããŸãã
çµè«
JavaScriptãã³ã¬ãŒã¿ãŒã¯ããã©ã¡ãŒã¿æ€èšŒãå®è£ ããããã®åŒ·åã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸãããã³ã¬ãŒã¿ãŒã䜿çšããããšã§ãã³ãŒãã®å¯èªæ§ãåäžãããå®åã³ãŒããåæžããã³ãŒãã®åå©çšæ§ãé«ããæ€èšŒããžãã¯ãã³ã¢ããžãã¹ããžãã¯ããåé¢ã§ããŸããAPIãWebã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãã®ä»ã®çš®é¡ã®ãœãããŠã§ã¢ãæ§ç¯ããŠããå Žåã§ãããã³ã¬ãŒã¿ãŒã¯ããŒã¿ã®æŽåæ§ã確ä¿ããããå ç¢ã§ä¿å®ããããã³ãŒããäœæããã®ã«åœ¹ç«ã¡ãŸãã
ãã³ã¬ãŒã¿ãŒãæ¢æ±ããéã«ã¯ããã¹ããã©ã¯ãã£ã¹ã«åŸããå®äžçã®äŸãèæ ®ãããã³ã¬ãŒã¿ãŒãä»ã®æ€èšŒæè¡ãšæ¯èŒããŠãç¹å®ã®ããŒãºã«æé©ãªã¢ãããŒããæ±ºå®ããããšãå¿ããªãã§ãã ããããã³ã¬ãŒã¿ãŒãšãã®ãã©ã¡ãŒã¿æ€èšŒãžã®å¿çšããã£ãããšçè§£ããããšã§ãJavaScriptã³ãŒãã®å質ãšä¿¡é Œæ§ãå€§å¹ ã«åäžãããããšãã§ããŸãã
ããã«ããã³ã¬ãŒã¿ãŒããã€ãã£ãã§ãµããŒãããTypeScriptã®æ¡çšãå¢å ããŠããããšãããã®æè¡ãçŸä»£ã®JavaScriptéçºã«ãšã£ãŠããã«é åçãªãã®ã«ããŠããŸãããã©ã¡ãŒã¿æ€èšŒã«ãã³ã¬ãŒã¿ãŒãæ¡çšããããšã¯ãããã¯ãªãŒã³ã§ãä¿å®ãããããããå ç¢ãªJavaScriptã¢ããªã±ãŒã·ã§ã³ãäœæããããã®äžæ©ã§ãã