ã¢ãã³ãªWebã¢ããªã±ãŒã·ã§ã³ã«ãããè€éãªããªããŒã·ã§ã³ãšç¶æ 管çãæ±ãããã®ãé«åºŠãªããã³ããšã³ããã©ãŒã ã¢ãŒããã¯ãã£æè¡ãæ¢ããŸããå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãã©ãŒã ãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãšæŠç¥ãåŠã³ãŸãããã
ããã³ããšã³ããã©ãŒã ã¢ãŒããã¯ãã£ïŒè€éãªããªããŒã·ã§ã³ãšç¶æ 管çããã¹ã¿ãŒãã
ãã©ãŒã ã¯Webã®è³ãæã«ååšããèŠçŽ ã§ããããŠãŒã¶ãŒå ¥åãšããŒã¿åéã®äž»èŠãªã€ã³ã¿ãŒãã§ãŒã¹ãšããŠæ©èœããŸããåçŽãªãã©ãŒã ã¯æ¯èŒçç°¡åã«å®è£ ã§ããŸãããé«åºŠãªããªããŒã·ã§ã³ã«ãŒã«ãåçãªãã£ãŒã«ããè€éãªç¶æ 管çèŠä»¶ãå°å ¥ãããšããã®è€éãã¯èããå¢å€§ããŸãããã®èšäºã§ã¯ãããã³ããšã³ããã©ãŒã ã¢ãŒããã¯ãã£ã®è€éãªè©³çްã«èžã¿èŸŒã¿ãå ç¢ã§ä¿å®æ§ãé«ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªãã©ãŒã ãæ§ç¯ããããã®å®è·µçãªæŠç¥ãšãã¹ããã©ã¯ãã£ã¹ãæäŸããŸãã
è€éãªãã©ãŒã ã®èª²é¡ãçè§£ãã
è€éãªãã©ãŒã ã¯ããã°ãã°ä»¥äžã®ãããªå€æ°ã®èª²é¡ãæç€ºããŸãïŒ
- ããªããŒã·ã§ã³ã®è€éãïŒ è€æ°ã®ãã£ãŒã«ãã«ãŸããããå€éšAPIã«å¯Ÿããéåæãã§ãã¯ãå¿ èŠãšããããŸãã¯ãŠãŒã¶ãŒåºæã®ããŒã¿ã«äŸåããè€éãªããªããŒã·ã§ã³ã«ãŒã«ã®å®è£ ã
- ç¶æ 管çïŒ ç¹ã«åçãã£ãŒã«ããæ¡ä»¶ä»ãããžãã¯ãæ±ãéã«ãããŸããŸãªã³ã³ããŒãã³ãéã§ãã©ãŒã ã®ç¶æ ãç¶æããåæãããããšã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ ããªããŒã·ã§ã³ãšã©ãŒã«é¢ããæç¢ºã§æçãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«æäŸãããã©ãŒã å ¥åããã»ã¹ãã¬ã€ãããã·ãŒã ã¬ã¹ã§çŽæçãªäœéšãä¿èšŒããããšã
- ä¿å®æ§ïŒ èŠä»¶ãé²åããŠãçè§£ãä¿®æ£ãæ¡åŒµã容æãªãã©ãŒã ã¢ãŒããã¯ãã£ãèšèšããããšã
- ããã©ãŒãã³ã¹ïŒ ãŠãŒã¶ãŒã®å¿çæ§ã«åœ±é¿ãäžããããšãªãã倧éã®ããŒã¿ã»ãããšè€éãªèšç®ãåŠçããããã«ãã©ãŒã ã®ããã©ãŒãã³ã¹ãæé©åããããšã
- ã¢ã¯ã»ã·ããªãã£ïŒ ã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ïŒWCAGïŒãéµå®ããé害ãæã€ãŠãŒã¶ãŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒããã©ãŒã ãå©çšã§ããããã«ä¿èšŒããããšã
- åœéåïŒi18nïŒãšå°ååïŒl10nïŒïŒ ãã©ãŒã ãç°ãªãèšèªãæåçæ £ç¿ãããã³å°åããŒã¿åœ¢åŒã«é©å¿ãããããšã
广çãªãã©ãŒã ã¢ãŒããã¯ãã£ã®äž»èŠåå
ãããã®èª²é¡ã«å¹æçã«å¯ŸåŠããããã«ã¯ã以äžã®ååã«åºã¥ããæç¢ºã«å®çŸ©ããããã©ãŒã ã¢ãŒããã¯ãã£ãæ¡çšããããšãéèŠã§ãïŒ
- é¢å¿ã®åé¢ïŒ ãã©ãŒã ã®ãã¬ãŒã³ããŒã·ã§ã³ããžãã¯ãããªããŒã·ã§ã³ã«ãŒã«ãç¶æ 管çãäºãã«åé¢ããŸããããã«ãããä¿å®æ§ãšãã¹ãæ§ãåäžããŸãã
- 宣èšçã¢ãããŒãïŒ ãã©ãŒã ã®æ§é ãšåäœã宣èšçã«å®çŸ©ããèšå®ãªããžã§ã¯ãããã¡ã€ã³åºæèšèªïŒDSLïŒã䜿çšããŠãã©ãŒã ã®ã¹ããŒããããªããŒã·ã§ã³ã«ãŒã«ãäŸåé¢ä¿ãèšè¿°ããŸãã
- ã³ã³ããŒãã³ãããŒã¹ã®èšèšïŒ ãã©ãŒã ãåå©çšå¯èœãªã³ã³ããŒãã³ãã«åå²ãããããããå ¥åãã£ãŒã«ããããªããŒã·ã§ã³ã¡ãã»ãŒãžãæ¡ä»¶ä»ãã»ã¯ã·ã§ã³ãªã©ããã©ãŒã ã®æ©èœã®ç¹å®ã®åŽé¢ãæ åœããŸãã
- éäžåç¶æ 管çïŒ ReduxãVuexãReact Contextãªã©ã®äžå€®éæš©çãªç¶æ 管çãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãã©ãŒã ã®ç¶æ ã管çããã³ã³ããŒãã³ãéã®äžè²«æ§ã確ä¿ããŸãã
- éåæããªããŒã·ã§ã³ïŒ ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ããããã¯ããããšãªããå€éšAPIãããŒã¿ããŒã¹ã«å¯ŸããŠãã§ãã¯ãè¡ãããã«éåæããªããŒã·ã§ã³ãå®è£ ããŸãã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒ åºæ¬çãªãã©ãŒã å®è£ ããå§ããå¿ èŠã«å¿ããŠæ©èœãšè€éããæ®µéçã«è¿œå ããŸãã
è€éãªããªããŒã·ã§ã³ã®ããã®æŠç¥
1. ããªããŒã·ã§ã³ã¹ããŒã
ããªããŒã·ã§ã³ã¹ããŒãã¯ããã©ãŒã å ã®åãã£ãŒã«ãã®ããªããŒã·ã§ã³ã«ãŒã«ã宣èšçã«å®çŸ©ããæ¹æ³ãæäŸããŸããYupãJoiãZodã®ãããªã©ã€ãã©ãªã䜿çšãããšãæµæ¢ãªAPIã䜿çšããŠã¹ããŒããå®çŸ©ããããŒã¿åãå¿ é ãã£ãŒã«ããæ£èŠè¡šçŸãããã³ã«ã¹ã¿ã ããªããŒã·ã§ã³é¢æ°ãæå®ã§ããŸãã
äŸïŒYupã䜿çšïŒïŒ
import * as Yup from 'yup';
const schema = Yup.object().shape({
firstName: Yup.string().required('åã¯å¿
é ã§ã'),
lastName: Yup.string().required('å§ã¯å¿
é ã§ã'),
email: Yup.string().email('ç¡å¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ã').required('ã¡ãŒã«ã¢ãã¬ã¹ã¯å¿
é ã§ã'),
age: Yup.number().integer().positive().required('幎霢ã¯å¿
é ã§ã'),
country: Yup.string().required('åœã¯å¿
é ã§ã'),
});
// 䜿çšäŸ
schema.validate({ firstName: 'John', lastName: 'Doe', email: 'john.doe@example.com', age: 30, country: 'USA' })
.then(valid => console.log('æå¹:', valid))
.catch(err => console.error('ç¡å¹:', err.errors));
ãã®ã¢ãããŒãã«ãããããªããŒã·ã§ã³ããžãã¯ãäžå åããŠåå©çšã§ããããããã©ãŒã ã®ããªããŒã·ã§ã³ã«ãŒã«ã®ä¿å®ãšæŽæ°ã容æã«ãªããŸãã
2. ã«ã¹ã¿ã ããªããŒã·ã§ã³é¢æ°
ããè€éãªããªããŒã·ã§ã³ã·ããªãªã§ã¯ããã©ãŒã ã®ç¶æ ãå€éšããŒã¿ã«åºã¥ããŠç¹å®ã®ãã§ãã¯ãå®è¡ããã«ã¹ã¿ã ããªããŒã·ã§ã³é¢æ°ãå®çŸ©ã§ããŸãããããã®é¢æ°ã¯ãããªããŒã·ã§ã³ã¹ããŒãã«çµ±åãããããã©ãŒã ã³ã³ããŒãã³ãå ã§çŽæ¥äœ¿çšãããã§ããŸãã
äŸïŒã«ã¹ã¿ã ããªããŒã·ã§ã³ïŒïŒ
const validatePassword = (password) => {
if (password.length < 8) {
return 'ãã¹ã¯ãŒãã¯8æå以äžã§ããå¿
èŠããããŸã';
}
if (!/[a-z]/.test(password)) {
return 'ãã¹ã¯ãŒãã«ã¯å°æåã1æå以äžå«ããå¿
èŠããããŸã';
}
if (!/[A-Z]/.test(password)) {
return 'ãã¹ã¯ãŒãã«ã¯å€§æåã1æå以äžå«ããå¿
èŠããããŸã';
}
if (!/[0-9]/.test(password)) {
return 'ãã¹ã¯ãŒãã«ã¯æ°åã1æå以äžå«ããå¿
èŠããããŸã';
}
return null; // ãšã©ãŒãªã
};
// ãã©ãŒã ã³ã³ããŒãã³ãã§ã®äœ¿çš
const passwordError = validatePassword(formValues.password);
3. éåæããªããŒã·ã§ã³
ãŠãŒã¶ãŒåã®å©çšå¯èœæ§ã®ç¢ºèªãéµäŸ¿çªå·ã®æ€èšŒãªã©ãå€éšAPIãããŒã¿ããŒã¹ã«å¯ŸããŠãã§ãã¯ãè¡ãå¿ èŠãããå ŽåãéåæããªããŒã·ã§ã³ã¯äžå¯æ¬ ã§ããããã«ã¯ããµãŒããŒãžã®éåæãªã¯ãšã¹ããè¡ããã¬ã¹ãã³ã¹ã«åºã¥ããŠãã©ãŒã ã®ç¶æ ãæŽæ°ããããšãå«ãŸããŸãã
äŸïŒ`fetch`ã䜿çšããéåæããªããŒã·ã§ã³ïŒïŒ
const validateUsernameAvailability = async (username) => {
try {
const response = await fetch(`/api/check-username?username=${username}`);
const data = await response.json();
if (data.available) {
return null; // ãŠãŒã¶ãŒåã¯å©çšå¯èœã§ã
} else {
return 'ãã®ãŠãŒã¶ãŒåã¯æ¢ã«äœ¿çšãããŠããŸã';
}
} catch (error) {
console.error('ãŠãŒã¶ãŒåã®å©çšå¯èœæ§ã®ç¢ºèªäžã«ãšã©ãŒãçºçããŸãã:', error);
return 'ãŠãŒã¶ãŒåã®å©çšå¯èœæ§ã®ç¢ºèªäžã«ãšã©ãŒãçºçããŸãã';
}
};
// ãã©ãŒã ã³ã³ããŒãã³ãã§ã®äœ¿çšïŒäŸïŒuseEffectã䜿çšïŒ
useEffect(() => {
if (formValues.username) {
validateUsernameAvailability(formValues.username)
.then(error => setUsernameError(error));
}
}, [formValues.username]);
éåæããªããŒã·ã§ã³äžã¯ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãªã©ã衚瀺ããŠãããªããŒã·ã§ã³ããã»ã¹ãé²è¡äžã§ããããšããŠãŒã¶ãŒã«èŠèŠçã«ãã£ãŒãããã¯ããããšãéèŠã§ãã
4. æ¡ä»¶ä»ãããªããŒã·ã§ã³
æ¡ä»¶ä»ãããªããŒã·ã§ã³ãšã¯ããã©ãŒã å ã®ä»ã®ãã£ãŒã«ãã®å€ã«åºã¥ããŠããªããŒã·ã§ã³ã«ãŒã«ãé©çšããããšã§ããäŸãã°ããŠãŒã¶ãŒãåœç±ãšããŠç¹å®ã®åœãéžæããå Žåã«ã®ã¿ããã¹ããŒãçªå·ã®å ¥åãèŠæ±ãããããªå Žåã§ãã
äŸïŒæ¡ä»¶ä»ãããªããŒã·ã§ã³ïŒïŒ
const schema = Yup.object().shape({
nationality: Yup.string().required('åœç±ã¯å¿
é ã§ã'),
passportNumber: Yup.string().when('nationality', {
is: (nationality) => nationality === 'Non-EU', // æ¡ä»¶ã®äŸ
then: Yup.string().required('éEUåžæ°ã®å Žåããã¹ããŒãçªå·ã¯å¿
é ã§ã'),
otherwise: Yup.string(), // EUåžæ°ã®å Žåã¯äžèŠ
}),
});
ç¶æ 管çã®æŠç¥
广çãªç¶æ 管çã¯ãåçãªãã©ãŒã ãè€éãªäŸåé¢ä¿ãããã³å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãäžã§éåžžã«éèŠã§ããããã€ãã®ç¶æ 管çã¢ãããŒããæ¡çšã§ããããããã«é·æãšçæããããŸãã
1. ã³ã³ããŒãã³ãã®ç¶æ
ãã£ãŒã«ãæ°ãéãããŠããåçŽãªãã©ãŒã ã®å Žåã`useState`ïŒReactïŒãä»ã®ãã¬ãŒã ã¯ãŒã¯ã®åæ§ã®ã¡ã«ããºã ã䜿çšããŠç®¡çãããã³ã³ããŒãã³ãã®ç¶æ ã§ååãããããŸããããããããã©ãŒã ãè€éã«ãªãã«ã€ããŠããã®ã¢ãããŒãã¯ç®¡çãé£ãããªããŸãã
2. ãã©ãŒã ã©ã€ãã©ãªïŒFormik, React Hook FormïŒ
FormikãReact Hook Formã®ãããªãã©ãŒã ã©ã€ãã©ãªã¯ããã©ãŒã ã®ç¶æ ãããªããŒã·ã§ã³ãããã³éä¿¡ã管çããããã®å æ¬çãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããããã®ã©ã€ãã©ãªã¯ã次ã®ãããªæ©èœãæäŸããŸãïŒ
- èªåçãªç¶æ 管ç
- ããªããŒã·ã§ã³ã®çµ±åïŒYup, Joi, ãŸãã¯ã«ã¹ã¿ã ããªããŒã¿ãŒãšé£æºïŒ
- éä¿¡åŠç
- ãã£ãŒã«ãã¬ãã«ã§ã®ãšã©ãŒãã©ããã³ã°
- ããã©ãŒãã³ã¹ã®æé©å
äŸïŒFormikãšYupã䜿çšïŒïŒ
import { useFormik } from 'formik';
import * as Yup from 'yup';
const validationSchema = Yup.object({
firstName: Yup.string().required('åã¯å¿
é ã§ã'),
lastName: Yup.string().required('å§ã¯å¿
é ã§ã'),
email: Yup.string().email('ç¡å¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ã').required('ã¡ãŒã«ã¯å¿
é ã§ã'),
});
const MyForm = () => {
const formik = useFormik({
initialValues: {
firstName: '',
lastName: '',
email: '',
},
validationSchema: validationSchema,
onSubmit: (values) => {
alert(JSON.stringify(values, null, 2));
},
});
return (
);
};
3. éäžåç¶æ 管çïŒRedux, VuexïŒ
è€æ°ã®ãã©ãŒã ãå ±æããããã©ãŒã ç¶æ ãæã€è€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãReduxãVuexã®ãããªéäžåç¶æ 管çãœãªã¥ãŒã·ã§ã³ããããå ç¢ã§ã¹ã±ãŒã©ãã«ãªã¢ãããŒããæäŸã§ããŸãããããã®ã©ã€ãã©ãªã䜿çšãããšãåäžã®ã¹ãã¢ã§ãã©ãŒã ã®ç¶æ ã管çããä»»æã®ã³ã³ããŒãã³ãããç¶æ ãæŽæ°ããããã®ã¢ã¯ã·ã§ã³ããã£ã¹ãããã§ããŸãã
éäžåç¶æ 管çã®å©ç¹ïŒ
- ãã©ãŒã ç¶æ ã®ããã®äžå€®éæš©åãããããŒã¿ã¹ãã¢
- ã¢ã¯ã·ã§ã³ãšãªãã¥ãŒãµãŒã«ããäºæž¬å¯èœãªç¶æ æŽæ°
- ã³ã³ããŒãã³ãéã§ã®ãã©ãŒã ç¶æ ã®ç°¡åãªå ±æ
- ã¿ã€ã ãã©ãã«ãããã°æ©èœ
4. React Context API
React Context APIã¯ãããããããªãªã³ã°ãªãã§ã³ã³ããŒãã³ãéã§ç¶æ ãå ±æããããã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŸãããã©ãŒã ã³ã³ããã¹ããäœæããŠãã©ãŒã ã®ç¶æ ã管çãããã¹ãŠã®ãã©ãŒã ã³ã³ããŒãã³ãã«æäŸããããšãã§ããŸãã
åœéåïŒi18nïŒãšå°ååïŒl10nïŒã«é¢ããèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ãã©ãŒã ãéçºããå ŽåãåœéåïŒi18nïŒãšå°ååïŒl10nïŒã®åŽé¢ãèæ ®ããããšãéèŠã§ãã
- èšèªãµããŒãïŒ è€æ°ã®èšèªããµããŒããããŠãŒã¶ãŒããã©ãŒã ã®ã©ãã«ãã¡ãã»ãŒãžãæç€ºã«å¥œã¿ã®èšèªãéžæã§ããããã«ããŸãã
- æ¥ä»ãšæ°å€ã®ãã©ãŒãããïŒ ãŠãŒã¶ãŒã®ãã±ãŒã«ã«åãããŠæ¥ä»ãšæ°å€ã®ãã©ãŒããããé©å¿ãããŸããäŸãã°ãæ¥ä»ã¯ç±³åœã§ã¯MM/DD/YYYYããšãŒãããã§ã¯DD/MM/YYYYãšè¡šç€ºãããå ŽåããããŸãã
- é貚èšå·ïŒ ãŠãŒã¶ãŒã®ãã±ãŒã«ã«å¿ããŠé貚èšå·ã衚瀺ããŸãã
- äœæãã©ãŒãããïŒ åœã«ãã£ãŠç°ãªãäœæãã©ãŒãããã«å¯Ÿå¿ããŸããäŸãã°ãäžéšã®åœã§ã¯éµäŸ¿çªå·ãéœåžåã®åã«äœ¿çšããŸãããä»ã®åœã§ã¯åŸã«äœ¿çšããŸãã
- å³ããå·ŠïŒRTLïŒãžã®ãµããŒãïŒ ã¢ã©ãã¢èªãããã©ã€èªã®ãããªRTLèšèªã«å¯ŸããŠããã©ãŒã ã®ã¬ã€ã¢ãŠããšããã¹ãã®æ¹åãæ£ãã衚瀺ãããããã«ããŸãã
i18nextãreact-intlã®ãããªã©ã€ãã©ãªã¯ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã§ã®i18nãšl10nã®å®è£ ã«åœ¹ç«ã¡ãŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
é害ãæã€ãŠãŒã¶ãŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒããã©ãŒã ã«ã¢ã¯ã»ã¹ã§ããããã«ããããšã¯ãããã³ããšã³ããã©ãŒã ã¢ãŒããã¯ãã£ã®éèŠãªåŽé¢ã§ããã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ïŒWCAGïŒãéµå®ããããšã§ãèŠèŠé害ãéåé害ãèªç¥é害ããã®ä»ã®é害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã®ãã©ãŒã ã®äœ¿ãããããå€§å¹ ã«åäžããŸãã
- ã»ãã³ãã£ãã¯HTMLïŒ `
- ARIA屿§ïŒ ã¹ã¯ãªãŒã³ãªãŒããŒãªã©ã®æ¯æŽæè¡ã«è¿œå æ å ±ãæäŸããããã«ARIA屿§ã䜿çšããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒ ãã¹ãŠã®ãã©ãŒã èŠçŽ ãããŒããŒãããã²ãŒã·ã§ã³ã§ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
- æç¢ºãªãšã©ãŒã¡ãã»ãŒãžïŒ çè§£ãããã察åŠãããããæç¢ºã§æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- ååãªã³ã³ãã©ã¹ãïŒ ããã¹ããšèæ¯ã®éã«ååãªè²ã®ã³ã³ãã©ã¹ããããããšã確èªããŸãã
- ãã©ãŒã ã©ãã«ïŒ ãã¹ãŠã®ãã©ãŒã èŠçŽ ã«æç¢ºã§èª¬æçãªã©ãã«ã䜿çšãã`for`屿§ã䜿çšããŠå¯Ÿå¿ããå ¥åãã£ãŒã«ããšæ£ããé¢é£ä»ããŸãã
- ãã©ãŒã«ã¹ç®¡çïŒ ãã©ãŒã ã®èªã¿èŸŒã¿æãããªããŒã·ã§ã³ãšã©ãŒçºçæããã©ãŒã éä¿¡æã«ãã©ãŒã«ã¹ãé©åã«ç®¡çããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšãã³ã
- ã·ã³ãã«ã«å§ããïŒ åºæ¬çãªãã©ãŒã å®è£ ããå§ããå¿ èŠã«å¿ããŠæ©èœãšè€éããæ®µéçã«è¿œå ããŸãã
- 培åºçã«ãã¹ãããïŒ ããŸããŸãªãã©ãŠã¶ãããã€ã¹ãç»é¢ãµã€ãºã§ãã©ãŒã ã培åºçã«ãã¹ãããŸãã
- ã¹ã¿ã€ã«ã¬ã€ãã䜿çšããïŒ ãã©ãŒã èŠçŽ ãšã¬ã€ã¢ãŠãã«äžè²«ããã¹ã¿ã€ã«ã¬ã€ãã«åŸããŸãã
- ã³ãŒããææžåããïŒ åã³ã³ããŒãã³ããããªããŒã·ã§ã³ã«ãŒã«ãç¶æ 管çã¡ã«ããºã ã®ç®çã説æããã³ãŒããæç¢ºãã€ç°¡æœã«ææžåããŸãã
- ããŒãžã§ã³ç®¡çã䜿çšããïŒ ããŒãžã§ã³ç®¡çïŒäŸïŒGitïŒã䜿çšããŠã³ãŒãã®å€æŽã远跡ããä»ã®éçºè ãšååããŸãã
- èªåãã¹ãïŒ ãã©ãŒã ã®æ©èœæ§ãä¿èšŒãããªã°ã¬ãã·ã§ã³ãé²ãããã«èªåãã¹ããå®è£ ããŸããããã«ã¯ãåã ã®ã³ã³ããŒãã³ãã®åäœãã¹ãããã³ã³ããŒãã³ãéã®çžäºäœçšãæ€èšŒããçµ±åãã¹ããå«ãŸããŸãã
- ããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã°ïŒ ãã©ãŒã ã®ããã©ãŒãã³ã¹ãç£èŠããæé©åã®äœå°ãããé åãç¹å®ããŸããLighthouseã®ãããªããŒã«ã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- ãŠãŒã¶ãŒãã£ãŒãããã¯ïŒ ãŠãŒã¶ãŒãã£ãŒãããã¯ãåéããŠæ¹åç¹ãç¹å®ãããã©ãŒã ã®äœ¿ãããããåäžãããŸããã³ã³ããŒãžã§ã³çãæé©åããããã«ãç°ãªããã©ãŒã ãã¶ã€ã³ã®A/Bãã¹ããæ€èšããŸãã
- ã»ãã¥ãªãã£ïŒ ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æããã®ä»ã®ã»ãã¥ãªãã£è匱æ§ãé²ãããã«ããŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããŸãã転éäžã®ããŒã¿ãæå·åããããã«HTTPSã䜿çšããŸãã
- ã¢ãã€ã«ã¬ã¹ãã³ã·ãïŒ ãã©ãŒã ãã¬ã¹ãã³ã·ãã§ãããç°ãªãç»é¢ãµã€ãºã«é©å¿ããããšã確èªããŸããã¡ãã£ã¢ã¯ãšãªã䜿çšããŠãã¢ãã€ã«ããã€ã¹ã®ã¬ã€ã¢ãŠããšãã©ã³ããµã€ãºã調æŽããŸãã
çµè«
å ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãã©ãŒã ãæ§ç¯ããã«ã¯ãæ éãªèšç»ãæç¢ºã«å®çŸ©ãããã¢ãŒããã¯ãã£ããããŠé¢é£ãã課é¡ãžã®æ·±ãçè§£ãå¿ èŠã§ãããã®èšäºã§æŠèª¬ããæŠç¥ãšãã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã§ãä¿å®ãæ¡åŒµãé²åããèŠä»¶ãžã®é©å¿ã容æãªè€éãªãã©ãŒã ãäœæã§ããŸãããã©ãŒã ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠå©çšå¯èœã§ã¢ã¯ã»ã¹ãããããã®ã«ãªãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãã¢ã¯ã»ã·ããªãã£ãåœéåãåªå ããããšãå¿ããªãã§ãã ããã
ããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã®é²åã¯ããã©ãŒã éçºã®ããã®æ°ããããŒã«ãšãã¯ããã¯ãæäŸãç¶ããŠããŸããææ°ã®ãã¬ã³ããšãã¹ããã©ã¯ãã£ã¹ãåžžã«ææ¡ããããšã¯ãã¢ãã³ã§å¹ççããã€ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãã©ãŒã ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã