ããŒãžã§ã³ç®¡çã®æªæ¥ãæ¢æ±ããŸãããœãŒã¹ã³ãŒãã®åã·ã¹ãã ãšASTããŒã¹ã®å·®åå®è£ ããããŒãžã³ã³ããªã¯ãããªãããæããããšãªããªãã¡ã¯ã¿ãªã³ã°ã§ããããã«ããæ¹æ³ãåŠã³ãŸãããã
åå®å šãªããŒãžã§ã³ç®¡çïŒãœãããŠã§ã¢æŽåæ§ã®ããã®æ°ãããã©ãã€ã
ãœãããŠã§ã¢éçºã®äžçã§ã¯ãGitã®ãããªããŒãžã§ã³ç®¡çã·ã¹ãã ïŒVCSïŒãã³ã©ãã¬ãŒã·ã§ã³ã®åºç€ãšãªã£ãŠããŸãããããã¯å€åã®æ®éçãªèšèªã§ãããç§ãã¡ã®å ±åäœæ¥ã®å°åž³ã§ãããããããã®ãã¹ãŠã®åã«ããããããããããã¯ç®¡çãã察象ã§ããã³ãŒãã®æå³ãåºæ¬çã«çè§£ããŠããŸãããGitã«ãšã£ãŠãããªãã®çްå¿ã®æ³šæãæã£ãŠäœæãããã¢ã«ãŽãªãºã ã¯ãè©©ã飿åã®ãªã¹ããšäœãå€ãããŸããããã¹ãŠããã¹ãã®è¡ã«ãããŸããããã®åºæ¬çãªå¶éã¯ãç§ãã¡ãæãçµ¶ããæ±ãäžæºãã€ãŸããäžå¯è§£ãªããŒãžã³ã³ããªã¯ããå£ãããã«ãããããŠå€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ã«å¯Ÿãã麻çºããææã®åå ã§ãã
ããããããç§ãã¡ã®ããŒãžã§ã³ç®¡çã·ã¹ãã ããç§ãã¡ã®ã³ã³ãã€ã©ãIDEãšåããããæ·±ãã³ãŒããçè§£ã§ãããšãããã©ãã§ããããïŒããããããããã¹ãã®ç§»åã ãã§ãªãã颿°ãã¯ã©ã¹ãããã³åã®é²åã远跡ã§ãããšãããã©ãã§ããããïŒããã¯ãåå®å šãªããŒãžã§ã³ç®¡çã®çŽæã§ããããã¯ãã³ãŒãããã©ãããªããã¹ããã¡ã€ã«ã§ã¯ãªããæ§é åãããæå³çãªãšã³ãã£ãã£ãšããŠæ±ãé©åœçãªã¢ãããŒãã§ãããã®èšäºã§ã¯ããã®æ°ããããã³ãã£ã¢ãæ¢æ±ããã³ãŒãã®èšèªãæçµçã«è©±ãVCSãæ§ç¯ããããã®æ žå¿çãªæŠå¿µãå®è£ ã®æ±ãããã³æ·±é ãªæå³ã«ã€ããŠæãäžããŠãããŸãã
ããã¹ãããŒã¹ã®ããŒãžã§ã³ç®¡çã®è匱æ§
æ°ãããã©ãã€ã ã®å¿ èŠæ§ãçè§£ããã«ã¯ããŸãçŸåšã®ãã©ãã€ã ã®åºæã®åŒ±ç¹ãèªèããå¿ èŠããããŸããGitãMercurialãSubversionãªã©ã®ã·ã¹ãã ã¯ãã·ã³ãã«ã§åŒ·åãªã¢ã€ãã¢ã«åºã¥ããŠæ§ç¯ãããŠããŸããã€ãŸããè¡ããŒã¹ã®å·®åã§ãããããã¯ããã¡ã€ã«ã®ããŒãžã§ã³ãè¡ããšã«æ¯èŒãã远å ãåé€ãããã³å€æŽãèå¥ããŸããããã¯é©ãã»ã©é·ãéããŸãæ©èœããŸããããã®éçã¯ãè€éã§å調çãªãããžã§ã¯ãã«ãããŠçãŸããã»ã©æç¢ºã«ãªããŸãã
æ§æã«ç¡é çãªããŒãž
æãäžè¬çãªåé¡ç¹ã¯ãããŒãžã³ã³ããªã¯ãã§ãã2人ã®éçºè ãåãè¡ãç·šéãããšãGitã¯ãããããŠã人éãææ§ãã解決ããããã«èŠæ±ããŸããGitã¯æ§æãçè§£ããŠããªããããäºçްãªç©ºçœã®å€æŽãšé¢æ°ã®ããžãã¯ãžã®éèŠãªå€æŽãåºå¥ã§ããŸãããããã«æªãããšã«ãå Žåã«ãã£ãŠã¯ãæ§æçã«ç¡å¹ãªã³ãŒãã«ã€ãªãããæåãããããŒãžãå®è¡ããéçºè ãã³ãããåŸã«åããŠçºèŠããå£ãããã«ãã«ã€ãªããå¯èœæ§ããããŸãã
äŸïŒæªæã®ããæåããããŒãžmainãã©ã³ãã®åçŽãªé¢æ°åŒã³åºããèããŠã¿ãŸãããã
process_data(user, settings);
- ãã©ã³ãAïŒéçºè
ãæ°ããåŒæ°ã远å ããŸãïŒ
process_data(user, settings, is_admin=True); - ãã©ã³ãBïŒå¥ã®éçºè
ãããããããããããã«é¢æ°åã倿ŽããŸãïŒ
process_user_data(user, settings);
æšæºã®3æ¹åããã¹ãããŒãžã¯ããããã®å€æŽã次ã®ãããªæå³ã®ãªããã®ã«çµã¿åãããå¯èœæ§ããããŸãã
process_user_data(user, settings, is_admin=True);
ããŒãžã¯ç«¶åãªãã§æåããŸãããã³ãŒãã¯process_user_dataãis_adminåŒæ°ãåãå
¥ããªããããå£ããŠããŸãããã®ãã°ã¯çŸåšãã³ãŒãããŒã¹ã«ã²ã£ãããšæœãã§ãããCIãã€ãã©ã€ã³ïŒãŸãã¯ããã«æªãããšã«ããŠãŒã¶ãŒïŒã«ãã£ãŠæ€åºãããã®ãåŸ
ã£ãŠããŸãã
ãªãã¡ã¯ã¿ãªã³ã°ã®æªå€¢
å€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ã¯ãã³ãŒãããŒã¹ã®é·æçãªä¿å®æ§ã«ãšã£ãŠæãå¥å šãªã¢ã¯ãã£ããã£ã®1ã€ã§ãããæãæããããŠããŸããããã¹ãããŒã¹ã®VCSã§åºã䜿çšãããŠããã¯ã©ã¹ã®ååã倿Žãããã颿°ã®ã·ã°ããã£ã倿Žããããããšãå€§èŠæš¡ã§ãã€ãºã®å€ãå·®åãäœæãããŸããæ°åãŸãã¯æ°çŸã®ãã¡ã€ã«ã«è§Šããã³ãŒãã¬ãã¥ãŒããã»ã¹ãããŽã å°ãæŒãããã®éå±ãªæŒç¿ã«ããŸããçã®è«ççãªå€æŽïŒåäžã®åå倿Žã®è¡çºïŒã¯ãããã¹ãã®å€æŽã®éªåŽ©ã®äžã«åãããŠããŸããŸãããã®ãããªãã©ã³ããããŒãžããããšã¯ããªã¹ã¯ãé«ããã¹ãã¬ã¹ã®é«ãã€ãã³ãã«ãªããŸãã
å±¥æŽã³ã³ããã¹ãã®åªå€±
ããã¹ãããŒã¹ã®ã·ã¹ãã ã¯ãã¢ã€ãã³ãã£ãã£ã«èŠåŽããŸãã颿°ãutils.pyããhelpers.pyã«ç§»åãããšãGitã¯ããããããã¡ã€ã«ããã®åé€ãšå¥ã®ãã¡ã€ã«ãžã®è¿œå ãšèŠãªããŸããæ¥ç¶ã倱ãããŸãããã®é¢æ°ã®å±¥æŽã¯çŸåšæçåãããŠããŸããæ°ããå Žæã®é¢æ°ã«å¯Ÿããgit blameã¯ãäœå¹Žãåã«ããžãã¯ãæžããå
ã®äœæè
ã§ã¯ãªãããªãã¡ã¯ã¿ãªã³ã°ã³ããããæããŸããã³ãŒãã®ç©èªã¯ãåçŽã§å¿
èŠãªåç·šæã«ãã£ãŠæ¶å»ãããŸãã
æŠå¿µã®ç޹ä»ïŒåå®å šãªããŒãžã§ã³ç®¡çãšã¯ïŒ
åå®å šãªããŒãžã§ã³ç®¡çã¯ãèŠç¹ã®æ ¹æ¬çãªå€åãææ¡ããŠããŸãããœãŒã¹ã³ãŒããäžé£ã®æåãšè¡ãšããŠè¡šç€ºããã®ã§ã¯ãªããããã°ã©ãã³ã°èšèªã®ã«ãŒã«ã§å®çŸ©ãããæ§é åããŒã¿åœ¢åŒãšããŠè¡šç€ºããŸããçå®ã¯ããã¹ããã¡ã€ã«ã§ã¯ãªãããã®æå³è¡šçŸãã€ãŸãæœè±¡æ§ææšïŒASTïŒã§ãã
ASTã¯ãã³ãŒãã®æ§ææ§é ã衚ãããªãŒã®ãããªããŒã¿æ§é ã§ãããã¹ãŠã®èŠçŽ ïŒé¢æ°å®£èšã倿°å²ãåœãŠãifæãªã©ïŒããã®ããªãŒã®ããŒãã«ãªããŸããASTãæäœããããšã«ãããããŒãžã§ã³ç®¡çã·ã¹ãã ã¯ã³ãŒãã®æå³ãšæ§é ãçè§£ã§ããŸãã
- 倿°ã®åå倿Žã¯ããã¯ã1è¡ã®åé€ãšå¥ã®è¡ã®è¿œå ãšã¯èŠãªãããŸãããããã¯åäžã®ã¢ãããã¯ãªæäœã§ãïŒ
RenameIdentifier(old_name, new_name)ã - 颿°ã®ç§»åã¯ãASTã®é¢æ°ããŒãã®èŠªã倿Žããæäœã§ãããå€§èŠæš¡ãªã³ããŒã¢ã³ãããŒã¹ãæäœã§ã¯ãããŸããã
- ããŒãžã³ã³ããªã¯ãã¯ãéè€ããããã¹ãã®ç·šéã§ã¯ãªããè«ççã«äºææ§ã®ãªã倿ã«é¢ãããã®ã§ããããšãã°ãå¥ã®ãã©ã³ãã倿ŽããããšããŠãã颿°ãåé€ããããšãªã©ã§ãã
ãåå®å
šãã®ãåãã¯ããã®æ§é çããã³æå³çãªçè§£ãæããŸããVCSã¯ãåã³ãŒãèŠçŽ ã®ãåãïŒäŸïŒFunctionDeclarationãClassDefinitionãImportStatementïŒãç¥ã£ãŠãããéçã«åä»ããããèšèªãã³ã³ãã€ã«æã«æååãæŽæ°å€æ°ã«å²ãåœãŠãã®ãé²ãã®ãšåæ§ã«ãã³ãŒãããŒã¹ã®æ§é çæŽåæ§ãç¶æããã«ãŒã«ãé©çšã§ããŸããããã¯ãæåããããŒãžã¯ãã¹ãŠæ§æçã«æå¹ãªã³ãŒããããããããšãä¿èšŒããŸãã
å®è£ ã®æ±ïŒVCã®ãœãŒã¹ã³ãŒãåã·ã¹ãã ã®æ§ç¯
ããã¹ãããŒã¹ããåå®å šãªã¢ãã«ãžã®ç§»è¡ã¯ãã³ãŒãã®ä¿åããããé©çšãããã³ããŒãžã®æ¹æ³ãå®å šã«åèããå¿ èŠããããèšå¿µç¢çãªã¿ã¹ã¯ã§ãããã®æ°ããã¢ãŒããã¯ãã£ã¯ã4ã€ã®äž»èŠãªæ±ã«åºã¥ããŠããŸãã
æ±1ïŒæœè±¡æ§ææšïŒASTïŒãçå®ãšãã
ãã¹ãŠã¯è§£æããå§ãŸããŸããéçºè ãã³ããããè¡ããšããæåã®ã¹ãããã¯ãã¡ã€ã«ã®ããã¹ããããã·ã¥ããããšã§ã¯ãªãããããASTã«è§£æããããšã§ãããã®ASTã¯ããœãŒã¹ãã¡ã€ã«ã§ã¯ãªãããªããžããªå ã®ã³ãŒãã®æ£æºè¡šçŸã«ãªããŸãã
- èšèªåºæã®ããŒãµãŒïŒããã¯æåã®å€§ããªããŒãã«ã§ããVCSã¯ããµããŒããããã¹ãŠã®ããã°ã©ãã³ã°èšèªã«å¯ŸããŠãå ç¢ã§é«éãã€ãšã©ãŒèæ§ã®ããããŒãµãŒã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã倿°ã®èšèªã«å¯Ÿããå¢åè§£æãæäŸããTree-sitterãªã©ã®ãããžã§ã¯ãã¯ããã®ãã¯ãããžãŒã®éèŠãªã€ããŒãã©ãŒã§ãã
- ããªã°ããããªããžããªã®åŠçïŒææ°ã®ãããžã§ã¯ãã¯1ã€ã®èšèªã ãã§ã¯ãããŸãããPythonãJavaScriptãHTMLãCSSãæ§æçšã®YAMLãããã¥ã¡ã³ãçšã®Markdownãæ··åšããŠããŸããçã®åå®å šãªVCSã¯ããã®æ§é åããã³åæ§é åããŒã¿ã®å€æ§ãªã³ã¬ã¯ã·ã§ã³ãè§£æããã³ç®¡çã§ããå¿ èŠããããŸãã
æ±2ïŒã³ã³ãã³ãã¢ãã¬ã¹å¯èœãªASTããŒã
Gitã®åã¯ãã³ã³ãã³ãã¢ãã¬ã¹å¯èœãªã¹ãã¬ãŒãžããæ¥ãŠããŸãããã¹ãŠã®ãªããžã§ã¯ãïŒblobãtreeãcommitïŒã¯ããã®å å®¹ã®æå·ããã·ã¥ã«ãã£ãŠèå¥ãããŸããåå®å šãªVCSã¯ããã®æŠå¿µããã¡ã€ã«ã¬ãã«ããæå³ã¬ãã«ã«æ¡åŒµããŸãã
ãã¡ã€ã«å šäœã®ããã¹ããããã·ã¥ãã代ããã«ãåã ã®ASTããŒããšãã®åããŒãã®ã·ãªã¢ã«åããã衚çŸãããã·ã¥ããŸããããšãã°ã颿°å®çŸ©ã«ã¯ããã®ååããã©ã¡ãŒã¿ãŒãããã³æ¬æã«åºã¥ãäžæã®èå¥åããããŸãããã®ã·ã³ãã«ãªã¢ã€ãã¢ã«ã¯ãæ·±é ãªçµæããããŸãã
- çã®ã¢ã€ãã³ãã£ãã£ïŒé¢æ°åã倿Žãããšããã®
nameããããã£ã®ã¿ã倿ŽãããŸãããã®æ¬äœãšãã©ã¡ãŒã¿ãŒã®ããã·ã¥ã¯åããŸãŸã§ããVCSã¯ããããæ°ããååãæã€åã颿°ã§ããããšãèªèã§ããŸãã - å Žæã®ç¬ç«æ§ïŒãã®é¢æ°ãå¥ã®ãã¡ã€ã«ã«ç§»åããŠãããã®ããã·ã¥ã¯ãŸã£ããå€ãããŸãããVCSã¯ãã©ãã«ç§»åããããæ£ç¢ºã«ææ¡ãããã®å±¥æŽãå®å
šã«ä¿æããŸãã
git blameã®åé¡ã¯è§£æ±ºãããŸãããã»ãã³ãã£ãã¯ãªblameããŒã«ã¯ãäœåºŠç§»åãŸãã¯åå倿ŽãããŠããŠããããžãã¯ã®çã®èµ·æºã远跡ã§ããŸãã
æ±3ïŒå€æŽãã»ãã³ãã£ãã¯ããããšããŠä¿åãã
ã³ãŒãæ§é ãçè§£ããããšã§ãã¯ããã«è¡šçŸåè±ãã§æå³ã®ããå±¥æŽãäœæã§ããŸããã³ãããã¯ãããã¹ãå·®åã§ã¯ãªããæ§é åãããæå³çãªå€æã®ãªã¹ãã«ãªããŸãã
ããã§ã¯ãªãïŒ
- def get_user(user_id): - # ... logic ... + def fetch_user_by_id(user_id): + # ... logic ...
å±¥æŽã«ã¯æ¬¡ã®ããã«èšé²ãããŸãã
RenameFunction(target_hash="abc123...", old_name="get_user", new_name="fetch_user_by_id")
ãã®ã¢ãããŒãã¯ãå€ãã®å Žåããããçè«ãïŒDarcsãPijulãªã©ã®ã·ã¹ãã ã§äœ¿çšïŒãšåŒã°ãããªããžããªãäžé£ã®é åºä»ããããããããšããŠæ±ããŸããããŒãžã¯ããããã®ã»ãã³ãã£ãã¯ããããäžŠã¹æ¿ããæ§æããããã»ã¹ã«ãªããŸããå±¥æŽã¯ãããã¹ãã®å€æŽã®äžéæãªãã°ã§ã¯ãªãããªãã¡ã¯ã¿ãªã³ã°æäœããã°ä¿®æ£ãããã³æ©èœè¿œå ã®ã¯ãšãªå¯èœãªããŒã¿ããŒã¹ã«ãªããŸãã
æ±4ïŒåå®å šãªããŒãžã¢ã«ãŽãªãºã
ãããéæ³ãèµ·ããå Žæã§ããããŒãžã¢ã«ãŽãªãºã ã¯ã3ã€ã®é¢é£ããŒãžã§ã³ïŒå ±éã®ç¥å ããã©ã³ãAããã©ã³ãBïŒã®ASTã§çŽæ¥åäœããŸãã
- 倿ãç¹å®ããïŒã¢ã«ãŽãªãºã ã¯æåã«ãç¥å ããã©ã³ãAãšç¥å ããã©ã³ãBã«å€æããã»ãã³ãã£ãã¯ãããã®ã»ãããèšç®ããŸãã
- ç«¶åã®ç¢ºèªïŒæ¬¡ã«ããããã®ãããã»ããéã®è«ççãªç«¶åã確èªããŸããç«¶åã¯ãåãè¡ãç·šéããããšã§ã¯ãããŸãããçã®ç«¶åã¯ã次ã®å Žåã«çºçããŸãã
- ãã©ã³ãAã¯é¢æ°åã倿ŽããŸããããã©ã³ãBã¯ãããåé€ããŸãã
- ãã©ã³ãAã¯ãããã©ã«ãå€ãæã€ãã©ã¡ãŒã¿ãŒã颿°ã«è¿œå ããŸããããã©ã³ãBã¯åãäœçœ®ã«å¥ã®ãã©ã¡ãŒã¿ãŒã远å ããŸãã
- äž¡æ¹ã®ãã©ã³ãããäºææ§ã®ãªãæ¹æ³ã§åã颿°æ¬äœå ã®ããžãã¯ã倿ŽããŸãã
- èªå解決ïŒçŸåšããã¹ãäžã®ç«¶åãšèŠãªãããŠãããã®ã®å€§éšåã¯ãèªåçã«è§£æ±ºã§ããŸãã2ã€ã®ãã©ã³ããåãã¯ã©ã¹ã«2ã€ã®ç°ãªããç«¶åããªãã¡ãœããã远å ããå ŽåãããŒãžã¢ã«ãŽãªãºã ã¯åã«äž¡æ¹ã®
AddMethodããããé©çšããŸããç«¶åã¯ãããŸãããããã¯ãæ°ããã€ã³ããŒãã®è¿œå ããã¡ã€ã«å ã®é¢æ°ã®äžŠã¹æ¿ãããŸãã¯æžåŒèšå®ã®å€æŽã®é©çšã«ãåœãŠã¯ãŸããŸãã - æ§æçåŠ¥åœæ§ã®ä¿èšŒïŒæçµçãªããŒãžç¶æ ã¯ãæå¹ãªå€æãæå¹ãªASTã«é©çšããããšã«ãã£ãŠæ§ç¯ããããããçµæã®ã³ãŒãã¯æ§æçã«æ£ããããšãä¿èšŒãããŸããåžžã«è§£æãããŸãããããŒãžããã«ããäžæããããšã©ãŒã®ã«ããŽãªã¯å®å šã«æé€ãããŸãã
ã°ããŒãã«ããŒã åãã®å®éçãªã¡ãªãããšãŠãŒã¹ã±ãŒã¹
ãã®ã¢ãã«ã®çè«çãªãšã¬ã¬ã³ã¹ã¯ãéçºè ã®æ¥åžžç掻ãå€é©ããäžçäžã®ãœãããŠã§ã¢é ä¿¡ãã€ãã©ã€ã³ã®ä¿¡é Œæ§ãé«ããå ·äœçãªã¡ãªããã«å€æãããŸãã
- æããããšã®ãªããªãã¡ã¯ã¿ãªã³ã°ïŒããŒã ã¯ãå€§èŠæš¡ãªã¢ãŒããã¯ãã£ã®æ¹åãæããããšãªãè¡ãããšãã§ããŸãã1000åã®ãã¡ã€ã«ã§ã³ã¢ãµãŒãã¹ã¯ã©ã¹ã®ååã倿Žããããšã¯ãåäžã®ãæç¢ºã§ãç°¡åã«ããŒãžå¯èœãªã³ãããã«ãªããŸããããã«ãããã³ãŒãããŒã¹ã¯ãæè¡çè² åµã®éãã®äžã§åæ»ããã®ã§ã¯ãªããå¥å šã«é²åãç¶ããããšãã§ããŸãã
- ã€ã³ããªãžã§ã³ãã§çŠç¹ãçµã£ãã³ãŒãã¬ãã¥ãŒïŒã³ãŒãã¬ãã¥ãŒããŒã«ã¯ãã»ãã³ãã£ãã¯ãªå·®åã衚瀺ã§ããŸããèµ€ãšç·ã®æµ·ã§ã¯ãªããã¬ãã¥ãŒæ
åœè
ã¯èŠçŽã確èªããŸããã3ã€ã®å€æ°ã®ååã倿Žãã
calculatePriceã®æ»ãå€ã倿Žããvalidate_inputãæ°ãã颿°ã«æœåºããŸããããããã«ãããã¬ãã¥ãŒæ åœè ã¯ãããã¹ããã€ãºãè§£èªããã®ã§ã¯ãªãã倿Žã®è«ççãªæ£ç¢ºæ§ã«éäžã§ããŸãã - å£ããããšã®ãªãã¡ã€ã³ãã©ã³ãïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšããªããªãŒïŒCI / CDïŒãå®è·µããŠããçµç¹ã«ãšã£ãŠãããã¯ã²ãŒã ãã§ã³ãžã£ãŒã§ããããŒãžæäœãæ§æçã«ç¡å¹ãªã³ãŒããçæã§ããªããšããä¿èšŒã¯ã
mainãŸãã¯masterãã©ã³ããåžžã«ã³ã³ãã€ã«å¯èœãªç¶æ ã«ããããšãæå³ããŸããCIãã€ãã©ã€ã³ã¯ããä¿¡é Œæ§ãé«ããéçºè ã®ãã£ãŒãããã¯ã«ãŒãã¯çããªããŸãã - åªããã³ãŒãèå€åŠïŒã³ãŒãã®æçãååšããçç±ãçè§£ããããšã¯ç°¡åã«ãªããŸããã»ãã³ãã£ãã¯ãªblameããŒã«ã¯ããã¡ã€ã«ã®ç§»åã颿°ã®åå倿ŽããŸããã§ãããžãã¯ãããã¯å šäœããã®å±¥æŽå šäœã§è¿œè·¡ããããžãã¹ããžãã¯ãå°å ¥ããã³ãããïŒãã¡ã€ã«ã®åãã©ãŒãããã®ã¿ãè¡ã£ãã³ãããã§ã¯ãªãïŒãçŽæ¥æã瀺ããŸãã
- 匷åãããèªååïŒã³ãŒããçè§£ããVCSã¯ãããã€ã³ããªãžã§ã³ããªããŒã«ã«é»åãäŸçµŠã§ããŸããæ§æãã¡ã€ã«ã®ããŒãžã§ã³çªå·ã倿Žããã ãã§ãªããåãã¢ãããã¯ã³ãããã®äžéšãšããŠå¿ èŠãªã³ãŒã倿ŽïŒããšãã°ã倿ŽãããAPIãžã®é©å¿ïŒãé©çšã§ãããèªååãããäŸåé¢ä¿æŽæ°ãæ³åããŠã¿ãŠãã ããã
ä»åŸã®èª²é¡
ããžã§ã³ã¯é åçã§ãããåå®å šãªããŒãžã§ã³ç®¡çã®æ®åãžã®éã¯ãæè¡çããã³å®éçãªå€§ããªèª²é¡ã«æºã¡ãŠããŸãã
- ããã©ãŒãã³ã¹ãšã¹ã±ãŒã«ïŒã³ãŒãããŒã¹å šäœãASTã«è§£æããããšã¯ãããã¹ããã¡ã€ã«ãèªã¿åããããã¯ããã«èšç®è² è·ãé«ããªããŸãããã£ãã·ã¥ãå¢åè§£æãããã³é«åºŠã«æé©åãããããŒã¿æ§é ã¯ãäŒæ¥ããã³ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§äžè¬çãªå€§èŠæš¡ãªããžããªã®ããã©ãŒãã³ã¹ãåãå ¥ãå¯èœã«ããããã«äžå¯æ¬ ã§ãã
- ããŒã«ãšã³ã·ã¹ãã ïŒGitã®æåã¯ãããŒã«èªäœã ãã§ãªãããããåãå·»ãåºå€§ãªã°ããŒãã«ãšã³ã·ã¹ãã ïŒGitHubãGitLabãBitbucketãIDEçµ±åïŒVS Codeã®GitLensãªã©ïŒãæ°åã®CI / CDã¹ã¯ãªããïŒã§ããæ°ããVCSã«ã¯ãæåããæ§ç¯ãã䞊è¡ãšã³ã·ã¹ãã ãå¿ èŠã«ãªããŸããããã¯ãèšå¿µç¢çãªäºæ¥ã§ãã
- èšèªãµããŒããšãã³ã°ããŒã«ïŒäžäœ10ã15ã®ããã°ã©ãã³ã°èšèªã«é«å質ã®ããŒãµãŒãæäŸããããšã¯ããã§ã«å€§ããªã¿ã¹ã¯ã§ããããããå®éã®ãããžã§ã¯ãã«ã¯ãã·ã§ã«ã¹ã¯ãªãããã¬ã¬ã·ãŒèšèªããã¡ã€ã³åºæèšèªïŒDSLïŒãããã³æ§æåœ¢åŒã®ãã³ã°ããŒã«ãå«ãŸããŠããŸããå æ¬çãªãœãªã¥ãŒã·ã§ã³ã«ã¯ããã®å€æ§æ§ã«å¯ŸããæŠç¥ãå¿ èŠã§ãã
- ã³ã¡ã³ãã空çœãããã³æ§é åãããŠããªãããŒã¿ïŒASTããŒã¹ã®ã·ã¹ãã ã¯ã³ã¡ã³ããã©ã®ããã«åŠçããŸããïŒãŸãã¯ãç¹å®ã®æå³çãªã³ãŒããã©ãŒãããïŒãããã®èŠçŽ ã¯ãå€ãã®å Žåã人éã®çè§£ã«ã¯äžå¯æ¬ ã§ãããASTã®æ£åŒãªæ§é ã®å€ã«ååšããŸããå®çšçãªã·ã¹ãã ã§ã¯ãæ§é ã«ASTãä¿åãããã®ãæ§é åãããŠããªããæ å ±ã®åå¥ã®è¡šçŸãä¿åããããããããŒãžããŠãœãŒã¹ããã¹ããåæ§ç¯ãããã€ããªããã¢ãã«ãå¿ èŠã«ãªãå¯èœæ§ããããŸãã
- 人çèŠçŽ ïŒéçºè ã¯ãGitã®ã³ãã³ããšæŠå¿µãäžå¿ã«ã10幎以äžã«ããã£ãŠæ·±ãçèã®èšæ¶ãæ§ç¯ããŠããŸãããæ°ããã·ã¹ãã ãç¹ã«æ°ããã»ãã³ãã£ãã¯ãªæ¹æ³ã§ç«¶åãæç€ºããã·ã¹ãã ã¯ãæè²ãžã®å€å€§ãªæè³ãšãæ³šææ·±ãèšèšãããçŽæçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå¿ èŠãšããŸãã
æ¢åã®ãããžã§ã¯ããšæªæ¥
ãã®ã¢ã€ãã¢ã¯çŽç²ã«åŠè¡çãªãã®ã§ã¯ãããŸããããã®é åãç©æ¥µçã«æ¢æ±ããŠããå é§çãªãããžã§ã¯ãããããŸããUnisonããã°ã©ãã³ã°èšèªã¯ããããã®æŠå¿µã®æãå®å šãªå®è£ ã§ããå¯èœæ§ããããŸããUnisonã§ã¯ãã³ãŒãèªäœãããŒã¿ããŒã¹ã«ã·ãªã¢ã«åãããASTãšããŠä¿åãããŸãã颿°ã¯ã³ã³ãã³ãã®ããã·ã¥ã«ãã£ãŠèå¥ããããããååã®å€æŽãšäžŠã¹æ¿ãã¯ç°¡åã§ããåŸæ¥ã®æå³ã§ã®ãã«ããäŸåé¢ä¿ã®ç«¶åã¯ãããŸããã
Pijulã®ãããªä»ã®ã·ã¹ãã ã¯ããããã®å³å¯ãªçè«ã«åºã¥ããŠæ§ç¯ãããŠãããGitãããå ç¢ãªããŒãžãæäŸããŸãããASTã¬ãã«ã§å®å šã«èšèªãèªèããã»ã©ã§ã¯ãããŸããããããã®ãããžã§ã¯ãã¯ãè¡ããŒã¹ã®å·®åãè¶ ããŠé²ãããšãå¯èœã§ããã ãã§ãªããéåžžã«æçã§ããããšã蚌æããŠããŸãã
å°æ¥ã¯åäžã®ãGitãã©ãŒãã§ã¯ãªããããããŸãããããå¯èœæ§ã®é«ãéã¯ãåŸã ãªé²åã§ããæåã«ãã»ãã³ãã£ãã¯å·®åãã¬ãã¥ãŒãããã³ããŒãžã³ã³ããªã¯ã解決æ©èœãæäŸãããGitã®äžã§åäœããããŒã«ã®æ®åãèŠããããããããŸãããIDEã¯ãããæ·±ãASTå¯Ÿå¿æ©èœãçµ±åããŸããæéã®çµéãšãšãã«ããããã®æ©èœãGitèªäœã«çµ±åãããããæ°ããäž»æµã·ã¹ãã ãåºçŸããããã®éãéãå¯èœæ§ããããŸãã
仿¥ã®éçºè åãã®å®è¡å¯èœãªæŽå¯
ãã®æªæ¥ãåŸ ã€éãåå®å šãªããŒãžã§ã³ç®¡çã®ååã«æ²¿ã£ã仿¥ã®æ £è¡ãæ¡çšããããã¹ãããŒã¹ã®ã·ã¹ãã ã®èŠçã軜æžããããšãã§ããŸãã
- AST察å¿ããŒã«ã掻çšããïŒãªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãããã³èªåã³ãŒããã©ãŒããã¿ãŒïŒPrettierãBlackãgofmtãªã©ïŒãæ¡çšããŸãããããã®ããŒã«ã¯ASTã§åäœããäžè²«æ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãã³ãããã§ã®ãã€ãºã®å€ããéæ©èœçãªå€æŽãåæžããŸãã
- ã¢ãããã¯ã«ã³ãããããïŒåäžã®è«ççãªå€æŽã衚ããå°ãããçŠç¹ãçµã£ãã³ããããè¡ããŸããã³ãããã¯ããªãã¡ã¯ã¿ãªã³ã°ããã°ä¿®æ£ããŸãã¯æ©èœã®ããããã§ããå¿ èŠããããŸããããããã¹ãŠã§ã¯ãããŸãããããã«ãããããã¹ãããŒã¹ã®å±¥æŽã§ãããã²ãŒãã容æã«ãªããŸãã
- ãªãã¡ã¯ã¿ãªã³ã°ãæ©èœããåé¢ããïŒå€§èŠæš¡ãªåå倿ŽãŸãã¯ãã¡ã€ã«ã®ç§»åãå®è¡ããå Žåã¯ãå°çšã®ã³ããããŸãã¯ãã«ãªã¯ãšã¹ãã§è¡ããŸããæ©èœçãªå€æŽãšãªãã¡ã¯ã¿ãªã³ã°ãæ··åããªãã§ãã ãããããã«ãããäž¡æ¹ã®ã¬ãã¥ãŒããã»ã¹ãã¯ããã«ç°¡åã«ãªããŸãã
- IDEã®ãªãã¡ã¯ã¿ãªã³ã°ããŒã«ã䜿çšããïŒææ°ã®IDEã¯ãã³ãŒãã®æ§é ãçè§£ããŠãªãã¡ã¯ã¿ãªã³ã°ãå®è¡ããŸããããããä¿¡é ŒããŠãã ãããã¯ã©ã¹ã®ååã倿Žããããã«IDEã䜿çšããããšã¯ãæåã®æ€çŽ¢ãšçœ®æãããã¯ããã«å®å šã§ãã
çµè«ïŒããå埩åã®ããæªæ¥ãç¯ã
ããŒãžã§ã³ç®¡çã¯ãææ°ã®ãœãããŠã§ã¢éçºãæ¯ããç®ã«èŠããªãã€ã³ãã©ã¹ãã©ã¯ãã£ã§ããé·å¹Žã«ããããããã¹ãããŒã¹ã®ã·ã¹ãã ã®æ©æŠããã³ã©ãã¬ãŒã·ã§ã³ã«äžå¯æ¬ ãªã³ã¹ããšããŠåãå ¥ããŠããŸãããã³ãŒããããã¹ããšããŠæ±ãããšãããæ§é åãããæå³çãªãšã³ãã£ãã£ãšããŠçè§£ããããšãžã®ç§»è¡ã¯ãéçºè ããŒã«ã®æ¬¡ã®å€§ããªé£èºã§ãã
åå®å šãªããŒãžã§ã³ç®¡çã¯ãå£ãããã«ããå°ãªããããæå³ã®ããã³ã©ãã¬ãŒã·ã§ã³ãè¡ããèªä¿¡ãæã£ãŠã³ãŒãããŒã¹ãé²åãããèªç±ãæäŸããæªæ¥ãçŽæããŸããéã¯é·ãã課é¡ã«æºã¡ãŠããŸãããç®çå°ãã€ãŸãç§ãã¡ã®ããŒã«ãç§ãã¡ã®ä»äºã®æå³ãšæå³ãçè§£ããäžçã¯ãç§ãã¡ã®å ±åã®åªåã«å€ããç®æšã§ããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ã³ãŒãã£ã³ã°æ¹æ³ãæããæãæ¥ãŸããã