ãã¹ãŠã®çµç¹ããæ¬çªç°å¢ã§AIçæã³ãŒãã䜿çšããŠãããããã¯äºæž¬ã§ã¯ãªãã2026幎ã®è£œåã»ãã¥ãªãã£ç¶æ³ã¬ããŒãã®èª¿æ»çµæã§ããããã®ã¬ããŒãã¯400人ã®CISOãšã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãªãŒããŒã察象ã«èª¿æ»ãè¡ãã100%ã®å°å ¥çãå ±åããŠãããããããåã¬ããŒãã§åæã«æããã«ãªã£ãã®ã¯ãçŸç¶ãç¹åŸŽã¥ããã®ã£ããã§ããããããã®çµç¹ã®81%ã¯ãã³ãŒãããŒã¹å ã§AIãã©ãã§ã©ã®ããã«äœ¿çšãããŠããããå®å šã«ææ¡ã§ããŠããªããAIã³ãŒãã£ã³ã°ã¯AIã³ãŒãã¬ããã³ã¹ãäžåã£ãŠããããã®2ã€ã®æ²ç·ã®éã®ã®ã£ããããããªã¹ã¯ã®æ ¹æºãšãªã£ãŠããã
ãã®ã¬ã€ãã§ã¯ãAI ã³ãŒãçæã®çŸç¶ã2026 幎ã«ããããã®ã«ããŽãªãå®çŸ©ããããŒã«ãAI çæã³ãŒããããããå ·äœçãªãªã¹ã¯ããã®æ€èšŒãšã»ãã¥ãªãã£ç¢ºä¿ã®æ¹æ³ããããŠéçºããŒã ãç®ã«èŠããªãæè¡çè² åµãã»ãã¥ãªãã£è² åµãèç©ããããšãªããè¿ éã« AI ã䜿çšã§ããã¬ããã³ã¹ ã¬ã€ã€ãŒã®æ§ç¯æ¹æ³ã«ã€ããŠèª¬æããŸããææ°ã®ã¯ã©ãŠã ãµãŒãã¹ãšã¬ã¬ã·ãŒ ã¡ã€ã³ãã¬ãŒã ã·ã¹ãã ã®äž¡æ¹ã«ã³ãŒã ããŒã¹ã忣ããŠãããšã³ã¿ãŒãã©ã€ãº ããŒã ã«ãšã£ãŠãã»ãšãã©ã®ã¬ã€ãã§å®å šã«çç¥ãããŠãã AI ã³ãŒãã£ã³ã°ã®åŽé¢ããããŸããããã¯ãAI ãçè§£ããŠæ¯æŽããã¯ãã®ã³ãŒã ããŒã¹ããã³ã³ããã¹ã ãŠã£ã³ããŠã§ã¯ä¿æã§ããªãç°å¢ã§ COBOLãJCLãJavaãPython ã«åæ£ããŠããå Žåã«äœãèµ·ããããšããããšã§ãã
AIãä¿æã§ããªãã³ã³ããã¹ãããç§ãã¡ãæäŸããŸã
SMART TS XL AIãææ¡ãã倿ŽãããŒããã©ãªãªå šäœã«é©çšãããåã«ããã¹ãŠã®äŸåé¢ä¿ããããã³ã°ããŸãã
ããã«è©³ããâŠAIã³ãŒãçæãå®éã«æå³ããããš
ãã®ã«ããŽãªãŒã¯ããã°ãã°æ··åããããã®ã®ãããããç°ãªãç®çãæãã3ã€ã®æç¢ºãªæ©èœã«åãããŠããã
AIã³ãŒãã¢ã·ã¹ã¿ã³ãïŒã€ã³ã©ã€ã³è£å®ïŒã¯ãéçºè ãå ¥åããã³ãŒãã«åãããŠåè£ãæç€ºããŸããGitHub CopilotãCursorãTabnineãªã©ããã®æ¹åŒãæ¡çšããŠããŸããã¢ãã«ã¯ãã¡ã€ã«ã®ã³ã³ããã¹ããèªèããæ¬¡ã«èšè¿°ããå å®¹ãææ¡ããŸããéçºè ã¯ææ¡ãããå 容ãã€ã³ã©ã€ã³ã§æ¿èªãæåŠããŸãã¯ä¿®æ£ã§ããŸããããã¯æãåºãæ®åããŠããæ¹åŒã§ãããæãé·ãå®çžŸããããŸãã
ãšãŒãžã§ã³ãåAIã³ãŒãã£ã³ã°ã¯ã2026幎ãç¹åŸŽã¥ããå€é©ã§ããClaude CodeãGitHub Copilot AgentãCursorãªã©ã®ããŒã«ããšãŒãžã§ã³ãã¢ãŒãã§äœ¿çšããã°ãããã®æ©èœãå®è£ ãããããã®ãã°ãä¿®æ£ãããããã®ã¢ãžã¥ãŒã«ããªãã¡ã¯ã¿ãªã³ã°ããããšãã£ãã¿ã¹ã¯ãäžãããã人éã«ããæ®µéçãªæç€ºãªãã«ãèªåŸçã«ãã¡ã€ã«ã®èªã¿èŸŒã¿ãã³ãŒãã®èšè¿°ããã¹ãã®å®è¡ãååŸ©äœæ¥ãè¡ãããšãã§ããŸããAIã¯ãã¯ãéçºãæ¯æŽããååšã§ã¯ãªããéçºãæšé²ããååšãžãšé²åããŠããŸããäžçæå€§èŠæš¡ã®äŒæ¥ã®ãšã³ãžãã¢ã¯ãã¯ãŒã¯ãããŒã®å€§éšåãAIãšãŒãžã§ã³ãã«ä»»ããAIãšãŒãžã§ã³ãã¯ã³ãŒãããŒã¹ãèªã¿èŸŒã¿ãã³ãã³ããå®è¡ããæ®µéçãªæææ±ºå®ãè¡ãããã«ãªãã§ãããã
AIã³ãŒãã¬ãã¥ãŒã¯ãæåºãããã³ãŒãã®ãã°ãã»ãã¥ãªãã£åé¡ãã¢ãŒããã¯ãã£äžã®åé¡ãã¹ã¿ã€ã«éåãªã©ãåæããŸããGreptileãCodeRabbitãQodoãCursor BugBotãªã©ã®ããŒã«ã¯ããã«ãªã¯ãšã¹ãã«ã³ã³ããã¹ãã«å¿ããã³ã¡ã³ããæ®ããŸããåŸæ¥ã®éçè§£æãšã¯ç°ãªãããããã®ããŒã«ã¯ã³ãŒãã®æå³ãçè§£ãããã¿ãŒã³ãããã³ã°ã«ãŒã«ã§ã¯èŠéããŠããŸããããªåé¡ç¹ãææã§ããŸãã2026幎ã®é©åãªã³ãŒãã¬ãã¥ãŒããã»ã¹ã§ã¯ãAIãæåã®ã¬ãã¥ãŒæ åœè ãšãªãã人éãã¢ãŒããã¯ãã£ããªã¹ã¯ãä¿å®æ§ã倿åã«çŠç¹ãåœãŠãæçµæ±ºå®è ãšãªããŸãã
çŸåšã®ããŒã«ç°å¢
AIã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ã
GitHub Copilotã¯ãã€ã³ã©ã€ã³è£å®æ©èœãšããŠå§ãŸããã€ã³ã©ã€ã³åè£è¡šç€ºããã£ãããã³ãŒãç·šéãCLIã¯ãŒã¯ãããŒããããŠGitHubããã³äž»èŠãªãšãã£ã¿å šäœã«ããããšãŒãžã§ã³ãã€ã³ã¿ãŒãã§ãŒã¹ãžãšæ¡åŒµãããŸãããGitHubãšã³ã·ã¹ãã ã§æ¢ã«éçšããŠããããŒã ã«ãšã£ãŠãçµ±åã¯ã¹ã ãŒãºã§ããEnterprise Copilotã§ã¯ãçµç¹ã¬ãã«ã®ããªã·ãŒå¶åŸ¡ãç£æ»ãã°ãããã³ç¥çè²¡ç£æš©è£åã远å ãããŸãã
Cursorã¯ãVS CodeãããŒã¹ã«æ§ç¯ãããAIãã€ãã£ãIDEã§ãã€ã³ã©ã€ã³è£å®ãã³ãŒãããŒã¹èªèãã£ããããã«ãšãŒãžã§ã³ãã¢ãŒããæäŸããŸããå€§èŠæš¡ãªã³ãŒãããŒã¹ãã€ã³ããã¯ã¹åããŠåæããèœåã¯ãè€éã§çžäºæ¥ç¶ãããã·ã¹ãã ã«åãçµãã·ãã¢éçºè ã«ãšã£ãŠç¹ã«åŒ·åã§ãã
Claude Codeã¯ãAnthropic瀟ãæäŸããã³ãã³ãã©ã€ã³ããŒã¹ã®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã§ããã¿ãŒããã«ããè€æ°ã®ã¹ããããããªããšã³ãžãã¢ãªã³ã°ã¿ã¹ã¯ãå®è¡ããã³ãŒãããŒã¹ã®èªã¿èŸŒã¿ããã¡ã€ã«ã®æžã蟌ã¿ãšç·šéããã¹ãã®å®è¡ãçµæã«åºã¥ãå埩åŠçãªã©ãè¡ããŸããGUIãæããªããããèªååãã€ãã©ã€ã³ãCI/CDçµ±åã«ç¹ã«é©ããŠããŸãã
Tabnineã¯ããªã³ãã¬ãã¹ãšãã©ã€ããŒãã¯ã©ãŠãã®äž¡æ¹ã®å°å ¥ãªãã·ã§ã³ãåãããã©ã€ãã·ãŒãæåªå ãšããã³ãŒãè£å®æ©èœã«éç¹ã眮ããŠããŸããå€éšAPIã«ã³ãŒããéä¿¡ã§ããªãèŠå¶å¯Ÿè±¡æ¥çã®çµç¹ã«ãšã£ãŠãTabnineã®å°å ¥ã¢ãã«ã¯ãã°ãã°æ±ºå®çãªèŠçŽ ãšãªããŸãã
AIã³ãŒãã¬ãã¥ãŒããŒã«
| ããŒã« | äž»ãªã¢ãããŒã | 以äžã®ããã«ãã¹ã |
|---|---|---|
| ã°ã¬ãã¿ã€ã« | ã³ãŒãããŒã¹ãèæ ®ããã³ã³ããã¹ã | ã¢ãŒããã¯ãã£äžã®ãã°ãšãã¡ã€ã«éã®ãã°ãæ€åºãã |
| ã³ãŒãã©ããã | PRã¬ãã«ã®ã¬ãã¥ãŒã³ã¡ã³ã | ããããã€ã³åŒã®PRã¬ãã¥ãŒèªååãæ±ããããŒã |
| ã³ã | ãã¹ãçæïŒã¬ãã¥ãŒ | å ±ééèŠã®ããŒã |
| ã«ãŒãœã«ãã°ããã | ãšãŒãžã§ã³ãããŒã¹ã®ã¬ãã¥ãŒ | ã«ãŒãœã«ãã€ãã£ãããŒã |
| ãœããŒãã¥ãŒã | éçè§£æïŒAI | ã«ãŒã«ããŒã¹ã®ãã¿ãŒã³ãšåè³ªææš |
| ã»ã ã°ã¬ãã | ãã¿ãŒã³ïŒæ±æåæ | ã»ãã¥ãªãã£ã«çŠç¹ãåœãŠãã¬ãã¥ãŒ |
| ãã§ãã¯ããŒã¯ã¢ã·ã¹ã | è¬å€ã«ãã修埩 | ãšã³ã¿ãŒãã©ã€ãºåãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ããã°ã©ã |
åªããAIã¬ãã¥ãŒã®åºåäŸã以äžã«ç€ºããŸãã
CodeRabbit PR Review -- src/api/payments.py
WARNING HIGH: Missing input validation on amount parameter (line 23)
process_payment() accepts amount: float but does not validate
amount > 0 before calling the payment gateway.
AI-generated code from this PR omitted the boundary check present
in similar functions in src/api/orders.py (line 156).
Suggested fix: if amount <= 0: raise ValueError("Amount must be positive")
WARNING MEDIUM: Hardcoded timeout value (line 41)
requests.post(url, timeout=30) -- timeout should come from config,
not be hardcoded. See PAYMENT_GATEWAY_TIMEOUT in settings.py.
INFO: Inconsistent error handling pattern (lines 67-78)
This function raises PaymentError on failure; adjacent functions in
this module return Result[PaymentResponse, PaymentError].
Consider aligning with the module's existing pattern.
SonarQubeãæ¢ã«å°å ¥ããŠããããŒã ã¯ãGreptileã䜵çšããããšããããããŸããSonarQubeã¯æ¢ç¥ã®éçè§£æãã¿ãŒã³ãåŠçããGreptileã¯éçè§£æã§ã¯æ€åºã§ããªãç¶æ³äŸååã®ãã°ãæ€åºããŸãã
èª°ãæ³å®ããŠããªãã£ãã»ãã¥ãªãã£åé¡
AIãçæããã³ãŒãã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ãå ¥åæ€èšŒã®æ¬ èœãå®å šã§ãªãéã·ãªã¢ã«åãèªèšŒã®äžå ·åãªã©ã人éã®éçºè ãåŒãèµ·ããã®ãšåãçš®é¡ã®ãã°ããã¯ããã«å€§ããªèŠæš¡ã§åŒãèµ·ãããŸããAIããã«ãªã¯ãšã¹ãã10åå€ãçæããå Žåããã«ãªã¯ãšã¹ããããã®çæçã人éãæžããã³ãŒããšåãã§ãã£ãŠããè匱æ§ã®çµ¶å¯Ÿæ°ã¯å¢å ããå¯èœæ§ããããŸããAIã®æ®åèŠæš¡ã¯ãæ¢åã®ã»ãã¥ãªãã£è² åµãåæžããã©ãããããããå¢å¹ ãããã®ã§ãã
AIçæã³ãŒãã§æ³šç®ãã¹ãå ·äœçãªãã¿ãŒã³ïŒ
ãã³ãã¬ãŒãè£å®ã«ããSQLã€ã³ãžã§ã¯ã·ã§ã³ãã¬ã¬ã·ãŒã³ãŒãããŒã¹ã§åŠç¿ããAIã¢ãã«ã¯ãã¬ã¬ã·ãŒãã¿ãŒã³ãåçŸããŸããæååé£çµSQLã¯ãšãªã®äŸãäœåä»¶ãåŠç¿ããã¢ãã«ã¯ãæååé£çµSQLãææ¡ããŸãããã©ã¡ãŒã¿åã¯ãšãªã䜿çšããããã«æç€ºçã«æç€ºããããã匷å¶ããéçè§£æã²ãŒãããªãå ŽåãAIãçæããSQLã³ãŒãã¯ãã³ãŒãããŒã¹å šäœã«äœç³»çã«ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãå°å ¥ããå¯èœæ§ããããŸãã
ãã€ãœã³
# What AI often generates without explicit security prompting
def get_user(username: str) -> dict:
query = f"SELECT * FROM users WHERE username = '{username}'"
return db.execute(query).fetchone()
# Vulnerable to: admin'-- or admin' OR '1'='1
# What AI generates when security requirements are stated in the prompt
def get_user(username: str) -> dict:
query = "SELECT id, email, role FROM users WHERE username = %s"
return db.execute(query, (username,)).fetchone()
# Parameterized -- injection-proof regardless of input
ããã2ã€ã®åºåã®éãã¯ãããã³ããå ã®ãSQLã€ã³ãžã§ã¯ã·ã§ã³ãé²ãããã«ããã©ã¡ãŒã¿åã¯ãšãªã䜿çšããŠãã ããããšããæã§ãããã®æããªãå Žåãã¢ãã«ã¯ããã©ã«ãã§æååè£éã䜿çšããŸããããã¯ããã¬ãŒãã³ã°ããŒã¿ã«ãããŠããã©ã¡ãŒã¿åã¯ãšãªãããæååè£éã®äŸã®æ¹ãå€ãã£ãããã§ãã
å ¥åæ€èšŒã®æ¬ èœãAIã¢ãã«ã¯ãããã³ããã§æå®ãããå ¥åã«å¯ŸããŠåäœããæ©èœçãªã³ãŒããçæããããã«æé©åãããŠããŸãããã®ãããããã³ããã®ã³ã³ããã¹ãã§èšåãããŠããªããšããžã±ãŒã¹ãå¢çæ¡ä»¶ãããã³äžæ£ãªå ¥åã«å¯Ÿããæ€èšŒãæ¥åžžçã«çç¥ããŠããŸããçµæãšããŠçæãããã³ãŒãã¯ãåæã«çæããããã¹ãã±ãŒã¹ã«ã¯åæ ŒããŸãããå®éã®æµå¯Ÿçãªå ¥åã«å¯ŸããŠã¯å€±æããŸãã
å®å šã§ãªãããã©ã«ãèšå®ãAIã³ãŒãã¯ãã»ãã¥ãªãã£èšå®ãæãç·©ãå€ã«èšå®ããããèšŒææžã®æ€èšŒãç¡å¹ã«ããããã¯ã€ã«ãã«ãŒãCORSãªãªãžã³ã䜿çšããããéçºçšèªèšŒæ å ±ããã®ãŸãŸã«ãããããããšããããããŸããããã¯ãç·©ãããã©ã«ãèšå®ã«ãã£ãŠã³ãŒããããå€ãã®ç¶æ³ã§ãåäœãããããã«ãªãããããã¢ãã«ã®æé©åã®ç®çã ããã§ãã
ã©ã€ã»ã³ã¹ãªã¹ã¯ãå ¬éã³ãŒãã§åŠç¿ãããçæåAIã¢ãã«ã¯ãåŠç¿ããŒã¿ãšé ·äŒŒãŸãã¯åäžã®ã³ãŒãæçãåçŸããå¯èœæ§ãããããã®ããŒã¿ãã³ããŒã¬ããæ¡é ã«åºã¥ããŠã©ã€ã»ã³ã¹ãããŠããå Žåãã©ã€ã»ã³ã¹äžã®åé¡ãçããå¯èœæ§ããããŸããçŸåšãå€ãã®ãšã³ã¿ãŒãã©ã€ãºããŒã«ã¯ã©ã€ã»ã³ã¹ãã£ã«ã¿ãŒãã³ãŒãåç §æ€åºãããã³è£åæ¡é ãæäŸããŠããŸããããã®ç¯å²ã¯ããŒã«ã«ãã£ãŠç°ãªããŸããæšæž¬ããã®ã§ã¯ãªãã䜿çšããŠããããŒã«ã«ã©ã®ãããªæ©èœãå«ãŸããŠãããã確èªããŠãã ããã
ã¬ããã³ã¹ã®ã®ã£ããïŒæ¬çªç°å¢ã§AIçæã³ãŒãã䜿çšããŠããçµç¹ã®81%ã¯ããã®ã³ãŒããã©ãã§ã©ã®ããã«äœ¿çšãããŠããããå®å šã«ææ¡ã§ããŠããŸãããAIçæã³ãŒããç¹å®ããéçè§£æã§æ€èšŒããPRã²ãŒãã§ã»ãã¥ãªãã£ããªã·ãŒãé©çšããã¬ããã³ã¹å±€ã®æ§ç¯ã¯ãã»ãšãã©ã®AIã³ãŒãã£ã³ã°å°å ¥ã«ãããŠãŸã 宿œãããŠããªãäœæ¥ã§ãã
AIããã°ã©ãã³ã°èšèªïŒã¢ãã«ãå®éã«çè§£ããŠããããš
PythonãšTypeScriptïŒæã匷åãªãµããŒã
PythonãšTypeScriptã¯ãäž»èŠãªAIã³ãŒãã£ã³ã°ã¢ãã«ã®äžã§æãå¯åºŠã®é«ãåŠç¿ããŒã¿è¡šçŸãåããŠããŸãããããã®ã¢ãã«ã¯ãæ £çšçãªãã¿ãŒã³ãäžè¬çãªã©ã€ãã©ãªã®èŠçŽããã¬ãŒã ã¯ãŒã¯åºæã®ãã¹ããã©ã¯ãã£ã¹ãçè§£ããŸããPythonãšTypeScriptã®ã³ãŒãææ¡ã¯æãä¿¡é Œæ§ãé«ããååšããªãAPIã誀ã£ãŠèªèããå¯èœæ§ãæãäœããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãå¯èœæ§ãæãé«ããšèšããŸãã
Pythonã¯AI/MLéçºã«ãããŠå§åçãªååšæãèªããAIæèŒã·ã¹ãã ãæ§ç¯ããããŒã ã«ãšã£ãŠãåœç¶ãªããæåã®èšèªãšããŠéžã°ããŠããŸããPyTorchãTensorFlowãHugging FaceãLangChainãšãã£ãPythonã®ãšã³ã·ã¹ãã ã¯ãäž»èŠãªããã°ã©ãã³ã°ã¢ãã«ãã¹ãŠã«ãããŠæ·±ãçè§£ãããŠããŸãã
JavaãšC#ïŒåŒ·åã ãåé·
JavaãšC#ã«ã¯ããªãŒãã³ãœãŒã¹ã®ã³ãŒãããŒã¹ãStack OverflowããåŸãããè±å¯ãªåŠç¿ããŒã¿ããããŸããAIããŒã«ã¯äž¡èšèªã§æ©èœçã«æ£ããã³ãŒããçæããŸãããäžå¿ èŠã«åé·ãªãã¿ãŒã³ãææ¡ããå ŽåããããŸããJavaãšC#ãæ¬çªç°å¢ã§äœ¿çšã§ããç¶æ ã«ããããã®ORMæ§æãäŸåæ§æ³šå ¥ã®èšå®ããã¬ãŒã ã¯ãŒã¯ã®å®åã³ãŒãã«ã¯ãã¢ãã«ãæç€ºçãªæç€ºãªãã«ã¯èŠéããŠããŸãç¹å®ã®ã³ã³ããã¹ããå¿ èŠã§ãã
GoãRustãKotlinïŒæ¥éã«æé·äž
Goèšèªã®ã·ã³ãã«ããšRustèšèªã®æç€ºçãªã¡ã¢ãªç®¡çã¯ãã©ã¡ããAIã¢ãã«ã«ãšã£ãŠè峿·±ã課é¡ãšãªããGoèšèªã®ææ¡ã¯æŠãä¿¡é Œã§ããããRustèšèªã®ææ¡ã¯æ¥éã«æ¹åãããŠãããã®ã®ãç¹ã«ã©ã€ãã¿ã€ã 管çãå®å šã§ãªããããã¯ã«é¢ããŠã¯ãäŸç¶ãšããŠäººéã®æ³šææ·±ãã¬ãã¥ãŒãå¿ èŠã§ããã
ã¬ã¬ã·ãŒèšèªïŒCOBOLãRPGãPL/I
ããã¯ãã»ãšãã©ã®AIã³ãŒãã£ã³ã°ã¬ã€ããèŠèœãšããŠããåŽé¢ã§ããã¡ã€ã³ãã¬ãŒã ã§COBOLãIBM iã§RPGãéèã·ã¹ãã ã§PL/Iãå®è¡ããŠããäŒæ¥çµç¹ã¯ãæ±çšã¢ãã«ã§ã¯ããŸãåŠçã§ããªãç¹æã®AIã³ãŒãã£ã³ã°èª²é¡ãæ±ããŠããŸãããããã®èšèªã®ãã¬ãŒãã³ã°ããŒã¿ã¯ãå®éã®éçšèŠæš¡ã«æ¯ã¹ãŠäžè¶³ããŠããŸããAIã¢ãã«ã¯ãææ³çã«ã¯ãã£ãšãããããæå³çã«èª€ã£ãŠããããããã¯åç¬ã§ã¯åäœããããå ±åããããã°ã©ã ã®çµåå¶çŽã«éåããCOBOLæ§æã«é¢ããèªä¿¡æºã ã®ææ¡ãããããšããããŸãã
ããã«éèŠãªç¹ãšããŠãã³ã³ããã¹ããŠã£ã³ããŠã®å¶éã«ãããAIã¢ãã«ã¯å€§èŠæš¡ãªCOBOLããŒããã©ãªãªãåæã«ã¡ã¢ãªã«ä¿æããããšãã§ããŸãããç·šéäžã®ããã°ã©ã ã¯èªèã§ããŸãããä»ã®300åã®ããã°ã©ã ãšå ±æããŠããã³ããŒããã¯ããããåŒã³åºãJCLãžã§ããäŸåããDB2ã¹ããŒãã¯èªèã§ããŸãããAIãã¬ã¬ã·ãŒã³ãŒãããŒã¹ã®å€æŽãå®å šã«æ¯æŽããã«ã¯ãã³ã³ããã¹ããŠã£ã³ããŠããåŸãããªãæ§é çã³ã³ããã¹ãããå®å šãªäŸåé¢ä¿ã°ã©ããçè§£ããæ§é åæã¬ã€ã€ãŒããååŸããå¿ èŠããããŸãã
ããè¯ãã³ãŒããæžãããã®ããè¯ãããã³ãã
AIãçæããã³ãŒãã®å質ã¯ãããã³ããã®å ·äœæ§ã«æ£æ¯äŸãããææ§ãªããã³ããã¯æ±çšçãªã³ãŒããçæããå ·äœçãªããã³ããã¯çãçµã£ãæ£ç¢ºãªã³ãŒããçæããã
ã»ãã¥ãªãã£èŠä»¶ã¯æç€ºçã«å«ããŠãã ãããAIã¢ãã«ã¯ããã©ã«ãã§é¢æ°åã³ãŒããçæããŸããããŠãŒã¶ãŒIDã§ããŒã¿ããŒã¹ãç §äŒãã颿°ãäœæããããšããæç€ºã¯ãæååé£çµãããSQLãçæããŸãããSQLã€ã³ãžã§ã¯ã·ã§ã³ãé²ãããã«ãã©ã¡ãŒã¿åã¯ãšãªã䜿çšããŠãŠãŒã¶ãŒIDã§ããŒã¿ããŒã¹ãç §äŒãã颿°ãäœæããããšããæç€ºã¯ããã©ã¡ãŒã¿åSQLãçæããŸããã»ãã¥ãªãã£èŠä»¶ã¯æç€ºããå¿ èŠããããæé»çã«æ³å®ããããšã¯ã§ããŸããã
ã»ãã¥ãªãã£ãã¬ãŒãã³ã°ãããšãªãã®åãã¿ã¹ã¯ã以äžã«ç€ºããŸãã
# Vague prompt (produces insecure code):
"Write a function to get a user from the database by username"
# Specific prompt (produces secure, production-ready code):
"Write a Python function get_user(username: str) -> Optional[UserRecord]
that queries the PostgreSQL users table using a parameterized query
to prevent SQL injection. Return None if not found. Raise DatabaseError
on connection failure. Do not SELECT * -- return only id, email, and role."
ãã¬ãŒã ã¯ãŒã¯ãšããŒãžã§ã³ãæå®ããŠãã ããããExpress.js ã®ã«ãŒããã³ãã©ãäœæããããšãasync/await ã䜿çšããzod ã§å ¥åãæ€èšŒããåä»ãã¬ã¹ãã³ã¹ãè¿ã Express 4.18 ã®ã«ãŒããã³ãã©ãäœæãããã§ã¯ãç°ãªãçµæãåŸãããŸãããã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããã¹ããå ·äœçã§ããã°ããã»ã©ãã¢ãã«ãæšæž¬ããå¿ èŠã®ããæ å ±ãå°ãªããªããŸãã
ã¿ã¹ã¯ã ãã§ãªããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŠãã ããã ãæ¯æãåŠç颿°ãäœæãããã§ã¯ãªããå
¥åã¿ã€ããåºåã¿ã€ãããšã©ãŒæ¡ä»¶ãããã³äŸåé¢ä¿ãæå®ããŸãããTypeScript 颿°ãäœæããã processPayment(amount: number, currency: 'USD'|'EUR', customerId: string): Promise<PaymentResult> ããã¯ãåœç€Ÿã®å
éšPaymentGatewayã¯ã©ã¹ãåŒã³åºããINSUFFICIENT_FUNDSããã³CARD_DECLINEDãšã©ãŒãå
·äœçã«åŠçããŸãã
飿¥ããã³ãŒããåç §ããããã¡ã€ã«å šäœãŸãã¯ãããžã§ã¯ãå šäœãèªã¿èŸŒãããšãã§ããããŒã«ã§ã¯ãé¢é£ããã€ã³ã¿ãŒãã§ãŒã¹ãåãããã³æ¢åã®ãã¿ãŒã³ãæäŸããããšã§ãã¢ãã«ãæ¢åã®ã³ãŒãããŒã¹ã«é©åããªãæ±çšçãªã³ãŒãã§ã¯ãªããäžè²«æ§ã®ããæ £çšçãªã³ãŒããçæããããã®ã³ã³ããã¹ããåŸãããŸãã
AIçæã³ãŒãã®æ€èšŒïŒå質ã²ãŒãã¹ã¿ãã¯
AIãçæããã³ãŒãã¯ã人éãæžããã³ãŒããšåããå Žåã«ãã£ãŠã¯ãã峿 Œãªæ€èšŒããã»ã¹ãçµãªããã°ãªããªãããã®éã«é¢ããè°è«ã¯ãå質ã ãã§ãªãã»ãã¥ãªãã£ã«ãåœãŠã¯ãŸããAIãããéããããå€ãã®ã³ãŒããçæããã°ãåé¡ãæ€åºããã²ãŒããåæ§ã«é«éãã€äœç³»çã§ãªããã°ãªããªãã
éçè§£æã¯å¿ é ã§ããããªãã·ã§ã³ã§ã¯ãããŸãããéçè§£æãSASTã¹ãã£ã³ãäŸåé¢ä¿ã¹ãã£ã³ãã·ãŒã¯ã¬ããã¹ãã£ã³ãããã³AIçæã³ããããäºåã«ä¿¡é Œããªãããªã·ãŒã¯ãAIã³ãŒãã®å質ãªã¹ã¯ã«å¯Ÿããæšæºçãªå¯Ÿçã§ããã€ãŸããã³ãŒãã人éã«ãã£ãŠæžããããã®ãAIã«ãã£ãŠçæããããã®ãã«é¢ãããããã¹ãŠã®ãã«ãªã¯ãšã¹ãã«å¯ŸããŠESLintãPylintãSonarQubeãSemgrepããŸãã¯åçã®ããŒã«ãå®è¡ããå¿ èŠããããŸãã
ã€ã ã«
name: AI Code Quality Gate
on: [pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Static analysis (same rules for AI and human code)
run: |
pip install ruff bandit
ruff check src/ # style + quality
bandit -r src/ -ll # security patterns
- name: SAST scan
uses: semgrep/semgrep-action@v1
with:
config: p/owasp-top-ten p/python
- name: Stricter gate for AI-generated PRs
if: contains(github.event.pull_request.labels.*.name, 'ai-generated')
run: |
echo "AI-generated PR -- enforcing senior-engineer review requirement"
# Blocks merge until human approval from codeowner
AIãçæãããã«ãªã¯ãšã¹ãã«å¯ŸããAIã¬ãã¥ãŒã¯ãããã«é«åºŠãªã»ãã¥ãªãã£å¯ŸçãšãªããŸããAIãçæãããã«ãªã¯ãšã¹ãã«å¯ŸããŠCodeRabbitãGreptileãå®è¡ããããšã§ãéçè§£æã§ã¯èŠéããããããªãã³ã³ããã¹ãã«äŸåããåé¡ãè«çãšã©ãŒãèŠèœãšããããšããžã±ãŒã¹ãã³ãŒãããŒã¹ã®ä»ã®éšåãšã®ã¢ãŒããã¯ãã£äžã®äžæŽåãªã©ãæ€åºã§ããŸãã
ã³ãŒãçæãšäžŠè¡ããŠãã¹ãçæãè¡ãããšã¯ãçŸåšã§ã¯ãšãŒãžã§ã³ãã¯ãŒã¯ãããŒã®æšæºçãªææ³ãšãªã£ãŠããŸããClaude CodeãGitHub Copilot Agentãªã©ã®ããŒã«ã¯ãã³ãŒãçæãšåãã¯ãŒã¯ãããŒå ã§ãã¹ããçæã§ããŸãããã¹ãã¯ã³ãŒããšåæ§ã«æ éã«ã¬ãã¥ãŒããå¿ èŠããããŸããAIãçæãããã¹ãã¯ã«ãã¬ããžææšãæé©åããããã仿§ã©ããã«å®è£ ãããŠããããæå³ã©ããã«å®è£ ãããŠãããããã¹ãããŠããå¯èœæ§ãããããã§ãã
ã¢ãŒããã¯ãã£ãšãªã¹ã¯ã«é¢ããã¬ãã¥ãŒã¯äººéãè¡ããŸããAIã¯ãæ©æ¢°çãªæ£ããã«é¢ããæåã®ã¬ãã¥ãŒãæ åœããŸãã人éã®ã¬ãã¥ãŒæ åœè ã¯ãé©åãªæœè±¡åã§ããããæå³ããæ°ããªäŸåé¢ä¿ãå°å ¥ããŠããªããããã®ã»ãã¥ãªãã£å¢çã«å¯ŸããŠãšã©ãŒåŠçãé©åã§ããããšãã£ã倿ãäžããŸããããã¯ãAIãæçãããŸã§ã®æ«å®çãªæªçœ®ã§ã¯ãªãã責任ã®é©åãªåæ ã§ãã
äŒæ¥ç°å¢ã«ãããAIã³ãŒãïŒã³ã³ããã¹ããŠã£ã³ããŠã®åé¡
ã³ã³ããã¹ããŠã£ã³ããŠãšã¯ãã¢ãã«ãäžåºŠã«åŠçã§ããããã¹ãã®äžéå€ã§ãã2026幎çŸåšãäžéšã®æå 端ã¢ãã«ã¯ã100äžããŒã¯ã³è¿ãã³ã³ããã¹ããŠã£ã³ããŠãæäŸããŠãããå°èŠæš¡ãªãµãŒãã¹ããšã³ãããŒãšã³ãã§åŠçããã®ã«ååãªå®¹éã§ãã100äžããŒã¯ã³ã®ãŠã£ã³ããŠã«ã¯ãããã4ã¡ã¬ãã€ãã®ããã¹ããæ ŒçŽãããŸããå®éã®ãšã³ã¿ãŒãã©ã€ãºåãã¢ãã¬ãã¯ã®ã¬ãã€ãèŠæš¡ã«ãªããŸããçŽ4ã¡ã¬ãã€ããè¶ ããã³ãŒãããŒã¹ã®å Žåãã»ãšãã©ã®ã¯ãšãªã§ã°ããŒãã«ã³ãŒãæ€çŽ¢ãšã³ãŒãã€ã³ããªãžã§ã³ã¹ãå¿ èŠã«ãªããŸãã
ããã¯AIã¢ãã«ã«å¯Ÿããæ¹å€ã§ã¯ãªããäŒæ¥ç°å¢ã«ãããAIã³ãŒãã£ã³ã°ããŒã«ã®å°å ¥æ¹æ³ãèŠå®ããã¢ãŒããã¯ãã£äžã®å¶çŽã§ããã³ã³ããã¹ããŠã£ã³ããŠãè£å®ããæ€çŽ¢ã¬ã€ã€ãŒãã€ãŸãå®å šãªäŸåé¢ä¿ã°ã©ããçè§£ããåAIã¯ãšãªã«é¢é£ããã³ã³ããã¹ããååŸããã³ãŒãã€ã³ããªãžã§ã³ã¹ãã©ãããã©ãŒã ããããå€§èŠæš¡ã§è€éãªã³ãŒãããŒã¹ã«ãããAIã³ãŒãã£ã³ã°ãå¯èœã«ããèŠçŽ ãªã®ã§ãã
ã¡ã€ã³ãã¬ãŒã ã®ã¬ã¬ã·ãŒã·ã¹ãã ãæ±ããçµç¹ã«ãšã£ãŠã課é¡ã¯ããã«è€éã«ãªããŸããCOBOLããã°ã©ã ãJCLãžã§ãã¹ããªãŒã ãDB2ã¹ããŒããææ°ã®JavaãµãŒãã¹éã®äŸåé¢ä¿ã¯ãã³ã³ããã¹ããŠã£ã³ããŠã«åãŸãç¯å²ããèªèã§ããªãã¢ãã«ã«ã¯èŠããŸãããéçºè ãCOBOLããã°ã©ã ãä¿®æ£ããã®ãæ¯æŽããAIã¢ã·ã¹ã¿ã³ãã¯ãåå倿Žãææ¡ããŠãããã£ãŒã«ããå ±æã³ããŒããã¯ãä»ããŠä»ã®47åã®ããã°ã©ã ã«ãåºçŸããããšãç¥ãè¡ããããŸãããå€éšããæ§é çãªæ å ±ãæäŸãããªãéãããã®æ å ±ãç¥ãããšã¯ã§ããªãã®ã§ãã
æèã«äŸåããªãå€æŽæç€ºãšãæèã«å¯ãã å€æŽæç€ºãšã®å¯Ÿæ¯ã¯ãæ§é çç¥èããªãéèŠãªã®ãã瀺ããŠããã
# Without structural context -- what AI sees in isolation:
"Refactor the calculateInterest paragraph in ACCTPROC.cbl
to reduce cyclomatic complexity"
# With structural context from dependency analysis:
"Refactor the calculateInterest paragraph in ACCTPROC.cbl.
Note: this paragraph is called by 14 other programs via CALL.
It shares WS-ACCT-RATE from copybook INTRATES.cpy (included by 47 programs).
The WS-COMPOUND-FLAG field used in lines 340-360 is set by ACCTINIT.cbl
before this runs -- do not move or rename it.
Do not change field names, parameter order, or RETURN-CODE values --
these are interface contracts with callers."
2çªç®ã®ããã³ããã¯ãå®å šã«ãããã€ã§ãããªãã¡ã¯ã¿ãªã³ã°ãçæããŸãã1çªç®ã®ããã³ããã¯ãæ§æçã«ã¯æ£ãããããããŸããããAIãååšãç¥ããªãã£ã14åã®åŒã³åºãå ããã°ã©ã ãå£ããŠããŸãå¯èœæ§ããããŸãã
èªå®æ¡ä»¶ SMART TS XL ãšã³ã¿ãŒãã©ã€ãºã³ãŒãããŒã¹ã«ãããAIæ¯æŽéçºããµããŒã
SMART TS XL AIã³ãŒãã£ã³ã°ããŒã«ãå€§èŠæš¡ã§å€èšèªã®ãšã³ã¿ãŒãã©ã€ãºã³ãŒãããŒã¹å ã§å®å šã«åäœããããã«å¿ èŠãªæ§é çãªã³ã³ããã¹ãã¬ã€ã€ãŒãæäŸããã
AIããŒã«ãCOBOLããã°ã©ã ã®å€æŽãææ¡ããå Žåã SMART TS XLãã ã¢ããªã±ãŒã·ã§ã³äŸåé¢ä¿ãããã³ã° AIã®ã³ã³ããã¹ããŠã£ã³ããŠã§ã¯ä¿æã§ããªãäŸåé¢ä¿ã³ã³ããã¹ããæäŸããŸããå ·äœçã«ã¯ãããã°ã©ã ãã©ã®ã³ããŒããã¯ãã€ã³ã¯ã«ãŒãããŠããããä»ã®ã©ã®ããã°ã©ã ããããåŒã³åºããŠããããã©ã®ããŒã¿ã»ãããçæããŠããããã©ã®JCLãžã§ããã©ã®ãããªé åºã§ãããåŒã³åºãããšãã£ãæ å ±ã§ãããã®ãããªæ§é çãªç¥èã¯ãAIã®ææ¡ãåã«å±æçã«æ£ããã ãã§ãªããå®å šã§ãããšè©äŸ¡ãããããã®åææ¡ä»¶ãšãªããŸãã
SMART TS XLãã éçã³ãŒãåæ AIãçæããã³ãŒããšäººéãæžããã³ãŒããåçã®å³å¯ãã§æ€èšŒããåè³ªææšãèšç®ããã»ãã¥ãªãã£ãã¿ãŒã³ãç¹å®ãããããã³ãŒããæ€åºããç°å¢å ã®ããããèšèªã®è€éããåæã«æž¬å®ããŸããAIã³ãŒãã£ã³ã°ããŒã«ãå°å ¥ãããããã®ããŒã«ãçæããåºåã®å質管çãè¡ã£ãŠããçµç¹ã«ãšã£ãŠããã®èšèªæšªæçãªå質枬å®ã¯ãã¢ãããã¯ãªã³ãŒãã¬ãã¥ãŒã§ã¯å€§èŠæš¡ã«æäŸã§ããªãäœç³»çãªæ€èšŒãšãªããŸãã
圱é¿åææ©èœã¯ãAIããŒã«ã§ã¯çããããªãçåã«çããŸããã€ãŸããAIãææ¡ãã倿Žãåãå ¥ããããå Žåãã·ã¹ãã å ã®ä»ã®ã©ã®éšåã«åœ±é¿ãåºãã®ãããšããããšã§ãã圱é¿ç¯å²ãäŸåãããã¹ãŠã®ããã°ã©ã ãäžæµã®ã³ã³ã·ã¥ãŒããŒãåæ€èšŒãå¿ èŠãªãã¹ãŠã®ãã¹ãã¯ãAIã¢ãã«ã«ããã³ãŒãããŒã¹ã®çè§£ã§ã¯ãªããã³ãŒãããŒã¹ã®æ§é ã¢ãã«ããå°ãåºãããŸããèšèªã®å¢çãè¶ãã倿Žã®å Žåãããã¯èªä¿¡ãæã£ãŠãããã€ã§ããããæ¬çªç°å¢ã§ãã®åœ±é¿ãçºèŠãããã®éããšãªããŸãã
ãšã³ã¿ãŒãã©ã€ãºæ€çŽ¢æ©èœã«ãããAIã®ã³ã³ããã¹ãå¶éãè£å®ãã圢ã§ãã³ãŒãããŒã¹å šäœãã¯ãšãªå¯èœã«ãªããŸããã€ãŸããããããèšèªã®çµã¿åããã§èšè¿°ãããæ°çŸäžè¡ã®ã³ãŒãã®äžãããããŒã¿æ§é ãžã®ãã¹ãŠã®åç §ãéæšå¥šAPIã®ãã¹ãŠã®äœ¿çšç®æãç¹å®ã®ããŒã¿ã»ããã«ã¢ã¯ã»ã¹ãããã¹ãŠã®ããã°ã©ã ãããããæ°ç§ã§æ€çŽ¢ã§ããŸãããã®æ€çŽ¢æ©èœã«ãããAIã³ãŒãã£ã³ã°ããŒã«ã¯ãäžå®å šãªæ å ±ã«åºã¥ããŠäœæ¥ããã®ã§ã¯ãªããè€éãªãšã³ã¿ãŒãã©ã€ãºã³ãŒãããŒã¹ã¯ãšãªã«å¿ èŠãªé¢é£ã³ã³ããã¹ããååŸã§ããããã«ãªããŸãã
ã¬ããã³ã¹ãã¬ãŒã ã¯ãŒã¯
2026幎ã«AIã³ãŒãã£ã³ã°ã广çã«æŽ»çšããçµç¹ã¯ãå¶çŽã§ã¯ãªããAIãäžå¿ãšããã¬ããã³ã¹ãæ§ç¯ããŠããããã®ãã¬ãŒã ã¯ãŒã¯ã¯4ã€ã®èŠçŽ ããæ§æãããŠããã
å¯èŠæ§ãã³ãŒãããŒã¹å ã®ã©ãã«AIçæã³ãŒããååšããããææ¡ããŸããããAIçæã³ãããã«ã©ãã«ãä»ããããŒã«ãããã°ãã³ãããããã¯ããã«ãªã¯ãšã¹ããã³ãã¬ãŒãã«ããããªã·ãŒé©çšãå¿ èŠãªããŒã«ããããŸããå¯èŠæ§ããªããã°ãAIãã©ãã§åäœããŠããããææ¡ããŠããªãçµç¹ã81%ãååšãããšããã®ã£ããã¯è§£æ¶ãããŸããã
äžè²«ããæ€èšŒã宿œããŠãã ãããAIãçæããã³ãŒãã«å¯ŸããŠãã人éãæžããã³ãŒãã«é©çšããã®ãšåãéçè§£æãã»ãã¥ãªãã£ã¹ãã£ã³ãã³ãŒãã¬ãã¥ãŒã®åºæºãé©çšããŠãã ããããAIãçæããããšããçç±ã ãã§ãAIãçæãããã«ãªã¯ãšã¹ããå質ã²ãŒãããé€å€ããªãã§ãã ããã
æ§é åãããããã³ããæšæºãã³ãŒãçæã«äœ¿çšããããã³ããã®æé ãå¿ èŠãªã³ã³ããã¹ããå«ããã¹ãã»ãã¥ãªãã£èŠä»¶ãæå®ãããã¬ãŒã ã¯ãŒã¯ãå®çŸ©ããŸããããã¯ãåºåå質ã®äžè²«æ§ã確ä¿ããããã®å ¥åå質管çã§ãã
ã¢ãŒããã¯ãã£äžã®æææ±ºå®ã«ããã人éã®è²¬ä»»ãAIã¯æè¡çã«æ£ãããã®ã倿ããã人éã¯ã¢ãŒããã¯ãã£çã«é©åãªãã®ã倿ãããAIã®æ®åãå éããã«ã€ããŠããã®å¢çç·ãææ§ã«ãªãã®ãé¿ãããããéçºããã»ã¹ã«ãããŠãã®å¢çç·ãæç¢ºã«ç¶æããã
AIãã³ãŒããæžãããããããã®çµæã«å¯Ÿãã責任ã¯äŸç¶ãšããŠããªãã«ããã
AIã³ãŒãã£ã³ã°ã¯å®é𿮵éããã€ã³ãã©ãžãšç§»è¡ããŸããããã¯ãAIã³ãŒãçæããŒã«ã䜿ãã¹ããã©ãããšããåé¡ã¯ãªããªããåžå Žããã®æ±ºå®ãäžããçµç¹å šäœã§ã®100%å°å ¥ããããè£ä»ããŠããŸããåé¡ã¯ãAIã³ãŒãã£ã³ã°ãäŒæ¥èŠæš¡ã§å®å šãã€æç¶å¯èœãªãã®ã«ããããã®ã¬ããã³ã¹ã€ã³ãã©ããå°å ¥ãšäžŠè¡ããŠæ§ç¯ãããŠãããã©ããã§ãã
AIãçæããã³ãŒãã®éã¯å¢å ã®äžéã蟿ã£ãŠããŸããæ€èšŒã¹ã¿ãã¯ãéçè§£æãã»ãã¥ãªãã£ã¹ãã£ã³ãAIã³ãŒãã¬ãã¥ãŒã人éã«ããã¢ãŒããã¯ãã£ã¬ãã¥ãŒãšãã£ãèŠçŽ ããããã«åãããŠæ¡åŒµããŠããå¿ èŠããããŸããæ±çšAIã¢ãã«ã§ã¯åŠçãå°é£ãªèšèªãã³ãŒãããŒã¹ã«å«ãäŒæ¥ã«ãšã£ãŠãäŸåé¢ä¿ã®ã³ã³ããã¹ããšåœ±é¿ç¯å²ãæäŸããæ§é è§£æã¬ã€ã€ãŒããããAIæ¯æŽãå±éºãªãã®ã§ã¯ãªããå®çšçãªãã®ã«ããéµãšãªããŸãã