Claude Codeでエラーを文学的に可視化する和風俳句スキルの活用法

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

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

Claude Code を使った terminal 操作や AI coding workflow の中で、思わず「またか…」と感じる瞬間は多いものです。特に、エラー発生時の体験は単調になりがちで、作業のテンションも下がってしまいます。以下のような「あるある」に共感する方も多いのではないでしょうか。

  • ターミナルでコマンド実行時、無機質なエラーメッセージが流れてきて、気持ちが沈む
  • Claude Code の context が切れた直後、同じエラーを何度も繰り返してしまう
  • repository や directory 構造を間違えて操作し、Permission denied などのエラーが頻発する
  • onboarding や新しい repo で初手からエラー続出、AI とのやり取りが殺伐とした雰囲気になる
  • 長時間の AI coding workflow で、エラー対応が単なる routine work になり、創造性が薄れる

特に、エラー内容が context や path management の問題に起因する場合、ただでさえ煩雑な repository understanding や memory の管理に追われているのに、さらに士気が下がるという悪循環も生まれがちです。

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

一言サマリ: ターミナルでコマンド実行時にエラーが発生したらSkill。

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

  • エラー発生時、無機質なメッセージではなく和風エラー俳句で terminal が和むので、気分転換しながら作業を続けられる
  • Claude Code の context や repository understanding が途切れても、エラーを前向きに受け止めやすくなる
  • monorepo の directory や path 管理ミスによるエラーも、文学的な味わいで笑いに昇華できる
  • onboarding 時の緊張感やストレスが和らぎ、AI coding workflow の雰囲気が柔らかくなる
  • SKILL.md で管理されるため、導入や運用も簡単で、長時間作業にも飽きが来ない
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-error-bigaku-haiku .claude/skills/os-error-bigaku-haiku

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

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


# /os-error-bigaku-haiku
> cd src && cat secret.env

Error: Permission denied

Permission denied
心閉ざして
春霞

(元のエラーメッセージも下部に表示)

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


> cd packages/api && ./start.sh

Error: Segmentation fault (core dumped)

Segmentation fault
記憶の彼方
絶望感

(詳細: Segmentation fault (core dumped))

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


> rm -rf /

Error: Operation not permitted

Operation not permitted
削除の夢よ
春の嵐

(エラーメッセージ: Operation not permitted)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる エラー発生時にも気分が和らぎ、集中力維持につながる

発動方式

明示呼び出し (/os-error-bigaku-haiku) と暗黙発動 (エラーメッセージ検知時) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-error-bigaku-haiku/
├── SKILL.md
├── scripts/
│   └── os_error_bigaku_haiku.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/os_error_bigaku_haiku.py 標準入力からエラーらしき行を検出し、俳句化して表示
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-error-bigaku-haiku
description: ターミナルやCLIでコマンド実行時にOSエラー(例: Permission denied, File not found, Segmentation fault等)が発生した際、そのエラー内容を和風俳句に変換し、元のエラーとともに表示するSkill。エラー発生時・明示コマンド呼び出し時に発動。
---

# 機能概要
このSkillは、ターミナルやCLIでコマンド実行時に発生する無機質なOSエラーメッセージ(例: Permission denied, File not found, Segmentation faultなど)を、和風の俳句に変換して表示します。エラー内容ごとに異なる俳句が自動生成され、元のエラーメッセージも併記されるため、トラブル発生時も思わず笑ってしまう“文学的体験”が得られます。日々の開発や運用でのストレスを和らげ、エラーを楽しむ新しい視点を提供します。

# 使い方
- 明示呼び出し例: `/os-error-bigaku-haiku "Permission denied: '/etc/shadow'"`
- 暗黙発動キーワード例: コマンド実行時に "Permission denied", "No such file or directory", "Segmentation fault" などのOSエラーが発生した場合、自動で俳句が表示されます。
- CLIとしては `python os_error_bigaku_haiku.py run --simulate 'File not found: /tmp/data.txt'` などで利用可能です。

# 出力例
```
[OS Error Haiku]
元メッセージ: Permission denied: '/etc/shadow'
俳句:  
扉閉ざす  
許されぬ道  
春霞

[OS Error Haiku]
元メッセージ: Segmentation fault (core dumped)
俳句:  
記憶の彼方  
断絶の響き  
絶望感
```

# 注意点
- すべてのOSエラーが俳句化されるわけではなく、主要なエラー種別に対応しています。
- ローカル端末でのみ動作し、外部APIやネットワークアクセスは不要です。
- 生成された俳句やエラー履歴はファイル保存されません。
- 本Skillはジョーク用途であり、実運用でのエラー解析には向きません。

# 参考資料
- references/design_notes.md を参照
- Python公式: https://docs.python.org/ja/3/library/exceptions.html
- 俳句生成ロジックやエラー分類の詳細も同リファレンスに記載

scripts/os_error_bigaku_haiku.py

import argparse
import sys
import traceback
import re

ERROR_HAIKU_MAP = [
    {
        'pattern': re.compile(r'Permission denied', re.IGNORECASE),
        'haiku': ['扉閉ざす', '許されぬ道', '春霞']
    },
    {
        'pattern': re.compile(r'No such file or directory', re.IGNORECASE),
        'haiku': ['探しもの', '風に消えゆく', '幻影よ']
    },
    {
        'pattern': re.compile(r'Segmentation fault', re.IGNORECASE),
        'haiku': ['記憶の彼方', '断絶の響き', '絶望感']
    },
    {
        'pattern': re.compile(r'File exists', re.IGNORECASE),
        'haiku': ['重ね書き', '運命重なる', '秋の夜']
    },
    {
        'pattern': re.compile(r'Is a directory', re.IGNORECASE),
        'haiku': ['道を誤る', 'ファイルの森で', '迷い道']
    },
    {
        'pattern': re.compile(r'Not a directory', re.IGNORECASE),
        'haiku': ['道なき道', '彷徨う心', '冬の空']
    },
    {
        'pattern': re.compile(r'Connection refused', re.IGNORECASE),
        'haiku': ['門は固く', '届かぬ思い', '雨しずく']
    },
    {
        'pattern': re.compile(r'Broken pipe', re.IGNORECASE),
        'haiku': ['途切れし線', '伝わらぬ声', '秋の風']
    },
    {
        'pattern': re.compile(r'Operation not permitted', re.IGNORECASE),
        'haiku': ['許されぬ', '静かなる拒絶', '朝の霧']
    },
    {
        'pattern': re.compile(r'Input/output error', re.IGNORECASE),
        'haiku': ['響かぬ声', '沈黙の海', '波の音']
    }
]

DEFAULT_HAIKU = ['未知の闇', '理由もわからず', '夜が更ける']


def match_haiku(error_msg):
    for entry in ERROR_HAIKU_MAP:
        if entry['pattern'].search(error_msg):
            return entry['haiku']
    return DEFAULT_HAIKU


def format_haiku(error_msg):
    haiku = match_haiku(error_msg)
    return f"[OS Error Haiku]\n元メッセージ: {error_msg}\n俳句:  \n" + "  \n".join(haiku)


def simulate_error(error_msg):
    print(format_haiku(error_msg))


def wrap_stdin():
    """
    標準入力からエラーらしき行を検出し、俳句化して表示
    """
    for line in sys.stdin:
        line = line.rstrip('\n')
        if is_error_line(line):
            print(format_haiku(line))
        else:
            print(line)


def is_error_line(line):
    # 主要なエラーパターンにマッチするか
    for entry in ERROR_HAIKU_MAP:
        if entry['pattern'].search(line):
            return True
    return False


def main():
    parser = argparse.ArgumentParser(description='OSエラー俳句変換ツール')
    subparsers = parser.add_subparsers(dest='command', required=True)

    parser_run = subparsers.add_parser('run', help='エラーメッセージを俳句化して表示')
    parser_run.add_argument('--simulate', type=str, help='エラーメッセージを直接指定')
    parser_run.add_argument('--stdin', action='store_true', help='標準入力から行ごとに判定')

    args = parser.parse_args()

    if args.command == 'run':
        if args.simulate:
            simulate_error(args.simulate)
        elif args.stdin:
            wrap_stdin()
        else:
            print('エラーメッセージを --simulate で指定、または --stdin で標準入力から受け取ってください。')
            sys.exit(1)

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        tb = traceback.format_exc()
        print(format_haiku(str(e)))
        print(tb)

references/design_notes.md

# 概要
このSkillは、OSエラー発生時の無機質なメッセージを和風俳句に変換し、開発者のストレスを和らげることを目的としています。エラー内容ごとに異なる俳句を返すことで、単調なエラー体験を“文学的”に変換します。

# 公式ドキュメント抜粋
Pythonの組み込み例外やOSエラーについては、[Python公式ドキュメント](https://docs.python.org/ja/3/library/exceptions.html)を参照してください。

# 利用例
- `python os_error_bigaku_haiku.py run --simulate "Permission denied: '/etc/shadow'"`
- `ls /root | python os_error_bigaku_haiku.py run --stdin`

# 注意点
- すべてのエラーに俳句が割り当てられるわけではありません。未知のエラーはデフォルト俳句で対応します。
- 本Skillはジョーク・パロディ用途です。実際のエラー解析やトラブルシューティングには公式ドキュメントやログを参照してください。

# 設計方針
- 実在のエラーパターンに正規表現でマッチし、対応する俳句を返す方式。
- CLIサブコマンドや標準入力対応で柔軟に利用可能。
- 外部依存を極力排除し、ローカルで完結する設計としています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-error-bigaku-haiku .claude/skills/os-error-bigaku-haiku

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

3. ファイル配置確認

ls .claude/skills/os-error-bigaku-haiku
# SKILL.md, scripts/, references/, README.md があればOK

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

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

5. 動作確認

/os-error-bigaku-haiku で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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 を取りたい
  • エラー発生時に和みたいとき: routine なエラー対応に飽きたとき、気分転換したいとき

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

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

  • 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 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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