with one click
commit-draft
未コミットのdiffを分析し、Claude Code内で「!」付きで即実行できるgit commit(+push)コマンドを生成する
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
未コミットのdiffを分析し、Claude Code内で「!」付きで即実行できるgit commit(+push)コマンドを生成する
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
Save conversation logs with summary and hard links to raw session logs. Use when the user invokes /save-conversation or asks to save, archive, or persist the current conversation/session log (「会話を保存」「ログを保存」「このセッションを記録して」など). Hard-links the raw jsonl and generates a summary markdown via a bundled script — do not hand-write the conversation log.
PRのレビューコメントを確認し、対応要否を判断して修正・コミット・pushし、返信コメントにコミットハッシュURLを明記するまでを一連で行う。「PRのコメント対応して」「レビューコメント見て対応して」「指摘に返信して」と頼まれたとき、またはPRのレビュー指摘への修正とその返信を求められたときに使用する。
Todoist「claude code」プロジェクトへのタスク登録・更新の手順と、セッション復元情報(cwd / session / resume コマンド)を task description に併設する書式を提供する。計画を Todoist にタスク登録するとき、進捗を反映するとき、後で作業を再開できるようセッション情報を残すときに使用する。
DependabotのPRをレビューし、マージして問題ないかを検証する。「dependabotのPRを見て」「dependabot レビュー」と頼まれたときや、Dependabot PRのマージ可否判断・依存更新の影響調査を求められたときに使用する。
Zennの生成AI関連の新着記事を収集・要約してMarkdown/PDFレポートを生成する。
claude-code-best-practiceリポジトリを最新化し、現在のClaude Code設定(global / project)に対してベストプラクティスに基づく改善提案を行う。引数 global/project でスコープ指定可。
| name | commit-draft |
| description | 未コミットのdiffを分析し、Claude Code内で「!」付きで即実行できるgit commit(+push)コマンドを生成する |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | ["Bash(git -C * status*)","Bash(git -C * diff*)","Bash(git -C * log*)","Bash(git -C * rev-parse*)","Bash(git rev-parse*)","Bash(ls *)","Bash(head*)","Bash(grep*)","Read(/tmp/commit-draft*)","Read(**/lefthook.yml)","Read(**/.husky/*)","Write(/tmp/commit-draft*)"] |
未コミットの変更を分析し、Claude Codeのプロンプトに ! 付きで貼り付けて即実行できるコミットコマンドを出力する。
差分の中身(フルdiff)はこの段階ではまだ読まない。 まず --stat(ファイル一覧+増減行数)までを1回のBashコマンドでまとめて取得する。これがトークン節約と高速化の要 — 往復が減り、巨大ファイルの中身をコンテキストに流し込まずに済む。cd は使わない(Bashツールの不要な権限プロンプトを避けるため)。
ROOT=$(git rev-parse --show-toplevel) && \
git -C "$ROOT" status && \
git -C "$ROOT" diff --stat && \
git -C "$ROOT" diff --cached --stat && \
git -C "$ROOT" log --oneline -5 && \
ls "$ROOT"/lefthook.yml "$ROOT"/.husky/prepare-commit-msg 2>/dev/null
ROOT の値(リポジトリルートの絶対パス)は、出力するシェルスクリプトにも絶対パスとしてハードコードする(後述)。スクリプト内では git rev-parse を実行時に呼ばないgit status に -uall フラグは使わないls で prepare-commit-msg hookの有無だけを安く確認する。ヒットした場合のみ、必要に応じて該当ファイルをReadして内容(プレフィックス自動付与の有無)を確かめる。存在しなければそれ以上読まない--stat の結果を見て、コミットメッセージ作成に内容の理解が必要なファイルだけフル差分を取る。全ファイルのフル差分を無条件に取得しない。
内容を読まずstatだけで判断するもの(フルdiffをスキップ):
*.jsonl などの会話ログ・生成記録、*.lock 等のロックファイル、ビルド生成物、node_modules、巨大バイナリ--stat で数百行を超える大規模差分のファイルこれらはファイル名と増減行数から目的が自明(例: 「会話ログ追加」「依存更新」)なため、中身を読む価値がない。
内容を読むもの: 上記以外の、ソース・ドキュメント・設定の実質的な変更。
フル差分は除外pathspecで取得し、保険でバイト上限を付ける(除外パターンはリポジトリの生成物に応じて調整する):
git -C "$ROOT" diff --cached -- . ':(exclude)*.jsonl' ':(exclude)*.lock' | head -c 20000
git -C "$ROOT" diff -- . ':(exclude)*.jsonl' ':(exclude)*.lock' | head -c 20000
head -c で頭打ちになった(出力が途中で切れた)場合は、残りはstatベースで判断し、メッセージは要約レベルに留める。差分が全てスキップ対象(例: jsonlのみのコミット)なら、フルdiffコマンド自体を省略してstatだけでメッセージを決める。
フル差分を取得したついでに、staged差分に対し秘密情報の混入を安くスキャンする:
git -C "$ROOT" diff --cached | grep -inE 'api[_-]?key|secret|password|passwd|token|BEGIN [A-Z ]*PRIVATE KEY' | head -20
ヒットがあれば commit-draft の出力時にユーザーへ警告する(後述)。ヒットが多数・判断に迷う・コード変更を含む重要コミットの場合に限って、commit-reviewer サブエージェントを起動して第三者レビューを依頼する。日常的なノート・ログ更新では起動しない(毎回サブエージェントを焚くとトークンと時間の無駄になるため)。
差分(必要な範囲)の内容から以下を判断する:
1行目(要約行)は常に必要。本文(3行目以降)を付けるかどうかは変更の性質で判断する。
1行で十分なケース:
未使用のisTargetJobUrl関数を削除複数行にすべきケース:
迷ったら1行でよい。ただし、「要約行を読んだレビュアーが『なぜ?』と思うかどうか」を基準にする。
このセッション内でClaudeが変更に関与した場合、コミットメッセージの末尾に Co-Authored-By トレーラーを追加する。
関与ありと判断するケース:
関与なしと判断するケース:
デフォルトはCo-Authored-By なし。確実にClaudeが変更に関与したと判断できる場合のみ付ける。「このセッションで自分がコードを書いた/編集した記憶があるか?」を基準にする。コミットコマンドの生成だけを頼まれた場合は関与なし。
フォーマット:
トレーラーはコミットメッセージ本文の最後に空行を挟んで配置する。モデル名はセッションで使用中のモデルを記載する(例: Claude Opus 4.8 (1M context), Claude Sonnet 4.6)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude Codeの ! プレフィックスは内部で (eval) を使うため、heredocや複数行の入力は動作しない。また、長い1行コマンドを直接表示すると、ターミナル幅で折り返し+インデントが入りコピペが壊れる。
この問題を回避するため、コマンドをシェルスクリプトに書き出し、短い実行コマンドを提示する方式を取る。
手順:
/tmp/commit-draft.sh を読み込む(存在しなくてもエラーが返るだけでよい。Writeツールは事前にReadが必要なため)。その後Writeツールでシェルスクリプトを書き出す! bash /tmp/commit-draft.sh
cd する — 手順1で取得した絶対パスをハードコードする(git rev-parse を実行時に呼ばない)。スクリプトがどのディレクトリから実行されても、常に正しいリポジトリで動作するようにするためgit add . や git add -A は使わない — 必ずファイル名を個別指定するset -e を付ける — エラー時に即停止するため1行メッセージの例:
#!/bin/bash
set -e
cd "/absolute/path/to/repo-root"
git add file1 file2
git commit -m "要約行"
複数行メッセージの例(heredoc):
#!/bin/bash
set -e
cd "/absolute/path/to/repo-root"
git add file1 file2
git commit -F - <<'EOF'
要約行
本文: なぜこの変更をしたか、補足事項など
EOF
Co-Authored-By付きの例:
#!/bin/bash
set -e
cd "/absolute/path/to/repo-root"
git add file1 file2
git commit -F - <<'EOF'
要約行
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
EOF
複数行 + Co-Authored-By付きの例:
#!/bin/bash
set -e
cd "/absolute/path/to/repo-root"
git add file1 file2
git commit -F - <<'EOF'
要約行
本文: なぜこの変更をしたか、補足事項など
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
EOF
シェルスクリプト内ではheredoc(<<'EOF')が使えるため、git commit -F - でstdinからメッセージを読み取る形式にする。-m 連結より見やすく、改行や空行の制御も自然にできる。1行メッセージの場合のみ -m を使う。
コミット後の !git push 手打ちを不要にするため、リモート(origin)が存在するリポジトリでは、スクリプト末尾に push を既定で含める。
git push -u origin <branch>、設定済みなら git pushgit -C "$ROOT" remote と git -C "$ROOT" rev-parse --abbrev-ref @{upstream} の確認を足すと1往復で判定できる(upstream 未設定はエラーになるだけでよい)lefthook.yml や .husky/prepare-commit-msg 等の設定を確認し、prepare-commit-msg hookがコミットメッセージにプレフィックス(例: feat(TICKET-123): )を自動付与するか調べる。自動付与される場合、スクリプト内のコミットメッセージにはプレフィックスを含めず、本文のみを記述する。
例えば、ブランチ名 feat/TICKET-456_add_feature から hookが feat(TICKET-456): を自動付与する場合:
git commit -m "ユーザー一覧にフィルタ機能を追加"git commit -m "fix(TICKET-456): ユーザー一覧にフィルタ機能を追加" → feat(TICKET-456): fix(TICKET-456): ... と重複する複数コミットに分割する場合は、各コミットを別々のスクリプトファイルとして書き出す(/tmp/commit-draft-1.sh, /tmp/commit-draft-2.sh, ...)。実行コマンドもそれぞれ提示し、1つずつ順番に実行できるようにする。
git status でコミット対象がなければ「未コミットの変更はありません」とだけ伝える。