Reactã®ãšã©ãŒå¢çãæ·±ãæãäžãããã广çãªãããã°ãšããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããã«ãšã©ãŒãœãŒã¹æ å ±ãäŒæããæ¹æ³ãåŠã³ãŸãããã¹ããã©ã¯ãã£ã¹ãšã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã
Reactã³ã³ããŒãã³ãã®ãšã©ãŒã³ã³ããã¹ãïŒãšã©ãŒãœãŒã¹æ å ±ã®äŒæ
Reactéçºã®è€éãªäžçã§ã¯ãã¹ã ãŒãºã§å埩åã®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããšãæãéèŠã§ãããšã©ãŒã¯é¿ããããŸãããããšã©ãŒã®åŠçæ¹æ³ããæŽç·Žãããã¢ããªã±ãŒã·ã§ã³ãšã€ã©ã€ã©ãããã¢ããªã±ãŒã·ã§ã³ãåºå¥ããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãReactã®ãšã©ãŒå¢çãšãå ç¢ãªãããã°ãšã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã«ãšã©ãŒãœãŒã¹æ å ±ã广çã«äŒæããæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã
Reactãšã©ãŒå¢çã®çè§£
ãœãŒã¹æ å ±ã®äŒæã«å ¥ãåã«ããšã©ãŒå¢çã®çè§£ã確åºãããã®ã«ããŸããããReact 16ã§å°å ¥ããããšã©ãŒå¢çã¯ãåã³ã³ããŒãã³ãããªãŒå ã®JavaScriptãšã©ãŒããã£ãããããããã®ãšã©ãŒããã°ã«èšé²ããã¢ããªã±ãŒã·ã§ã³å šäœãã¯ã©ãã·ã¥ããã代ããã«ãã©ãŒã«ããã¯UIã衚瀺ããReactã³ã³ããŒãã³ãã§ãããããã¯ä¿è·å±€ãšããŠæ©èœãã1ã€ã®æ¬ é¥ã®ããã³ã³ããŒãã³ããã·ã§ãŒå šäœãããŠã³ãããã®ãé²ããŸããããã¯ãç¹ã«å€æ§ãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã«ããã£ãŠäžè²«ããæ©èœã«äŸåããŠããã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«ãšã£ãŠãããžãã£ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«äžå¯æ¬ ã§ãã
ãšã©ãŒå¢çããã£ãããããšã©ãŒã®çš®é¡
ãšã©ãŒå¢çã¯äž»ã«ãã¬ã³ããªã³ã°äžãã©ã€ããµã€ã¯ã«ã¡ãœãããããã³ãã®äžã®ããªãŒå šäœã®ã³ã³ã¹ãã©ã¯ã¿ã§ãšã©ãŒããã£ããããŸãããã ããæ¬¡ã®ãšã©ãŒã¯**ãã£ããããŸãã**ã
- ã€ãã³ããã³ãã©ãŒïŒäŸïŒ`onClick`ïŒ
- éåæã³ãŒãïŒäŸïŒ`setTimeout`ã`fetch`ïŒ
- ãšã©ãŒå¢çèªäœå ã§ã¹ããŒããããšã©ãŒ
ãããã®ã·ããªãªã§ã¯ãã€ãã³ããã³ãã©ãŒå ã®try/catchãããã¯ãªã©ã®ä»ã®ãšã©ãŒåŠçã¡ã«ããºã ã䜿çšããããPromiseãªãžã§ã¯ã·ã§ã³ãåŠçããå¿ èŠããããŸãã
ãšã©ãŒå¢çã³ã³ããŒãã³ãã®äœæ
ãšã©ãŒå¢çã®äœæã¯æ¯èŒçç°¡åã§ããæ¬¡ã®ã©ã€ããµã€ã¯ã«ã¡ãœããã®ãããããŸãã¯äž¡æ¹ãå®è£ ããã¯ã©ã¹ã³ã³ããŒãã³ããäœæããå¿ èŠããããŸãã
static getDerivedStateFromError(error)ïŒãã®éçã¡ãœããã¯ãåå«ã³ã³ããŒãã³ãããšã©ãŒãã¹ããŒããåŸã«åŒã³åºãããŸããã¹ããŒããããšã©ãŒããã©ã¡ãŒã¿ãšããŠåãåããç¶æ ãæŽæ°ãããªããžã§ã¯ããè¿ãããç¶æ ã®æŽæ°ãå¿ èŠãªãå Žåã¯nullãè¿ãå¿ èŠããããŸãããã®ã¡ãœããã¯äž»ã«ããšã©ãŒãçºçããããšã瀺ãããã«ã³ã³ããŒãã³ãã®ç¶æ ãæŽæ°ããããã«äœ¿çšãããŸãïŒããšãã°ãhasErrorãã©ã°ãtrueã«èšå®ãããªã©ïŒãcomponentDidCatch(error, info)ïŒãã®ã¡ãœããã¯ãåå«ã³ã³ããŒãã³ãã«ãã£ãŠãšã©ãŒãã¹ããŒãããåŸã«åŒã³åºãããŸããã¹ããŒããããšã©ãŒãšããšã©ãŒã«é¢ããæ å ±ïŒã³ã³ããŒãã³ãã¹ã¿ãã¯ãªã©ïŒãå«ããªããžã§ã¯ãã®2ã€ã®ãã©ã¡ãŒã¿ãåãåããŸãããã®ã¡ãœããã¯ããªã¢ãŒããã®ã³ã°ãµãŒãã¹ïŒSentryãRollbarãªã©ïŒã«ãšã©ãŒæ å ±ããã°ã«èšé²ããããä»ã®å¯äœçšãå®è¡ãããããããã«ãã䜿çšãããŸãã
ç°¡åãªäŸã次ã«ç€ºããŸãã
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, info) {
// Example of logging the error to a service like Sentry or Rollbar
console.error("Caught an error:", error, info);
// You can also log to a remote service for monitoring
// e.g., Sentry.captureException(error, { componentStack: info.componentStack });
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
ãã®äŸã§ã¯ãErrorBoundaryã³ã³ããŒãã³ãã¯ããšã©ãŒãçºçããªãå Žåã¯ãã®åãã¬ã³ããªã³ã°ããŸãããšã©ãŒããã£ãããããå Žåã¯ããã©ãŒã«ããã¯UIïŒãšã©ãŒã¡ãã»ãŒãžãªã©ïŒãã¬ã³ããªã³ã°ããŸããcomponentDidCatchã¡ãœããã¯ããšã©ãŒãã³ã³ãœãŒã«ã«ïŒã§ããã°ãªã¢ãŒããã®ã³ã°ãµãŒãã¹ã«ïŒèšé²ããŸãããã®ã³ã³ããŒãã³ãã¯ããã®åã³ã³ããŒãã³ãã®ã»ãŒããã£ããããšããŠæ©èœããŸãã
ãšã©ãŒãœãŒã¹æ å ±ã®éèŠæ§
*ãšã©ãŒ*ãçºçããããšãç¥ã£ãŠããã ãã§ã¯ã广çãªãããã°ã«ã¯äžååãªããšããããããŸãããšã©ãŒãçºçãã*å Žæ*ãš*çç±*ãç¹å®ããããšãéèŠã§ããããã§ããšã©ãŒãœãŒã¹æ å ±ã圹ã«ç«ã¡ãŸããæ£ç¢ºã§è©³çްãªãšã©ãŒæ å ±ããªããšãç¹ã«ããŸããŸãªå°åãèšèªã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããå€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã°ãæéã®ãããã€ã©ã€ã©ããããã»ã¹ã«ãªããŸããé©åãªãœãŒã¹æ å ±ã䜿çšãããšãã°ããŒãã«ã«éçºè ãåé¡ã®æ ¹æ¬åå ãè¿ éãã€å¹ççã«ç¹å®ã§ããããã解決æéãççž®ãããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãåäžããŸãã
ãšã©ãŒãœãŒã¹æ å ±ãäŒæããã¡ãªãã
- ããè¿ éãªãããã°ïŒæ£ç¢ºãªãšã©ãŒã®å ŽæïŒãã¡ã€ã«ãè¡çªå·ãã³ã³ããŒãã³ãïŒã«ãããããã«èª¿æ»ã§ããŸãã
- æ¹åããããšã©ãŒã³ã³ããã¹ãïŒãšã©ãŒãçºçãããšãã®ç°å¢ã«é¢ãã貎éãªè©³çްïŒãŠãŒã¶ãŒå ¥åãAPIå¿çããã©ãŠã¶ã®çš®é¡ãªã©ïŒãæäŸããŸãã
- 匷åãããã¢ãã¿ãªã³ã°ïŒããè¯ããšã©ãŒã¬ããŒãã¯ãåŸåãé倧ãªåé¡ã®æ€åºãªã©ã广çãªã¢ãã¿ãªã³ã°ãä¿é²ããŸãã
- ããã¢ã¯ãã£ããªåé¡è§£æ±ºïŒãŠãŒã¶ãŒã«åœ±é¿ãäžãã*åã«*æœåšçãªåé¡ãç¹å®ããŠå¯ŸåŠããã®ã«åœ¹ç«ã¡ãããä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã«è²¢ç®ããŸãã
- æ¹åããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒãã°ä¿®æ£ã®è¿ éåã¯ãäžæã®æžå°ãšãå Žæã«é¢ä¿ãªããããå®å®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããããŠãŒã¶ãŒæºè¶³åºŠãé«ããŸãã
ãšã©ãŒãœãŒã¹æ å ±ãäŒæããããã®æŠç¥
次ã«ããšã©ãŒãœãŒã¹æ å ±ãäŒæããããã®å®è·µçãªæŠç¥ã«ã€ããŠè©³ããèŠãŠãããŸãããããããã®ææ³ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãã§ããšã©ãŒåŠçãšãããã°æ©èœã匷åã§ããŸãã
1. ã³ã³ããŒãã³ãéå±€ã®èªè
æãç°¡åãªæ¹æ³ã¯ããšã©ãŒå¢çãã³ã³ããŒãã³ãéå±€å ã«æŠç¥çã«é 眮ãããŠããããšã確èªããããšã§ãããšã©ãŒãçºçããããå¯èœæ§ã®ããã³ã³ããŒãã³ãããšã©ãŒå¢çå ã«ã©ããããããšã«ããããšã©ãŒãçºçããå¯èœæ§ã®ããå Žæã«é¢ããã³ã³ããã¹ãã確ç«ããŸãã
äŸïŒ
<ErrorBoundary>
<MyComponentThatFetchesData />
</ErrorBoundary>
MyComponentThatFetchesDataããšã©ãŒãã¹ããŒãããšãErrorBoundaryãããããã£ããããŸãããã®ã¢ãããŒãã«ããããšã©ãŒã®ç¯å²ãããã«çãŸããŸãã
2. ã«ã¹ã¿ã ãšã©ãŒãªããžã§ã¯ã
ã«ã¹ã¿ã ãšã©ãŒãªããžã§ã¯ããäœæããããçµã¿èŸŒã¿ã®Errorãªããžã§ã¯ããæ¡åŒµããããšãæ€èšããŠãã ãããããã«ãããã³ã³ããŒãã³ãåãããããã£ãç¶æ
ããŸãã¯ãããã°ã«åœ¹ç«ã€å¯èœæ§ã®ãããã®ä»ã®ã³ã³ããã¹ããªã©ãé¢é£æ
å ±ãå«ãã«ã¹ã¿ã ããããã£ã远å ã§ããŸãããã®æ
å ±ã¯ãã³ã³ããŒãã³ãã倿°ã®æ¹æ³ã§çžäºäœçšããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«äŸ¡å€ããããŸãã
äŸïŒ
class CustomError extends Error {
constructor(message, componentName, context) {
super(message);
this.name = 'CustomError';
this.componentName = componentName;
this.context = context;
}
}
// Inside a component:
try {
// ... some code that might throw an error
} catch (error) {
throw new CustomError('Failed to fetch data', 'MyComponent', { dataId: this.props.id, user: this.state.user });
}
ãã®ãšã©ãŒããšã©ãŒå¢çã«ãã£ãŠãã£ããããããšãcomponentDidCatchã¡ãœããã¯ã«ã¹ã¿ã ããããã£ïŒerror.componentNameãerror.contextãªã©ïŒã«ã¢ã¯ã»ã¹ããŠãããè±å¯ãªãããã°æ
å ±ãæäŸã§ããŸãããã®ã¬ãã«ã®è©³çްã¯ãããŸããŸãªå€§éžã«ãããå€§èŠæš¡ã§å€æ§ãªãŠãŒã¶ãŒããŒã¹ããµããŒãããå Žåã«éåžžã«è²Žéã§ãã
3. ã³ã³ããã¹ããšããããããªãªã³ã°ïŒæ éã«ïŒïŒ
é床ã®ããããããªãªã³ã°ã«å¯ŸããŠãã°ãã°æ³šæãæãããŸãããReact Contextã䜿çšããŠãšã©ãŒé¢é£æ å ±ãæž¡ãããšã¯ãç¹ã«æ·±ããã¹ããããã³ã³ããŒãã³ããæ±ãå Žåã«äŸ¡å€ããã*å¯èœæ§*ããããŸãããšã©ãŒã®è©³çްããããã€ããŒã®ããªãŒå ã®ä»»æã®ã³ã³ããŒãã³ãã§äœ¿çšã§ããããã«ãããšã©ãŒã³ã³ããã¹ããããã€ããŒãäœæã§ããŸããã³ã³ããã¹ãã䜿çšããå Žåã¯ããã©ãŒãã³ã¹ãžã®åœ±é¿ã«æ³šæãããã®ææ³ãæ éã«äœ¿çšããŠãã ããããããããéèŠãªãšã©ãŒæ å ±ã®ã¿ã«äœ¿çšããŠãã ããã
äŸïŒ
import React, { createContext, useState, useContext } from 'react';
const ErrorContext = createContext(null);
function ErrorProvider({ children }) {
const [errorDetails, setErrorDetails] = useState(null);
const value = {
errorDetails,
setErrorDetails,
};
return (
<ErrorContext.Provider value={value}>
{children}
</ErrorContext.Provider>
);
}
function useErrorContext() {
return useContext(ErrorContext);
}
// In an ErrorBoundary component:
function ErrorBoundary({ children }) {
const [hasError, setHasError] = useState(false);
const { setErrorDetails } = useErrorContext();
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, info) {
setErrorDetails({
error: error,
componentStack: info.componentStack
});
}
render() {
if (this.state.hasError) {
return <FallbackUI />;
}
return this.props.children;
}
}
// In a child component:
function MyComponent() {
const { errorDetails } = useErrorContext();
if (errorDetails) {
console.error('Error in MyComponent: ', errorDetails);
}
// ... rest of the component
}
ãã®æ§é ã«ããããã¹ãŠã®åå«ã³ã³ããŒãã³ãããšã©ãŒæ å ±ã«ã¢ã¯ã»ã¹ãããã®ã³ã³ããã¹ãã远å ã§ããŸããç¹ã«è€éãªã³ã³ããŒãã³ãéå±€å ã§ããã®æ å ±ã管çããã³é åžããããã®äžå çãªå ŽæãæäŸããŸãã
4. ãã®ã³ã°ãµãŒãã¹ïŒSentryãRollbarãªã©ïŒ
SentryãRollbarãBugsnagãªã©ã®ãšã©ãŒãã©ããã³ã°ãµãŒãã¹ãšã®çµ±åã¯ãæ¬çªç°å¢ã§ã®å ç¢ãªãšã©ãŒåŠçã«äžå¯æ¬ ã§ãããããã®ãµãŒãã¹ã¯ãã³ã³ããŒãã³ãã¹ã¿ãã¯ããŠãŒã¶ãŒã³ã³ããã¹ãïŒãã©ãŠã¶ãããã€ã¹ãªã©ïŒãã¿ã€ã ã¹ã¿ã³ããªã©ã®è©³çްãªãšã©ãŒæ å ±ãèªåçã«ãã£ããã£ããŸããããã¯ãããŒã«ã«ã§åçŸããã®ãé£ãããããŸããŸãªåœãå°åã®ãŠãŒã¶ãŒã«åœ±é¿ãäžãããšã©ãŒãç¹å®ããããã«äžå¯æ¬ ã§ãã
äŸïŒSentryã䜿çšïŒïŒ
import * as Sentry from '@sentry/react';
Sentry.init({
dsn: "YOUR_SENTRY_DSN", // Replace with your Sentry DSN
integrations: [new Sentry.BrowserTracing({
routingInstrumentation: Sentry.reactRouterV5Instrumentation,
})],
tracesSampleRate: 1.0,
});
// In your error boundary:
componentDidCatch(error, info) {
Sentry.captureException(error, { extra: { componentStack: info.componentStack } });
}
ãããã®ãµãŒãã¹ã¯ãå æ¬çãªããã·ã¥ããŒããã¢ã©ãŒããã¬ããŒãæ©èœãæäŸãããšã©ãŒãå¹ççã«ç£èŠããã³è§£æ±ºããã®ã«åœ¹ç«ã¡ãŸãããŸãããšã©ãŒã«ã€ãªãããŠãŒã¶ãŒã»ãã·ã§ã³ã«é¢é£ããæ å ±ãæäŸãããããã°ã®ããã®ã³ã³ããã¹ããããã«æäŸãããšã©ãŒã«é¢é£ãããŠãŒã¶ãŒè¡åã®ãã¿ãŒã³ãç°¡åã«ç¹å®ãããããã®ãšã©ãŒãã°ããŒãã«ã«å€æ§ãªãŠãŒã¶ãŒã«ã©ã®ããã«åœ±é¿ããããåæã§ããŸãã
5. 匷åãããåå®å šæ§ãšãšã©ãŒèå¥ã®ããã®TypeScript
TypeScriptã䜿çšããŠããå Žåã¯ããããå©çšããŠã³ã³ããŒãã³ããšãšã©ãŒãªããžã§ã¯ãã®å³å¯ãªåãå®çŸ©ããŸããããã«ãããå®è¡æã«ã®ã¿æããã«ãªãç¹å®ã®çš®é¡ã®ãšã©ãŒãé²ãããšã§ãéçºäžã®æœåšçãªãšã©ãŒããã£ããã§ããŸããTypeScriptã¯ã»ãã¥ãªãã£ã®è¿œå ã¬ã€ã€ãŒãæäŸããã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãæžãããããã«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããå Žæã«é¢ä¿ãªããåœéçãªãŠãŒã¶ãŒã«ãšã£ãŠã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãé«ããŸãã
äŸïŒ
interface CustomErrorContext {
userId: string;
sessionId: string;
}
class CustomError extends Error {
constructor(message: string, public componentName: string, public context?: CustomErrorContext) {
super(message);
this.name = 'CustomError';
}
}
// Use in your component:
try {
// ... code that could throw an error
} catch (error: any) {
if (error instanceof Error) {
throw new CustomError('API call failed', 'MyComponent', { userId: '123', sessionId: 'abc' });
}
}
æ£ç¢ºãªåãå®çŸ©ããããšã«ãããæ£ããæ å ±ãæž¡ãããããã«ããåé¢é£ã®ãšã©ãŒã®å¯èœæ§ãæžãããç¹ã«ããŒã ç°å¢ã§äœæ¥ããå Žåã«ãããã°ããã»ã¹ãããå¹ççã«ããŸãã
6. æç¢ºã§äžè²«æ§ã®ãããšã©ãŒã¡ãã»ãŒãž
éçºè ïŒã³ã³ãœãŒã«ãŸãã¯ãã®ã³ã°ãµãŒãã¹å ïŒãšãå¿ èŠã«å¿ããŠãŠãŒã¶ãŒã«ã圹ç«ã€æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸããå ·äœçã§ãäžè¬çãªã¡ãã»ãŒãžã¯é¿ããŠãã ãããåœéçãªãªãŒãã£ãšã³ã¹ã«ã¯ã翻蚳ãããããšã©ãŒã¡ãã»ãŒãžãæäŸãããããŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠè€æ°ã®ç¿»èš³ãæäŸããããšãæ€èšããŠãã ããã
äŸïŒ
æªãïŒãåé¡ãçºçããŸãããã
è¯ãïŒããŠãŒã¶ãŒããŒã¿ã®ãã§ããã«å€±æããŸãããã€ã³ã¿ãŒãããæ¥ç¶ã確èªãããããšã©ãŒã³ãŒã[ãšã©ãŒã³ãŒã]ã§ãµããŒãã«ãåãåãããã ãããã
ãã®ã¢ãããŒãã«ãããã·ã¹ãã ãããŒã«ã©ã€ãºãããã³ã³ãã³ãã衚瀺ã§ããªãå Žåã§ãããã¹ãŠã®ãã±ãŒã«ã®ãŠãŒã¶ãŒã圹ç«ã€å®çšçãªãã£ãŒãããã¯ãåãåããæåçãªèæ¯ã«é¢ä¿ãªããå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšå®çšçãªæŽå¯
ãããã®æŠç¥ã广çã«å®è£ ããReactã¢ããªã±ãŒã·ã§ã³ã®ã°ããŒãã«ã«å¥å šãªãšã©ãŒåŠçæŠç¥ãæ§ç¯ããããã«ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ãšå®çšçãªæŽå¯ã次ã«ç€ºããŸãã
1. ãšã©ãŒå¢çãæŠç¥çã«å®è£ ãã
ã¢ããªã±ãŒã·ã§ã³ã®äž»èŠãªã»ã¯ã·ã§ã³ããšã©ãŒå¢çå ã«ã©ããããŸãããã®æŠç¥ã«ãããåé¡ã®åé¢ãšãšã©ãŒã®åå ã®ç¹å®ã容æã«ãªããŸããæäžäœã®ãšã©ãŒå¢çããéå§ããå¿ èŠã«å¿ããŠäžã«ç§»åããŸãã䜿ããããªãã§ãã ããããšã©ãŒã*æã*çºçããããå Žæã«é 眮ããŠãã ããããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãçºçããå ŽæïŒãã©ãŒã ã®éä¿¡ãAPIåŒã³åºããªã©ïŒãŸãã¯å€éšããŒã¿ãã¢ããªã«ãã£ãŒããããé åãæ€èšããŠãã ããã
2. äžå åããããšã©ãŒåŠç
å°çšã®ãšã©ãŒåŠçãµãŒãã¹ãã³ã¢ãŠãŒãã£ãªãã£ã»ãããªã©ããšã©ãŒåŠçã®ããã®äžå çãªå Žæã確ç«ããŸãããã®çµ±åã«ãããåé·æ§ãæžããç¹ã«ã°ããŒãã«ãªéçºããŒã ãšé£æºããŠããå Žåã«ãã³ãŒããããã¯ãªãŒã³ã«ä¿ã€ããšãã§ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã§äžè²«æ§ãä¿ã€ããã«éèŠã§ãã
3. ãã¹ãŠããã°ã«èšé²ããïŒããã³éèšããïŒ
ãã¹ãŠã®ãšã©ãŒããã°ã«èšé²ãããã®ã³ã°ãµãŒãã¹ã䜿çšããŸããäžèŠè»œåŸ®ãªãšã©ãŒã§ãããã倧ããªåé¡ã瀺ãå¯èœæ§ããããŸãããŠãŒã¶ãŒãããã€ã¹ããŸãã¯ãã±ãŒã«ããšã«ãã°ãéèšããŠãç¹å®ã®ãŠãŒã¶ãŒã°ã«ãŒãã«åœ±é¿ãäžããåŸåãšåé¡ãæ€åºããŸããããã¯ãç¹å®ã®ããŒããŠã§ã¢æ§æãŸãã¯èšèªèšå®ã«åºæã®ãã°ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããããŒã¿ãå€ãã»ã©ãã¢ããªã±ãŒã·ã§ã³ã®å¥å šæ§ã«ã€ããŠããå€ãã®æ å ±ãåŸãããšãã§ããŸãã
4. ããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ãã
é床ã®ãšã©ãŒãã®ã³ã°ãšã³ã³ããã¹ãã¯ãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããã®ã³ã°ã®ãµã€ãºãšé »åºŠã«æ³šæããå¿ èŠã«å¿ããŠã¹ããããªã³ã°ãŸãã¯ãµã³ããªã³ã°ãæ€èšããŠãã ãããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšå¿çæ§ãäœäžããªãããšãä¿èšŒãããŸããæ å ±ã«å¯ŸããããŒãºãšãã©ãã«ããŠãåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã®åªããããã©ãŒãã³ã¹ã«å¯ŸããããŒãºãšã®ãã©ã³ã¹ãåããŸãã
5. ãšã©ãŒã¬ããŒããšã¢ã©ãŒã
é倧ãªãšã©ãŒãçºçããå Žåã«ããã®ã³ã°ãµãŒãã¹å ã§ã¢ã©ãŒããèšå®ããŸããããã«ãããããŒã ãã¢ãžã¢ããšãŒããããã¢ã¡ãªã«ããŸãã¯äžçã®ã©ããã®ãªãã£ã¹ã§äœæ¥ããŠãããã©ããã«ããããããé æ»ãªãåªå 床ã®é«ãåé¡ã«éäžããæ©äŒãããŒã ã«äžããããŸããããã«ãããè¿ éãªå¿çæéãä¿èšŒãããæœåšçãªãŠãŒã¶ãŒãžã®åœ±é¿ãæå°éã«æããããŸãã
6. ãŠãŒã¶ãŒãã£ãŒãããã¯ãšã³ãã¥ãã±ãŒã·ã§ã³
æç¢ºã§ãããããããšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã«æäŸããŸããé£çµ¡ãã©ãŒã ããµããŒããžã®ãªã³ã¯ãªã©ããŠãŒã¶ãŒãåé¡ãå ±åããæ¹æ³ãå«ããããšãæ€èšããŠãã ãããæåã«ãã£ãŠåé¡ã®å ±åã«å¯Ÿããæµæã¬ãã«ãç°ãªãããšã«æ³šæããŠãã ããããã®ããããã£ãŒãããã¯ã¡ã«ããºã ãžã®ã¢ã¯ã»ã¹ãã§ããã ãç°¡åã«ããããã«ããŠãã ããã
7. ãã¹ã
ãŠããããã¹ããçµ±åãã¹ããããã«ã¯æåãã¹ããªã©ããšã©ãŒåŠçæŠç¥ã培åºçã«ãã¹ãããŸããããŸããŸãªãšã©ãŒã¹ããŒããã·ãã¥ã¬ãŒãããŠããšã©ãŒå¢çãšãšã©ãŒã¬ããŒãã¡ã«ããºã ãæ£ããæ©èœããããšã確èªããŸããããŸããŸãªãã©ãŠã¶ãšããã€ã¹ããã¹ãããŸããããŸããŸãªã·ããªãªã§ã¢ããªã±ãŒã·ã§ã³ãæåŸ ã©ããã«åäœããããšã確èªããããã«ããšã³ãããŒãšã³ãïŒE2EïŒãã¹ããå®è£ ããŸããããã¯ãäžçäžã®ãŠãŒã¶ãŒã«å®å®ãããšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ãã
8. ããŒã«ãªãŒãŒã·ã§ã³ãšåœéå
ã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®èšèªããµããŒãããŠããå Žåã¯ããšã©ãŒã¡ãã»ãŒãžã翻蚳ãããŠããããšãããã³ãŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠãšã©ãŒåŠçã調æŽããã¢ããªã±ãŒã·ã§ã³ãã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«ãšã£ãŠçã«ã¢ã¯ã»ã¹å¯èœã«ããŠããããšã確èªããŠãã ãããããšãã°ããšã©ãŒã¡ãã»ãŒãžã¯ãŠãŒã¶ãŒã®èšèªã«åãããŠããŒã«ã©ã€ãºããå¿ èŠãããããã°ã¡ãã»ãŒãžã«ã¿ã€ã ã¹ã¿ã³ãã衚瀺ããå Žåã¯ã¿ã€ã ãŸãŒã³ãèæ ®ããå¿ èŠããããŸãã
9. ç¶ç¶çãªã¢ãã¿ãªã³ã°ãšå埩
ãšã©ãŒåŠçã¯ã1åéãã®ä¿®æ£ã§ã¯ãããŸãããæ°ãããšã©ãŒããªããã¢ããªã±ãŒã·ã§ã³ãç¶ç¶çã«ç£èŠãããšã©ãŒã®åŸåãåæããæéãšãšãã«ãšã©ãŒåŠçæŠç¥ãæ¹åããŸãããšã©ãŒåŠçã¯ç¶ç¶çãªããã»ã¹ã§ãããšã©ãŒã¬ããŒãã宿çã«ç¢ºèªããã¢ããªã±ãŒã·ã§ã³ã®é²åã«åãããŠãšã©ãŒå¢çããã®ã³ã°ãããã³ã¬ããŒãã¡ã«ããºã ã調æŽããŸããããã«ããããŠãŒã¶ãŒã®æåšå°ã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³ãå®å®ããç¶æ ã«ä¿ãããããšãä¿èšŒãããŸãã
çµè«
Reactã¢ããªã±ãŒã·ã§ã³ã§å¹æçãªãšã©ãŒãœãŒã¹æ å ±äŒæãå®è£ ããããšã¯ãå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãäœæããããã«éåžžã«éèŠã§ãããšã©ãŒå¢çãçè§£ããã«ã¹ã¿ã ãšã©ãŒãªããžã§ã¯ããæŽ»çšãããã®ã³ã°ãµãŒãã¹ãšçµ±åããããšã§ããããã°ããã»ã¹ãå€§å¹ ã«æ¹åããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããããã¯ç¶ç¶çãªããã»ã¹ã§ããããšãå¿ããªãã§ãã ãããã°ããŒãã«ãŠãŒã¶ãŒããŒã¹ã®é²åããããŒãºã«åãããŠããšã©ãŒåŠçæŠç¥ãç£èŠãåŠç¿ãé©å¿ãããŠãã ãããéçºäžã«æç¢ºã§ç°¡æœãªã³ãŒããšçްéšãžã®çްå¿ã®æ³šæãæãããšãåªå ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã確å®ã«ç¢ºå®ã«æ©èœããæé«ã®ããã©ãŒãã³ã¹åºæºãæºãããã°ããŒãã«ãªãªãŒããšæºè¶³ã®ãã倿§ãªãŠãŒã¶ãŒããŒã¹ã«ã€ãªãããŸãã