claude/skills/workflow-create-draft-pr/SKILL.md
ローカルのコミット履歴と差分からDraft PRを作成する。ブランチ未作成・コミット未作成の状態でも、必要に応じてブランチ作成とコミットを行ってからPRを作成する。`.github/` にPRテンプレートがあれば内容を埋めて、なければ作業内容から本文を生成し、`AskUserQuestion`で作成可否を確認してから `gh pr create --draft` を実行する。「PRを出したい」「draft PRを作成」「プルリクを作って」「PR本文を生成」などのリクエストで起動。
npx skillsauth add skanehira/dotfiles workflow-create-draft-prInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ローカルのコミット履歴と差分を元に、適切なPR本文を生成して Draft PR を作成します。
.github/ に Pull Request テンプレートがある場合は内容を埋め、なければ作業内容から本文を生成します。
ブランチが未作成(ベースブランチ上)の場合や、未コミットの変更がある場合も、必要な作業を提案・実行してからPRを作成します。
PR本文は作成前に必ず提示し、AskUserQuestion でユーザーの作成指示を受け取ります。
/workflow-create-draft-pr # デフォルトブランチ基準でDraft PRを作成
/workflow-create-draft-pr --base develop # 指定ブランチ基準でDraft PRを作成
引数: $ARGUMENTS
- --base <branch>: ベースブランチを明示指定
- 空: デフォルトブランチを自動検出
Bashツールで以下を実行:
git rev-parse --git-dir 2>/dev/null
gitリポジトリでない場合は「このディレクトリはgitリポジトリではありません。」と表示して終了。
gh auth status 2>&1
認証されていない場合は「gh auth login で GitHub CLI にログインしてください。」と表示して終了。
git rev-parse --abbrev-ref HEAD # 現在のブランチ名
git status --porcelain # 未コミット/未追跡変更
ここで取得した「現在ブランチ」「未コミット変更の有無」を以降のステップで使用する。 この時点では強制終了しない(ベース上にいても次ステップで処理する)。
優先順位:
--base <branch> 引数で明示指定gh repo view --json defaultBranchRef -q .defaultBranchRef.name でデフォルトブランチ取得git symbolic-ref refs/remotes/origin/HEAD から推測(refs/remotes/origin/<branch> の末尾)AskUserQuestion で確認[1/6] で取得した「現在ブランチ」「未コミット変更」「ベースブランチ」を元に、以下のフローで PR 作成可能な状態に整える。
| 現在ブランチ | 未コミット変更 | 対応 | | ------------ | -------------- | ----------------------------------------------- | | = ベース | あり | 2.1 ブランチ作成 → 2.2 コミット作成 | | = ベース | なし | エラー終了(PR対象の作業がない) | | ≠ ベース | あり | 2.2 コミット作成(ブランチ作成はスキップ) | | ≠ ベース | なし | スキップして [3/6] へ(既存コミットでPR作成) |
git diff および git status の内容から Conventional Commit 形式のプレフィックスと簡潔な英語名を生成する。ユーザー確認は行わず、生成した名前でそのまま作成する。
| 変更内容のヒント | プレフィックス |
| --------------------------------- | -------------- |
| 新規ファイル追加、機能追加 | feat/ |
| 既存ロジックの修正、バグ修正 | fix/ |
| リファクタリング・構造変更のみ | refactor/ |
| ドキュメント更新のみ | docs/ |
| テスト追加・修正のみ | test/ |
| 設定・ビルド・依存更新のみ | chore/ |
例: feat/add-user-validation, fix/handle-empty-input, refactor/extract-auth-module
英語名は変更ファイル名や関数名から kebab-case で30文字以内に整形する。
git switch -c <generated-branch-name>
末尾に短い識別子(-2, -3, ...)を付与して再試行する。3回試して失敗したらエラー表示して終了。
workflow-commit-push スキルに 無条件で委譲 する(ユーザー確認なし)。
push は本スキルの [6/6] でまとめて行うため、--no-push を指定。
Skill({ skill: "workflow-commit-push", args: "--no-push" })
完了後、git status --porcelain で未コミット変更が残っていないことを確認する。
残っている場合は workflow-commit-push が意図的にスキップした可能性があるため、ユーザーに状況を報告して AskUserQuestion で続行/中止を確認。
git log <base>..HEAD --pretty=format:"%h %s"
コミットが0件の場合:
git diff <base>...HEAD --stat
git diff <base>...HEAD
差分が大きい場合(10,000行超など)は、ファイルリストと統計のみで本文を生成する。
git diff <base>...HEAD --name-status の出力を以下に分類:
| ステータス | 意味 |
| ---------- | ---- |
| A | 新規追加 |
| M | 修正 |
| D | 削除 |
| R | リネーム |
Glob ツールで以下を以下の優先順位で検索(大文字小文字を区別しない、最初に見つかったものを採用):
.github/pull_request_template.md.github/PULL_REQUEST_TEMPLATE.md.github/pull_request_template/*.md(複数テンプレート).github/PULL_REQUEST_TEMPLATE/*.md(複数テンプレート)docs/pull_request_template.mdPULL_REQUEST_TEMPLATE.md(リポジトリルート)複数テンプレートディレクトリの場合は、AskUserQuestion で使用するテンプレートを選択させる。
Read ツールで内容を読み込み、以下のルールで埋める:
| 構造 | 処理 |
| -------------------------- | --------------------------------------------------------------------- |
| 見出し (## Summary 等) | コミット履歴と差分から該当する内容を生成 |
| HTMLコメント <!-- ... --> | テンプレート上の指示として読み取り、本文には残さない |
| チェックリスト - [ ] | 作業内容から判断できるものはチェック、判断できないものは - [ ] のまま |
| プレースホルダ <...> | 該当する内容で置換 |
以下の標準構造で本文を生成する:
## Summary
<コミット履歴と差分から要約を1〜3点の箇条書きで>
## Changes
<変更ファイルを分類して列挙>
- 追加: ...
- 修正: ...
- 削除: ...
## Test Plan
- [ ] <作業内容から推測されるテスト項目>
生成した本文に以下のパターンが含まれていないか確認し、見つかったらマスクするか除外:
password, secret, api_key, token の値部分ghp_, gho_, ghs_, sk-, AKIA.env ファイル内容のような KEY=VALUE 形式の値ルール:
feat: ユーザー認証にバリデーションを追加)タイトルは 72 文字以内に収める。
ユーザーに以下の形式で提示する:
==================== Draft PR Preview ====================
Base: <base>
Head: <current-branch>
Title: <生成したタイトル>
Body:
---
<生成した本文(テンプレート埋め or 生成)>
---
==========================================================
AskUserQuestion({
questions: [
{
question: "上記の内容で Draft PR を作成しますか?",
header: "PR作成",
options: [
{
label: "この内容で作成",
description: "提示した内容のまま Draft PR を作成する"
},
{
label: "タイトルを編集",
description: "タイトルだけ修正してから作成"
},
{
label: "本文を編集",
description: "本文を修正してから作成(修正指示を入力)"
},
{
label: "キャンセル",
description: "PR作成を中止"
}
],
multiSelect: false
}
]
})
「タイトルを編集」「本文を編集」選択時:
AskUserQuestion で修正内容を受け取り、再度プレビューを表示して再確認「キャンセル」選択時:
upstream の有無を確認:
git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null
git push -u origin <current-branch> を 無条件で実行(ユーザー確認なし)。
git push -u origin <current-branch>
git status -sb または git rev-list @{u}..HEAD --count が 1 以上 の場合、git push を 無条件で実行。
git push
| エラー内容 | 対応 |
| ---------- | ---- |
| non-fast-forward(リモートが先行) | 状況を表示し、AskUserQuestion で「git pull --rebase 後に再push / 中止」を確認 |
| 認証エラー | gh auth refresh の実行を促して終了 |
| その他 | エラー出力を表示して AskUserQuestion で再実行/中止を確認 |
本文は HEREDOC で渡して改行・特殊文字を保持する:
gh pr create --draft \
--base "<base>" \
--title "<title>" \
--body "$(cat <<'EOF'
<body>
EOF
)"
必須フラグ:
--draft (必須、通常PRにしない)--base (Step 1 で決定したベース)--title, --bodygh pr create の出力(PR URL)をそのまま表示する:
✓ Draft PR を作成しました
URL: https://github.com/<owner>/<repo>/pull/<number>
Base: <base>
Head: <current-branch>
| エラー内容 | 対応 |
| ----------------------------------------- | ------------------------------------------------------------------- |
| a pull request for branch ... already exists | 既存PRの URL を gh pr view --json url -q .url で取得して表示 |
| Resource not accessible by integration | 権限不足。gh auth refresh -s repo の実行を促す |
| その他 | エラー出力を表示し、再実行 / 中止を AskUserQuestion で確認 |
gh pr create には 必ず --draft を付ける。レビュー準備が整ってから手動で Ready for Review に切り替える運用。
--body を引数で直接渡すと、改行やバッククォート、$ 記号が壊れるため、必ず HEREDOC (<<'EOF' ... EOF) で渡す。
シングルクォート 'EOF' を使うことで変数展開を抑止する。
<!-- ... --> 内の指示はテンプレート作者からPR作成者への指示であり、PR本文には残さない。生成時に削除する。
差分や本文に秘密情報が含まれていないか必ずチェックする。検出した場合はマスクする、もしくは作成を中止して報告する。
本スキルは「PR作成までの最低限の準備」を目的とする:
git branch -m で改名すればよい)workflow-commit-push に無条件で委譲する。論理単位での分割や Conventional Commit 形式への整形はそちらに任せるgh pr ready または手動切り替えで対応gh pr edit で対応(本スキルの対象外)gh pr merge で対応(本スキルの対象外)git rebase -i 等で別途対応tools
複数サブエージェントに異なる立場を与えて議論を反復し、相違が収束するまで議題を検証して結論を提示する。設計妥当性検証・実装方針比較・原因分析のセカンドオピニオン・アイデアの壁打ちに使用。「議論したい」「壁打ちしたい」「セカンドオピニオン」「複数視点で検証したい」などで起動。
tools
変更内容を分析し、Conventional Commit形式でコミットする (pushはユーザが手動)
development
React 19 + Vite+ (`vp`) + TypeScript + Tailwind CSS v4 + React Router v7 (HashRouter) でモバイル向け静的SPAデモサイトをTDDで構築し、Cloudflare Workers (Static Assets) へ自動デプロイするまでの標準ワークフローを提供する。テンプレートリポジトリ `skanehira/demo-site-template` を `gh repo create --template` で clone することで scaffold を省略する。`localStorage` でフロントエンドのみ完結する"フロントのみ完結デモ"に特化。デザインコンセプトの確立には `frontend-design` スキルを呼び出して連携する。起動トリガー:「デモサイトを作りたい」「モバイル向け静的デモ」「SPAを作ってCloudflareにデプロイ」「静的プロトタイプを公開」「localStorage でフロントだけ完結」。ユースケース:(1)クライアント提案用のUI/UXたたき台、(2)新機能のプロトタイプ、(3)モバイル向けランディング。ツールチェーンは Vite+ (`vp`) で統合(内部 PM は pnpm)。
content-media
対話的計画コマンド。requirements-analyzing-requirementsとimplementation-planning-tasksスキルを統合実行してDESIGN.mdとTODO.mdを生成