- TOP
- ã¿ã°äžèЧ
- Electron
Electron
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
æè¡ããã°
æè¿ã®å€ã®é·ãã«ãªããããã9æã«æ¶Œããäºã«æžæã£ãŠããŸãã æŸæ¬ 圬(æ¬äºº)ã§ãã
ã¯ããã« ããã«ã¡ã¯ãRevComm ã§ãšã³ãžãã¢ãããŠãã æ ã§ãã AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®æ®åã§ã³ãŒããæžãã³ã¹ãã¯å€§ããäžãããããã«ããã¯ã¯ã¬ãã¥ãŒãšå®åçãªä¿å®äœæ¥ã«ç§»ããŸããã Addy Osmani æ°ãã Agentic Code Review ãã§ãã¬ãã¥ãŒã PR ã®äœæã¹ããŒãã«è¿œãã€ãããã³ãŒããèªãŸããªããŸãŸããŒãžããå§ããŠããçŸç¶ãæžããŠããŸãã MiiTel PhoneïŒãã©ãŠã¶äžã§é話ã§ãã AI æèŒ IP é»è©±ã¢ããªïŒã®éçºãªããžããªã§ã¯æã« 300ã600 ä»¶ã® PR ãããŒãžãããŸãããã®äžã«ã¯ãæ¯ãèããå€ããªããªãã¡ã¯ã¿ãªã³ã°ãäŸåããã±ãŒãžã®æŽæ°ãããã¥ã¡ã³ãã®ä¿®æ£ã®ãããªã倿ã®åãæ±ºãŸã£ãŠããã®ã«ã¬ãã¥ãŒã®åŸ
ã¡æéã ãã¯éåžžã® PR ãšå€ãããªããã®ãçžåœæ°å«ãŸããŸãã ããããå®åçãªå€æã GitHub Actions äžã® AI ã«ä»»ãã人éã®ã¬ãã¥ãŒãæ¬è³ªçãªå€æŽã«éäžãããåãçµã¿ããã4 ã€ã®äºäŸã玹ä»ããŸãã ãããã Claude Code ã GitHub Actions äžã§åããæ§æã§ãäºäŸ 1ã3 ã¯å
¬åŒã® claude-code-action ãäºäŸ 4 㯠GitHub Agentic Workflows (gh-aw) ãå©çšããŠããŸãã â» èšäºäžã®ã³ãŒããèšå®ã¯èª¬æã®ããã«æç²ã»ç°¡ç¥åããŠããŸãã èšèšååãå
ã« 4 ã€ã®äºäŸã¯äœ¿ãããŒã«ã察象ãéããŸãããèšèšã¯åãåã«åãŸã£ãŠããŸããäœæ¥ã®å€§åã¯ããã³ãããæžãããšã§ã¯ãªãããAI ã«äœããããªããããæ±ºããããšã§ããã å
ã«ååãæããŸãã以éã®äºäŸã¯ããããã©ãå
·äœåãããŠããããšããŠèªãã§ããããã°ãšæããŸãã å€å®ã¯ AIãå®è¡ã¯æ±ºå®çãªã¹ããããšã㊠ãAI ã®åºåã¯æ§é åãããå€å® or ææç©ã«ãšã©ããæ¿èªã»ããŒãžã»ã¯ããŒãºã»ãã±ãã起祚ãšãã£ãå¯äœçšã¯ãã¹ããŒãæ€èšŒãéã£ãåºåã«å¯ŸããŠåŸç¶ã®ã¹ããããå®è¡ããŸã èªååã®çµç¹ãã人éã®å€æãæ®ãå Žæã«çœ®ã ãAI ãé²ããã®ã¯æ¿èªãã³ãããã® pushãdraft PR ã®èµ·ç¥šãŸã§ã§ãããŒãžãããã©ããã¯äººéã倿ããŸã ãã€ã§ãæ¢ããããããã«ãã ãèšå®ãã²ãšã€å€ããã ãã§èªåæ¿èªãæ¢ãããããã«ã¹ã€ãããäœæè
ãã©ãã«ãä»ãã PR ã ãã察象ã«ãããªããã€ã³æ¹åŒãAI ã®å®è¡åæ°ã»å®è¡æéã»åæå®è¡æ°ã®äžéããŸãå€å®ã ããåãããŠç²ŸåºŠã確èªããçŽåŸããŠããå¯äœçšãæå¹åããŸã AI ãžã®å
¥åãä¿¡é Œããªã ãPR æ¬æããªãªãŒã¹ããŒãã¯ãµãŒãããŒãã£ç±æ¥ã®ããã¹ããšããŠæ±ããæž¡ããªããä¿¡é Œå¢çã®å€ã«çœ®ããŸã éçšã§ç²ŸåºŠãäžããåæãçµã¿èŸŒã ã鱿¬¡ã®ã¹ããããã§ãã¯ã誀å€å®ãåäŸãšããŠããã³ããã«è¿œèšããŠããéçšããªããžããªåºæã®èгç¹ãèªç¶èšèªã§æ³šå
¥ã§ããå
¥ãå£ããããŠãåŠçããªãã£ããã®ãã®ãã°ã確èªå¯èœã«ããŠãããŸã äºäŸ 1: PR ã®ã¬ãã¥ãŒèŠåŠã AI ãå€å®ãã AI ã«ä»»ããã®ã¯ã¬ãã¥ãŒã§ã¯ãªãåé¡ ãã£ããã¯ããŒã ã®æ¯ãè¿ãã§åºãããã¹ãã³ãŒããããã¥ã¡ã³ãã ãã®å€æŽãªããã¬ãã¥ãŒãªãã§ããŒãžããŠããã®ã§ã¯ããšãã話ã§ããã åæãšããŠãPR ã open ãããš GitHub Copilot ã Devin ãèªåã§ã¬ãã¥ãŒããèšå®ã¯ãã§ã«å
¥ã£ãŠããŸãããã ãããããã¯äººéã®ã¬ãã¥ãŒã«èгç¹ãè¶³ãè£å©ã§ãã£ãŠãæ¿èªãŸã§ã®åŸ
ã¡æéã¯ãããŸã§å€ãããŸããã ä»åã®ããã«ããã¯ã¯ãŸãã«ãã®åŸ
ã¡æéãªã®ã§ãAI ã¬ãã¥ãŒã匷åããŠäººéã®ã¬ãã¥ãŒã眮ãæããæ¹åã¯åããŸããã§ããã æ¹éã®åèã«ããã®ã¯ Findy Tech Blog ã®ã äžèŠãªã¬ãã¥ãŒãAIã«ãŸãããŠAIã³ãŒãã£ã³ã°ã®ç°å¢æ¹åãå éãã ãã§ããèŠç¹ã¯ãAI ããã¬ãã¥ã¢ãŒãã§ã¯ãªãã人éã®ã¬ãã¥ãŒãäžèŠãª PR ãã©ããã®åé¡åšããšããŠäœ¿ãããšããã㊠Kent Beck æ°ã®ã Tidy First? ãã§ããæ¯ãèããå€ããªãæŽé ïŒtidyingïŒã ããèªåæ¿èªã®å¯Ÿè±¡ã«ããããšã§ãã ã¬ãã¥ãŒã®ä»£è¡ãå質ä¿èšŒã®è²¬ä»»ããš AI ã«ç§»ããŠããŸãã®ã«å¯Ÿããåé¡ã¯ã人éãã¬ãã¥ãŒãã¹ã PR ã人éã«ç¢ºå®ã«å±ãããããã®æ¯ãåãã§ãã 3 ã¬ã€ã€ãŒã®ã¬ãã¥ãŒããªã·ãŒ ãAI ã§èªååããšèšãã€ã€ãæåã®ã¬ã€ã€ãŒã« AI ã¯ç»å ŽããŸããã ã¬ã€ã€ãŒ å
容 ä»çµã¿ ã¬ã€ã€ãŒ 0 ããã¥ã¡ã³ãã®ã¿ã®å€æŽã®èªåæ¿èª ãã¡ã€ã«ãã¹ã«ããæ©æ¢°çãªå€å®ïŒAI äžèŠïŒ ã¬ã€ã€ãŒ 1 人éã¬ãã¥ãŒå¿
é é åã®å®çŸ© ããªã·ãŒããã¥ã¡ã³ã ã¬ã€ã€ãŒ 2 æ¯ãèããå€ããªãæŽé ã®èªåæ¿èª AI åé¡åš + æãåãã®äºåŸã¬ãã¥ãŒãšç£æ» ã¬ã€ã€ãŒ 0 ã¯ã倿Žãã¡ã€ã«ããã¹ãŠ docs/ é
äžãŸã㯠*.md ã® PR ãæ©æ¢°çã«æ¿èªããŸããAI ã§å€å®ã§ããããšã§ããæ±ºå®çã«å€å®ã§ãããªããã¡ããéžã³ãŸãã誀å€å®ãªã¹ã¯ããªãã³ã¹ãããŒãã ããã§ãã ãã ããåã Markdown ã§ã .github/ é
äžãš CLAUDE.md / AGENTS.md ã¯å¯Ÿè±¡å€ã§ãããããã®ç¡äººæ¿èªãèš±ããšãèªåæ¿èªã·ã¹ãã èªäœã®æ¹å€ãç¡äººã§éã£ãŠããŸããŸãã ã¬ã€ã€ãŒ 1 ã¯ãAI ã®å€å®ã«ãããããå¿
ã人éãã¬ãã¥ãŒããé åã®ææåã§ããé話ã®ãããªäžæ žæ©èœãfeature flagãå€éšã·ã¹ãã ãšã®é£æºãå人æ
å ±ãèªèšŒããã¹ãã®åé€ãäŸåããã±ãŒãžãCI èšå®ãªã©ã該åœããŸããééãããšåœ±é¿ã倧ããé åãšãèªååèªäœã®å®å
šæ§ãæ¯ããé åïŒãã¹ãã»CIïŒã䞊ã¹ãŠããŸãã åé¡åšã®å®è£
ã¬ã€ã€ãŒ 2 ãæ¬é¡ã® AI åé¡åšã§ããPR ã®äœæè
ã ai-classify ã©ãã«ãä»ãããšãã ãåããŸããåé¡åšã¯ãTidy First?ãã®æ§é çãªãã¡ã¯ã¿ãªã³ã°ã調æŽããåé¡è¡šãæã£ãŠããŸãã T1: ãã¡ã€ã«ã»ãã£ã¬ã¯ããªã®ç§»åããªããŒã ïŒimport ãã¹ã®æ©æ¢°ç远éãå«ãïŒ T5: 倿°ã»é¢æ°ã»ã³ã³ããŒãã³ãã®ãªããŒã T7: æªäœ¿çšã³ãŒãã»ãã¡ã€ã«ã®åé€ A1: æ¢å feature flag ã® targetingïŒã©ã®ç°å¢ã»ãŠãŒã¶ãŒã«é
åžãããã®èšå®ïŒã®ã¿ã®å€æŽïŒæ¯ãèãã¯å€ããããããŒã ãæç€ºçã«ã¬ãã¥ãŒäžèŠãšåæããäœãªã¹ã¯å€æŽïŒ NG2: é話系ã³ãŒãã«è§Šãã倿ŽïŒå³ HUMAN_REVIEWïŒ ãã€ã³ãã¯ãé€å€æ¡ä»¶ïŒNGïŒãã倿Žã®æ§è³ªãã§ã¯ãªããè§Šããé åãã§å€å®ãããŠããããšã§ããé話系ãã¡ã€ã«ã®å€æŽã import ãã¹ã®æ©æ¢°çãªè¿œéã ãã ã£ããšããŠã NG2 ã«åããŸãããæ©æ¢°çãªå€æŽã ããå®è³ªã¯è©²åœããªãããšããæ¥œèгçãªå€æã AI ã«ãããªãããã§ãã ãŸããè¿·ã£ãã UNKNOWN ãšåºåããã 誀ã£ãŠ APPROVE ããã³ã¹ãã¯èª€ã£ãŠ HUMAN_REVIEW ãšããã³ã¹ãããã¯ããã«å€§ãã ãšããååãããã³ããã«æèšããŠããŸãã åºåã¯èªç¶èšèªã®ã³ã¡ã³ãã§ã¯ãªããæ§é åãããå€å®ãã¡ã€ã«ã§ãã { " verdict ": " APPROVE ", " t_categories ": [ " T1 ", " T5 " ] , " reasons ": [ " å€å®çç±ãç°¡æœã«åæãã " ] , " summary ": " 1ã2 æã®å€å®ãµã㪠", " sampling_used ": false } åŸç¶ã®ã¹ãããã jq ã§ãã®ãã¡ã€ã«ã®ã¹ããŒããæ€èšŒããæ€èšŒãéã£ã APPROVE å€å®ã«å¯ŸããŠã®ã¿æ¿èªãå®è¡ããŸãã - name : Approve if : steps.verdict.outputs.verdict == 'APPROVE' && vars.AI_CLASSIFY_APPROVE_ENABLED == 'true' run : | gh pr review "$PR_NUMBER" --approve --body "$body" gh pr edit "$PR_NUMBER" --add-label ai-approved AI_CLASSIFY_APPROVE_ENABLED 㯠GitHub ã® repository variable ã䜿ã£ããã«ã¹ã€ããã§ã true ã§ãªããšãã¯å€å®ã³ã¡ã³ãã®æçš¿ã ããè¡ããŸããå°å
¥åæã¯åã£ããŸãŸå€å®ç²ŸåºŠã確èªããåé¡ãªãããšã確èªããŠããæå¹åããŸããã åé¡åšã«æž¡ãã®ã¯å·®åãšãã¡ã€ã«å
容ã ãã§ãPR æ¬æãšã³ã¡ã³ãã¯æž¡ããŸããããã ããdiff äžã®ã³ãŒãã³ã¡ã³ãã«ã¯åãèªå°ãæžããããããã®çµè·¯ãŸã§æ¶ããããã§ã¯ãããŸããã ããã¯åŸæ®µã®ã¹ããŒãæ€èšŒãšãããŒãžå€æã人éã«æ®ã£ãŠããããšã§ãããã¯ããŸããæ¿èªåŸã« push ãããã°èªèº«ã®æ¿èªãåãæ¶ããŠååé¡ããèªåããŒãžã¯ã©ã®ã¬ã€ã€ãŒã§ãè¡ããŸããã éçšãšãPR ã®äœãæ¹ãžã®æ³¢å èªåæ¿èªããã PR ã¯é±æ¬¡ã§æ°ä»¶ã人éãäºåŸã¬ãã¥ãŒããŠããŸããAddy Osmani æ°ã®æŽçãåããã°ããã¹ãŠã®å·®åã人éãèŠã圢ãããæãåã確èªãšç£æ»ã§ä»çµã¿å
šäœãèŠåŒµã圢ãžã®ç§»è¡ã§ãïŒåœŒã®èšäºã®èšèã§ã¯ human in the loop ãã human on the loop ãž ïŒã誀å€å®ãèŠã€ããã°ãåäŸãšããŠåé¡åšããã³ããã®é€å€æ¡ä»¶ã«è¿œèšããŸãã 广ã¯ã¬ãã¥ãŒãéããªãããšã«ãšã©ãŸããŸããã§ãããåé¡åšã APPROVE ãåºããã®ã¯ PR å
šäœãæŽé ã§å®çµããŠãããšãã ããªã®ã§ããªãã¡ã¯ã¿ãªã³ã°ãšæ©èœå€æŽãæ··ãã£ã PR 㯠HUMAN_REVIEW ã«åããŸãã ã€ãŸããäœæè
ããèŠããšãæ··ããã°å
šäœãã¬ãã¥ãŒåŸ
ã¡ã«ãªããåããã°ãªãã¡ã¯ã¿ãªã³ã°éšåãå
ã«æµããããªããŒã ããã¡ã€ã«ç§»åãå
è¡ PR ã«åãåºã㊠ai-classify ãä»ãããã®äžã«æ¯ãèããå€ãã PR ãç©ã¿éããã°ïŒstacked PR ãšããŠïŒã人éã«å±ãã®ã¯æ¬è³ªçãªå€æŽã ãã®å°ããªå·®åã«ãªããŸãã ãTidy First?ãã®ãæŽé ãšæ¯ãèãã®å€æŽãåããããšããèŠåŸã¯ãåããããšèªäœã®ã³ã¹ãïŒPR ãå¢ããã¬ãã¥ãŒåŸ
ã¡ãè€æ°åã«ãªãïŒã®ããã§åªåç®æšã«ãªããã¡ã§ãããåé¡åšãæŽé åŽã®åŸ
ã¡æéããŒãã«ããããšã§ãèŠåŸãå®ãã»ããéããšããæ§é ã«å€ãã£ãŠããŸãã èªååãèŠåŸã匷å¶ããã®ã§ã¯ãªããèŠåŸã«åŸãããšãåççãªéžæã«ãªããšããã®ã¯ãã¬ãã¥ãŒåŸ
ã¡æéã®åæžãšäžŠã¶ãããã²ãšã€ã®å¹æã ãšæã£ãŠããŸãã äºäŸ 2: Dependabot PR ãæ¯æããªã¢ãŒãžãã äŸåããã±ãŒãžã®æŽæ° PR ãžã®å¯Ÿå¿ã¯ãæ¯åã»ãŒåã倿ã®ç¹°ãè¿ãã§ãããCI ã®æåŠã確èªãããªãªãŒã¹ããŒããèªãã§ç Žå£ç倿Žã®æç¡ã確èªããäœãªã¹ã¯ãªãæ¿èªããŠããŒãžãé«ãªã¹ã¯ãªã Notion ã«ãã±ããã起祚ã㊠PR ã¯ã¯ããŒãºããåäœç¢ºèªãå«ããèšç»çãªå¯Ÿå¿ã«åãã倿ã®åã¯æ±ºãŸã£ãŠããã®ã«æäœæ¥ã§ã¯è¿œãã€ãããPR ã¯æºãŸãäžæ¹ã§ããã æåã®èªååã¯ããã®æé ã Claude Code ã® Skill ã«æžãèµ·ããããšã§ãããæå
ã§ãDependabot ã® PR ã察å¿ããŠããšé Œãã°ããªãŒãã³äžã® PR ãé ã«è§£æããŠäžæ¬åŠçããŠãããŸãã ãã ãã人ãèµ·åããåèªåãªã®ã§ã誰ããæãåºããªãéã PR ã¯æºãŸããå®è¡ãã人ã®ç°å¢ãšæš©éã«äŸåããå±äººçãªéçšã§ããããŸããã ããã§ Skill ãšããŠåºããæé ã GitHub Actions ã® composite actionïŒè€æ°ã®ã¹ãããããŸãšããŠåå©çšã§ããä»çµã¿ïŒã«äœãçŽããç¡äººã§å®æå®è¡ããããã«ããŸããã ãã®ãšããAI èªèº«ãå®è¡ããŠããããŒãžããã±ãã起祚㯠AI ããåãé¢ããŠããŸããcomposite action ã¯ç€Ÿå
ã®å
±éãªããžããªã«çœ®ããè€æ°ã®ãªããžããªããå©çšããŠããŸãã æ¯æ¥åå 3 æã® cron ããªãŒãã³äžã® Dependabot PR ãå€ãé ã« 1 ä»¶ãã€åŠçããŸãïŒ1 ä»¶ããŒãžãããš Dependabot ãæ®ãã rebase ããããã䞊åã§ã¯ãªãçŽåã§ãïŒã PR ã¿ã€ãã«ã»body ããããã±ãŒãžåãšããŒãžã§ã³ãæ©æ¢°çã«è§£æããCI ãã§ãã¯ã®æåŠãå€å®ãã Claude ã«ãããªã¹ã¯å€å®ããªãªãŒã¹ããŒããèªã¿åãå°çšã®ããŒã«ã§èªã¿ã triage-verdict.json ïŒrisk: low / highãæ ¹æ ãäž»èŠå€æŽç¹ïŒãæžãåºã 1, 2 ãæ±ºå®è¡šã«éããŠæçµã¢ã¯ã·ã§ã³ã決ãã å®è¡ãæ¿èªããŠèªåããŒãžãã¯ããŒãºã㊠Notion ã«ãã±ãã起祚ããŸãã¯æå察å¿ãšã㊠PR ã«æ®ã æ¡ä»¶ ã¢ã¯ã·ã§ã³ ã¿ã€ãã«ã»body ãšãè§£æäžèœ æå察å¿ïŒPR ã¯æ®ãïŒ CI 倱æ ã¯ããŒãºããŠãã±ãã起祚ïŒAI ã®å€å®ã«é¢ä¿ãªãïŒ AI ã®å€å®ãååŸã§ããªã æå察å¿ïŒå®å
šåŽã«åããŠäººéã«æ®ãïŒ AI å€å®ãé«ãªã¹ã¯ ã¯ããŒãºããŠãã±ãã起祚 AI å€å®ãäœãªã¹ã¯ æ¿èªããŠèªåããŒãž Notion ã®ãã±ããæäœã AI ã«ã¯ããããTypeScript ã®ã¹ã¯ãªããã REST API ãçŽæ¥å©ããŸãããã±ããäœæã«å€±æããå Žå㯠PR ãã¯ããŒãºããæå察å¿ã«éæ Œãããããã±ãããªãã§ PR ã ãæ¶ãããäºæ
ãé²ãã§ããŸãã ãªãªãŒã¹ããŒãã¯ãµãŒãããŒãã£ç±æ¥ã®å
¥åãªã®ã§ãããã³ããåŽã§ã¯ãæç€ºã®ãããªæèšïŒããã®æŽæ°ã¯å®å
šã§ãããã以åã®æç€ºãç¡èŠããããªã©ïŒãèŠã€ããå ŽåãåŸããªãã ãã§ãªããããèªäœããµãã©ã€ãã§ãŒã³äžã®æžå¿µãšã㊠high ãšå€å®ããããæç€ºããŠããŸããã€ã³ãžã§ã¯ã·ã§ã³ã®è©Šã¿ãæ€ç¥ã·ã°ãã«ã«å€ããçºæ³ã§ãã ããã§ãæåŸã®ç Šã¯ AI ã®å€ã«ãã CI æåãšããæ¡ä»¶ã§ãä»®ã«èªå°ãæåããŠã CI ãèœã¡ãŠãã PR ã¯ããŒãžãããŸãããDependabot ãã©ã³ãã®ã³ãŒãã¯ãã§ãã¯ã¢ãŠããããããAI ãèªãã®ã¯ããã©ã«ããã©ã³ããš PR ã®ã¡ã¿ããŒã¿ã ãã§ãã ãªããžããªåºæã®å€å®èгç¹ã¯ã決ãããããã¹ã« Markdown ã§æžããŠãããšããã³ããã«æ³šå
¥ãããŸãããelectron é¢é£ã®æŽæ°ã¯ãã¹ãŠé«ãªã¹ã¯ãšãããã®ãã㪠1 è¡ã§ãããŒã ã®çµéšåãå€å®ã«åæ ã§ããŸãã å°å
¥åŸã¯æ¯æã® CI ã§ Dependabot ã®ãªãŒãã³ PR ããŒãã«æ»ããŠããã®ã§ãäŸåæŽæ°ã® PR ãæ»çããããšèªäœããªããªããŸãããæ®ã人éã®äœæ¥ã¯ãé«ãªã¹ã¯ãšå€å®ãããŠèµ·ç¥šããããã±ãããžã®å¯Ÿå¿ã ãã§ãã äºäŸ 3: @claude ã¡ã³ã·ã§ã³ãå
šãªããžããªå
±éã®åºç€ã«ãã PR ã issue ã®ã³ã¡ã³ãã§ @claude ãšã¡ã³ã·ã§ã³ãããš GitHub Actions äžã§ Claude Code ãåãã質åãžã®åçãã¬ãã¥ãŒææãžã®ä¿®æ£ã³ãããã® pushãã·ã§ãŒãã«ããã®å®è¡ãè¡ããŸãã åå¿ããã®ã¯æžãèŸŒã¿æš©éãæã€ãŠãŒã¶ãŒã®ã³ã¡ã³ãã®ã¿ã§ãClaude ã«æ¿èªãšããŒãžã¯ãããŸããã ãã䜿ãã®ã¯ã³ã³ããªã¯ãã®è§£æ¶ã§ããAI ã³ãŒãã£ã³ã°ã§ PR ãäœãé床ãäžãããšåæã«ãªãŒãã³ãª PR ãå¢ããmain ã®é²ã¿ãéããªããããã³ã³ããªã¯ãã¯ä»¥åããèµ·ãããããªããŸãããPR äœæã®é«éåããä»åºŠã¯ã³ã³ããªã¯ãè§£æ¶ãšããæ°ããå®åäœæ¥ãçãã 圢ã§ãã @claude /fix-conflicts ãšæžãã°ãè§£æ¶ã㊠push ãããšãããŸã§ãã£ãŠãããŸãã åãå顿è㯠GitHub Next ã® Evergreen ã Codex ã® PR Babysitter ã«ãèŠããããã®çš®ã® PR ã®ãæå
¥ãã¯èªååã®å®çªã«ãªãã€ã€ãããŸãã å®è£
é¢ã®å·¥å€«ã¯å
±éåã§ãã @claude ã¡ã³ã·ã§ã³èªäœã¯ claude-code-action ã®ä»£è¡šçãªäœ¿ãæ¹ã§ããããªããžããªããšã«ã¯ãŒã¯ãããŒãæã€ãšãã¢ãã«ã®å€æŽãã³ã¹ãå¶åŸ¡ã®èª¿æŽã®ãã³ã«å
šãªããžããªãžåã倿Žãé
ãããšã«ãªããŸãã ããã§ããªã¬ãŒæ¡ä»¶ã»ããŒã¯ã³èšèšã»ã¢ãã«éžæã»ã³ã¹ãå¶åŸ¡ã瀟å
å
±éãªããžããªã® reusable workflow ã«éçŽããå©çšåŽã«ã¯åŒã³åºãã®æ°è¡ã ããçœ®ãæ§æã«ããŸããã # å©çšãªããžããªåŽã¯ããã眮ãã ã jobs : claude : uses : my-org/claude-workflows/.github/workflows/claude.yml@main secrets : inherit ã·ã§ãŒãã«ããã®äžèº«ã¯ Claude Code ã® Skill ãšããŠãããã«å¥ã®å
±æãªããžããªïŒplugin marketplaceïŒã«çœ®ããŠããŸããæå
ã® Claude Code ãš GitHub Actions ã§åã Skill è³ç£ãå
±æããããã§ãããŒã«ã«ã§è²ãŠãã¯ãŒã¯ãããŒããã®ãŸãŸ @claude ã¡ã³ã·ã§ã³ã§ã䜿ããŸãã äºäŸ 4: 宿ã¡ã³ããã³ã¹ãèªç¶èšèªã§æžã (GitHub Agentic Workflows) gh-aw ã¯ãã¯ãŒã¯ãããŒããYAML frontmatter + èªç¶èšèªããã³ãããã® Markdown ãã¡ã€ã«ãšããŠæžãã gh aw compile ã§å®è¡å¯èœãªã¯ãŒã¯ãããŒïŒ .lock.yml ïŒã«ã³ã³ãã€ã«ãã gh CLI ã®æ¡åŒµæ©èœã§ãã --- on : schedule : weekly on sunday around 20:00 # fuzzy schedule workflow_dispatch : permissions : contents : read engine : id : claude max-turns : 50 timeout-minutes : 30 safe-outputs : create-pull-request : title-prefix : '[main] ' draft : true --- # Docs Drift Audit You are auditing this repository's developer documentation for drift against the actual code, and fixing what has drifted. ... äºäŸ 1ã3 ã AI ã®å€å®ãå¿çãèªåã®ã¯ãŒã¯ãããŒã«çµã¿èŸŒãæ§æã ã£ãã®ã«å¯Ÿããgh-aw ã¯ã¹ã±ãžã¥ãŒã«ã§èªåŸçã«åãããªããžããªã調ã¹ãŠææç©ïŒPR ãªã©ïŒãŸã§äœããšãŒãžã§ã³ãã§ãã ãã®åãå®å
šè£
çœ®ãæ çµã¿åŽã«åŒ·ãçµã¿èŸŒãŸããŠããŠããšãŒãžã§ã³ãæ¬äœã¯èªã¿åãå°çšã®ããŒã¯ã³ã§å®è¡ãããæžã蟌ã¿ã¯ frontmatter ã® safe-outputs ã§å®£èšãããã®ããã§ããŸããã å€éšéä¿¡ããã¡ã€ã¢ãŠã©ãŒã«ã³ã³ããã§å¶éããã weekly on sunday around 20:00 ã®ãããªãããŸããªæå»æå®ã¯ã³ã³ãã€ã©ãå
·äœçãªæå»ã«è§£æ±ºããŠã倿°ã®ãªããžããªã§ cron ãåæå»ã«éäžããã®ãé¿ããŸããçŸåš 2 æ¬ã鱿¬¡ã§åããŠããŸãã ããã¥ã¡ã³ããšå®ã³ãŒãã®ä¹é¢ç£æ» (docs-drift-audit) 1 æ¬ç®ã¯ãéçºããã¥ã¡ã³ãïŒ docs/ é
äžã AGENTS.md ã CLAUDE.md ãªã©ïŒãšå®ã³ãŒãã®ä¹é¢ãç£æ»ããã¯ãŒã¯ãããŒã§ããåç
§å
ã®ãã¹ãååšããããèšèŒã³ãã³ãã package.json ã® scripts ãšäžèŽããããfeature flag åãã¯ãŒã¯ãããŒåãå®åšããããèŠçŽã®èšè¿°ãèšå®ãã¡ã€ã«ãšççŸããŠããªããã確èªã§ããä¹é¢ãä¿®æ£ã㊠1 æ¬ã® draft PR ã«ãŸãšããä¹é¢ããªããã°äœãããçµäºããŸãã ããããããã AI ã«ããããã®ã¯ãããã¥ã¡ã³ãã人éåãã§ãããšåæã« AI èªååã®å
¥åã§ãããããã§ããäºäŸ 1 ã®åé¡åšããã³ããããäºäŸ 3 ã® @claude ãåç
§ããéçºã¬ã€ããã鮮床ãèœã¡ãã°ãã®ãŸãŸèªååå
šäœã®ç²ŸåºŠå£åã«ã€ãªãããŸãã äžæ¹ã§ã³ãŒãåŽã®å€åã¯éããæåã§ã®è¿œåŸã¯çŸå®çã«æŒããŸãã鱿¬¡ã®ç£æ»ã§ãææã®å§æ¥åã«ä¿®æ£ PR ãçšæãããŠããç¶æ
ãäœããŸããã ããã³ããã«ã¯ãäœãçŽããªããããåãåéã§æžããŠããŸããæå³çã«å°æ¥ã®å§¿ãæžããŠããããã¥ã¡ã³ãã¯çŽããªãããªããžããªå€ãžã®åç
§ã¯æ€èšŒã§ããªãã®ã§è§Šããªããæäœã®å¥œã¿ã¯çŽããªãããããŠç¢ºä¿¡ã®æãŠãªãä¿®æ£ã¯ PR ããå€ãã®ã§ã¯ãªããPR æ¬æã®ãèŠå€æãã»ã¯ã·ã§ã³ã§ææ§ããšã¬ãã¥ãŒæã®ç¢ºèªç¹ã説æãããŸãã æéåã feature flag ã®æé€ (feature-flag-cleanup) MiiTel Phone ã§ã¯ãæ°æ©èœãé話ãŸããã®ãããªå£ãããšãã®åœ±é¿ã倧ãã倿Žã feature flag ã§å²ããOFF ã®ãŸãŸ main ã«ããŒãžããããã§ãQA ã瀟å
ããã³ãã§ã®å
è¡å©çšãçµãŠããå
šç°å¢ã§æå¹åããããšããããŸããåé¡ãèµ·ãããšãããã³ãŒããå·»ãæ»ã代ããã«ãã©ã°ã OFF ã«æ»ãã ãã§åŒãè¿ããŸãã flag ã¯äœ¿ãæšãŠã§ãå®å®ããã flag ãšäžèŠã«ãªã£ãæ§ã³ãŒããåé€ããæ±ºãŸãã§ãæŸçœ®ãããšèª°ãè§Šããªãè¬ã®ãã©ã°ãè² åµãšããŠæ®ããããåãã©ã°ã«å逿éãèšå®ããŠããŸãã æéåããã©ã°ã Slack ã«éç¥ã㊠CI ã fail ãããã¯ãŒã¯ãããŒã¯ãã£ãã®ã§ãããéç¥ãããŠãæé€ã® PR ãäœãäœæ¥ãæ®ããã察å¿ãæ»ããã¡ã§ãäžæã¯ 15 ä»¶ã忥ã«å€±å¹ãè¿ããç¶æ³ã«ãªã£ãŠããŸããã ããã§éç¥ã®äžæ©å
ãåé€ PR ã®äœæãŸã§ãèªååããŸããã察象ã¯ãé
åžèšå®ãå
šç°å¢ã§æå¹åæžã¿ã§ããã€æéåããã®ãã©ã°ã ãã§ããæ¡ä»¶ä»ãé
åžäžã®ãã©ã°ã®åé€ã¯ãªãªãŒã¹å€æãã®ãã®ãªã®ã§ãAI ã«ã¯è§Šããã人éã«æ®ããŸãã ãã©ã°ã®åé€ã¯å®çŸ©ã 1 è¡æ¶ããŠçµããã§ã¯ãããŸãããã¬ãŒãã§åå²ããŠããã³ãŒãã®ç¡æ¡ä»¶åã«å ããããã«ãã£ãŠæ»ãã ã³ãŒãã®é£éçãªåé€ãŸã§ãã»ããã§ãããã®äœæ¥ãã¿ãŒã³ããã®ãŸãŸããã³ããã«èœãšã蟌ã¿ãæåŸã« grep ã§ãã©ã°åã®æ®åãŒããæ€èšŒãããŠããŸãã åŠçããªãã£ãæéåããã©ã°ããçç±ã€ãã§å®è¡ãã°ã«æ®ãããŠããŸããèªååããäœããããªãã£ããããé ããšãã«ããŒãããŠããããã«èŠããŠæŒããé åãã§ããããã§ãã claude-code-action ãš gh-aw ã®äœ¿ãåã ã©ã¡ãã GitHub Actions äžã§ Claude ãåããä»çµã¿ã§ãã©ã¡ãã§ãå®è£
ã§ããä»äºã¯å€ããããŸãããã ã察çãªéžæè¢ã§ã¯ãããŸããã gh-aw ã¯å®å
šè£
眮ãçµã¿èŸŒãŸããå°çšããŒã«ã§ããMarkdown ãæžãã ãã§åã代ããã«æ ãæ±ºãŸã£ãŠããŠãå¯äœçšã¯ safe-outputs ã§å®£èšã§ãããã®ã«éãããŸããå€éšãµãŒãã¹ãžã®èµ·ç¥šã®ãããªèªåœã«ãªãå¯äœçšããAI ã®åºåãèªåã®ã³ãŒãã§æ€èšŒã»åå²ããŠããå®è¡ããæ§æã¯çµãããã€ãã³ãã«åå¿ãã察話çãªçšéãäžåŸæã§ãã claude-code-action ã¯èªåã®ã¯ãŒã¯ãããŒã« AI ã¹ããããåã蟌ãéšåãªã®ã§ãããªã¬ãŒãåŸæ®µã®åŠçãå¯äœçšãèªç±ã«èšèšã§ãã代ããã«ãæš©éã®æå°åã»åºåã®æ€èšŒã»ãã«ã¹ã€ããã¯ãã¹ãŠèªåã§çšæããããšã«ãªããŸãã ã¿ã¹ã¯ã gh-aw ã®æ ã«åãŸããªã gh-aw ã®ã»ããå°ãªãèšè¿°ã§å®å
šã«æžã¿ãã¯ã¿åºããªã claude-code-action ã§èªåã§èšèšããããšãã䜿ãåãã§ãã ãããã« 4 ã€ã®äºäŸã¯å¥ã
ã®ããŒã«ã«èŠããŸããããã£ãŠããããšã¯ 1 ã€ã§ãã倿ã®åãæ±ºãŸã£ãŠããäœæ¥ã AI ã«å¯ãã人éã®ã¬ãã¥ãŒãæ¬è³ªçãªå€æŽã«åé
åããããããŠãããå®å
šã«æç«ãããŠããã®ã¯ãã¢ãã«ã®è³¢ãããããå€å®ãšå®è¡ã®åé¢ã»äººéã®æçµå€æã»ãã«ã¹ã€ãããšãã£ã CI åŽã®èšèšã§ããã ãã®èšäºããCI ãš AI ã®é£æºãèšèšããéã®åèã«ãªãã°å¹žãã§ãã åèæç® Agentic Code Review - Addy Osmani äžèŠãªã¬ãã¥ãŒãAIã«ãŸãããŠAIã³ãŒãã£ã³ã°ã®ç°å¢æ¹åãå éãã - Findy Tech Blog Kent BeckãTidy First?: A Personal Exercise in Empirical Software Designã anthropics/claude-code-action GitHub Agentic Workflows (gh-aw) Evergreen - GitHub Next
ã¯ããã« # Deno 2.9 ãªãªãŒã¹ããã§ãšãããããŸãã Deno 2.9 | Deno Electron 倧奜ããªèªåãšããŠãæ°ã«ãªãã®ã¯ãã¯ã Deno Desktop ã§ãã Tauri ãšåæ§ WebView ãããã¯ãšã³ãã«ããæ§æãš Electron ãšåæ§ Chromium ããŒã¹ã®æ§æãéžã¹ããšã®ããšã§ãããã¯è©ŠããããªããšæããŸããã å
¬åŒããã¥ã¡ã³ãã¯ä»¥äžã«ãããŸãã https://docs.deno.com/runtime/desktop/ --> Caution Deno ããã°ã«ã¯ä»¥äžã®ããã«æžãããŠããã2.9 æç¹ã§ã¯ãã¹ã¯ãããæ©èœã¯å®éšç段éã§ãã deno desktop is experimental in 2.9. The surface described here is stabilizing and some platform features are still landing. 䜿ã£ãŠã¿ã # ãŸã㯠2.9 ã«ã¢ããã°ã¬ãŒãããŠãããŸã [1] ã deno upgrade main.ts ã« Deno.serve ã䜿ã£ãŠæ®éã«ãµãŒããŒããã°ã©ã ãæžããŸãã main.ts Deno.serve(() => new Response( "<!DOCTYPE html><h1>Hello from Deno desktop </h1>", { headers: { "content-type": "text/html" } }, ) ); åããã£ã¬ã¯ããªã§ deno desktop main.ts ãå®è¡ããŸãã $ deno desktop main.ts â deno desktop is experimental and subject to change Check main.ts Compile main.ts to hello.dylib Embedded Files hello.dylib âââ main.ts (430B) Files: 1.91KB Metadata: 1.38KB Remote modules: 12B Downloading laufey webview backend for aarch64-apple-darwin (v0.4.0) Download laufey-webview-aarch64-apple-darwin.tar.gz 97.44KiB/97.44KiB Codesigning bundle with identity "-" hello.app/Contents/MacOS/laufey_webview: replacing existing signature hello.app/Contents/MacOS/hello.dylib: replacing existing signature Bundle hello.app æåŸã®åºåã§ãã«ãŒãã« hello.app (macOS ã®ã¢ããªå®è¡ãã¡ã€ã«)ãçæãããŠãããèµ·åã§ããŸãïŒWindows ã®å Žåã¯ãhello.exe ãçæãããŸãïŒã Deno ã®ã³ã³ã»ããéãã远å ã®ã¢ãžã¥ãŒã«ãèšå®ãªã(Out of the box)ã§ãã¹ã¯ãããã¢ããªãçæãããŸããã Deno Desktop ã®éçºäœéš # HMR (Hot Module Replacement) ãªãã·ã§ã³ä»ãã§èµ·åããããšã§ãããŒã«ã«ã®éçºãµãŒããç«ã¡äžããã³ãŒã倿Žãæ€ç¥ããŠã¢ããªå
容ãå³ææŽæ°ããŠãããŸãã deno desktop --hmr main.ts â deno desktop is experimental and subject to change Compile main.ts to file:///Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Embedded Files hello.dylib âââ main.ts (422B) Files: 1.9KB Metadata: 1.38KB Remote modules: 12B Running desktop app with HMR (watching /Users/kondoumh/dev/deno-study/desktop/hello) Runtime loaded successfully from: /Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Runtime started [desktop] dylib path: "/Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib" Listening on http://127.0.0.1:52958/ main.ts ã®ã³ãŒããæžãæãããšãä¿ååŸããã«ç»é¢ãžåæ ãããŸãã --> Information Electron ã§ã¯ HMR ã¯æšæºã§ã¯å©çšã§ãããå¥é Forge ãªã©ã§éçºãµãŒããŒãèµ·åããå¿
èŠããããŸãã https://developer.mamezou-tech.com/blogs/2024/01/29/electron-forge-introduction/ UI ã® ããŒã«ã« HTTP ãµãŒãã¹ã«ããå®çŸ # Electron (Forge ãªã©) ã§ã¯ããŒã«ã«ãµãŒããŒã®å©çšã¯éçºæãäžå¿ã§ãé
åžåŸã¯ file:// ã§ã¢ã»ãããèªãæ§æãäžè¬çã§ãã ããã«å¯Ÿã Deno Desktop ã¯ãé
åžåŸã®ãã€ããªã§ãããŒã«ã« HTTP ãµãŒããŒãå
éšèµ·åãã空ãããŒããèªåå²ãåœãŠã㊠UI ãæç»ããŸãããµãŒããŒã¯ããã»ã¹å
ã§éããŠãããå€éšå
¬éã¯ãããŸãããããŒãè¡çªãæèããã«æžãã®ãè¯ãç¹ã§ãã ãã®ãéçºæããã«ãæžã¿ãã€ããªã§ããåã HTTP å®è¡ã¢ãã«ã§ UI ãæäŸãããèšèšã«ããã éçºæãšãããã€æã®æåã«å·®ããªã ã³ã³ãã³ãã¯ãã©ãŠã¶ãšãã¹ã¯ãããã§åãåãããã Next.js ãªã©ã®ãã¬ãŒã ã¯ãŒã¯ããã®ãŸãŸãã¹ã¯ãããã¢ããªã®äžã§åã ãšãã£ãã¡ãªãããåŸãããŸãã https://docs.deno.com/runtime/desktop/serving/ DevTools ã®èµ·å # Electron ã Tauri ãšåæ§ãDevTools ã«ãããããã°ãå¯èœã§ããBrowserWindow ãèµ·åãã openDevtools ã¡ãœãããåŒã¶ã ãã§ãã const win = new Deno.BrowserWindow({ title: "My Deno Desktop App", width: 800, height: 600, }); win.openDevtools(); https://docs.deno.com/runtime/desktop/devtools/ --> Information ããŸã®ãšãããDevTools ã®ãã«ãµããŒãã¯ããã¯ãšã³ãã cef ã«ããŠããæã®ã¿ã§ãã 以äžã®ããã«ãæå®ããŠèµ·åããå¿
èŠããããŸãã deno desktop --hmr --backend=cef main.ts ããã¯ãšã³ããšããã³ããšã³ãã®éä¿¡(Bindings) # Electron ã® IPC é信㯠render.js ãš main.js ã preload.js çµç±ã§ããªããžããå¿
èŠããããããªãé¢åã§ããDeno ãã¹ã¯ãããã§ã¯ BrowserWindow ã«ãã€ã³ããã颿°ã bindings ãšããã°ããŒãã«ãªããžã§ã¯ãã«ããç°¡åã«åŒã³åºãããšãã§ããŸãã Deno ã©ã³ã¿ã€ã ãšã¬ã³ããªã³ã°ããã¯ãšã³ãã¯ã¹ã¬ãããããã»ã¹ãšããŠåäœããåŒã³åºãã¯ããã»ã¹å
ãã£ãã«ãä»ããŠè¡ãããŸãããã®ãµã³ãã«æ§æã§ã¯ãœã±ããããŒã¹ã® IPC ãçŽæ¥æ±ããã«æžããããElectron ã® ipcMain / ipcRendererãTauri ã® invoke ãšæ¯ã¹ãŠèŠéãããæžããã®ãå©ç¹ã§ãã å®éã®ã³ãŒãã§èŠãŠã¿ãŸãããã const win = new Deno.BrowserWindow({ title: "Bindingsã®ãã¹ã", width: 800, height: 600, }); // ========================================== // 1. ããã¯ãšã³ãåŽïŒããã³ãããåŒã°ãã颿°ãç»é² // ========================================== win.bind("getSystemInfo", async (userName) => { console.log(`[DenoåŽ] ããã³ããšã³ãããåŒã°ããŸããïŒ åŒæ°: ${userName}`); // Denoã®æ©èœã䜿ã£ãŠOSã®æ
å ±ãååŸ const denoVersion = Deno.version.deno; const os = Deno.build.os; // å°ãéãåŠçãã·ãã¥ã¬ãŒãïŒ0.5ç§åŸ
ã€ïŒ await new Promise(resolve => setTimeout(resolve, 500)); // ããã³ããšã³ãã«è¿ãããŒã¿ïŒJSONåã§ãããã®ãªãäœã§ãOKïŒ return { message: `ããã«ã¡ã¯ã${userName}ããïŒ`, os: os, denoVersion: denoVersion }; }); // ========================================== // 2. ããã³ããšã³ãåŽïŒç»é¢ã®HTMLãè¿ã // ========================================== Deno.serve(() => { const html = ` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bindings Test</title> </head> <body> <h1>Deno Desktop Bindings</h1> <button id="btn">ã·ã¹ãã æ
å ±ãååŸ</button> <pre id="result">ããã«çµæãåºãŸã</pre> <script> // ãã¿ã³ãæŒãããæã®åŠç document.querySelector('#btn').addEventListener('click', async () => { const resultArea = document.getElementById('result'); resultArea.textContent = "ååŸäž..."; try { // ð¡ bindings ã䜿ã£ãŠããã¯ãšã³ãã®é¢æ°ãåŒã³åºã const data = await bindings.getSystemInfo("kondoumh"); // çµæãç»é¢ã«è¡šç€º resultArea.textContent = JSON.stringify(data, null, 2); } catch (error) { resultArea.textContent = "error: " + error.message; } }); </script> </body> </html> `; return new Response(html, { headers: { "content-type": "text/html" }, }); }); ã¢ããªç»é¢ã§ãã ã·ã¹ãã æ
å ±ãååŸ ãã¿ã³ãã¯ãªãã¯ãããšãã°ããåŒã³åºãäžã«ãªããçµæã衚瀺ãããŸãã çµæã衚瀺ãããç¶æ
ã ã¢ããªãèµ·åããŠããããã¯ãšã³ãã§ã¯æ¬¡ã®ããã«ãã°ãåºãŠããŸãã [DenoåŽ] ããã³ããšã³ãããåŒã°ããŸããïŒ åŒæ°: kondoumh ãããã·ã³ãã«ã§ããOS ã®ãã€ãã£ãæ©èœãš Web UI ãç°¡åã«é£æºã§ããã®ãããã§ããã https://docs.deno.com/runtime/desktop/bindings/ ã¡ãã¥ãŒ ã®å©çš # ã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒã®å®è£
ã BrowserWindow ã® setApplicationMenu ã¡ãœããå
ã§ã¡ãã¥ãŒãªããžã§ã¯ããå®çŸ©ããŠæž¡ããŸãã BrowserWindow ã«ã€ãã³ããªã¹ããŒãç»é²ããŠã¡ãã¥ãŒãã¯ãªãã¯ãããæã®æ¯ãèããå®è£
ããŸãã role ãªã©ã¯ Electron ãšåãã§ããã win.setApplicationMenu([ { submenu: { label: "File", items: [ { item: { label: "New", id: "new", accelerator: "CmdOrCtrl+N", enabled: true, }, }, { item: { label: "OpenâŠ", id: "open", accelerator: "CmdOrCtrl+O", enabled: true, }, }, "separator", { item: { label: "Save", id: "save", accelerator: "CmdOrCtrl+S", enabled: true, }, }, { role: { role: "quit" } }, ], }, }, { submenu: { label: "Edit", items: [ { role: { role: "undo" } }, { role: { role: "redo" } }, "separator", { role: { role: "cut" } }, { role: { role: "copy" } }, { role: { role: "paste" } }, ], }, }, ]); win.addEventListener("menuclick", (e) => { const detail = (e as CustomEvent).detail; switch (detail.id) { case "new": console.log("New clicked"); break; case "open": console.log("Open clicked"); break; case "save": console.log("Save clicked"); break; } }); ã³ã³ããã¹ãã¡ãã¥ãŒã®å®è£
ã Deno.MenuItem ã®é
åãäœæããŠãBrowserWindow ã® showContextMenu ã«åº§æšãšãšãã«æž¡ããŸãã const contextMenu: Deno.MenuItem[] = [ { item: { label: "Copy", id: "copy", enabled: true } }, { item: { label: "Paste", id: "paste", enabled: true } }, "separator", { item: { label: "PropertiesâŠ", id: "props", enabled: true } }, ]; // Trigger from a right-click. The webview may not forward the browser // `contextmenu` event, so handle the secondary mouse button on the window. win.addEventListener("mousedown", (e) => { if (e.button === 2) { win.showContextMenu(e.clientX, e.clientY, contextMenu); } }); win.addEventListener("contextmenuclick", (e) => { if (e.detail.id === "copy") { console.log("Copy clicked"); } if (e.detail.id === "paste") { console.log("Paste clicked"); } if (e.detail.id === "props") { console.log("Properties clicked"); } }); --> Information ããã§ã¯ã¡ãã¥ãŒã®ã¯ãªãã¯ã€ãã³ãã§ãã°ãåºåããŠããŸããããã°èªäœã¯ã¢ããªãèµ·åããŠããã¿ãŒããã«åŽã«åºãŸãã®ã§ã泚æãã ããã https://docs.deno.com/runtime/desktop/menus/ ãã¬ãŒã ã¯ãŒã¯ãå©çšããéçº # Deno.serve() ãå©çšãããµã³ãã«ãèŠãŠããŸããããDeno ãã¹ã¯ãããã§ã¯ã以äžã®ãã¬ãŒã ã¯ãŒã¯ãšãšãã«å©çšå¯èœã§ãããããã®ãããžã§ã¯ãã®ãã£ã¬ã¯ããªã§ deno desktop ãèµ·åãããšããã¬ãŒã ã¯ãŒã¯ãèªåæ€åºããŠã¢ããªãæ§æããŸããå€ãã®ã¢ãã³ãã¬ãŒã ã¯ãŒã¯ããµããŒããããŠããŸãã Next.js Astro Fresh Remix Nuxt SvelteKit SolidStart TanStack Start Vite ããŒã«ã«ã§åããŠãã®ã« SSR ã䜿ããšããã®ããªããšãäžæè°ãªæãã§ãããã¡ãããšåããŠã»ãã¥ã¢ã§ããã°ãšã·ïŒãšããæãã§ããããã https://docs.deno.com/examples/next_tutorial/ Next.js ã®ã¢ããªãäœæããŸãã deno run -A npm:create-next-app@latest äœæãããããžã§ã¯ããã£ã¬ã¯ããªãžç§»åããŠå®è¡ããŸãã cd <project-dir> deno desktop -A Next.js ã®ã¢ããªããå€éšãµãŒããŒãªãã§ãŸãã£ãšãã¹ã¯ãããå
ã§åããŠãã®ã¯äžæè°ãªæãã§ãã https://docs.deno.com/runtime/desktop/frameworks/ ããã¯ãšã³ãã®éžæã«ã€ã㊠# ãã¹ã¯ãããã¢ããªã¯é
åžãããã€ããªã®ãµã€ãºãéèŠã§ããå°ããã«è¶ããããšã¯ãããŸããã Electron 㯠Chromium ãå
å
ãããããã€ã³ã¹ããŒã«ããããã€ããªãµã€ãºã¯300MBãããã®å€§ããã«ãªã£ããããŸãã Deno Desktop ã®å ŽåãOS ã«ããªã€ã³ã¹ããŒã«ãããŠãã WebView ã䜿ãã°70MBçšåºŠã§ããCEF(Chromium) ã ãšãã¯ã300MBçšåºŠã«ãªããŸãã OS äŸåã® WebView ã ãšãWindows ãš Mac ã§åŸ®åŠã« CSS ã JS ã®æåãå€ããã¯ãã¹ãã©ãŠã¶åé¡ãçºçããããããã®ããã®å¯Ÿå¿ããã¹ããå¿
èŠã«ãªããŸããæ©èœãå°ãªããã¡ã¯ WebView ã§ããããããããŸããããæ©èœãå¢ããŠãããšãã¹ãã®æéãäœåã«ããªã£ãŠãããŸãã Deno Desktop ã®å Žåãæåã¯è»œé㪠WebView ã§ã¹ã¿ãŒãããã¯ãã¹ãã©ãŠã¶ãéè·ã«ãªã£ãŠããããã¡ãã£ãšé
åžãµã€ãºã¯å€§ãããªããã©ãCEF ã«ã¹ã€ããã§ããã®ãããããªãšæããŸãã https://docs.deno.com/runtime/desktop/backends/ --> Information Tauri ã ãšãã®èŸºãServo ããŒã¹ã®èªå WebView ãããžã§ã¯ã Verso åŸ
ã¡ã§ãããDeno ã¯æ¢åã® Chromium ãéžæå¯èœã«ããŠããããããçŸæç¹ã§ã®å²ãåããæããããŸããã Electron ãšã®æ¯èŒ # æ¢å Web ã¢ããªããã¹ã¯ãããåããããŠãŒã¹ã±ãŒã¹ã§ã¯ãDeno Desktop ã¯ããªãæåã§ãã äžæ¹ã§ãElectron ã® WebContentsView ã®ãããªé«åºŠãªãã«ããã¥ãŒæ§æãåæã«ããŠããå Žåã¯ãçŸæç¹ã§ã¯ Electron ã®ã»ããé©ããŠããŸããããšãã° VS Code ã Figma ã®ããã«ãè€æ°ãã¥ãŒã现ããå¶åŸ¡ããã¿ã€ãã®ã¢ããªã§ãã ãã£ããæŽçãããšæ¬¡ã®ãããªæè§Šã§ãã åäžãŠã£ã³ããŠäžå¿ + æ¢å Web è³ç£æŽ»çš: Deno Desktop ã¯ããªãè¯ã è€éãªãŠã£ã³ããŠ/ãã¥ãŒç®¡ç: Electron ãäŸç¶åŒ·ã --> Information ãã«ããã¥ãŒæ§æã®å¯Ÿå¿ã®åŒ±ã㯠Tauri ãåæ§ã§ãã https://developer.mamezou-tech.com/blogs/2025/12/01/porting-an-electron-app-to-tauri2/ Electron ã® WebContensView æ§æã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã /blogs/2024/08/28/electron-webcontentsview-app-structure/ https://docs.deno.com/runtime/desktop/comparison/ ãããã« # 以äžãDeno Desktop æ©èœãäžéã詊ããŸããã Out of the box ã§ãããŸã§ãã¹ã¯ãããéçºäœéšãæŽã£ãŠããã®ã¯ççŽã«é©ãã§ããã¿ã¹ã¯ãã¬ã€ãã¡ãã¥ãŒãBindings ãªã©ãã¢ããªããããåºãããã® API ãæåããæã£ãŠããã®ã奜å°è±¡ã§ããã Tauri ãšéã£ãŠã¢ããªåŽããã¹ãŠ TypeScript ã§æžãããããæ¢å Web ã¢ããªãããŒã¹ã«ãã¡ãã¥ãŒãã¿ã¹ã¯ãã¬ã€ã远å ããOS æ©èœãšé£æºãããçšéã§ã¯ããªãçžæ§ããããšæããŸããæå°æ§æãªãããã¹ã¯ãããã¢ããªåèªäœã¯1æéãããããªãã¯ãã§ãã --> Information Tauri ã JS ã® API ãçãããŠãRust ç¥ããªãå¢ãåã蟌ãããšããŠã¯ããŸãã Deno ã®ãã©ãŒæ©èœã«ãªãå¯èœæ§ããããŸãããexperimental ããå®å®çãžåããŠãä»åŸã®çæããšãŠã楜ãã¿ãªæ©èœã§ãã 2026幎7æ6æ¥çŸåšã®ææ°ã¯ 2.9.1 ã§ãã â©ïž
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã









