JavaScriptã¢ãžã¥ãŒã«ãµãŒãã¹ãã¿ãŒã³ãæ€èšããå ç¢ãªããžãã¹ããžãã¯ã®ã«ãã»ã«åãã³ãŒãã®çµç¹åã®æ¹åãå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ä¿å®æ§ãé«ããŸãã
JavaScriptã¢ãžã¥ãŒã«ãµãŒãã¹ãã¿ãŒã³ïŒã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ããžãã¹ããžãã¯ã®ã«ãã»ã«å
çŸä»£ã®JavaScriptéçºãç¹ã«å€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåãããžãã¹ããžãã¯ã广çã«ç®¡çããã³ã«ãã»ã«åããããšãéèŠã§ããæ§é åãäžååãªã³ãŒãã¯ãã¡ã³ããã³ã¹ã®æªå€¢ãåå©çšæ§ã®äœäžãè€éãã®å¢å€§ã«ã€ãªããå¯èœæ§ããããŸããJavaScriptã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ã¯ãã³ãŒããæŽçããé¢å¿ã®åé¢ã匷å¶ããããä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ã®é«ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åªãããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã®èšäºã§ã¯ããããã®ãã¿ãŒã³ã«ã€ããŠèª¬æããå®éçãªäŸã瀺ããããŸããŸãªã°ããŒãã«ã³ã³ããã¹ãã§ã©ã®ããã«é©çšã§ãããã瀺ããŸãã
ããžãã¹ããžãã¯ãã«ãã»ã«åããçç±
ããžãã¹ããžãã¯ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãæšé²ããã«ãŒã«ãšããã»ã¹ãå«ãŸããŸããããŒã¿ã®å€æãæ€èšŒãããã³åŠçæ¹æ³ã決å®ããŸãããã®ããžãã¯ãã«ãã»ã«åãããšãããã€ãã®éèŠãªå©ç¹ããããŸãã
- ã³ãŒãã®çµç¹åã®æ¹åïŒã¢ãžã¥ãŒã«ã¯æç¢ºãªæ§é ãæäŸããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®éšåãç°¡åã«èŠã€ããçè§£ãã倿Žã§ããããã«ããŸãã
- åå©çšæ§ã®åäžïŒæç¢ºã«å®çŸ©ãããã¢ãžã¥ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåããŸãã¯ãŸã£ããç°ãªããããžã§ã¯ãã§ãåå©çšã§ããŸããããã«ãããã³ãŒãã®éè€ãæžããäžè²«æ§ãåäžããŸãã
- ä¿å®æ§ã®åäžïŒããžãã¹ããžãã¯ã®å€æŽã¯ãç¹å®ã®ã¢ãžã¥ãŒã«å ã§åé¢ã§ãããããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«æå³ããªãå¯äœçšãçºçãããªã¹ã¯ãæå°éã«æããããŸãã
- ãã¹ãã®ç°¡çŽ åïŒã¢ãžã¥ãŒã«ã¯åå¥ã«ãã¹ãã§ãããããããžãã¹ããžãã¯ãæ£ããæ©èœããŠããããšãç°¡åã«ç¢ºèªã§ããŸããããã¯ãç°ãªãã³ã³ããŒãã³ãéã®çžäºäœçšãäºæž¬ããã®ãé£ããè€éãªã·ã¹ãã ã§ã¯ç¹ã«éèŠã§ãã
- è€éãã®è»œæžïŒã¢ããªã±ãŒã·ã§ã³ãããå°ããããã管çããããã¢ãžã¥ãŒã«ã«åå²ããããšã§ãéçºè ã¯ã·ã¹ãã ã®å šäœçãªè€éãã軜æžã§ããŸãã
JavaScriptã¢ãžã¥ãŒã«ãã¿ãŒã³
JavaScriptã«ã¯ãã¢ãžã¥ãŒã«ãäœæããããã®ããã€ãã®æ¹æ³ããããŸããæãäžè¬çãªã¢ãããŒããããã€ã瀺ããŸãã
1. 峿颿°åŒïŒIIFEïŒ
IIFEãã¿ãŒã³ã¯ãJavaScriptã§ã¢ãžã¥ãŒã«ãäœæããããã®å€å žçãªã¢ãããŒãã§ããããã«ã¯ãããã«å®è¡ããã颿°å ã§ã³ãŒããã©ããããããšãå«ãŸããŸããããã«ããããã©ã€ããŒãã¹ã³ãŒããäœæãããIIFEå ã§å®çŸ©ããã倿°ãšé¢æ°ãã°ããŒãã«åå空éãæ±æããã®ãé²ããŸãã
(function() {
// ãã©ã€ããŒã倿°ãšé¢æ°
var privateVariable = "ããã¯ãã©ã€ããŒãã§ã";
function privateFunction() {
console.log(privateVariable);
}
// ãããªãã¯API
window.myModule = {
publicMethod: function() {
privateFunction();
}
};
})();
äŸïŒã°ããŒãã«é貚ã³ã³ããŒã¿ãŒã¢ãžã¥ãŒã«ãæ³åããŠãã ãããIIFEã䜿çšããŠãçºæ¿ã¬ãŒãããŒã¿ãéå ¬éã«ããå¿ èŠãªå€æé¢æ°ã®ã¿ãå ¬éããããšãã§ããŸãã
(function() {
var exchangeRates = {
USD: 1.0,
EUR: 0.85,
JPY: 110.0,
GBP: 0.75 // çºæ¿ã¬ãŒãã®äŸ
};
function convert(amount, fromCurrency, toCurrency) {
if (!exchangeRates[fromCurrency] || !exchangeRates[toCurrency]) {
return "ç¡å¹ãªé貚";
}
return amount * (exchangeRates[toCurrency] / exchangeRates[fromCurrency]);
}
window.currencyConverter = {
convert: convert
};
})();
// äœ¿ãæ¹ïŒ
var convertedAmount = currencyConverter.convert(100, "USD", "EUR");
console.log(convertedAmount); // åºåïŒ85
å©ç¹ïŒ
- å®è£ ãç°¡å
- åªããã«ãã»ã«åãæäŸ
æ¬ ç¹ïŒ
- ã°ããŒãã«ã¹ã³ãŒãã«äŸåããïŒãã ããã©ãããŒã«ãã£ãŠè»œæžãããïŒ
- å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§äŸåé¢ä¿ã管çããã®ãé¢åã«ãªãå¯èœæ§ããã
2. CommonJS
CommonJSã¯ãå
ã
Node.jsã䜿çšãããµãŒããŒãµã€ãJavaScriptéçºçšã«èšèšãããã¢ãžã¥ãŒã«ã·ã¹ãã ã§ããrequire()颿°ã䜿çšããŠã¢ãžã¥ãŒã«ãã€ã³ããŒãããmodule.exportsãªããžã§ã¯ãã䜿çšããŠã¢ãžã¥ãŒã«ããšã¯ã¹ããŒãããŸãã
äŸïŒãŠãŒã¶ãŒèªèšŒãåŠçããã¢ãžã¥ãŒã«ãæ€èšããŠãã ããã
auth.js
// auth.js
function authenticateUser(username, password) {
// ããŒã¿ããŒã¹ãŸãã¯ãã®ä»ã®ãœãŒã¹ã«å¯ŸããŠãŠãŒã¶ãŒè³æ Œæ
å ±ãæ€èšŒããŸã
if (username === "testuser" && password === "password") {
return { success: true, message: "èªèšŒã«æåããŸãã" };
} else {
return { success: false, message: "ç¡å¹ãªè³æ Œæ
å ±" };
}
}
module.exports = {
authenticateUser: authenticateUser
};
app.js
// app.js
const auth = require('./auth');
const result = auth.authenticateUser("testuser", "password");
console.log(result);
å©ç¹ïŒ
- æç¢ºãªäŸåé¢ä¿ç®¡ç
- Node.jsç°å¢ã§åºã䜿çšãããŠãã
æ¬ ç¹ïŒ
- ãã©ãŠã¶ã§ãã€ãã£ãã«ãµããŒããããŠããªãïŒWebpackãBrowserifyãªã©ã®ãã³ãã©ãŒãå¿ èŠïŒ
3. éåæã¢ãžã¥ãŒã«å®çŸ©ïŒAMDïŒ
AMDã¯ãäž»ã«ãã©ãŠã¶ç°å¢ã§ã®ã¢ãžã¥ãŒã«ã®éåæããŒãçšã«èšèšãããŠããŸããdefine()颿°ã䜿çšããŠã¢ãžã¥ãŒã«ãå®çŸ©ãããã®äŸåé¢ä¿ãæå®ããŸãã
äŸïŒç°ãªããã±ãŒã«ã«åŸã£ãŠæ¥ä»ããã©ãŒãããããã¢ãžã¥ãŒã«ããããšããŸãã
// date-formatter.js
define(['moment'], function(moment) {
function formatDate(date, locale) {
return moment(date).locale(locale).format('LL');
}
return {
formatDate: formatDate
};
});
// main.js
require(['date-formatter'], function(dateFormatter) {
var formattedDate = dateFormatter.formatDate(new Date(), 'fr');
console.log(formattedDate);
});
å©ç¹ïŒ
- ã¢ãžã¥ãŒã«ã®éåæããŒã
- ãã©ãŠã¶ç°å¢ã«é©ããŠãã
æ¬ ç¹ïŒ
- CommonJSãããæ§æãè€é
4. ECMAScriptã¢ãžã¥ãŒã«ïŒESMïŒ
ESMã¯ãECMAScript 2015ïŒES6ïŒã§å°å
¥ãããJavaScriptã®ãã€ãã£ãã¢ãžã¥ãŒã«ã·ã¹ãã ã§ããimportããã³exportããŒã¯ãŒãã䜿çšããŠãäŸåé¢ä¿ã管çããŸããESMã¯ãŸããŸãæ®åããŠãããææ°ã®ãã©ãŠã¶ãšNode.jsã§ãµããŒããããŠããŸãã
äŸïŒæ°åŠçèšç®ãå®è¡ããããã®ã¢ãžã¥ãŒã«ãæ€èšããŠãã ããã
math.js
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
app.js
// app.js
import { add, subtract } from './math.js';
const sum = add(5, 3);
const difference = subtract(10, 2);
console.log(sum); // åºåïŒ8
console.log(difference); // åºåïŒ8
å©ç¹ïŒ
- ãã©ãŠã¶ãšNode.jsã§ã®ãã€ãã£ããµããŒã
- éçåæãšããªãŒã·ã§ã€ãã³ã°ïŒæªäœ¿çšã³ãŒãã®åé€ïŒ
- æç¢ºã§ç°¡æœãªæ§æ
æ¬ ç¹ïŒ
- å€ããã©ãŠã¶ã«ã¯ãã«ãããã»ã¹ïŒäŸïŒBabelïŒãå¿ èŠãææ°ã®ãã©ãŠã¶ã¯ESMããã€ãã£ãã«ãµããŒãããåŸåã匷ãŸã£ãŠããŸãããããå¹ åºãäºææ§ã®ããã«ãã©ã³ã¹ãã€ã«ããããšãäžè¬çã§ãã
JavaScriptãµãŒãã¹ãã¿ãŒã³
ã¢ãžã¥ãŒã«ãã¿ãŒã³ã¯ã³ãŒããåå©çšå¯èœãªãŠãããã«æŽçããæ¹æ³ãæäŸããŸããããµãŒãã¹ãã¿ãŒã³ã¯ç¹å®ã®ããžãã¹ããžãã¯ãã«ãã»ã«åãããã®ããžãã¯ã«ã¢ã¯ã»ã¹ããããã®äžè²«ããã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããšã«çŠç¹ãåœãŠãŠããŸãããµãŒãã¹ã¯ãåºæ¬çã«ç¹å®ã®ã¿ã¹ã¯ãŸãã¯é¢é£ããã¿ã¹ã¯ã®ã»ãããå®è¡ããã¢ãžã¥ãŒã«ã§ãã
1. åçŽãªãµãŒãã¹
åçŽãªãµãŒãã¹ã¯ãç¹å®ã®æäœãå®è¡ããäžé£ã®é¢æ°ãŸãã¯ã¡ãœãããå ¬éããã¢ãžã¥ãŒã«ã§ããããã¯ãããžãã¹ããžãã¯ãã«ãã»ã«åããæç¢ºãªAPIãæäŸããç°¡åãªæ¹æ³ã§ãã
äŸïŒãŠãŒã¶ãŒãããã¡ã€ã«ããŒã¿ãåŠçããããã®ãµãŒãã¹ã
// user-profile-service.js
const userProfileService = {
getUserProfile: function(userId) {
// ããŒã¿ããŒã¹ãŸãã¯APIãããŠãŒã¶ãŒãããã¡ã€ã«ããŒã¿ãååŸããããžãã¯
return new Promise(resolve => {
setTimeout(() => {
resolve({ id: userId, name: "John Doe", email: "john.doe@example.com" });
}, 500);
});
},
updateUserProfile: function(userId, profileData) {
// ããŒã¿ããŒã¹ãŸãã¯APIã§ãŠãŒã¶ãŒãããã¡ã€ã«ããŒã¿ãæŽæ°ããããžãã¯
return new Promise(resolve => {
setTimeout(() => {
resolve({ success: true, message: "ãããã¡ã€ã«ãæ£åžžã«æŽæ°ãããŸãã" });
}, 500);
});
}
};
export default userProfileService;
// äœ¿ãæ¹ïŒå¥ã®ã¢ãžã¥ãŒã«ïŒïŒ
import userProfileService from './user-profile-service.js';
userProfileService.getUserProfile(123)
.then(profile => console.log(profile));
å©ç¹ïŒ
- çè§£ãšå®è£ ãç°¡å
- é¢å¿ã®æç¢ºãªåé¢ãæäŸ
æ¬ ç¹ïŒ
- å€§èŠæš¡ãªãµãŒãã¹ã§äŸåé¢ä¿ã管çããã®ãé£ãããªãå¯èœæ§ããã
- ããé«åºŠãªãã¿ãŒã³ã»ã©æè»ã§ã¯ãªãå¯èœæ§ããã
2. ãã¡ã¯ããªãŒãã¿ãŒã³
ãã¡ã¯ããªãŒãã¿ãŒã³ã¯ãå ·äœçãªã¯ã©ã¹ãæå®ããã«ãªããžã§ã¯ããäœæããæ¹æ³ãæäŸããŸããç°ãªãæ§æãŸãã¯äŸåé¢ä¿ãæã€ãµãŒãã¹ãäœæããããã«äœ¿çšã§ããŸãã
äŸïŒç°ãªãæ¯æãã²ãŒããŠã§ã€ãšå¯Ÿè©±ããããã®ãµãŒãã¹ã
// payment-gateway-factory.js
function createPaymentGateway(gatewayType, config) {
switch (gatewayType) {
case 'stripe':
return new StripePaymentGateway(config);
case 'paypal':
return new PayPalPaymentGateway(config);
default:
throw new Error('ç¡å¹ãªæ¯æãã²ãŒããŠã§ã€ã¿ã€ã');
}
}
class StripePaymentGateway {
constructor(config) {
this.config = config;
}
processPayment(amount, token) {
// Stripe APIã䜿çšããŠæ¯æããåŠçããããžãã¯
console.log(`Processing ${amount} via Stripe with token ${token}`);
return { success: true, message: "Stripeçµç±ã§æ¯æããæ£åžžã«åŠçãããŸãã" };
}
}
class PayPalPaymentGateway {
constructor(config) {
this.config = config;
}
processPayment(amount, accountId) {
// PayPal APIã䜿çšããŠæ¯æããåŠçããããžãã¯
console.log(`Processing ${amount} via PayPal with account ${accountId}`);
return { success: true, message: "PayPalçµç±ã§æ¯æããæ£åžžã«åŠçãããŸãã" };
}
}
export default {
createPaymentGateway: createPaymentGateway
};
// äœ¿ãæ¹ïŒ
import paymentGatewayFactory from './payment-gateway-factory.js';
const stripeGateway = paymentGatewayFactory.createPaymentGateway('stripe', { apiKey: 'YOUR_STRIPE_API_KEY' });
const paypalGateway = paymentGatewayFactory.createPaymentGateway('paypal', { clientId: 'YOUR_PAYPAL_CLIENT_ID' });
stripeGateway.processPayment(100, 'TOKEN123');
paypalGateway.processPayment(50, 'ACCOUNT456');
å©ç¹ïŒ
- ç°ãªããµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ãäœæããéã®æè»æ§
- ãªããžã§ã¯ãäœæã®è€éããé èœ
æ¬ ç¹ïŒ
- ã³ãŒãã«è€éããå ããå¯èœæ§ããã
3. äŸåæ§æ³šå ¥ïŒDIïŒãã¿ãŒã³
äŸåæ§æ³šå ¥ã¯ããµãŒãã¹ã«äŸåé¢ä¿ãèªåã§äœæãããã®ã§ã¯ãªãããµãŒãã¹ã«äŸåé¢ä¿ãæäŸã§ããããã«ãããã¶ã€ã³ãã¿ãŒã³ã§ããããã«ãããççµåãä¿é²ãããã³ãŒãã®ãã¹ããšä¿å®ã容æã«ãªããŸãã
äŸïŒã³ã³ãœãŒã«ãŸãã¯ãã¡ã€ã«ã«ã¡ãã»ãŒãžããã°ã«èšé²ãããµãŒãã¹ã
// logger.js
class Logger {
constructor(output) {
this.output = output;
}
log(message) {
this.output.write(message + '\n');
}
}
// console-output.js
class ConsoleOutput {
write(message) {
console.log(message);
}
}
// file-output.js
const fs = require('fs');
class FileOutput {
constructor(filePath) {
this.filePath = filePath;
}
write(message) {
fs.appendFileSync(this.filePath, message + '\n');
}
}
// app.js
const Logger = require('./logger.js');
const ConsoleOutput = require('./console-output.js');
const FileOutput = require('./file-output.js');
const consoleOutput = new ConsoleOutput();
const fileOutput = new FileOutput('log.txt');
const consoleLogger = new Logger(consoleOutput);
const fileLogger = new Logger(fileOutput);
consoleLogger.log('This is a console log message');
fileLogger.log('This is a file log message');
å©ç¹ïŒ
- ãµãŒãã¹ãšãã®äŸåé¢ä¿éã®ççµå
- ãã¹ãå®¹ææ§ã®åäž
- æè»æ§ã®åäž
æ¬ ç¹ïŒ
- ç¹ã«å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãè€éããå¢ãå¯èœæ§ããããŸããäŸåæ§æ³šå ¥ã³ã³ããïŒäŸïŒInversifyJSïŒã䜿çšãããšããã®è€éãã管çããã®ã«åœ¹ç«ã¡ãŸãã
4. å¶åŸ¡ã®å転ïŒIoCïŒã³ã³ãã
IoCã³ã³ããïŒDIã³ã³ãããšãåŒã°ããŸãïŒã¯ãäŸåé¢ä¿ã®äœæãšæ³šå ¥ã管çãããã¬ãŒã ã¯ãŒã¯ã§ããäŸåæ§æ³šå ¥ã®ããã»ã¹ãç°¡çŽ åããå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§äŸåé¢ä¿ãç°¡åã«æ§æããã³ç®¡çã§ããããã«ããŸããã³ã³ããŒãã³ããšãã®äŸåé¢ä¿ã®äžå€®ã¬ãžã¹ããªãæäŸããã³ã³ããŒãã³ããèŠæ±ããããšãã«ãããã®äŸåé¢ä¿ãèªåçã«è§£æ±ºããããšã§æ©èœããŸãã
InversifyJSã䜿çšããäŸïŒ
// InversifyJSãã€ã³ã¹ããŒã«ïŒnpm install inversify reflect-metadata --save
// logger.ts
import { injectable } from "inversify";
export interface Logger {
log(message: string): void;
}
@injectable()
export class ConsoleLogger implements Logger {
log(message: string): void {
console.log(message);
}
}
// notification-service.ts
import { injectable, inject } from "inversify";
import { Logger } from "./logger";
import { TYPES } from "./types";
export interface NotificationService {
sendNotification(message: string): void;
}
@injectable()
export class EmailNotificationService implements NotificationService {
private logger: Logger;
constructor(@inject(TYPES.Logger) logger: Logger) {
this.logger = logger;
}
sendNotification(message: string): void {
this.logger.log(`Sending email notification: ${message}`);
// ã¡ãŒã«éä¿¡ãã·ãã¥ã¬ãŒã
console.log(`Email sent: ${message}`);
}
}
// types.ts
export const TYPES = {
Logger: Symbol.for("Logger"),
NotificationService: Symbol.for("NotificationService")
};
// container.ts
import { Container } from "inversify";
import { TYPES } from "./types";
import { Logger, ConsoleLogger } from "./logger";
import { NotificationService, EmailNotificationService } from "./notification-service";
import "reflect-metadata"; // InversifyJSã«å¿
èŠ
const container = new Container();
container.bind(TYPES.Logger).to(ConsoleLogger);
container.bind(TYPES.NotificationService).to(EmailNotificationService);
export { container };
// app.ts
import { container } from "./container";
import { TYPES } from "./types";
import { NotificationService } from "./notification-service";
const notificationService = container.get(TYPES.NotificationService);
notificationService.sendNotification("Hello from InversifyJS!");
説æïŒ
- `@injectable()`: ã³ã³ããã«ããæ³šå ¥å¯èœãšããŠã¯ã©ã¹ãããŒã¯ããŸãã
- `@inject(TYPES.Logger)`: ã³ã³ã¹ãã©ã¯ã¿ã`Logger`ã€ã³ã¿ãŒãã§ã€ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãåãåãå¿ èŠãããããšãæå®ããŸãã
- `TYPES.Logger` & `TYPES.NotificationService`: ãã€ã³ãã£ã³ã°ã®èå¥ã«äœ¿çšãããã·ã³ãã«ãã·ã³ãã«ã䜿çšãããšãååã®è¡çªãåé¿ã§ããŸãã
- `container.bind
(TYPES.Logger).to(ConsoleLogger)`: ã³ã³ããã`Logger`ãå¿ èŠãšããå Žåã`ConsoleLogger`ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿ èŠãããããšãç»é²ããŸãã - `container.get
(TYPES.NotificationService)`: `NotificationService`ãšãã®ãã¹ãŠã®äŸåé¢ä¿ã解決ããŸãã
å©ç¹ïŒ
- äžå åãããäŸåé¢ä¿ç®¡ç
- ç°¡çŽ åãããäŸåæ§æ³šå ¥
- ãã¹ãå®¹ææ§ã®åäž
æ¬ ç¹ïŒ
- æåã¯ã³ãŒããçè§£ããã®ãé£ãããªãå¯èœæ§ã®ããæœè±¡åã®ã¬ã€ã€ãŒã远å
- æ°ãããã¬ãŒã ã¯ãŒã¯ãåŠç¿ããå¿ èŠããã
ç°ãªãã°ããŒãã«ã³ã³ããã¹ãã§ã®ã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ã®é©çš
ã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ã®ååã¯æ®éçã«é©çšå¯èœã§ããããã®å®è£ ã¯ç¹å®ã®å°åãŸãã¯ããžãã¹ã³ã³ããã¹ãã«åãããŠèª¿æŽããå¿ èŠãããå ŽåããããŸããããã€ãã®äŸã次ã«ç€ºããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ïŒã¢ãžã¥ãŒã«ã䜿çšããŠãæ¥ä»åœ¢åŒãé貚èšå·ãèšèªç¿»èš³ãªã©ã®ãã±ãŒã«åºæã®ããŒã¿ãã«ãã»ã«åã§ããŸããæ¬¡ã«ããµãŒãã¹ã䜿çšããŠããŠãŒã¶ãŒã®å Žæã«é¢ä¿ãªãããã®ããŒã¿ã«ã¢ã¯ã»ã¹ããããã®äžè²«ããã€ã³ã¿ãŒãã§ã€ã¹ãæäŸã§ããŸããããšãã°ãæ¥ä»ãã©ãŒããããµãŒãã¹ã¯ããã±ãŒã«ããšã«ç°ãªãã¢ãžã¥ãŒã«ã䜿çšããæ¥ä»ãåå°åã§æ£ãã圢åŒã§è¡šç€ºãããããã«ããããšãã§ããŸãã
- æ¯æãåŠçïŒãã¡ã¯ããªãŒãã¿ãŒã³ã§ç€ºãããŠããããã«ãç°ãªãæ¯æãã²ãŒããŠã§ã€ã¯ããŸããŸãªå°åã§äžè¬çã§ãããµãŒãã¹ã¯ãç°ãªãæ¯æããããã€ããŒãšã®ããåãã®è€éããæœè±¡åããéçºè ãã³ã¢ããžãã¹ããžãã¯ã«éäžã§ããããã«ããŸããããšãã°ããšãŒãããã®eã³ããŒã¹ãµã€ãã¯SEPAãã€ã¬ã¯ãããããããµããŒãããå¿ èŠãããå ŽåããããŸãããåç±³ã®ãµã€ãã¯StripeãPayPalãªã©ã®ãããã€ããŒãä»ããã¯ã¬ãžããã«ãŒãåŠçã«çŠç¹ãåœãŠãå ŽåããããŸãã
- ããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒã¢ãžã¥ãŒã«ã䜿çšããŠãGDPRãCCPAã³ã³ãã©ã€ã¢ã³ã¹ãªã©ã®ããŒã¿ãã©ã€ãã·ãŒããžãã¯ãã«ãã»ã«åã§ããŸããæ¬¡ã«ããµãŒãã¹ã䜿çšããŠããŠãŒã¶ãŒã®å Žæã«é¢ä¿ãªããããŒã¿ãé¢é£ããèŠå¶ã«åŸã£ãŠåŠçãããããã«ããããšãã§ããŸããããšãã°ããŠãŒã¶ãŒããŒã¿ãµãŒãã¹ã«ã¯ãæ©å¯ããŒã¿ãæå·åããåæç®çã§ããŒã¿ãå¿ååãããŠãŒã¶ãŒãããŒã¿ã«ã¢ã¯ã»ã¹ãä¿®æ£ããŸãã¯åé€ã§ããããã«ããã¢ãžã¥ãŒã«ãå«ããããšãã§ããŸãã
- APIçµ±åïŒå°åã«ãã£ãŠå¯çšæ§ãäŸ¡æ Œãç°ãªãå€éšAPIãšçµ±åããå ŽåããµãŒãã¹ãã¿ãŒã³ã䜿çšãããšããããã®éãã«é©å¿ã§ããŸããããšãã°ããããã³ã°ãµãŒãã¹ã¯ãGoogleããããå©çšå¯èœã§æé ãªäŸ¡æ Œã®å°åã§äœ¿çšããä»ã®å°åã§ã¯Mapboxãªã©ã®ä»£æ¿ãããã€ããŒã«åãæ¿ããããšãã§ããŸãã
ã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ã®å®è£ ã«é¢ãããã¹ããã©ã¯ãã£ã¹
ã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ãæå€§éã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- æç¢ºãªè²¬ä»»ã®å®çŸ©ïŒåã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ã¯ãæç¢ºã§æç¢ºã«å®çŸ©ãããç®çãæã£ãŠããå¿ èŠããããŸãã倧ãããããŸãã¯è€éãããã¢ãžã¥ãŒã«ãäœæããããšã¯é¿ããŠãã ããã
- 説æçãªååã䜿çšããïŒã¢ãžã¥ãŒã«ãŸãã¯ãµãŒãã¹ã®ç®çãæ£ç¢ºã«åæ ããååãéžæããŸããããã«ãããä»ã®éçºè ãã³ãŒããçè§£ãããããªããŸãã
- æå°éã®APIãå ¬éããïŒå€éšãŠãŒã¶ãŒãã¢ãžã¥ãŒã«ãŸãã¯ãµãŒãã¹ãšå¯Ÿè©±ããããã«å¿ èŠãªé¢æ°ãšã¡ãœããã®ã¿ãå ¬éããŸããå éšå®è£ ã®è©³çްãé èœããŸãã
- ãŠããããã¹ãã®äœæïŒåã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ã®ãŠããããã¹ããäœæããŠãæ£ããæ©èœããŠããããšã確èªããŸããããã¯ããªã°ã¬ãã·ã§ã³ãé²ããã³ãŒãã®ä¿å®ã容æã«ããã®ã«åœ¹ç«ã¡ãŸããé«ããã¹ãã«ãã¬ããžãç®æããŠãã ããã
- ã³ãŒãã®ããã¥ã¡ã³ãåïŒé¢æ°ãšã¡ãœããã®èª¬æããã©ã¡ãŒã¿ãŒãããã³æ»ãå€ãå«ããåã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ã®APIãããã¥ã¡ã³ãåããŸãã JSDocãªã©ã®ããŒã«ã䜿çšããŠãããã¥ã¡ã³ããèªåçã«çæããŸãã
- ããã©ãŒãã³ã¹ãèæ ®ããïŒã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãèšèšããéã¯ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããŠãã ããããªãœãŒã¹ã倧éã«æ¶è²»ããã¢ãžã¥ãŒã«ãäœæããããšã¯é¿ããŠãã ãããé床ãšå¹çã®ããã«ã³ãŒããæé©åããŸãã
- ã³ãŒããªã³ã¿ãŒã䜿çšããïŒã³ãŒããªã³ã¿ãŒïŒäŸïŒESLintïŒãæ¡çšããŠãã³ãŒãã£ã³ã°æšæºãé©çšããæœåšçãªãšã©ãŒãç¹å®ããŸããããã¯ããããžã§ã¯ãå šäœã®ã³ãŒãå質ãšäžè²«æ§ãç¶æããã®ã«åœ¹ç«ã¡ãŸãã
çµè«
JavaScriptã¢ãžã¥ãŒã«ããã³ãµãŒãã¹ãã¿ãŒã³ã¯ãã³ãŒããæŽçããããžãã¹ããžãã¯ãã«ãã»ã«åããããä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ã®é«ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åŒ·åãªããŒã«ã§ãããããã®ãã¿ãŒã³ãçè§£ããŠé©çšããããšã«ãããéçºè ã¯çè§£ããã¹ããããã³æéã®çµéãšãšãã«é²åããããå ç¢ã§æ§é åãããã·ã¹ãã ãæ§ç¯ã§ããŸããç¹å®ã®å®è£ ã®è©³çްã¯ãããžã§ã¯ããšããŒã ã«ãã£ãŠç°ãªãå ŽåããããŸãããæ ¹æ¬çãªååã¯åããŸãŸã§ããé¢å¿ã®åé¢ãäŸåé¢ä¿ã®æå°åãããã³ããžãã¹ããžãã¯ã«ã¢ã¯ã»ã¹ããããã®äžè²«ããæç¢ºãªã€ã³ã¿ãŒãã§ã€ã¹ã®æäŸã§ãã
ã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã¯ããããã®ãã¿ãŒã³ãæ¡çšããããšãç¹ã«éèŠã§ããããŒã«ãªãŒãŒã·ã§ã³ãæ¯æãåŠçãããã³ããŒã¿ãã©ã€ãã·ãŒããžãã¯ãæç¢ºã«å®çŸ©ãããã¢ãžã¥ãŒã«ãšãµãŒãã¹ã«ã«ãã»ã«åããããšã§ããŠãŒã¶ãŒã®å Žæãæåçèæ¯ã«é¢ä¿ãªããé©å¿æ§ããããæºæ ããŠããã䜿ããããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã