ð ãã°ã€ã³ç¶æ ã®ä¿æããŠãŒã¶ãŒãéžã¹ãããã«ãã話ãLernova éçºèšã
æçš¿æ¥: 2025幎05æ15æ¥
Lernova ã§ã¯ããŠãŒã¶ãŒãããã°ã€ã³ç¶æ
ãä¿æãããã©ãããããã§ãã¯ããã¯ã¹ã§éžæã§ããããã«ããŸããã
ä»åã¯ãã®èšèšèæ¯ãšå®è£
å
容ããããŠã»ãã¥ãªãã£ã«é¢ããèæ
®ç¹ã«ã€ããŠãŸãšããŸãã
ã¢ããªãç¶ç¶çã«äœ¿ã£ãŠãããã«ã¯ãæéãªããã°ã€ã³ã§ããããšããéèŠã§ãã
ãã ããåžžã«ãã°ã€ã³ç¶æ
ãç¶æããã®ã¯ã»ãã¥ãªãã£äžãªã¹ã¯ãããããããŠãŒã¶ãŒèªèº«ã«ä¿æã®å¯åŠãéžãã§ããã圢ã«ããŸããã
1. ãã§ãã¯ããã¯ã¹ã®è¿œå
ãã°ã€ã³ãã©ãŒã ã«ä»¥äžã®ãããªãã§ãã¯ããã¯ã¹ã远å ããŸããïŒ
<input
type="checkbox"
id="rememberMe"
checked={rememberMe}
onChange={() => setRememberMe((prev) => !prev)}
/>
<label htmlFor="rememberMe">
ãã°ã€ã³ç¶æ
ãä¿æããïŒlocalStorageïŒ
</label>
2. ãã°ã€ã³åŠçã«ãã©ã°ä¿åãçµã¿èŸŒã¿
éžæãããå€ã«å¿ããŠãlocalStorage
ãŸã㯠sessionStorage
ã«ç¶æ
ãä¿åããŸãïŒ
if (rememberMe) {
localStorage.setItem("persistLogin", "true");
sessionStorage.removeItem("persistLogin");
} else {
sessionStorage.setItem("persistLogin", "false");
localStorage.removeItem("persistLogin");
}
ð ã»ãã¥ãªãã£ãžã®é æ ®
ãã°ã€ã³ä¿æã¯äŸ¿å©ã§ãããå
±æç«¯æ«ã§ã®å©çšãã¹ã¯ãªããæ»æïŒXSSïŒãªã©ã®ãªã¹ã¯ããããŸãã
ãã®ããã以äžã®æ¹éã§å®è£
ããŠããŸãïŒ
çŸåšã¯ãã°ã€ã³ä¿æãã©ã°ãã¹ãã¬ãŒãžã«ä¿åããã ãã®å®è£ ã§ããã以äžã®ãããªæ¡åŒµãäºå®ããŠããŸãïŒ
Supabase ã¯ã©ã€ã¢ã³ãã® persistSession
ãšé£æºïŒãã°ã€ã³ç¶æ
ã®èªå埩å
ïŒ
ãã°ã€ã³æã«ã¹ãã¬ãŒãžãããã©ã°ãåç §ããåæå€ãåæ
ãŠãŒã¶ãŒèšå®ãšããŠä¿æãªãã·ã§ã³ã倿Žã§ãã UI ã®è¿œå
ãã°ã€ã³ç¶æ
ã®ä¿æã¯ãå©äŸ¿æ§ãšã»ãã¥ãªãã£ã®ãã©ã³ã¹ãåãããæ©èœã§ãã
Lernova ã§ã¯ã**ããŠãŒã¶ãŒãèªåã§éžã¹ãããã«ããã**ãšããã·ã³ãã«ã§å®å
šãªã¢ãããŒããæ¡çšããŸããã
ãããã现ãããªäœéšã®ç©ã¿éããã䜿ããããã¢ããªã«ã€ãªãã£ãŠãããšä¿¡ããŠããŸãã
Webã«ããããã¶ã€ã³ã®ã³ã
ãªãªãžãã«ã¢ããªå¥®éèš
èªåæ ç±å€§éžã-æè¬ãäŒããããšæããæžããŸãã-
å人éçºã®ã¢ãããŒã·ã§ã³ç¶æ(TAã®ãããã)
ãŸãããã粟ç¥ã®æ³šæç¹
ã¿ããªçé¢ç®éããïŒãŸãããã粟ç¥ã®ããã
å®è£ ã§ããã¬ãã«ã®ç²åºŠã«ã¿ã¹ã¯ãåè§£ããæ¹æ³
å人éçºã®ã¢ããªéçºã§GitHub Projectsã䜿ã£ããã±ããç®¡çæ¹æ³
ã13ç« ãå®åäœéšèª²é¡ã®ææ³
Codex䜿ã£ãŠã¿ãå ±å
ð ãã°ã€ã³ç¶æ ã®ä¿åæ¹æ³ãåãæ¿ãããããã°ã¢ãŠãã§ããªããªã£ã話
ðãNext.js à SWRãåŠç¿èšé²ã¢ããªã«ããŒãžããŒã·ã§ã³ãå°å ¥ãã話