with one click
commit-push-pr
Commit, push, and create or update a PR
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Commit, push, and create or update a PR
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
GitHub PRã®ã¬ãã¥ãŒã³ã¡ã³ãã®ãã¡ãHideã»è§£æ±ºæžã¿ã§ãªããã®ã ããæœåºããŠå¯Ÿå¿ããã
GitHub Actions ã® CI 倱æãã倱æãžã§ãã®ç¹å® â ãã°ããã®åå æœåº â åå åé¡ â ããŒã«ã«åçŸ â ä¿®æ£ â æ€èšŒãŸã§äœç³»çã«é²ããã¹ãã«ãç¹ã«ã倱æãã°ã®ãã€ãºã«åãããŠåå ãèŠããªããšããç°å¢äŸåã§ãã¬ãŒããŒã«èœã¡ãŠãããšãã«åœ¹ç«ã€ãä¿®æ£ã«äººã®å€æãå¿ èŠãªå Žåã¯ã察話ã¢ãŒãã§ã¯ç¢ºèªããŠäžæãã--non-interactive æå®æã¯PRã«ã³ã¡ã³ããæçš¿ããŠäžæããã
`bundle exec erblint app` ã®æ¢åéåããã¡ã€ã«åäœã§ç¡å¹åãã todo ãã¡ã€ã«çŸ€ ïŒ`.erb_lint_todo.yml` / `.erb-lint-rubocop-todo.yml`ïŒãçæã»åæåããæé ãæåèµ·åå°çš ïŒ`/erblint-todo-init`ïŒãtodo ãäœãçŽããããšããªã©ãäžåæ§ã®ã»ããã¢ããäœæ¥ã§ã®ã¿äœ¿ãã rubocop åäœã»haml-lintã»herb-lint ã®éçšã«ã¯äœ¿ããªãã
ãã©ã³ã¢ãŒãã§äœæãããã©ã³ãã¡ã€ã«ïŒMarkdownïŒã®å å®¹ã«æ²¿ã£ãŠå®è£ ãè¡ããå®è£ ãã§ãŒãºã軜éãªsonnetã¢ãã«ã§å®è¡ããã³ã¹ãã»é床ãæé©åãããåŒæ°ã§ãã©ã³ãã¡ã€ã«ã®ãã¹ãæå®ã§ãããçç¥æã¯çŽè¿ã®ã»ãã·ã§ã³ãã°ãã察象ãã©ã³ãèªåç¹å®ããŠãŠãŒã¶ãŒã«ç¢ºèªãããã³ãããã»pushã»PRäœæã¯ããã©ã³ã«æèšãããŠããå Žåã®ã¿å®æœããã
APM ããã±ãŒãžç±æ¥ã«ãŒã«ïŒ.claude/rules/*.mdïŒãšéè€ãããããžã§ã¯ãåºæããŒã«ã«ã«ãŒã« ïŒ.apm/instructions/*.local.instructions.mdïŒãæ€åºããããŒã«ã«åŽãåé€ã»çž®å°ãããæªç®¡çã«ãŒã«ã® æ°èŠç§»è¡ã¯è¡ããªãïŒãã㯠migrate-rules-to-apm ã®åœ¹å²ïŒãæåå®è¡å°çšïŒèªåããªã¬ãŒããªãïŒã
APMæªç®¡çã® .claude/rules ã«ãŒã«ïŒæåé 眮ã»ã¬ã¬ã·ãŒãª local/ ãµããã£ã¬ã¯ããªé 眮ïŒããã³ ã«ãŒãã® CLAUDE.md ã .apm/instructions/*.local.instructions.md ã«äžæ¬ç§»è¡ããã¹ãã«ã@åç §ã¯ å±éããŠæ¬æã«åã蟌ã¿ãåç §å ãã¡ã€ã«ã¯ä»ããã®åç §ããªããã°åé€ãããæåå®è¡å°çšïŒèªåããªã¬ãŒããªãïŒã
| name | commit-push-pr |
| description | Commit, push, and create or update a PR |
| license | MIT |
| allowed-tools | Bash(git checkout -b:*), Bash(git add:*), Bash(git status:*), Bash(git branch:*), Bash(git config:*), Bash(git push:*), Bash(git commit:*), Bash(git log:*), Bash(git diff:*), Bash(gh pr create:*), Bash(gh pr list:*), Bash(gh pr edit:*), Bash(gh repo view:*), Skill(commit) |
| model | sonnet |
git statusgit branch --show-currentb=$(git branch --show-current); gh=$(git config branch."$b".github-pr-base-branch 2>/dev/null); gh=${gh##*#}; vsc=$(git config branch."$b".vscode-merge-base 2>/dev/null); vsc=${vsc#origin/}; base=${gh:-$vsc}; [ -n "$base" ] && echo "$base" || (gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')b=$(git branch --show-current); gh=$(git config branch."$b".github-pr-base-branch 2>/dev/null); gh=${gh##*#}; vsc=$(git config branch."$b".vscode-merge-base 2>/dev/null); vsc=${vsc#origin/}; base=${gh:-$vsc}; [ -z "$base" ] && base=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'); (git log origin/"$base"..HEAD --oneline 2>/dev/null || git log "$base"..HEAD --oneline 2>/dev/null) | sed 's/^/ /'; echo "(âããã¯èµ·åæç¹ã®ã¹ãããã·ã§ãããæé 2ã§ /commit ãäœãæ°èŠã³ãããã¯ãŸã å«ãŸããªã)"b=$(git branch --show-current); gh pr list --state open --head "$b" --json number,url,title,body --jq 'if length>0 then .[0] | "#\(.number) \(.url)\nTITLE: \(.title)\nBODY:\n\(.body)" else "(ãªã â æ°èŠäœæãã)" end' 2>/dev/null || echo "(ãªã â æ°èŠäœæãã)"b=$(git branch --show-current); n=$(gh pr list --state open --head "$b" --json number --jq '.[0].number' 2>/dev/null); if [ -z "$n" ]; then echo "(æ¢åPRãªã â ãã§ãã¯äžèŠ)"; else first=$(gh pr view "$n" --json commits --jq '.commits[0].oid' 2>/dev/null); if [ -z "$first" ]; then echo "(ã³ãããæ
å ±ååŸå€±æ)"; elif git cat-file -e "$first" 2>/dev/null; then echo "OK: PR #$n ã®å
é ã³ããã($first)ã¯ããŒã«ã«å±¥æŽã«ååšãã â åäžãã©ã³ãã®ç¶ã"; else echo "èŠå: PR #$n ã®å
é ã³ããã($first)ãããŒã«ã«å±¥æŽã«ååšããªã â ãã©ã³ãåãåãã ãã®å¥ä»¶PRã®å¯èœæ§ãé«ãã宿ã«äžæžãæŽæ°ããªã"; fi; fiäžèšã®å€æŽå 容ã«åºã¥ããŠ:
ããã©ã«ããã©ã³ãã«ããå Žåã¯æ°ãããã©ã³ããäœæããïŒãã©ã³ãåã¯å€æŽå
容ããçŽæçã«ä»ãããäŸ: feat/add-login-pageãfix/null-pointer-errorïŒ
æªã³ãããã®å€æŽãããå Žåã¯ã/commit ã¹ãã«ïŒSkill ããŒã«ïŒãåŒã³åºããŠã³ããããäœæãããã³ãããã¡ãã»ãŒãžã®åœ¢åŒã»ç²åºŠåå²ã»body ã®ã«ãŒã«ã¯ commit ã¹ãã«ã«å§ãããæªpushã³ãããã®ã¿ã§æªã³ããã倿Žããªãå Žåã¯ãã®æé ãã¹ããããã
éèŠ: /commit ã¯ãã³ãããã ãããæ
åœããç¬ç«ããã¹ãã«ãªã®ã§ãåŒã³åºããè¿ã£ãŠããæç¹ã§ã¯ãã³ãããå®äºããšããäžåºåãã«èŠãããã ãããã¯ãã®ã¿ã¹ã¯å
šäœã®äžéå°ç¹ã«éããªãã/commit ããå¶åŸ¡ãæ»ã£ãããããã§æ¢ãŸããå¿
ãæé 3ïŒpushïŒä»¥éãžç¶ãããã³ãããã ãããŠå®äºã¬ããŒããåºããŠçµäºããã®ã¯èª€ãã§ãããããã®ã¹ãã«ã§æãèµ·ãããã倱æããã³ããããçµãã£ããã¯ãã¿ã¹ã¯ãçµãã£ããã§ã¯ãªãã
ãã©ã³ããoriginã«ããã·ã¥ãã
ãã«ãªã¯ãšã¹ãã®ã¿ã€ãã«ã𿬿ãçšæããäžèš "æ¢åPR" ã®æç¡ã«å¿ããŠæ°èŠäœæãŸãã¯æŽæ°ããã
æ¢åPRã®æç¡ã»åäžæ§ã®å€å®ã¯ãContext ã® "æ¢åPR" ããã³ "æ¢åPRã®åäžæ§ãã§ãã¯" ã®å€ã®ã¿ãæ£ãšããã gh pr viewïŒåŒæ°ãªãïŒã gh pr listïŒ--state open ãä»ããªã圢ïŒãªã©ã§æ¢åPRãç¬èªã«æ¢ãçŽããŠã¯ãããªããããã㯠close/merge æžã¿ã®PRãŸã§ã«ã¬ã³ããã©ã³ããã解決ããŠããŸãããã©ã³ãåã䜿ãåãããšãã«ç¡é¢ä¿ãªéå»ã®PRã誀ã£ãŠæŽãåå ã«ãªãïŒå®éã«ãã®èª€ãã§ããŒãžæžã¿PRã®ã¿ã€ãã«/æ¬æãäžæžãããäºæ
ãèµ·ããïŒãæ¢åPRã®çªå·ã»URLã»çŸè¡ã¿ã€ãã«/æ¬æãå¿
èŠãªå ŽåããContext ã«åºãŠããå€ããã®ãŸãŸäœ¿ãã
ãŸããPRã«å«ããã³ãããéåãš diff ããã®æç¹ã§ååŸãçŽãã<base> ã Context ã® "PR base branch" ã®å€ãšããŠ:
git log origin/<base>..HEAD --oneline 2>/dev/null || git log <base>..HEAD --onelinegit diff origin/<base>..HEAD 2>/dev/null || git diff <base>..HEADãªãåãçŽãã®ã: Context ã® "ã³ãããéå (base..HEAD)" ã git status ã¯ã¹ãã«èµ·åæç¹ã®ã¹ãããã·ã§ããã«éãããæé 2ã§ /commit ãæ°ããäœã£ãã³ãããã¯ãŸã å«ãŸããŠããªããPRã®ã¿ã€ãã«/æ¬æã¯ããã®PRã base ã«å¯ŸããŠå ãã倿Žã®å
šäœãã衚ããã®ãªã®ã§ã/commit åŸã®ææ°ç¶æ
ãåæ ãã base..HEAD ãå¿
ãããã§åãçŽãå¿
èŠãããã
ã¿ã€ãã«/æ¬æã®å¯äžã®å
¥åã¯ãããã§ååŸãã base..HEAD ã®ã³ãããéåãš diff ã§ããã Context ã® git statusïŒïŒæåŸã®æªã³ããã倿Žã ãïŒããæ¢åPRã®çŸè¡æ¬æãã¿ã€ãã«/æ¬æã®å
¥åã«ããŠã¯ãããªãããããã¯å
šäœåã®äžéšã§ãããªããããã«åŒã£åŒµããããšå
è¡ã³ãããã®å
å®¹ãæŒããã
ã¿ã€ãã«/æ¬æã®çæã«ãŒã«ïŒæ°èŠã»æŽæ°ã§å ±éïŒ:
type: subjectïŒã«ããã/commit ã¹ãã«ãåŒã³åºããå Žåã¯ããã®ã¹ãã«ãçæããã³ãããã¡ãã»ãŒãžã®èšèªãåç
§ããïŒãæ¢åPRããªãå ŽåïŒ"æ¢åPR" ãããªããïŒ: gh pr create ã§æ°èŠäœæããã--base ã«ã¯äžèš "PR base branch" ã®å€ã䜿ããããã¯èšé²æžã¿ã®åå²å
ãå°éãããããããã©ã«ããã©ã³ããšã¯éããªãïŒstacked PR ã«å¯Ÿå¿ããããïŒã
æ¢åPRãããå ŽåïŒ"æ¢åPR" ã«çªå·ã»URLãåºãŠããïŒ: ãŸã Context ã®ãæ¢åPRã®åäžæ§ãã§ãã¯ãã®çµæã確èªããã
gh pr edit ã«ããã¿ã€ãã«/æ¬æã®äžæžãã¯è¡ããªããæé 3ã®pushã¯ãã®æžå¿µãšç¡é¢ä¿ãªã®ã§éåžžéãé²ããŠãããpushåŸããŠãŒã¶ãŒã«ç¶æ³ïŒPRçªå·ã»URLã»çŸåšã®ã¿ã€ãã«ïŒãæç€ºãããpush ã¯å®äºããŸããããPR #<çªå·> ã¯å¥ä»¶ã®å¯èœæ§ãããããæŽæ°ããŠããŸãããæ°èŠPRãäœæããŸããããããšãä»ã®å¯Ÿå¿ãå¿
èŠã§ããããšç¢ºèªãåã£ãŠããæ¬¡ã«é²ãïŒãã®æç€ºã¯æé 4å®äºåã®ç¢ºèªã§ãããå®äºã¬ããŒãã§ã¯ãªãïŒãåçæããã¿ã€ãã«/æ¬æãã"æ¢åPR" ã«åºãŠããçŸåšã® TITLE/BODY ãšæ¯èŒããããã®ãåçæãã®å
¥åãäžèšã®ãšãã base..HEAD ã®å
šã³ãããéåã§ãã£ãŠãæ¢åPRã®çŸè¡æ¬æã§ã¯ãªãïŒæ¢åæ¬æã«ããŒãžããã®ã§ã¯ãªããå
šã³ããããããŒãããŒã¹ã§äœãçŽãïŒã
gh pr edit ãå®è¡ããåã«ãæŽæ°ããã¿ã€ãã«/æ¬æããŠãŒã¶ãŒã«æç€ºããŠæ¿èªãåãã æ¿èªãåŸãŠãããå·®ããããã£ãŒã«ãã®ã¿ gh pr edit --title <...> / --body <...> ã§æŽæ°ããïŒã¿ã€ãã«ã ãéãå Žå㯠--title ã®ã¿ãæ¬æã ãéãå Žå㯠--body ã®ã¿ïŒãæ¿èªãããªããã°æŽæ°ããªããgit status ã«ã¯æåŸã®å€æŽããæ ããªããããã«åŒã£åŒµãããŠãæåŸã®ã³ãããã ããã®ã¿ã€ãã«/æ¬æãäœã£ãŠããŸãã®ãå
žåçãªå€±æïŒPRã®å
è¡ã³ãããå
å®¹ãæ¬æããäžžããšæ¶ããïŒãåçæã®å
¥åã¯å¿
ã base..HEAD ã®å
šã³ãããéåã§ãã£ãŠãContext ã® status ã§ãæ¢åPRæ¬æã§ããªããåã¹ããããé çªã«å®è¡ããŠãã ããã åã¹ãããã®èŠåŠãäºåã«å€æããäžã§èšç»ããéäžã§ç¢ºèªãæãŸãã«é²ããŸããæé 2ãé€ã git/gh ããŒã«åŒã³åºãã¯å¯èœãªéããŸãšããŠå®è¡ããŸãããããã®ããŒã«åŒã³åºãïŒ/commit ã¹ãã«åŒã³åºããå«ãïŒä»¥å€ã®ããã¹ããã¡ãã»ãŒãžãéä¿¡ããªãã§ãã ããããã ãäŸå€ãšããŠãæ¢åPRãæŽæ°ããå ŽåïŒæé 4ã® gh pr editïŒã¯ãå®è¡åã«æŽæ°å
容ãæç€ºããŠãŠãŒã¶ãŒã®æ¿èªãåã£ãŠãã ããã pushã»æ°èŠPRäœæïŒgh pr createïŒã¯åŸæ¥éãç¡ç¢ºèªã§é²ããŸãã
éäžã§åæã«æ¢ãŸããªãããšã ãã®ã¹ãã«ã®ç®ç㯠push ãš PR ãŸã§å®éããããšã«ãããç¹ã«ãæé 2ã§ /commit ãåŒã³åºããå Žåããã®å®äºåŸã«å¿
ãæé 3ïŒpushïŒã»æé 4ïŒPRïŒãŸã§ç¶ããã/commit ã®æ»ããçµç¹ãšèª€èªããŠã³ãããã ãã§çµäºããïŒïŒãã³ãããå®äºããŸããããšã ãè¿ããŠã¿ãŒã³ãçµããïŒã®ã¯ããã®ã¹ãã«ã®æå€§ã®å€±æã¢ãŒãã§ãããæç¢ºãªèª€ããå®äºã¬ããŒããåºããŠããã®ã¯ push ãš PR ãŸã§çµããåŸã ãïŒæé 4ã§æ¢åPRæŽæ°ã®æ¿èªåŸ
ã¡ã«å
¥ãå Žåãé€ãïŒã
ãã¹ãŠã® git/gh æäœïŒpushã»PRäœæ/æŽæ°ãå«ãïŒãå®äºããããšãæåŸã«ç°¡æœãªå®äºã¬ããŒãã1åã ãéããŸããã³ãããçŽåŸã®ãã³ãããå®äºããŸãããçãªã¡ãã»ãŒãžã¯å®äºã¬ããŒãã§ã¯ãããŸãããå®äºã¬ããŒã㯠push ãš PR ãŸã§çµããŠåããŠåºãå¯äžã®ã¡ãã»ãŒãžã§ããã³ãããã ãæžãã æ®µéã§ãã®ã¬ããŒãïŒãé¡äŒŒã®å®äºã¡ãã»ãŒãžïŒãéã£ãŠã¿ãŒã³ãçµããŠã¯ãããŸããã
pull/790ïŒbase... ãŸã§ã URL ã®äžéšãšããŠåã蟌ã¿ããªã³ã¯ãå£ããŸããbase ãã©ã³ããªã©ã®è£è¶³æ
å ±ã¯ URL ãšã¯å¥ã®ç®æ¡æžãïŒå¥è¡ïŒã«åããŸãã[text](url) ã§ã©ããããå Žåããããã¹ããš URL ãæ£ããåé¢ããŠãã ããããã©ãŒãããïŒæå°éïŒãbase è¡ã¯ããã©ã«ããã©ã³ããšç°ãªãå Žåã®ã¿åºããŸããã³ããããè€æ°ããå Žåã¯ç®æ¡æžãã§åæããŸããPRè¡ã¯ç¶æ
ã«å¿ããŠåºãåããŸãïŒæ°èŠäœæã»æ¢åæŽæ°ã»æ¢å倿ŽãªãïŒ:
å®äºããŸããã
- ã³ããã:
- <ççž®SHA> <ä»¶å>
- <ççž®SHA> <ä»¶å>
- PR (æ°èŠ): <PR URL>
- base: <base ãã©ã³ã>
PRè¡ã®åºãåã:
- PR (æ°èŠ): <PR URL>- PR (æŽæ°): <PR URL>ïŒå¿
èŠãªãæŽæ°ç®æã1èªæ·»ãã: ã¿ã€ãã«/æ¬æ/äž¡æ¹ïŒ- PR (倿Žãªã): <PR URL>ã³ãããã1ä»¶ã®ã¿ã®å Žåã¯1è¡ã«ãŸãšããŠããïŒ- ã³ããã: <ççž®SHA> <ä»¶å>ïŒã