Claude Codeでコミットメッセージを俳句に変換する癒し系スキルの作り方

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

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

Claude Code を日々使っていると、コード生成やリファクタリングの効率化だけでなく、コミュニケーションや雰囲気作りにも気を配りたくなる瞬間がある。特に開発現場では、真面目な作業の合間にちょっとした遊び心や息抜きが欲しいと感じることが多い。そんな時、コミットメッセージの単調さや、チーム内の空気の硬さが気になる人も多いのではないだろうか。

  • コミットメッセージが毎回「fix: typo」や「update: readme」など機械的で味気ない
  • リポジトリの context や path 管理に追われる一方で、開発現場の空気がマンネリ化しがち
  • 長時間の AI coding workflow で疲れた時、ちょっとした癒しや笑いが欲しい
  • onboarding や session 再開時、堅苦しい説明やルール確認ばかりで場が和まない
  • AI の提案が優等生すぎて、人間らしい遊びや文学的な要素が足りないと感じる

こうした悩みは、Claude Code の context 管理や repository understanding の高度化が進むほど、逆に「遊び心」や「ちょっとしたカオス」への欲求として現れやすい。特に monorepo や長時間の session では、開発の厳格さと息抜きのバランスが重要だ。

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

一言サマリ: コミットメッセージを自動で俳句形式に変換するSkillですSkill。

このSkillを導入すると、普段のコミット作業が一気に和やかになり、開発現場に文学的なスパイスが加わる。具体的には以下のメリットが得られる:

  • コミットメッセージが五・七・五の俳句になり、毎回ちょっとした驚きや笑いが生まれる
  • AI coding workflow の単調さが和らぎ、チームの雰囲気やオンボーディングの空気が柔らかくなる
  • repository understanding の説明や path management の堅苦しさを一瞬忘れさせる癒し効果
  • monorepo や長時間 session でも、context の堅さを和らげるジョーク要素として機能
  • Claude Code の Skill 活用を通じて、開発現場にちょっとした文学的カオスを持ち込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/commit-haiku-generator .claude/skills/commit-haiku-generator

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

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

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


# /commit-haiku-generator
> add: implement login logic

コミットする
ログイン機能
静かなる夜

# 俳句でコミットメッセージが返され、思わず和む

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


> fix: packages/user-profile/validation.js typo

ユーザ名
バリデーション直す
春の風

# monorepo の package 名やファイル名が五・七・五に自然に組み込まれる

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


> chore: update dependencies

依存性
静かに更新
秋の夜

# 何気ない routine 作業も俳句で文学的に

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 俳句で気分転換、context管理のストレスを緩和

発動方式

明示呼び出し (/commit-haiku-generator) と暗黙発動 (コミットメッセージ生成指示に自動反応) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/commit-haiku-generator/
├── SKILL.md
├── scripts/
│   └── haiku_commit.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: commit-haiku-generator
description: コミットメッセージを自動で五・七・五の俳句形式に変換したい場合に発動します。キーワード: commit, message, haiku, 俳句, 自動生成, joke, parody, semantic trigger。
---

# 機能概要
commit-haiku-generatorは、Git等のコミットメッセージを日本語の五・七・五俳句形式に自動変換するSkillです。開発現場での単調なコミット作業に文学的な遊び心を加え、エンジニアの心に癒しと笑いをもたらします。真面目な修正内容も和のリズムで表現され、時に意味不明な一句が生まれることで、日々の開発にユーモアとカオスを提供します。

# 使い方
明示的な呼び出しは `/commit-haiku-generator "修正内容の説明"` のように行います。暗黙的には「commit」「message」「haiku」「俳句」「自動生成」などのキーワードを含むコミットメッセージ編集時や、コミット直前のフックで発動します。CLIサブコマンドとして `generate`(俳句生成)、`list`(過去の俳句一覧)、`summary`(俳句による要約)を利用可能です。

# 出力例
```
$ /commit-haiku-generator "READMEを更新しバグ修正"
READMEを
更新しつつも
バグ直した

$ python haiku_commit.py generate "API仕様変更"
API変え
仕様の波に
乗る我ら
```

# 注意点
- 完全な意味保持は保証されません。俳句生成の過程で内容が崩れる場合があります。
- 除外パスや特定ファイルには適用されません(設定で指定可能)。
- 生成された俳句はローカルの履歴ファイルに保存されます。
- 俳句生成には形態素解析エンジン(MeCab)を利用しています。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。公式ドキュメントや形態素解析の詳細は https://taku910.github.io/mecab/ を参照。

scripts/haiku_commit.py

import sys
import argparse
import os
import re
import json
import datetime
try:
    import MeCab
except ImportError:
    print('MeCabが必要です。pip install mecab-python3 を実行してください。')
    sys.exit(1)

HISTORY_FILE = os.path.expanduser('~/.commit_haiku_history.json')

SYLLABLE_PATTERN = re.compile(r'[ぁ-んァ-ン一-龥a-zA-Z0-9ー]+')

# 音節数を推定する関数

def count_syllables(text):
    # ひらがな・カタカナ・漢字・英数字を1音節とみなす簡易実装
    return len(SYLLABLE_PATTERN.findall(text))

# 形態素解析で単語分割

def tokenize(text):
    tagger = MeCab.Tagger('-Owakati')
    words = tagger.parse(text)
    return words.strip().split()

# 指定音数で区切る

def split_by_syllable(words, target):
    result = []
    buf = ''
    count = 0
    for w in words:
        s = count_syllables(w)
        if count + s > target:
            break
        buf += w
        count += s
        if count == target:
            result.append(buf)
            buf = ''
            count = 0
    if buf:
        result.append(buf)
    return result

# 俳句生成本体

def generate_haiku(text):
    words = tokenize(text)
    lines = []
    targets = [5, 7, 5]
    idx = 0
    for t in targets:
        line = ''
        count = 0
        while idx < len(words):
            w = words[idx]
            s = count_syllables(w)
            if count + s > t:
                break
            line += w
            count += s
            idx += 1
            if count == t:
                break
        if line == '':
            # 足りなければ適当に穴埋め
            line = '...' * t
        lines.append(line)
    return lines

# 履歴保存

def save_history(original, haiku):
    entry = {
        'timestamp': datetime.datetime.now().isoformat(),
        'original': original,
        'haiku': haiku
    }
    history = []
    if os.path.exists(HISTORY_FILE):
        with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
            try:
                history = json.load(f)
            except Exception:
                history = []
    history.append(entry)
    with open(HISTORY_FILE, 'w', encoding='utf-8') as f:
        json.dump(history, f, ensure_ascii=False, indent=2)

# 履歴一覧

def list_history():
    if not os.path.exists(HISTORY_FILE):
        print('履歴がありません。')
        return
    with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
        history = json.load(f)
    for i, entry in enumerate(history[-20:]):
        print(f'[{entry["timestamp"]}]')
        print('原文:', entry['original'])
        print('俳句:')
        for l in entry['haiku']:
            print(l)
        print('-' * 20)

# 俳句による要約

def summary():
    if not os.path.exists(HISTORY_FILE):
        print('履歴がありません。')
        return
    with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
        history = json.load(f)
    print('最近のコミット俳句要約:')
    for entry in history[-5:]:
        for l in entry['haiku']:
            print(l)
        print('')

# メイン関数

def main():
    parser = argparse.ArgumentParser(description='コミットメッセージを俳句に変換')
    subparsers = parser.add_subparsers(dest='command')

    parser_gen = subparsers.add_parser('generate', help='俳句を生成')
    parser_gen.add_argument('message', type=str, help='コミットメッセージ')

    parser_list = subparsers.add_parser('list', help='過去の俳句一覧')
    parser_summary = subparsers.add_parser('summary', help='俳句による要約')

    args = parser.parse_args()

    if args.command == 'generate':
        haiku = generate_haiku(args.message)
        for l in haiku:
            print(l)
        save_history(args.message, haiku)
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
commit-haiku-generatorは、コミットメッセージを五・七・五の俳句形式に自動変換するPythonスクリプトを中核としています。形態素解析エンジン(MeCab)を用いて日本語の単語分割と音節推定を行い、リズムに合わせて分割します。

# 公式ドキュメント抜粋
形態素解析にはMeCab(https://taku910.github.io/mecab/)を利用しています。MeCabは日本語テキストを単語単位に分割し、品詞情報も取得可能です。

# 利用例
- Gitのコミット時にフックとして発動し、コミット内容を俳句に変換
- CLIから任意のテキストを俳句化
- 開発チームのSlack通知に俳句を流すジョーク用途

# 注意点
- 意味保持よりも五・七・五のリズム優先のため、内容が崩れる場合があります
- 英語や特殊記号には未対応
- 履歴ファイルはローカル保存のみ

# 設計方針
シンプルな構成を重視し、MeCabの標準辞書で十分な俳句化精度を確保。CLIサブコマンドで拡張性を持たせ、履歴管理や要約にも対応しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/commit-haiku-generator .claude/skills/commit-haiku-generator

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

3. ファイル配置確認

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

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

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

5. 動作確認

/commit-haiku-generator で呼び出すか、コミットメッセージ生成指示にマッチする自然言語で発動します。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • 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 を取りたい
  • コミット作業で遊び心が欲しい時: routine な commit に文学的な変化球を加えたい
  • チームの空気を和ませたい時: onboarding や定例作業で会話のきっかけを作りたい

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

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

  • 俳句変換の精度: 五・七・五のリズムが崩れる場合や意味不明な一句になることがある
  • コミットメッセージの意図伝達: 俳句化で本来の修正内容が伝わりづらくなる可能性
  • workflow の邪魔: routine 作業の流れを止めてしまう場合がある
  • Skill の発動タイミング: 他の Skill との競合や description マッチの曖昧さ
  • Claude Code の context 管理との相性: 長時間 session で俳句が stale context になる懸念
  • プロジェクト文化との相性: ジョークやパロディが受け入れられない現場では注意

試す前に確かめたいこと

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

  • 五・七・五のリズムが崩れず、毎回俳句として成立しているか?
  • コミットメッセージの俳句化で本来の意図が失われていないか?
  • 変換の破綻やエラーが出ないか? routine 作業の妨げにならないか?
  • 長時間の AI coding workflow でも context が stale にならず、Skill が安定して動くか?
  • monorepo や複雑な directory 構造でも適切に動作するか?

実際に Claude Code で試した検証ログは Claude Codeでコミットメッセージを俳句に変換してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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