mcpField
C
commit-message-storyteller

commit-message-storyteller

github.com/github開発40.5k402 回インストール今日更新
リポジトリ

commit-message-storyteller について

commit-message-storytellerは、差分や変更内容から意図が伝わるコミットメッセージを作る開発者向けスキルです。Conventional Commitsに沿い、無関係な変更を複数のメッセージに分けられます。

主な機能

  1. 01Conventional Commits形式
  2. 02差分から背景を推定
  3. 03コミット種別の案内
  4. 04件名・本文・フッターの規則
  5. 05無関係な変更の分割

活用シーン

  1. 01ステージ済み差分からメッセージを作成
  2. 02変更理由を説明
  3. 03プルリクエスト用のメッセージを準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/github/awesome-copilot --skill commit-message-storyteller

インストール後、Claude Code で/commit-message-storytellerを入力して読み込まれたか確認します。

同梱ファイルreferences/conventional-commits-guide.md

詳細

コミットメッセージのストーリーテラー

生の git diff や変更内容の説明を、Conventional Commits の仕様に準拠した、明確でストーリー性のあるコミットメッセージに変換します。「update file.js」ではなく、意図、背景、影響が伝わるメッセージを作成できます。

このスキルを使うタイミング

  • ユーザーが「コミットメッセージを書いて」と言った場合
  • ユーザーが git diff を貼り付ける、またはコードの変更内容を説明した場合
  • ユーザーが「これを何としてコミットすればいい?」や「diff を要約して」と言った場合
  • ユーザーがチームやオープンソースプロジェクトのコミット履歴を改善したい場合
  • ユーザーがプルリクエストを準備しており、意味のあるコミットメッセージを作りたい場合

前提条件

以下のいずれかを少なくとも 1 つ用意してください。

  • git diff または git diff --staged の出力
  • 何を変更したか、なぜ変更したかの説明
  • 変更したファイルの一覧

仕組み

ステップ 1:変更の背景を集める

ユーザーに質問するか、diff から推測して、以下を把握します。

  1. 何を変更したか — 影響を受けたファイル、関数、ロジック
  2. なぜ変更したか — バグ修正、新機能、リファクタリング、パフォーマンス改善など
  3. 何がきっかけか — イシュー番号、ユーザーの要望、技術的負債など

ユーザーが生の git diff を提供した場合は、そこからこの背景を自動的に抽出します。

ステップ 2:コミットの種類を特定する

以下のガイドを使って、変更を Conventional Commits の種類に当てはめます。

種類使用する場面
feat新しい機能や能力を追加する
fixバグや誤った動作を修正する
refactor動作を変えずにコードを再構成する
perfパフォーマンスを改善する変更
docsドキュメントのみの変更
style書式、空白、セミコロンの不足など(ロジックの変更なし)
testテストを追加または更新する
buildビルドシステムや依存関係の変更
choreソースコードやテストに影響しない、その他の保守作業
ciCI/CD パイプラインの変更
revert以前のコミットを取り消す

詳細な例については、references/conventional-commits-guide.md を参照してください。

ステップ 3:コミットメッセージを書く

以下の構成に従います。

<type>(<optional scope>): <short imperative summary>

<body — the story: why this change was made, what problem it solves>

<footer — issue refs, breaking change notices>
各部分のルール

件名(1 行目):

  • 命令形を使います。「added」や「fixes」ではなく、「add」「fix」「remove」のようにします
  • 最大 72 文字
  • 末尾にピリオドを付けません
  • コロンの後は小文字にします

本文(ストーリー):

  • 何をではなく、なぜを説明します(何を変更したかは diff を見ればわかります)
  • 変更前に存在していた問題を説明します
  • 該当する場合は、検討した代替案にも触れます
  • 1 行を 100 文字未満にします
  • 件名との間に空行を入れます

フッター:

  • イシューを参照します:Closes #123、Fixes #456、Refs #789
  • 破壊的変更を明記します:BREAKING CHANGE: <description>
ステップ 4:出力を生成する

コピーできるコードブロックでコミットメッセージを出力し、その後に、伝えたストーリーを説明する平易な英語の 1 行を添えます。

出力例:

fix(auth): prevent token refresh loop on expired sessions

When a user's session expired mid-request, the auth middleware was
triggering a token refresh, which itself failed validation and triggered
another refresh — causing an infinite retry loop that crashed the app.

This adds a recursion guard flag that aborts the refresh cycle if a
refresh is already in progress, returning a clean 401 instead.

Closes #312

伝えたストーリー: セッションの期限切れ時に発生する、気付かれにくい無限ループがアプリをクラッシュさせていました。この変更でループを早期に止め、適切なエラーを返します。


1 つの diff から複数のコミットを作る場合

diff に論理的に分けられる変更が含まれている場合は、複数のコミットメッセージに分け、その旨をユーザーに伝えます。以下を目安にしてください。

  • 目的の異なるファイルが複数ある → コミットを分けるのが適切な可能性が高い
  • 同じファイルに異なる目的の変更がある(例:バグ修正とリファクタリング)→ 分割を提案する
  • すべてが密接に関連している → 1 つのコミットで問題ありません

エッジケース

状況対応方法
ユーザーが diff 以外の背景を提供していないファイル名と変更されたシンボルから種類とスコープを推測する
変更が多くのファイルにまたがり、明確なテーマがない「これは 1 つの論理的な変更ですか、それとも複数ですか?」と尋ねる
破壊的変更を検出したBREAKING CHANGE: フッターを自動的に追加する
ユーザーが「短くして」と言った本文を省略し、わかりやすい件名だけを書く
イシュー番号がないフッターを完全に省略する

クイックリファレンス

# Get your staged diff to paste into Copilot
git diff --staged

# Or get the last uncommitted working tree changes
git diff

種類の例やスコープのガイドラインについては、references/conventional-commits-guide.md を参照してください。

コメント