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 で管理されるため、導入や運用も簡単で、長時間作業にも飽きが来ない
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
