ããã«ã¡ã¯ãããã¯ãšã³ããšã³ãžãã¢ã®ãŸãã§ãã åå ã®VSCodeã§github copilotã䜿ã£ãéçºå¹çåäžã®è©±ã«åŒãç¶ããä»åã¯VSCodeã§GenieAIãšããæ¡åŒµæ©èœãçšããŠã³ãŒãå質ãé«ããææ³ã®ã玹ä»ãããããšæããŸãã OpenAIã®APIããŒãå¿
èŠã«ãªããŸããããã¡ããéçºã匷åã«ãµããŒãããŠãããããŒã«ã§ãã GitHub Copilotã䜿ã£ãŠã¿ããéçºå¹çãåçã«åäžãã話 GenieAIãšã¯ GenieAIã¯VSCodeã®æ¡åŒµæ©èœã®äžã€ã§ChatGPTãå©çšããAIã¢ã·ã¹ã¿ã³ãæ©èœãæäŸããæ¡åŒµæ©èœã§ãã äž»ãªæ©èœã¯ä»¥äžã®éãã§ãã ã³ãŒãè£å®: éçºè
ãã³ãŒããå
¥åããéã«ãæèã«å¿ããæé©ãªã¡ãœããåã倿°åãšãã£ãã³ãŒãè£å®åè£ããªã¢ã«ã¿ã€ã ã§æç€ºããŸããã³ãŒãã£ã³ã°é床ã®åäžãæåŸ
ã§ããŸãã ãã¹ãå®è£
: æ¢åã®é¢æ°ãã¡ãœããã«å¯ŸããŠãå
¥åå€ãæåŸ
åºåãèæ
®ãããã¹ãã±ãŒã¹ãAIãçšããŠçæããŸãããã¹ãé§åéçºã匷åã«ãµããŒãããŸãã ãã°æ€åº: AIã«ããã³ãŒãè§£æã«ãããè«çãšã©ãŒãäŸå€åŠçæŒããªã©ã®ãã°ãå³åº§ã«æ€åºãèŠåãåºããŸããææ»ãã®åæžã«ã€ãªãããŸãã ã³ãŒãæé©å: ããã©ãŒãã³ã¹ããã«ããã¯ãã¡ã¢ãªäœ¿çšéã®æ¹åç¹ãç¹å®ããã¢ã«ãŽãªãºã 倿Žãã³ãŒãä¿®æ£ãææ¡ããŸããå¹ççãªã³ãŒããžã®ãªãã¡ã¯ã¿ãªã³ã°ãæ¯æŽããŸãã ã³ãŒã解説: è€éãªåŠçã®æµããã¯ã©ã¹ã®èšèšæå³ãªã©ããéžæããã³ãŒãéšåã«å¯ŸããŠèªç¶èšèªã§äžå¯§ãªè§£èª¬ãçæããŸããã³ãŒãçè§£ãå éããŸãã ã³ã¡ã³ãçæ: ã³ãŒããã¡ã€ã«ã颿°ã«å¯ŸããŠé©åãªæŠèŠèª¬æãã€ã³ã©ã€ã³ã³ã¡ã³ããèªåã§ä»äžããŸããããã¥ã¡ã³ãäœæäœæ¥ã®è»œæžã«å¯äžããŸãã GenieAIã¯Anthropic瀟ãéçºããæ°ããAIã¢ã·ã¹ã¿ã³ãã§ãVSCodeãšChatGPTã飿ºãããããšãå¯èœã«ãªã£ãŠããŸããçç£æ§åäžãã³ãŒãã£ã³ã°äœæ¥ã®å¹çåã«æçšãªããŒã«ãšãããŸãã GenieAIã®ã€ã³ã¹ããŒã« GenieAIã¯VSCodeã®æ¡åŒµæ©èœã§ãã®ã§ãäžè¬çãªæ¡åŒµæ©èœãšåæ§ã«ä»¥äžã®ããã«ããŠã€ã³ã¹ããŒã«å¯èœã§ãã ããã§GenieAIã®ã€ã³ã¹ããŒã«ã¯å®äºã§ãã GenieAIã¯å
éšçã«OpenAIã®APIãå©çšããŠãããããå©çšæã«ã¯OpenAIã®APIããŒã®å
¥åãããšããããŸãããã¡ãã«ã¯å©çšäžã®OpenAIã®APIããŒãå
¥åããŠãã ããã ãŸãGenieAIã®åæ©èœãå®çŸããããã®ããã³ããã¯åæã¯è±èªã§èšå®ãããŠããããããã¡ããåºåçµæãæ¥æ¬èªã«ãªãããã«ããã³ããã倿ŽããŠããããšããªã¹ã¹ã¡ããŸãã ããã³ããã®å€æŽã¯ä»¥äžã®ããã«ããŠè¡ãããšãã§ããŸãã GenieAIã®èšå®ç»é¢ã衚瀺ãããŸãã äžèšã§è¡šç€ºããèšå®ç»é¢å
ã®åããã³ããèšå®é
ç®ã以äžã®äŸã®ããã«å€æŽããŸãã â»ãã¡ãã¯èšå®äŸã§ãã®ã§å皮任æã®ããã³ããå
容ã§OKã§ãã Genieai ⺠Prompt Prefix: Add Tests: ã 以äžã®ã³ãŒãã«å¯Ÿãããã¹ãã³ãŒãå®è£
ãçæããŠãã ãã ãç Genieai ⺠Prompt Prefix: Find Problems: ã 以äžã®ã³ãŒãã®åé¡ç¹ãæ¥æ¬èªã§ææããŠãã ãã ãç Genieai ⺠Prompt Prefix: Optimize: ã 以äžã®ã³ãŒããæé©åããŠãã ãã ãç Genieai ⺠Prompt Prefix: Explain: ã 以äžã®ã³ãŒãã®å
容ãããããããæ¥æ¬èªã§è§£èª¬ããŠãã ãã ãç Genieai ⺠Prompt Prefix: Add Comments: ã 以äžã®ã³ãŒãã«å¯ŸããŠé©åãªã³ã¡ã³ããæ¥æ¬èªã§è¿œå ããŠãã ãã ãç Genieai ⺠Prompt Prefix: Complete Code: ã 以äžã®ãœãŒã¹ã³ãŒãã«å¯ŸããŠé©åã«ã³ãŒãè£å®ããŠãã ãã ãç ãã®ããã«èšå®ããããšã§æ¥æ¬èªã§ã®å©çšããããããªããŸãã åæ©èœã詊ããŠã¿ã ã³ãŒãè£å® GenieAIã®ã³ãŒãè£å®æ©èœã¯ãéçºè
ãã³ãŒããå
¥åããŠããæäžã«æ¬¡ã«å
¥åããå¯èœæ§ãé«ãã³ãŒãåè£ããªã¢ã«ã¿ã€ã ã§æç€ºããæ©èœã§ãã äŸãšããŠä»¥äžã®ãããªã³ãŒããèšèŒããŸãã # é
åããŒã¿å
ã®numdataãåèšããŠè¿åŽãã颿° def sum_numdata(jsdata): if __name__ == "__main__": jsdata = { [ {"strdata": "a", "numdata": 11,}, {"strdata": "b", "numdata": 21,}, {"strdata": "c", "numdata": 16,}, {"strdata": "d", "numdata": 41,}, {"strdata": "e", "numdata": 15,}, ] } äžèšã¯äžå®å
šãªã³ãŒãã§ããã颿°ãsum_numdataãã§ã¡ã€ã³å
ã§ã®é
åããŒã¿jsdataå
ã®numdataãéèšããŠåèšæ°ãåºåããäºå®ã§ãããã®ç¶æ
ã§ä»¥äžã®ããã«VSCodeäžã§æäœãè¡ããŸãã ã³ãŒããå
šãŠéžæãå³ã¯ãªãã¯ããŠè¡šç€ºãããã³ã³ããã¹ãã¡ãã¥ãŒã§éžæããŸãã ãããšGenieAIã®ã³ãŒãè£å®æ©èœã«ãããµã€ãããŒã«è£å®ãããã³ãŒããåºåãããŸãã å®è£
ããããšããŠãã颿°ã®å
容ãå®è£
ãããã¡ã€ã³å
ã®å€æ°ã®å®çŸ©ãæé©åãããŠããŸãã ãã®ç¶æ
ã§ä»¥äžã®ããã«ããããšã§ãšãã£ã¿ã«è£å®ãããã³ãŒããåæ ãããŸãã è£å®ã«ããäœæãããã³ãŒãã¯ä»¥äžã®ããã«ãªããŸããã # é
åããŒã¿å
ã®numdataãåèšããŠè¿åŽãã颿° def sum_numdata(jsdata): # åèšå€ãåæå total = 0 # é
åå
ã®åèŠçŽ ã«ã€ããŠã«ãŒã for item in jsdata: # numdataã®å€ãåèšå€ã«å ç® total += item["numdata"] # æçµçãªåèšå€ãè¿åŽ return total # ã¡ã€ã³å®è¡ããã㯠if __name__ == "__main__": # èŸæžã§ã¯ãªããªã¹ããšããŠjsdataãå®çŸ© jsdata = [ {"strdata": "a", "numdata": 11}, {"strdata": "b", "numdata": 21}, {"strdata": "c", "numdata": 16}, {"strdata": "d", "numdata": 41}, {"strdata": "e", "numdata": 15}, ] # 颿°ãåŒã³åºããçµæãprintã§è¡šç€º result = sum_numdata(jsdata) print(f"åèš: {result}") # åºå: åèš: 104 ã³ãŒãè£å®ãçšããããšã§AIåŽã§ã³ãŒãå®è£
ãäºæž¬ããå®è£
ããããšããŠããã³ãŒããäœæããŠããããšããäŸã§ããå©çšã·ãŒã³ã«ãã£ãŠã¯å€§ãã«å·¥æ°ãåæžã§ããå¯èœæ§ããããŸãã ãã¹ãå®è£
GenieAIã®ãã¹ãã³ãŒãçææ©èœã¯ãæ¢åã®ã³ãŒãããèªåçã«ãã¹ãã³ãŒããçæããŠãããæ©èœã§ããããã§ã¯å
çšã®ã³ãŒãå
ã®é¢æ°ãsum_numdataãã«å¯Ÿãããã¹ãã³ãŒãã®çæãè¡ã£ãŠã¿ãŸãã 颿°ãsum_numdataããéžæãå³ã¯ãªãã¯ããŠè¡šç€ºãããã³ã³ããã¹ãã¡ãã¥ãŒã§éžæããŸãã ãµã€ãããŒã«çæããããã¹ãã³ãŒããåºåãããŸãã çæããããã¹ãã³ãŒãã¯ä»¥äžã®ããã«ãªããŸããã import unittest # é
åããŒã¿å
ã®numdataãåèšããŠè¿åŽãã颿° def sum_numdata(jsdata): # åèšå€ãåæå total = 0 # é
åå
ã®åèŠçŽ ã«ã€ããŠã«ãŒã for item in jsdata: # numdataã®å€ãåèšå€ã«å ç® total += item["numdata"] # æçµçãªåèšå€ãè¿åŽ return total # ãã¹ãã±ãŒã¹ã¯ã©ã¹ãå®çŸ© class TestSumNumdata(unittest.TestCase): # æ£ããåèšãè¿ãããã¹ã def test_sum_numdata_correct(self): data = [ {"strdata": "a", "numdata": 10}, {"strdata": "b", "numdata": 20}, {"strdata": "c", "numdata": 30}, ] result = sum_numdata(data) self.assertEqual(result, 60) # æåŸ
ãããåèšå€ã¯60 # 空ã®ãªã¹ããæž¡ãããå Žåã0ãè¿ãããã¹ã def test_sum_numdata_empty(self): data = [] result = sum_numdata(data) self.assertEqual(result, 0) # æåŸ
ãããåèšå€ã¯0 # numdataããŒããªãå Žåã®äŸå€åŠçãé©åããã¹ã def test_sum_numdata_missing_key(self): data = [ {"strdata": "a"}, {"strdata": "b", "numdata": 20}, ] with self.assertRaises(KeyError): sum_numdata(data) # ãã¹ãã©ã³ããŒãå®è¡ if __name__ == '__main__': unittest.main() åçŽãªãã¹ãã ãã§ãªãæºæ£åžžç³»çã®ãã¹ãã³ãŒããçæããŠãããŸããäžè¶³åããããªã©ããå Žåã«ã¯äžèšã®ããã«è¿œå ã®çæèŠæ±ãå¯èœã§ãã ãµã€ãããŒã«è¿œå ã®ãã¹ãã³ãŒããšèª¬æãåºåãããŸãã 以äžã®ãããªã³ãŒããçæãããŸããã # numdataã«æåããŒã¿ãå«ãŸããŠããå Žåã®ãã¹ãã远å # numdataã«éæ°å€ããŒã¿ãå«ãŸããŠããå Žåã«TypeErrorãçºçããããã¹ã def test_sum_numdata_non_numeric(self): data = [ {"strdata": "a", "numdata": "10"}, {"strdata": "b", "numdata": 20}, {"strdata": "c", "numdata": 30}, ] with self.assertRaises(TypeError): sum_numdata(data) ãŸããã¹ãã³ãŒãã®çæã ãã§ã¯ãªã察象ã®é¢æ°ã®ä¿®æ£ææ¡ãããŠãããŠããŸãã (ãªããäžåœèªãæ··ãã£ãŠããŸã£ãŠããããã§ãããã) def sum_numdata(jsdata): total = 0 for item in jsdata: try: # ç¡®ä¿åªææ°åç±»åçæ°æ®å å°æ»åäž total += int(item["numdata"]) except ValueError: # åŠæèœ¬æ¢äžºæŽæ°å€±èŽ¥ïŒæåºTypeError raise TypeError(f"Expected a numeric value for 'numdata', but got '{item['numdata']}' instead.") return total èªèº«ã®èšè¿°ãããã¹ãã³ãŒãã«å ããŠããã¡ãã§åºåããããã¹ãã³ãŒãã远å ãããšãã£ãäœ¿ãæ¹ãããããšã§ãã¹ããå
å®ãããããã³ãŒãã®ä¿å®æ§ãé«ããããšãã§ããããã«ãªããŸãã ãã°æ€åº GenieAIã®ãã°æ€åºæ©èœã¯ãã³ãŒãäžã®æœåšçãªãã°ãAIãèªåçã«ç¹å®ããŠéçºè
ã«èŠåããæ©èœã§ããå®éã«ã³ãŒãã§è©ŠããŠã¿ãŸãããã import random # ã¡ã€ã³å®è¡ããã㯠if __name__ == "__main__": RETRY_MAX = 5 retry_count = 0 do_retry = True while do_retry: x = random.randint(1,10) if x == 5: print("ok.") else: retry_count += 1 if retry_count > RETRY_MAX: raise Exception("retry error, x is not 5.") print("complete.") ã³ãŒãå
šäœãéžæãå³ã¯ãªãã¯ããŠè¡šç€ºãããã³ã³ããã¹ãã¡ãã¥ãŒã§éžæããŸãã ãµã€ãããŒã«ã³ãŒãã®åé¡ç¹ãåºåãããŸãã äžèšã®ãšãããã³ãŒãã«ã¯ã«ãŒããçµäºããªãåé¡ããããŸãããããã®åé¡ãäžå¯§ã«ææããŠãããŠããŸããå¯ŸåŠæ³ã説æããŠãããŠããŸãã®ã§ä¿®æ£ã容æã§ãã ä»åã¯å²ãšæãããªãã¹ã§ããããããã§ãªãå Žåã§ãããã»ãŒããã£ãªã³ãŒãã«ãªããããªææ¡ãããŠãããããšãããã³ãŒãã®å質ãé«ãŸãããã«è£å©ããŠãããŸãã æé©å GenieAIã®ã³ãŒãæé©åæ©èœã¯ãéçºè
ã®ã³ãŒããAIãè§£æããå®è¡é床ãã¡ã¢ãªäœ¿çšéãšãã£ãããã©ãŒãã³ã¹ãåäžãããææ¡ãããŠãããæ©èœã§ãã å
çšã®ã³ãŒããå°ãä¿®æ£ãããã®ã察象ã«å®è¡ããŠã¿ãŸãã import random # ã¡ã€ã³å®è¡ããã㯠if __name__ == "__main__": RETRY_MAX = 5 retry_count = 0 do_retry = True while do_retry: x = random.randint(1,10) if x == 5: print("ok.") do_retry = False else: retry_count += 1 if retry_count > RETRY_MAX: raise Exception("retry error, x is not 5.") print("complete.") ã³ãŒãå
šäœãéžæãå³ã¯ãªãã¯ããŠè¡šç€ºãããã³ã³ããã¹ãã¡ãã¥ãŒã§éžæããŸãã æé©åãããã³ãŒããšè§£èª¬ãåºåãããŸãã æé©åãããã³ãŒãã¯ä»¥äžã®ããã«ãªããŸããã import random # ã¡ã€ã³å®è¡ããã㯠if __name__ == "__main__": RETRY_MAX = 5 retry_count = 0 while True: # ç¡éã«ãŒã x = random.randint(1, 10) if x == 5: print("ok.") break # ã«ãŒããæãã else: retry_count += 1 if retry_count >= RETRY_MAX: # `> RETRY_MAX`ãã`>= RETRY_MAX`ã«å€æŽ raise Exception("retry error, x is not 5.") print("complete.") ãã¡ãã®äŸã§ã¯ãã©ã°å€æ°ã䜿ããã«breakæã§ã«ãŒãããæããããã«ä¿®æ£ããããã·ã³ãã«ã«ãªãããã«æé©åããŠãããŸããã ããã©ãŒãã³ã¹ã«é¢ããéšåãªã©ã§ãé©åã«ææ¡ããŠãããŸãã®ã§ã现ããæŽ»çšããããšã§å¯èªæ§ãšæ§èœæ¹åã«é¢ããŠã®å質åäžãæåŸ
ã§ããŸãã ã³ãŒã解説 GenieAIã®ã³ãŒã解説æ©èœã¯ãéçºè
ãéžæããã³ãŒãã¹ããããã«å¯ŸããŠããã®åŠçå
容ãæå³ãèªç¶èšèªã§è§£èª¬ããŠãããæ©èœã§ãã äŸãšããŠä»¥äžã®ãããªã³ãŒãã«å¯ŸããŠè§£èª¬ãå®è¡ããŠããããŸãã def sample(nums): n = len(nums) for i in range(n): for j in range(n-i-1): if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return nums nums = [5, 2, 4, 1, 3] print(sample(nums)) ãµã€ãããŒã«ã³ãŒãã®å
容ã®è§£èª¬ãåºåãããŸãã äžèšã®ããã«sampleãšãã颿°ãããã«ãœãŒãã®ã¢ã«ãŽãªãºã ã§ãœãŒãããŠããããšã解説ããŠãããŠããŸããåŒæ°ãä»çµã¿ã«ã€ããŠçްãã説æããŠãããã®ã§éåžžã«çè§£ããããã§ãã äž»ã«ä»è
ã®ã³ãŒããæ±ããšãã®ãã£ããã¢ããã«å€§ãã«åœ¹ç«ã€ãšæããŸãããã®ã³ãŒãã¯äœãããŠããã®ã ãããšãããšãã«ãã¡ããå©çšããããšã§çްããçè§£ã§ãããšæããŸãã ã³ã¡ã³ãçæ æåŸã¯ã³ã¡ã³ãçææ©èœã§ããGenieAIã®ã³ã¡ã³ãçææ©èœã¯ãã³ãŒãå
ã«é©åãªã³ã¡ã³ããèªåã§æ¿å
¥ããããšãã§ããæ©èœã§ãããã¡ããã³ãŒã解説æ©èœã«è¿ãã§ãããã³ãŒãå
ã«æç¢ºã«èª¬æãæ®ããšããã¡ãªããããããŸãã äŸãšããŠä»¥äžã®ã³ãŒãã«ã³ã¡ã³ããä»äžããŠããããŸãã def fetch_user_data(user_id): user = db.find_user(user_id) if not user: return None transactions = get_transactions(user.id) sum_amount = 0 for transaction in transactions: sum_amount += transaction.amount data = { "user_id": user.id, "name": "{} {}".format(user.first_name, user.last_name), "total_transaction_amount": sum_amount } return data ã³ãŒãå
šäœãéžæãå³ã¯ãªãã¯ããŠè¡šç€ºãããã³ã³ããã¹ãã¡ãã¥ãŒã§éžæããŸãã ãµã€ãããŒã«ã³ã¡ã³ããä»äžããã³ãŒããçæãããŸãã ã³ã¡ã³ããä»äžããŠãããçµæã¯ä»¥äžã®ããã«ãªããŸããã def fetch_user_data(user_id): # ãŠãŒã¶ãŒIDãå
ã«ããŒã¿ããŒã¹ãããŠãŒã¶ãŒæ
å ±ãååŸãã user = db.find_user(user_id) # ãŠãŒã¶ãŒãååšããªãå Žåã¯Noneãè¿ã if not user: return None # ãŠãŒã¶ãŒIDã«çŽã¥ããã©ã³ã¶ã¯ã·ã§ã³ïŒååŒïŒæ
å ±ãååŸãã transactions = get_transactions(user.id) sum_amount = 0 # ååŒã®åèšéé¡ãç®åºãã for transaction in transactions: sum_amount += transaction.amount # è¿ããŠãŒã¶ãŒããŒã¿ãèŸæžåœ¢åŒã§æ§ç¯ãã data = { "user_id": user.id, # ãŠãŒã¶ãŒID "name": "{} {}".format(user.first_name, user.last_name), # ãã«ããŒã "total_transaction_amount": sum_amount # ãã©ã³ã¶ã¯ã·ã§ã³ã®åèšéé¡ } # æ§ç¯ãããŠãŒã¶ãŒããŒã¿ãè¿ã return data ããããããã³ã¡ã³ãã远å ãããŠããŸãããæªå®çŸ©ã®é¢æ°ã§ãã£ãŠãåç§°ãšååŸã®æµãããæšæž¬ããŠã³ã¡ã³ããä»äžããŠãããŠããŸããã³ã¡ã³ãã®ä»äžçã¯æå€ãšå·¥æ°ãããã£ããããããšããã£ããã人ã«ããããããããã³ã¡ã³ãã®ã€ãæ¹ã«æ©ãã ããããã®ã§ããããã¡ãã®æ©èœãå©çšããããšã§ãããããæ©ã¿ãç¡ãã³ã¡ã³ããä»äžã§ããŸãã ã³ã¡ã³ããã³ãŒãã®å質ã«ãããŠéèŠãªèŠçŽ ã®äžã€ã§ãã®ã§ããã¡ããå©çšããããšã§ãŸãäžã€ã³ãŒãã®å質ãé«ããããšãã§ãããšæããŸãã ãã®ä» GenieAIã¯åºæ¬çã«ã³ãŒããéžæãããã®ã³ãŒãã«å¯ŸããŠAIã«æäœãããŠããããšãããããªåŠçãè¡ã£ãŠããŸãã以äžã®ããã«ãããšäžèšä»¥å€ã«èªç±ã«AIã«å¯ŸããŠæç€ºãå¯èœã§ãã ãã®ããã«äžéšã«èªç±ã«ããã³ãããå
¥åã§ããããã«ãªãã®ã§ãããã«ãœãŒã¹ã«å¯Ÿãã質åãæç€ºãæå®ããããšã§ãä»»æã®åŠçãAIã«äŸé Œå¯èœã§ãã ãŸãšã ãããã§ããã§ãããããGenieAIã¯GitHub Copilotãããèœåçã«AIã«åŠçãè¡ãããããšãå¯èœã§ããç¹ã«ãã°æ€åºãšã³ã¡ã³ãçæã§ã¯ãGitHub CopilotãããGenieAIã®æ¹ã䜿ãããããšçç£æ§ãé«ããšèããããŸãã GenieAIãªã人éã®éçºè
ãæ°ã¥ãã«ããã³ãŒãäžã®æ¬ é¥ãAIãç¹å®ããä¿å®æ§ã®åäžã«åœ¹ç«ãŠãããšãã§ããŸããå·¥æ°ã®åæžãšå質ã®åäžãåæã«å®çŸã§ããããããœãããŠã§ã¢éçºã«ãããçç£æ§åäžã«æåŸ
ã§ãããšæããŸãã éçºè
ãšAIã¢ã·ã¹ã¿ã³ããå調ããŠäœæ¥ãé²ããã¢ãããŒãããçæAIãæå€§éã«æŽ»çšããæ¹æ³ã®äžã€ã§ã¯ãªãããšæããŸãã The post GenieAIã§ã³ãŒãã®å質ãé«ãããïœVSCodeæ¡åŒµæ©èœGenieAIãçšããŠã³ãŒãå質ãé«ããææ³ first appeared on Sqripts .