关于 github
github 是一项指导 Agent 执行 GitHub 协作工作的 skill,涵盖 Issue、分支、提交、PR、合并与 Release 等流程。它强调先读取最新规范,并规定了操作前的检查、安全要求和协作步骤。
主要功能
- 01指导 Issue 与分支工作流
- 02规定提交消息和 PR 格式
- 03提供 Git 操作安全检查
- 04涵盖审查、合并与 Release 流程
- 05说明 Issue 评论写法
适用场景
- 01规划功能开发及缺陷修复流程
- 02检查提交和 PR 是否符合规范
- 03在合并前确认分支与 CI 状态
- 04记录 Issue 进展和待处理事项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ philtzjp/ skills --skill github安装后在 Claude Code 中输入/github确认已加载。
详细介绍
来自项目 READMEgithub
最新の規約を優先する
エージェントのメモリや過去の会話に古い手順が残っていると、同じ誤りを何度も繰り返す。
- スキルは作業を始めるたびに入れ直す。前回読んだ内容やメモリで済ませない。
- メモリや過去の会話の手順がスキルと食い違ったら、スキルに従う。食い違っていたメモリは、どこがどう違うかをユーザーに伝え、更新か削除を提案する。許可なしにメモリを書き換えない。
- スキルの内容をメモリに保存しない。
- 会話が長くなってコンテキストが要約されたら、Git の操作を続ける前にスキルを読み直す。
フロー
パッチバグフィクス以外の実装作業は、この順で進める。
- Issue を起票する。
- Issue 番号を含む専用ブランチを作る。
- 実装する。
- PR を作る。
- ahead / behind とマージ可否を確認する。
mergeラベルを付け、philtz-organizer-bot に squash でマージさせる。
判断に迷う作業はパッチバグフィクスではなく通常フローとして扱う。通常フロー対象の実装を、Issue なし、専用ブランチなし、PR なしで進めない。デフォルトブランチ上で始めない。
会社、チーム、担当領域をまたぐ変更では、影響範囲、検証内容、残リスクを Issue と PR に明記する。
フローを省略できる場合
次をすべて満たすときだけ、パッチバグフィクスとして Issue の起票を省略できる。ブランチと PR は省略できない。デフォルトブランチには直接 push できないため。
- 既存挙動の明確な不具合を直す最小差分である。
- 仕様追加、設計変更、データモデル変更、API 契約変更、依存関係変更、権限・課金・認証の変更を含まない。
- 変更範囲が局所的で、他チームの作業や統合予定リポジトリに影響しない。
- Issue 化して合意形成する価値より、即時修正する価値が明らかに高い。
- ユーザーがパッチ対応を明示している、または同等の Issue や PR の文脈が既にある。
開始前
git status --short --branch
git fetch --prune
- git hook を有効にする。リポジトリに
.vite-hooks/があればgit config core.hooksPath .vite-hooksを、lefthook.yamlしかなければlefthook installを実行する。どちらも clone ごとの設定なので、新しい作業環境では毎回実行する。 - デフォルトブランチ、現在ブランチ、リモート追跡ブランチの状態を確認する。
- 未コミット変更があれば、内容と所有者を確認する。今回の作業に無関係な変更をステージ、コミット、修正しない。
- 現在ブランチがデフォルトブランチでなければ、今回の作業用か確認する。
- gh など Issue や PR の操作に必要なツールや権限がなければ、不足を報告し、ローカル実装だけ先行してよいか確認する。
Issue
- 既存 Issue があるか先に確認する。なければ実装前に作る。
- タイトルと本文は、philtzjp/.github の
conventions.ymlに従う。リポジトリに.github/conventions.ymlがあれば、そちらに従う。本文は署名の行から始め、見出しを背景、作業範囲、受け入れ条件の順に書く。必要なら最後に備考を足す。 - 背景は最初の行から箇条書きにする。影響範囲や検証方針は、作業範囲か備考に書く。
- philtz-organizer-bot が Issue の書式を検査し、違反があれば内容をコメントにまとめるので、直す。
- 受け入れ条件は task list(
- [ ])で書き、達成状況を追跡できるようにする。 - 複数会社や複数領域に影響するなら、担当境界とレビュー観点を書く。
- 実装単位が大きすぎない粒度に分割する。
- Issue が曖昧なまま大きな変更に着手しない。
ブランチ
- Issue 番号を含む専用ブランチを作る。
- 名前は
<type>/<issue-number>-<short-kebab-summary>。 - type は feat、fix、refactor、docs、test、chore、ci、build のいずれか。
- 作成前にベースブランチが最新であることを確認する。
- 複数 Issue の実装を1ブランチに混ぜない。
- ユーザーの確認なしにブランチを切り替えない。
実装
- Issue の受け入れ条件に沿って、最小の論理単位で実装する。
- スコープが広がったら Issue と PR の説明を更新する。必要なら別 Issue に分割する。
- 変更に応じてテスト、Lint、型チェック、E2E、ドキュメント更新を行う。
- レビューしづらい巨大差分を、理由なく1 PR にまとめない。
コミットメッセージ
type: 説明 の形式。日本語の短い文にする。モノレポでは type(scope): 説明 にし、説明を短く保つためにカッコ表記は使わない。
type は次のいずれか。
- feat 新機能 / fix バグ修正 / perf 性能改善 / refactor 機能変更なしの改善
- docs ドキュメント / style スタイル修正 / test テスト / chore その他
- ci CI/CD 設定 / build ビルド設定 / merge PR のマージ(philtz-organizer-bot が作る squash のコミット専用。人とエージェントは使わない)
scope の決め方。
- ファイル変更のあったトップレベルディレクトリ名(リポジトリ直下のディレクトリ名)を使う。
- Turborepo などのモノレポで apps/ や packages/ 配下を変更するなら、配下のパッケージ名やアプリ名(leaf 名)を使う。apps/dashboard なら dashboard、packages/log なら log。
- リポジトリ全体に関わる変更は repo。
- 隠しディレクトリは先頭のドットを含めて書く。agents ではなく .agents。
- スラッシュで階層を表現しない。
- apps や packages などモノレポの親ディレクトリ自体を scope にしない。
- workspace、design のような実体のない総称や、存在しないフォルダ名を使わない。
NG: feat(workspace): / feat(design): / feat(agents): / feat(apps): / feat(apps/dashboard): / feat(packages/log):
OK: feat(repo): / feat(.agents): / feat(.claude): / feat(dashboard): / feat(log):
説明の書き方。
- 動作で終える。〜する、〜追加、〜修正、〜削除、〜実装など。
- 動作を伴わない名詞で終えない。
feat(api): ユーザー認証ではなくfeat(api): ユーザー認証を追加。 - emoji を含めない。
- 論理的なスコープ(パッケージ、機能)ごとにコミットを分割する。無関係な変更を1つのコミットに混ぜない。
コミットの実行
- ファイルごとに
git diffを実行し、各変更の作者を確認する。 git add .とgit add -Aを使わない。- committer を上書きしない。常にユーザーの git config を使う。
Co-Authored-Byを、コミットメッセージと PR 本文のどちらにも含めない。
すべての変更がエージェントによるもので、ユーザーが編集した行がない場合だけ、--author で自身のエージェント種別を明示する。
git commit --author="Claude <[email protected]>" -m "<message>"
git commit --author="Codex <[email protected]>" -m "<message>"
git commit --author="Cursor Agent <[email protected]>" -m "<message>"
実際に動作しているエージェント種別と一致する行を使う。他エージェントの例を流用しない。一部でもユーザーによる変更があれば、通常の git commit を使う。
- commit-msg hook が未承認の
Co-authored-by:を自動付与する環境では、それを除去する hook を入れて対処する。git commit --no-verifyで hook を迂回しない。 - 履歴修正で force push が必要なら、guard の許可を一時的に有効にして push し、作業後に戻す。
- PR の途中のコミットは squash されて main に残らない。途中のコミットのメッセージを直すためだけに、履歴を書き換えて force push しない。
author と committer
GitHub は、コミットに記録されたメールアドレスで、どのアカウントの変更かを判断する。名前は判断に使わない。登録していないアドレスでコミットすると、アイコンが灰色になり、誰の変更か追えなくなる。author と committer のアドレスは別々に判断されるので、片方だけ灰色になることもある。
最初にコミットする前に、設定を確認する。
git config --show-origin user.name
git config --show-origin user.email
env | grep -E '^GIT_(AUTHOR|COMMITTER)_'
- user.email が未設定か、
root@...、...@localhost、....localのような自動生成のアドレスなら、コミットしない。ユーザーに状況を伝え、設定を相談する。 - リポジトリ単位の設定や環境変数がグローバル設定を上書きしていないか、
--show-originの出力で確かめる。CI、Docker、devcontainer、クラウドのエージェント環境では、設定が入っていないことが多い。 - ユーザーの許可なしに git config を書き換えない。
- どのアドレスを使うか迷っていたら、GitHub が発行する noreply アドレスを提案する。必ずアカウントに紐づき、個人のアドレスを公開せずに済む。
gh api user --jq '"\(.id)+\(.login)@users.noreply.github.com"'で取得できる。
rebase、cherry-pick、commit --amend では、author はそのまま残り、committer は実行した環境の設定に置き換わる。実行したあとは両方を確認する。
git log --format='%h author=%an <%ae> committer=%cn <%ce>' -10
push したあとは、GitHub 上でアカウントに紐づいたかを確認する。null の側が灰色のアイコンになっている。
gh api repos/<owner>/<repo>/commits/<sha> --jq '{author: .author.login, committer: .committer.login}'
灰色になっていたら、原因と直し方をユーザーに説明する。使ったアドレスを GitHub の Settings → Emails に追加して確認を済ませれば、過去のコミットにもさかのぼって紐づく。履歴を書き換えて直そうとしない。
Git 操作の安全確認
あらゆる Git 操作(コミット、プッシュ、ブランチ作成、マージ、リベース)の前に git fetch --prune を実行する。そのうえで確認する。
- 現在のブランチがデフォルトブランチにマージ済みでないか。済みなら警告してブランチの切り替えを提案する。
- リモート追跡ブランチがまだ存在するか。削除されていれば警告する。
- ローカルブランチがリモートより遅れていないか。遅れていれば
git pull --rebaseを提案する。 - リモートと乖離していないか。乖離していれば警告し、リベースかマージを提案する。
ユーザーの承認なしに git pull や git rebase を実行しない。確認なしにローカルブランチを削除しない。
PR
gh pr create --body "<本文>"
gh pr create --body-file <file>
- 本文を必ず明示する。
--fillやエディタ生成でCo-Authored-Byが混入し得る場合は使わない。 - タイトルと本文は、philtzjp/.github の
conventions.ymlに従う。リポジトリに.github/conventions.ymlがあれば、そちらに従う。 - タイトルは
type(scope): 説明にする。説明はそのまま main のコミットの件名になる。 - 本文は署名の行から始め、見出しを背景、作業範囲、受け入れ条件、影響範囲・残リスクの順に書く。必要なら最後に備考を足す。
- 対象 Issue を自然言語で参照する。本文の背景に
#<issue-number>を書く。 Closes #Nなどの自動クローズのキーワードを使わない。Issue はマージ後に手で閉じる。- philtz-organizer-bot が PR を開いたとき、編集したとき、push したときに書式を検査し、
organizer-bot/conventionsのステータスを付ける。違反があれば内容をコメントにまとめるので、直す。 - 作成前にローカルブランチを upstream へ push する。
- Draft で早めに作り、実装完了後に Ready for review へ切り替える。
- レビュー、CI、必要な検証を迂回してマージしない。
マージ前チェック
git fetch --prune
git status --short --branch
- ローカルブランチが upstream に対して ahead / behind / diverged していないこと。
- PR ブランチがベースブランチに対して behind していないこと。
- PR が mergeable で、コンフリクトがなく、必須の CI、レビュー、チェックが通っていること。
organizer-bot/conventionsのステータスが成功していること。
対処。
- ahead なら push して再確認する。
- behind か diverged なら、ユーザーに報告し、rebase / merge / pull の方針を確認してから同期する。
- PR ブランチがベースブランチに対して behind なら、ベースブランチを取り込んで検証を再実行する。
- コンフリクト、失敗した CI、未解決レビュー、未確認の ahead / behind があるならマージしない。
マージ
人とエージェントはマージしない。デフォルトブランチには誰も直接 push できず、画面のマージボタンも使えない。マージは philtz-organizer-bot だけが行う。
直前にもう一度 git fetch --prune と ahead / behind の確認を行い、PR に merge ラベルを付ける。
gh pr edit <番号> --add-label merge
philtz-organizer-bot は、次をすべて満たすときだけ squash でマージする。
- PR が開いていて、Draft でない。
- タイトルと本文が規約に合っている。
- ブランチがデフォルトブランチに追いついている。
- 必須の検査が通り、ruleset が求める承認がある。ラベルを付けたのが org の owner なら、承認は確かめない。
main に残るのは 1 PR につき 1 つのコミットで、件名は merge(scope): 説明 になる。説明は PR のタイトルから取り、scope は変更したファイルから bot が決める。本文は付かない。author は PR を出した人、committer は philtz-organizer-bot で、(#N) と Co-authored-by は付かない。
gh pr mergeを使わない。- merge プレフィクスでマージであることは明示されるので、PR のタイトルの説明に「マージ」と書かない。
feat(api): foo をマージではなくfeat(api): foo を追加。 - 条件を満たさなければ、bot が理由をコメントしてラベルを外す。直してからラベルを付け直す。
- ラベルを付けて 1 分たってもマージもコメントもされなければ、ラベルを外して付け直す。
マージ後
- 対象 Issue は自動では閉じないので、
gh issue close <番号>で閉じる。 - リモートの作業ブランチはマージで自動的に消える。ローカルのブランチは、ユーザーの意図を確認してから消す。
- マージ、レビュー、検証を保留する場合や解決が pending の場合は、Issue をクローズせず、保留(pending review)として状況と再開条件をコメントに残す。重複起票を防ぐため。
- 未解決の同一事象について Issue を重複起票しない。
- 同一事象で複数の Issue が起票・クローズされていたら、最古の Issue を親(正本)として sub-issue 関係を付け、後発を duplicate としてクローズし、変更内容を各 Issue にコメントする。
Issue コメント
進み具合、完了、対応できないこと、設計のメモを Issue に残すときの書き方。GitHub はコメントにテンプレートを当てないので、次の形で書く。
✳︎ <会社名> <モデル名> <バージョン>
## 背景
このコメントの論点を書く。実装の状況、調べた結果、前提の変化など。
## 作業範囲
- 行ったこと、調べた範囲、これからの対応
## 受け入れ条件
- [x] 受け入れ条件 1。満たし方と、確かめたコマンドと結果
- [ ] 受け入れ条件 2。満たせない理由と制約
## 備考
補足、関連する Issue や PR。なければ見出しごと消す。
- 署名の行は Issue や PR の本文と同じ。モデル名がバージョンを含むとき(GPT-5.5 など)は
<バージョン>を省く。 - 主観ではなく、確かめられる事実、根拠、制約で書く。
- scope は Issue のタイトルが表すので、コメントには書かない。
- 受け入れ条件は Issue の項目ごとに、満たしたか、満たせないかを書く。
- 対応できないことを記録するときと、レビューやマージを保留するときは、Issue を閉じない。保留なら理由と再開の条件を書く。
- 重複として閉じたときは、正本にした最古の Issue と、duplicate にしたことを備考に書く。
Release
GitHub Release のリリースノートの書き方。GitHub は Release にテンプレートを当てないので、次の形で書く。
- 署名を付けない。署名を付けるのは、Issue と PR の本文とコメントだけ。
- tag は
v<セマンティックバージョン>、リリース名は<リポジトリ名> v<バージョン>にする。 - 主観ではなく、変わった事実と制約で書く。
- 配布物を添付するときは、ダウンロードのリンクを実際の tag の URL にする。
<リポジトリ名> v<バージョン> は、<前のバージョン> からの変更を 1〜2 文でまとめる。
## 変更内容
### <機能追加などの分類>
- <変更>
## 制約
- <制約>
## インストール
1. <手順>
## 更新手順
1. <手順>
## 備考
補足、既知の問題、pre-release にした理由など。なければ見出しごと消す。
当てはまらない見出しは消してよい。