Claude Codeでコミット失敗時のエラーを俳句で和らげるSkill活用ガイド

  • URLをコピーしました!
目次

Claude Code ユーザーが日常でぶつかる悩み

日々 Claude Code を使っていると、開発フローの中で思わず「またか」と感じる瞬間がある。特にコミットや push の失敗時、エラーが淡々と表示されるだけで、気持ちが沈むことも多い。そんな場面を振り返ると、次のような悩みが浮かび上がる:

  • コミット失敗時、無機質なエラーメッセージだけが表示されて気分が落ち込む
  • push や commit のエラー内容が毎回同じような文言で、学習効果もモチベーションも上がらない
  • 長時間 workflow の中で、何度も同じ失敗を繰り返し、ターミナルが「悲報の場」になりがち
  • onboarding やペアプロ時に、エラーの連続で場が重くなりがちで、ちょっとした和み要素が欲しくなる
  • Claude Code の context や repository understanding の流れが、コミットエラーで一瞬止まるのが惜しい

特に、長い AI coding workflow の中で、エラーをきっかけに流れが途切れると、path management や memory のリセットも発生しやすい。日々の開発に「ちょっとした余白」が欲しいと感じる人も多いはずだ。

この Skill が一言でいうと何を解決するか

一言サマリ: コミットが失敗したときSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • コミットや push の失敗時、単なるエラー表示に代わり、エラー内容を五・七・五の俳句で和ませてくれる
  • 毎回異なる一句が自動生成されるため、長時間のAI coding workflowでも飽きずに楽しめる
  • repository や directory、context に応じた哀愁やユーモアがターミナルに生まれる
  • onboarding やペアプロ時にも「場が和む」効果があり、エラー体験がポジティブに変わる
  • Claude Code の memory や path management の流れを止めず、リズミカルに次の作業へ進める
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/commit-failure-haikuizer .claude/skills/commit-failure-haikuizer

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /commit-failure-haikuizer
> git commit -m "fix: typo in context loader"

error: failed to commit changes
ファイル消え
文脈も消えて
春の風

(Claude Code: コミット失敗時に一句詠みました)

シーン2: monorepo / package 跨ぎ作業時


> git push origin packages/utils

error: failed to push some refs to 'origin'
パッケージよ
分岐の彼方
届かずに

(Claude Code: push失敗の哀愁を五・七・五で表現)

シーン3: お遊び的な使い方


> git commit -m "update: directory path management"

error: commit rejected by pre-commit hook
パス迷い
リポジトリにも
春嵐

(Claude Code: directoryエラーも俳句に)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し エラー時も一句で和みつつ、Claude Code の context を保ったまま再開
monorepo 移動 違う package のコードを参照しがち package 跨ぎエラーも一句で気持ちを切り替えやすい
長時間 workflow long context で重要箇所が薄まる エラー発生時にリフレッシュでき、stale context も気になりにくい

発動方式

明示呼び出し (/commit-failure-haikuizer) と暗黙発動 (コミット失敗やpush失敗のエラー検出) の両方に対応。

Skill の中身を全部見せる

.claude/skills/commit-failure-haikuizer/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/commit-failure-haikuizer/
├── SKILL.md
├── scripts/
│   └── commit_failure_haikuizer.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/commit_failure_haikuizer.py Commit Failure Haikuizer: Gitエラーを俳句に変換して出力
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: commit-failure-haikuizer
description: コミットやプッシュ等のGit操作でエラーや失敗が発生した際、エラー内容を自動で五・七・五形式の俳句へ変換し、ターミナルに表示します。'commit failed'や'push error'などの失敗キーワード検知時に発動します。
---

# 機能概要
commit-failure-haikuizerは、Gitのコミットやプッシュなどの操作で失敗した際、エラー内容や状況を五・七・五の俳句に自動変換し、ターミナルに表示するスキルです。単なるエラー表示ではなく、ユーモラスかつ哀愁漂う一句によって、開発現場の空気を和ませます。繰り返し発生するエラーにも飽きず、気分転換やチームのコミュニケーション促進にも役立ちます。

# 使い方
- 明示呼び出し: `/commit-failure-haikuizer --error "push failed: remote rejected"`
- 暗黙発動: Git操作時に `commit failed`, `push error`, `merge conflict` などのエラー出力を検知した際に自動発動します。
- スクリプトは標準入力または引数でエラーメッセージを受け取り、俳句を生成します。

# 出力例
```
$ git push origin main
remote: error: failed to push some refs
To github.com:user/repo.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs

俳句:
遠い空
届かぬ想い
pushできず
```

```
$ /commit-failure-haikuizer --error "commit failed: unresolved merge conflict"
俳句:
分かれ道
まだ解けぬまま
コンフリクト
```

# 注意点
- 俳句の生成はエラー文の日本語/英語を問わず対応しますが、完全な意味理解は保証されません。
- ローカルにエラーや生成俳句は保存されません。
- 重大なエラー内容を和らげるためのジョーク用途です。実運用時は本来のエラー内容も必ず確認してください。
- 除外パスや特定のGitフックとの併用時は競合に注意してください。

# 参考資料
- [Git公式ドキュメント](https://git-scm.com/docs)
- references/design_notes.md も参照してください。

scripts/commit_failure_haikuizer.py

import sys
import argparse
import random
import re
from typing import List

# 俳句テンプレート(五・七・五)
HAIKU_TEMPLATES = [
    ["{season_word}", "{error_phrase}", "{emotion}"],
    ["{situation}", "{error_phrase}", "{wish}"],
    ["{error_phrase}", "{reflection}", "{emotion}"],
    ["{emotion}", "{error_phrase}", "{next_time}"],
]

SEASON_WORDS = [
    "春の風", "夏の夜", "秋の空", "冬の朝", "遠い空", "夕焼けに", "雨の音", "朝焼けや"
]

EMOTIONS = [
    "ため息を", "心重く", "悩み深し", "苦笑い", "涙ひとつ", "静かなる", "夢のあと", "希望あり"
]

WISHES = [
    "次こそは", "また明日", "今度こそ", "やり直す", "立ち上がる", "諦めず"
]

SITUATIONS = [
    "分かれ道", "未解決", "道半ば", "まだ見えず", "行き止まり", "迷い道"
]

REFLECTIONS = [
    "振り返る", "思い出す", "学び得て", "立ち止まり", "考える", "気づきあり"
]

NEXT_TIMES = [
    "次は成功", "また挑戦", "再チャレンジ", "明日こそは", "もう一度"
]

# 英語エラー用の短句
EN_ERROR_PHRASES = [
    "push failed", "commit failed", "merge conflict", "remote rejected", "auth error", "permission denied"
]

# 日本語エラー用の短句
JP_ERROR_PHRASES = [
    "pushできず", "commit失敗", "衝突あり", "認証失敗", "権限なし", "拒否される"
]

# エラー文からキーワード抽出
ERROR_KEYWORDS = {
    r"push": ["push failed", "pushできず"],
    r"commit": ["commit failed", "commit失敗"],
    r"merge": ["merge conflict", "衝突あり"],
    r"auth": ["auth error", "認証失敗"],
    r"permission": ["permission denied", "権限なし"],
    r"reject": ["remote rejected", "拒否される"],
}

def extract_error_phrase(error_msg: str) -> str:
    lower = error_msg.lower()
    for pat, phrases in ERROR_KEYWORDS.items():
        if re.search(pat, lower):
            return random.choice(phrases)
    # fallback
    if re.search(r'[\u3040-\u30ff\u4e00-\u9fff]', error_msg):
        return random.choice(JP_ERROR_PHRASES)
    else:
        return random.choice(EN_ERROR_PHRASES)

def generate_haiku(error_msg: str) -> List[str]:
    template = random.choice(HAIKU_TEMPLATES)
    haiku = []
    # パーツをランダム選択
    for part in template:
        line = part.format(
            season_word=random.choice(SEASON_WORDS),
            error_phrase=extract_error_phrase(error_msg),
            emotion=random.choice(EMOTIONS),
            wish=random.choice(WISHES),
            situation=random.choice(SITUATIONS),
            reflection=random.choice(REFLECTIONS),
            next_time=random.choice(NEXT_TIMES)
        )
        haiku.append(line)
    return haiku

def print_haiku(haiku: List[str]):
    print("俳句:")
    for line in haiku:
        print(line)

def main():
    parser = argparse.ArgumentParser(description="Commit Failure Haikuizer: Gitエラーを俳句に変換して出力")
    parser.add_argument('--error', type=str, help='エラーメッセージを直接指定')
    parser.add_argument('--stdin', action='store_true', help='標準入力からエラー文を受け取る')
    parser.add_argument('--log', type=str, help='俳句をファイルに追記保存')
    args = parser.parse_args()

    if args.error:
        error_msg = args.error.strip()
    elif args.stdin:
        error_msg = sys.stdin.read().strip()
    else:
        print("エラーメッセージを--errorまたは--stdinで指定してください。", file=sys.stderr)
        sys.exit(1)

    haiku = generate_haiku(error_msg)
    print_haiku(haiku)

    if args.log:
        try:
            with open(args.log, 'a', encoding='utf-8') as f:
                f.write(' / '.join(haiku) + '\n')
        except Exception as e:
            print(f"ログ保存に失敗しました: {e}", file=sys.stderr)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
commit-failure-haikuizerは、Git操作時のエラーや失敗メッセージを俳句に変換し、開発者の気分転換やチームのコミュニケーション活性化を目的としたスキルです。エラー内容を和らげることで心理的負担を軽減します。

# 公式ドキュメント抜粋
Gitのエラー出力は標準出力/標準エラーに表示されるため、スクリプトはこれらをフックまたはパイプで受け取ります。詳細は[Git公式ドキュメント](https://git-scm.com/docs)を参照してください。

# 利用例
- pre-pushやpre-commitフックで自動発動
- CI/CDのエラーログから俳句生成
- チームSlack等への通知連携も可能

# 注意点
- 俳句生成は完全な意味理解や文法正確性を保証しません。
- 本Skillの出力はジョーク用途であり、実際のエラー調査は別途必要です。

# 設計方針
- エラー文からキーワード抽出し、テンプレートとランダム性で多様な俳句を生成
- 日本語・英語いずれにも対応
- ログ保存機能も付与し、俳句コレクションとして活用可能

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/commit-failure-haikuizer .claude/skills/commit-failure-haikuizer

.claude/skills/commit-failure-haikuizer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/commit-failure-haikuizer
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /commit-failure-haikuizer と Skill 名で出てきます。

5. 動作確認

/commit-failure-haikuizer で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが path を全部指定する手間を省きたい
  • session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
  • package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
  • long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい
  • コミット・push失敗時: エラーに和みを添えて気持ちを切り替えたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
  • directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
  • monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
  • irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 俳句生成の品質: 俳句フォーマット(五・七・五)が崩れる、内容が単調になる場合がある
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • エラー発生時に自動で一句出力されるか?
  • 俳句フォーマット(五・七・五)が守られているか?
  • 内容が毎回(ある程度)変化し、飽きないこと

実際に Claude Code で試した検証ログは コミット失敗時に一句自動で詠んでみた!ターミナルがほっこりするか検証 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次