ã°ããŒãã«ãªãœãããŠã§ã¢éçºç°å¢ã«ãããŠãæ£ç¢ºãªèå¥ãšå¹ççãªãããã°ã®ããã«ãReactã³ã³ããŒãã³ãã®ãšã©ãŒã广çã«ãã£ã³ã¬ãŒããªã³ãããæ¹æ³ãåŠã³ãŸããã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
Reactã³ã³ããŒãã³ãã®ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ïŒã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®äžæãªãšã©ãŒèå¥
ã°ããŒãã«ãªãœãããŠã§ã¢éçºã®çµ¶ãéãªãé²åã®äžã§ãã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ã確ä¿ããã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãæãéèŠã§ããReactã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæ§ç¯ããããã®äžè¬çãªJavaScriptã©ã€ãã©ãªã§ããããšã©ãŒç®¡çã«é¢ããŠåºæã®èª²é¡ãæ±ããŠããŸãããã®èšäºã§ã¯ãReactã³ã³ããŒãã³ãã®ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ãšããéèŠãªæŠå¿µã«ã€ããŠèª¬æããŸããããã¯ãæ£ç¢ºãªãšã©ãŒèå¥ãå¹ççãªãããã°ããããŠæçµçã«ã¯ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠããå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ããæè¡ã§ãã
ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã®éèŠæ§ã®çè§£
ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ã§çºçããåãšã©ãŒã«å¯ŸããŠäžæã®èå¥åãäœæããããã»ã¹ã§ãããã®èå¥åãã€ãŸããã£ã³ã¬ãŒããªã³ãã¯ãããžã¿ã«çœ²åãšããŠæ©èœããéçºè ã¯ãšã©ãŒã®æ£ç¢ºãªãœãŒã¹ãç¹å®ãããã®é »åºŠã远跡ãããã®åœ±é¿ãçè§£ããããšãã§ããŸãã广çãªãã£ã³ã¬ãŒããªã³ãã£ã³ã°ããªãå Žåãç¹ã«å€§èŠæš¡ã§ã°ããŒãã«ã«åæ£ãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã°ãããã«éå±ã§æéã®ãããäœæ¥ã«ãªãå¯èœæ§ããããŸãã
å€åœç±äŒæ¥ãããããã¯ãŒã¯ã®ç¶æ ããŠãŒã¶ãŒã®è¡åãæœåšçãªããŒã«ãªãŒãŒã·ã§ã³ã®åé¡ãããããç°ãªãããŸããŸãªå°åã«ãReactããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãå±éããŠããã·ããªãªãèããŠã¿ãŸãããããšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ããªãå Žåãæ¥æ¬ã®æ±äº¬ã®ãŠãŒã¶ãŒããå ±åããããšã©ãŒã®æ ¹æ¬åå ãç¹å®ããããšã¯éåžžã«å°é£ã§ãããã£ã³ã¬ãŒããªã³ãã£ã³ã°ã¯ããã®ãããªåé¡ãè¿ éã«èšºæããã³è§£æ±ºããããã«å¿ èŠãªéèŠãªã³ã³ããã¹ããæäŸããŸãã
Reactã§ã®ãšã©ãŒåŠçã®èª²é¡
Reactã®ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ã¯ããšã©ãŒåŠçã«åºæã®è€éãããããããŸãããšã©ãŒã¯ãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã¡ãœããïŒ`componentDidMount`ã`componentDidUpdate`ãªã©ïŒãã€ãã³ããã³ãã©ãŒå ããŸãã¯ã¬ã³ããªã³ã°ããã»ã¹èªäœã§çºçããå¯èœæ§ããããŸããããã«ãAPIããã®ããŒã¿ã®ãã§ãããªã©ã®éåææäœãããšã©ãŒã®åå ãšãªãå¯èœæ§ããããŸããé©åãªã¡ã«ããºã ããªããšããããã®ãšã©ãŒã¯ç°¡åã«å€±ãããããäžæçã«ãªã£ããããå¯èœæ§ãããããã®ãœãŒã¹ã远跡ããããšãå°é£ã«ãªããŸãã
Reactã®çµã¿èŸŒã¿ã®ãšã©ãŒå¢çã¯ãã¬ã³ããªã³ã°äžãã©ã€ããµã€ã¯ã«ã¡ãœãããããã³åã³ã³ããŒãã³ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§çºçãããšã©ãŒããã£ããã£ããã³åŠçããããã®åŒ·åãªããŒã«ã§ãããã ãããšã©ãŒå¢çã®ã¿ã«äŸåãããšãå¹ççãªãããã°ã«å¿ èŠãªè©³çŽ°ãªæ å ±ãåžžã«åŸããããšã¯éããŸãããããšãã°ãç¹å®ã³ã³ããŒãã³ãå ã§ãšã©ãŒãçºçããããšãç¥ãããšã¯åœ¹ç«ã¡ãŸããããã®ã³ã³ããŒãã³ãå ã®*æ£ç¢ºãª*åå ãšå Žæãç¥ãããšã¯ããã«äŸ¡å€ããããŸããããã§ããšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã圹ç«ã¡ãŸãã
Reactã³ã³ããŒãã³ãã®ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ãå®è£ ããããã®ãã¯ããã¯
Reactã³ã³ããŒãã³ãã®æå¹ãªãšã©ãŒãã£ã³ã¬ãŒããªã³ããäœæããããã«ãããã€ãã®æŠç¥ãæ¡çšã§ããŸãããããã®æŠç¥ã«ã¯ããšã©ãŒã®å æ¬çãªçè§£ãæäŸããããã«ãããŸããŸãªãã¯ããã¯ãçµã¿åãããããšãããå«ãŸããŸãã
1. ãšã©ãŒã³ã³ããã¹ããšã¡ã¿ããŒã¿
ã³ã¢ååã¯ããšã©ãŒãçºçãããšãã«å¯èœãªéãå€ãã®é¢é£ã³ã³ããã¹ãããã£ããã£ããããšã§ããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ã³ã³ããŒãã³ãåïŒãšã©ãŒãçºçããã³ã³ããŒãã³ãã®ååãããã¯å€ãã®å Žåãæãåºæ¬çãªæ å ±ã§ãã
- ãã¡ã€ã«ãšè¡çªå·ïŒãšã©ãŒãçºçãããã¡ã€ã«ãšè¡çªå·ãææ°ã®ãã³ãã©ãŒãšãã«ãããŒã«ã«ã¯ããããããã«åœ¹ç«ã€ããã«ããããã®ãœãŒã¹ããããå«ãŸããŠããããšããããããŸãã
- ãšã©ãŒã¡ãã»ãŒãžïŒJavaScriptãšã³ãžã³ã«ãã£ãŠçæããããšã©ãŒã¡ãã»ãŒãžèªäœã
- ã¹ã¿ãã¯ãã¬ãŒã¹ïŒãšã©ãŒãçºçããæç¹ã§ã®ã³ãŒã«ã¹ã¿ãã¯ãã¹ã¿ãã¯ãã¬ãŒã¹ã¯ããšã©ãŒã«ã€ãªããå®è¡ãã¹ã®ã¹ãããã·ã§ãããæäŸããŸãã
- PropsãšStateïŒã³ã³ããŒãã³ãã®propsãšstateã®çŸåšã®å€ããã®æ å ±ã¯ããšã©ãŒã«ã€ãªãã£ãæ¡ä»¶ãçè§£ããã®ã«éåžžã«åœ¹ç«ã¡ãŸãããã®æ å ±ã«æ©å¯ããŒã¿ãå«ããããšã«ã¯æ³šæããŠãã ããã
- ãŠãŒã¶ãŒãšãŒãžã§ã³ãïŒãŠãŒã¶ãŒã®ãã©ãŠã¶ãŒãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«é¢ããæ å ±ãããã¯ããã©ãŠã¶ãŒåºæãŸãã¯ããã€ã¹åºæã®åé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- ç°å¢ïŒãšã©ãŒãçºçããç°å¢ïŒéçºãã¹ããŒãžã³ã°ãæ¬çªãªã©ïŒã
ãšã©ãŒå¢çå ã§ã³ã³ããã¹ãããã£ããã£ããäŸã次ã«ç€ºããŸãïŒ
import React, { Component } from 'react';
class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false, errorDetails: null };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// You can also log the error to an error reporting service
this.setState({ errorDetails: { error, errorInfo, componentName: this.props.componentName } });
console.error("Caught an error:", error, errorInfo, this.props.componentName);
// Send error details to a logging service (e.g., Sentry, Bugsnag)
// Example:
// logErrorToService({ error, errorInfo, componentName: this.props.componentName });
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return Something went wrong.
;
}
return this.props.children;
}
}
ãã®äŸã§ã¯ãåºæ¬çãªãšã©ãŒè©³çްããã£ããã£ããæ¹æ³ã瀺ããŠããŸãã`componentDidCatch`ã¡ãœããã¯ãåå«ã³ã³ããŒãã³ãã«ãã£ãŠãšã©ãŒãã¹ããŒãããåŸã«åŒã³åºãããŸãããšã©ãŒèªäœããšã©ãŒæ å ±ãããã³ç¹å®ã®ã³ã³ããŒãã³ããèå¥ããã®ã«åœ¹ç«ã€`componentName` propããã£ããã£ããŸãã
2. äžæã®ãšã©ãŒã³ãŒã
ç¹å®ã®ãšã©ãŒæ¡ä»¶ã«äžæã®ãšã©ãŒã³ãŒããå²ãåœãŠãããšã§ããšã©ãŒãã£ã³ã¬ãŒããªã³ãã®ç²ŸåºŠãå€§å¹ ã«åäžãããããšãã§ããŸãããããŸãã§ããå¯èœæ§ããããæéã®çµéãšãšãã«å€åããå¯èœæ§ã®ãããšã©ãŒã¡ãã»ãŒãžã ãã«é Œã代ããã«ãåã¿ã€ãã®ãšã©ãŒã«å¯ŸããŠäžè²«æ§ã®ããä¿¡é Œæ§ã®é«ãèå¥åãäœæã§ããŸãããããã®ãšã©ãŒã³ãŒãã¯ã次ã®ç®çã§äœ¿çšã§ããŸãïŒ
- ãšã©ãŒã®åé¡ïŒåæ§ã®ãšã©ãŒãã°ã«ãŒãåããŸãã
- ãšã©ãŒé »åºŠã®è¿œè·¡ïŒç¹å®ã®ãšã©ãŒãçºçããé »åºŠãç£èŠããŸãã
- ãšã©ãŒã®ãã£ã«ã¿ãªã³ã°ïŒæãéèŠãªåé¡ãè¿ éã«ç¹å®ããŠçŠç¹ãåœãŠãŸãã
- ã³ã³ããã¹ãåºæã®æ å ±ã®æäŸïŒåãšã©ãŒã³ãŒãã詳现ãªããã¥ã¡ã³ããŸãã¯ãããã°æé ã«é¢é£ä»ããŸãã
äžæã®ãšã©ãŒã³ãŒããå²ãåœãŠãäŸã次ã«ç€ºããŸãïŒ
const ERROR_CODES = {
INVALID_INPUT: 'ERR-001',
API_REQUEST_FAILED: 'ERR-002',
UNEXPECTED_DATA_FORMAT: 'ERR-003'
};
function processData(input) {
if (!isValidInput(input)) {
throw new Error(ERROR_CODES.INVALID_INPUT + ": Invalid input format.");
}
// ... other processing ...
}
function fetchData() {
return fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error(ERROR_CODES.API_REQUEST_FAILED + ": API request failed with status " + response.status);
}
return response.json();
})
.then(data => {
if (!isValidData(data)) {
throw new Error(ERROR_CODES.UNEXPECTED_DATA_FORMAT + ": Data format is incorrect.");
}
return data;
})
.catch(error => {
// Log the error with the error code and message
console.error("An error occurred:", error.message);
});
}
ãã®ã³ãŒãã¯ã`ERROR_CODES`ãªããžã§ã¯ãã䜿çšããŠäžæã®èå¥åãå²ãåœãŠãæ¹æ³ã瀺ããŠããŸãããšã©ãŒãçºçãããšããšã©ãŒã³ãŒãããšã©ãŒã¡ãã»ãŒãžã«å«ããŸããããã«ãããç¹å®ã®çš®é¡ã®ãšã©ãŒãããã«èå¥ã§ããŸãã
3. ãšã©ãŒå ±åãµãŒãã¹ã®æŽ»çš
ããã€ãã®åªãããšã©ãŒå ±åãµãŒãã¹ïŒSentryãBugsnagãRollbarãªã©ïŒã¯ããšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ãšç£èŠãç°¡çŽ åããããã«èšèšãããŠããŸãããããã®ãµãŒãã¹ã¯ãå€ãã®å Žåãæ¬¡ã®æ©èœãæäŸããŸãïŒ
- èªåãšã©ãŒãã£ããã£ïŒãšã©ãŒãšã¹ã¿ãã¯ãã¬ãŒã¹ãç°¡åã«ãã£ããã£ããŸãã
- é«åºŠãªã°ã«ãŒãåãšãã£ã«ã¿ãªã³ã°ïŒãšã©ãŒã¡ãã»ãŒãžãã¹ã¿ãã¯ãã¬ãŒã¹ãã«ã¹ã¿ã ã¡ã¿ããŒã¿ãªã©ãããŸããŸãªåºæºã«åºã¥ããŠåæ§ã®ãšã©ãŒãã°ã«ãŒãåããŸãã
- ãªã¢ã«ã¿ã€ã ç£èŠïŒãšã©ãŒã®é »åºŠãšåŸåã远跡ããŸãã
- ãŠãŒã¶ãŒã³ã³ããã¹ãïŒãšã©ãŒãçºçãããŠãŒã¶ãŒã«é¢ããæ å ±ããã£ããã£ããŸãã
- ä»ã®ããŒã«ãšã®çµ±åïŒèª²é¡è¿œè·¡ã·ã¹ãã ïŒJiraãªã©ïŒãã³ãã¥ãã±ãŒã·ã§ã³ãã©ãããã©ãŒã ïŒSlackãªã©ïŒãããã³ãããã€ã¡ã³ããã€ãã©ã€ã³ãšçµ±åããŸãã
ãããã®ãµãŒãã¹ã¯ãæ¬çªç°å¢ã§ã®ãšã©ãŒã管çããã®ã«éåžžã«åœ¹ç«ã¡ãŸããå€ãã®å Žåããšã©ãŒã®ãã£ããã£ãšå ±åã®ããã»ã¹ãç°¡çŽ åããReactçšã®SDKãŸãã¯çµ±åãæäŸããŸããã³ã³ããã¹ããèªåçã«æœåºããåæ§ã®ãšã©ãŒãã°ã«ãŒãåããåãšã©ãŒã®åœ±é¿ã®èŠèŠåãæäŸããŸãã
Sentryã䜿çšããç°¡åãªäŸã次ã«ç€ºããŸãïŒè©³çްã¯ããããžã§ã¯ãå ã§ã©ã€ãã©ãªãã©ã®ããã«ã»ããã¢ãããããŠãããã«ãã£ãŠç°ãªããŸãïŒïŒ
import * as Sentry from '@sentry/react';
Sentry.init({
dsn: "YOUR_SENTRY_DSN", // Replace with your Sentry DSN
integrations: [new Sentry.BrowserTracing()],
tracesSampleRate: 1.0,
});
function MyComponent() {
React.useEffect(() => {
try {
// Simulate an error
throw new Error('This is a simulated error.');
} catch (error) {
Sentry.captureException(error);
}
}, []);
return My Component;
}
ãã®äŸã§ã¯ãSentryãåæåãã`Sentry.captureException()`ã䜿çšããŠãšã©ãŒãšã¹ã¿ãã¯ãã¬ãŒã¹ãå ±åããŸãã
4. ã«ã¹ã¿ã ãšã©ãŒã¡ã¿ããŒã¿
æšæºã®ãšã©ãŒæ å ±ã«å ããŠãã«ã¹ã¿ã ã¡ã¿ããŒã¿ã远å ããŠãããã«å€ãã®ã³ã³ããã¹ããæäŸã§ããŸããããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã«åºæã®æ å ±ãå«ãŸããå ŽåããããŸãïŒ
- ãŠãŒã¶ãŒIDïŒãŠãŒã¶ãŒã®äžæã®èå¥åãïŒGDPRãªã©ã®ãã©ã€ãã·ãŒèŠå¶ã«æ³šæããŠãã ããïŒ
- ã»ãã·ã§ã³IDïŒãŠãŒã¶ãŒã®çŸåšã®ã»ãã·ã§ã³èå¥åã
- ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹IDïŒã³ã³ããŒãã³ãã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã®äžæã®èå¥åã
- ç°å¢å€æ°ïŒé¢é£ããç°å¢å€æ°ã®å€ã
- ãã«ãæ å ±ïŒã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ãšãã«ãçªå·ã
ãã®ã«ã¹ã¿ã ã¡ã¿ããŒã¿ã¯ããšã©ãŒã¬ããŒãã«æ·»ä»ããããšã©ãŒã®ãã£ã«ã¿ãªã³ã°ãæ€çŽ¢ãããã³åæã«äœ¿çšã§ããŸããããã«ããããšã©ãŒãããªã«ããŠã³ããŠãç¹å®ãŠãŒã¶ãŒãŸãã¯ã·ããªãªã«ã©ã®ããã«åœ±é¿ããããçè§£ã§ããŸãã
åã®Sentryã®äŸãæ¡åŒµãããšã次ã®ããã«ã«ã¹ã¿ã ã³ã³ããã¹ãã远å ã§ããŸãïŒ
import * as Sentry from '@sentry/react';
Sentry.init({
dsn: "YOUR_SENTRY_DSN", // Replace with your Sentry DSN
integrations: [new Sentry.BrowserTracing()],
tracesSampleRate: 1.0,
});
function MyComponent() {
React.useEffect(() => {
try {
// Simulate an error
throw new Error('This is a simulated error.');
} catch (error) {
Sentry.captureException(error);
Sentry.setContext("custom", {
userId: "user123",
sessionId: "session456",
});
}
}, []);
return My Component;
}
ãã®ã³ãŒãã¯ã`Sentry.setContext()`ã䜿çšããŠã«ã¹ã¿ã ã¡ã¿ããŒã¿ã远å ããŸããããã«ããããšã©ãŒã¬ããŒãäžã«ããã«å€ãã®ã³ã³ããã¹ããæäŸãããŸãã
ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã广çã«å©çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- äžè²«æ§ãä¿ã€ïŒã¢ããªã±ãŒã·ã§ã³å šäœã§ãšã©ãŒããã£ããã£ããã³å ±åããããã®äžè²«ããã¢ãããŒãã䜿çšããŸããäžè²«æ§ã¯ãæ£ç¢ºãªåæã«äžå¯æ¬ ã§ãã
- éäžåãšã©ãŒåŠçïŒãã¹ãŠã®ãšã©ãŒã確å®ã«ãã£ããã£ãããäžè²«ããŠåŠçãããããã«ãéäžåãšã©ãŒåŠçã¡ã«ããºã ïŒãšã©ãŒå¢çãã«ã¹ã¿ã ãšã©ãŒåŠçããã«ãŠã§ã¢ãªã©ïŒãäœæããŸãã
- éèŠãªæ å ±ãåªå ããïŒæåã«æãéèŠãªæ å ±ïŒã³ã³ããŒãã³ãåããã¡ã€ã«ãšè¡çªå·ããšã©ãŒã¡ãã»ãŒãžãã¹ã¿ãã¯ãã¬ãŒã¹ïŒããã£ããã£ããããšã«çŠç¹ãåœãŠãŸãã
- PIIïŒå人ãç¹å®ã§ããæ å ±ïŒãåé¿ããïŒãšã©ãŒã¬ããŒãã§ããŠãŒã¶ãŒã®ãã¹ã¯ãŒããã¯ã¬ãžããã«ãŒãçªå·ãªã©ã®æ©å¯ããŒã¿ããã£ããã£ããããšã«ã¯éåžžã«æ³šæããŠãã ãããGDPRãCCPAãªã©ã®é¢é£ãããã©ã€ãã·ãŒèŠå¶ãéµå®ããŠãã ããã
- 培åºçã«ãã¹ãããïŒããŸããŸãªãã©ãŠã¶ãŒãããã€ã¹ãããã³ãããã¯ãŒã¯æ¡ä»¶ã§ã®ã·ããªãªãå«ãããšã©ãŒåŠçããã³ãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã¡ã«ããºã ãå³å¯ã«ãã¹ãããŸããã·ã¹ãã ãåäœããããšã確èªããããã«ããšã©ãŒãã·ãã¥ã¬ãŒãããŸãã
- 宿çã«ç£èŠããïŒãšã©ãŒã¬ããŒãã宿çã«ç£èŠããŠãæ°ããªåé¡ãç¹å®ããŠå¯ŸåŠããŸãã
- ã¢ã©ãŒãã®èªååïŒç¹å®ã®ãšã©ãŒã®é »åºŠãŸãã¯åœ±é¿ã«åºã¥ããŠã¢ã©ãŒããèšå®ããŸããããã«ãããé倧ãªåé¡ãçºçãããšããã«éç¥ãããŸãã
- ãã¹ãŠãææžåããïŒãšã©ãŒã³ãŒãããšã©ãŒåŠçæŠç¥ãããã³äœ¿çšãããã«ã¹ã¿ã ã¡ã¿ããŒã¿ãææžåããŸãããã®ããã¥ã¡ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãšä¿å®ãããå¹ççã«è¡ãã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ã³ã³ããã¹ãã§ã®ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã®å©ç¹
ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã¯ãã°ããŒãã«ãªãœãããŠã§ã¢éçºã®ã³ã³ããã¹ãã§å€§ããªå©ç¹ããããããŸãïŒ
- ããé«éãªãããã°ïŒæ£ç¢ºãªãšã©ãŒèå¥ã«ããããããã°ããã»ã¹ãè¿ éåãããéçºè ã¯åé¡ãããè¿ éã«è§£æ±ºã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ã®åäžïŒãšã©ãŒãäºåã«ç¹å®ããŠå¯ŸåŠããããšã§ãã¢ããªã±ãŒã·ã§ã³å šäœã®ä¿¡é Œæ§ãé«ããããšãã§ããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒãšã©ãŒãå°ãªãã»ã©ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããã¹ã ãŒãºã§æ¥œãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ãªããŸãã
- ãµããŒãã³ã¹ãã®åæžïŒå¹æçãªãšã©ãŒç®¡çã«ããããµããŒããã±ããã®æ°ãæå°éã«æããã«ã¹ã¿ããŒãµããŒãã®æäŸã³ã¹ããåæžã§ããŸãã
- ããŒã¿é§ååã®æææ±ºå®ïŒãšã©ãŒããŒã¿ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããŠãŒã¶ãŒã®è¡åãããã³æ¹åã®å¯èœæ§ã®ããé åã«é¢ãã貎éãªæŽå¯ãæäŸããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ãµããŒãïŒå Žæã«é¢é£ä»ããããšãã§ãããšã©ãŒã®æ ¹æ¬åå ãçè§£ããããšãéèŠã§ããããã«ãããåœéåïŒi18nïŒããã³ããŒã«ãªãŒãŒã·ã§ã³ïŒl10nïŒã®ãµããŒããå¯èœã«ãªããŸãã
çµè«
Reactã³ã³ããŒãã³ãã®ãšã©ãŒãã£ã³ã¬ãŒããªã³ãã£ã³ã°ã¯ãç¹ã«ã°ããŒãã«ã«åæ£ãããç°å¢ã§ãå ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®éèŠãªãã¯ããã¯ã§ããå æ¬çãªãšã©ãŒã³ã³ããã¹ãããã£ããã£ããäžæã®ãšã©ãŒã³ãŒããå©çšãããšã©ãŒå ±åãµãŒãã¹ã掻çšããã«ã¹ã¿ã ã¡ã¿ããŒã¿ã远å ããããšã§ãéçºè ã¯ãšã©ãŒãç¹å®ã蚺æãããã³è§£æ±ºããèœåãå€§å¹ ã«åäžãããããšãã§ããŸãããã®ç©æ¥µçãªã¢ãããŒãã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããã ãã§ãªããéçºããã»ã¹ãåçåããæçµçã«ã¯ã°ããŒãã«èŠæš¡ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®æåã«è²¢ç®ããŸããããã«æŠèª¬ãããŠããååãšãã¯ããã¯ã¯ããããžã§ã¯ãã®ç¹å®ã®ããŒãºã«åãããŠèª¿æŽã§ããã¢ããªã±ãŒã·ã§ã³ã倿§ã§ãã€ãããã¯ãªãŠãŒã¶ãŒããŒã¹ã®èª²é¡ã«å¯Ÿå¿ã§ããããã«ããŸãããããã®ãã¯ããã¯ãæ¡çšããããšã§ãç©æ¥µçãªãšã©ãŒç®¡çã®æåãè²ã¿ãããå®å®ããããŠãŒã¶ãŒãã¬ã³ããªãŒã§ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠæåããã¢ããªã±ãŒã·ã§ã³ã«ã€ãªãããŸãã