Claude Code ユーザーが日常でぶつかる悩み
開発現場でClaude Codeを使っていると、真面目なPull Requestコメントがどうしても味気なくなりがちです。特にリモート環境や大規模なmonorepoでのやり取りでは、ちょっとしたユーモアや「場を和ませる一言」が入りにくくなります。contextやrepository understandingの工夫で技術的な効率は上がるものの、コミュニケーション面では堅苦しい雰囲気が続きがちです。
- PRコメントが定型的・事務的になり、チームの空気が固くなりやすい
- オンボーディング時、自己紹介やアイスブレイクの機会が少なく、初対面の開発者同士の距離が縮まらない
- 長時間のAI coding workflowで同じやり取りが続き、会話に遊び心が生まれにくい
- リポジトリやdirectory構造の説明に終始し、雑談や息抜きの余地がなくなる
- 「このPRは真面目すぎて逆に緊張する」と感じる場面が増える
ジョーク・パロディ系Skillがあれば、こうした堅さを一瞬でリセットし、チームの雰囲気を大きく変えるきっかけになります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Pull Requestコメントを忍者口調に自動変換して投稿し、開発現場にエンタメ要素と和やかな空気をもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- PRコメントやコードレビューが忍者ワールドに変換され、チームのコミュニケーションが一気に和む
- onboardingや初対面の開発者同士でも、堅苦しさを打ち破るきっかけを自然に作れる
- 長時間のAI coding workflowや長いsessionでも、遊び心を持ってリフレッシュできる
- repository understandingやcontextの説明も忍者口調になり、味気ないやり取りが面白くなる
- Skillの導入・適用が簡単なので、日常の開発フローにすぐ組み込める
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/pr-comment-ninja-translator .claude/skills/pr-comment-ninja-translator実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /pr-comment-ninja-translator
> この関数、もう少し短くできますか?
拙者思うに、この function、影のごとく短くする術が必要と見受けられるでござる。
もしや、無駄な変数を消すのも一計にござろうか?
御意見賜りたく候。
シーン2: monorepo / package 跨ぎ作業時
> packages/api/src/user.ts のロジック、packages/core/utils.ts に移動できませんか?
ふむ、packages/api/src/user.ts の術を packages/core/utils.ts へ移すのは、忍びとして理にかなう策でござる。
拙者、影のようにコードを移動する術、心得ておる。
異論なければ、即刻実行いたす所存。
シーン3: お遊び的な使い方
> バグを見つけました
ござる…バグの術か…?
拙者、すぐさま調査の忍法を発動いたす。
この不具合、闇に葬り去る所存にて候。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | コメントや説明が忍者口調で再開、空気が一気に和む |
| monorepo 移動 | 違う package のコードを参照しがち | 忍者流の案内でdirectoryやpathのやり取りも柔らかく |
| 長時間 workflow | long context で重要箇所が薄まる | 遊び心あるコメントで集中力も回復、会話が活性化 |
発動方式
明示呼び出し (/pr-comment-ninja-translator) と暗黙発動 (コメントや指示文がSkill descriptionにマッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/pr-comment-ninja-translator/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/pr-comment-ninja-translator/
├── SKILL.md
├── scripts/
│ └── ninja_translator.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/ninja_translator.py |
1文を忍者口調へ変換する |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: pr-comment-ninja-translator
description: Pull Requestのコメントが投稿・編集される際や、/pr-comment-ninja-translator コマンドで明示的に呼び出された場合に発動。キーワード: PRコメント, 忍者口調, ジョーク, 変換, レビュー。
---
# 機能概要
このSkillは、Pull Requestのコメント文を自動で“忍者口調”に変換し、開発現場にユーモアをもたらします。通常のレビューコメントが「拙者思うに…」「ござる」などの忍者ワールドに早変わり。真剣な議論も一瞬で和み、チームの雰囲気が柔らかくなります。エンタメ枠として、日々の開発の息抜きやアイスブレイクに最適です。
# 使い方
- 明示的な呼び出し例:
`/pr-comment-ninja-translator この変数名は分かりにくいです。`
- 暗黙発動キーワード例:
PRコメント投稿時に「忍者」「ござる」「拙者」などの単語が含まれる場合、またはSkill設定で自動変換をONにしている場合に自動発動します。
# 出力例
```terminal
> /pr-comment-ninja-translator この関数はバグがあります
拙者申す、この関数、バグの術にござる。修正の巻、お願い仕る。
> /pr-comment-ninja-translator 変数名をもっと分かりやすくしてください
拙者思うに、この変数名、影の如く分かりにくき候。分かりやすき名へと変えるのが良きと存ずる。
> /pr-comment-ninja-translator テストが落ちています
ござる…テスト、落ちてしまったでござる。
```
# 注意点
- 原文の意味を大きく損なわない範囲で忍者口調へ変換しますが、完全な意図伝達は保証されません。
- 機密情報や真面目な議論には適用しないよう注意してください。
- ローカルには変換ログ等は保存しません。
- 既存コメントの編集にも適用可能ですが、元文書のバックアップは自動で取得されません。
# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 公式GitHub API: https://docs.github.com/en/rest/issues/comments
- 日本語自然言語処理: https://github.com/megagonlabs/ginza
scripts/ninja_translator.py
import argparse
import sys
import re
import logging
from typing import List
# 忍者口調テンプレート集
NINJA_PREFIXES = [
'拙者思うに、',
'拙者申す、',
'ござる…',
'これは忍法…',
'影の如く、',
'これはまさしく、',
'お主、',
'この術、',
]
NINJA_SUFFIXES = [
'でござる。',
'の巻。',
'候。',
'仕る。',
'にござる。',
'と存ずる。',
'でござろうか。',
'でござるか?',
]
NINJA_WORDS = [
('バグ', 'バグの術'),
('修正', '修正の巻'),
('変数', '変数、影の如し'),
('関数', '関数、忍法'),
('テスト', '試練の術'),
('分かりにくい', '影の如く分かりにくき候'),
('分かりやすい', '明けの巻の如く分かりやすき候'),
('お願いします', 'お願い仕る'),
('してください', 'してくだされ'),
('できません', '叶わぬでござる'),
('落ちています', '落ちてしまったでござる'),
]
# ログ設定
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
def ninjaify_sentence(sentence: str) -> str:
"""
1文を忍者口調へ変換する
"""
# 既に忍者語が含まれていたらスキップ
if re.search(r'(拙者|ござる|候|仕る|忍法|の巻)', sentence):
return sentence
# 重要語句を忍者語に置換
for orig, ninja in NINJA_WORDS:
sentence = re.sub(orig, ninja, sentence)
# プレフィックス・サフィックスをランダムに付与
import random
prefix = random.choice(NINJA_PREFIXES) if random.random() < 0.7 else ''
suffix = random.choice(NINJA_SUFFIXES) if random.random() < 0.8 else ''
# 句読点を調整
sentence = sentence.strip()
if not sentence.endswith(('。', '!', '?', '.', '!', '?')):
sentence += '。'
return f"{prefix}{sentence}{suffix}"
def ninjaify_text(text: str) -> str:
"""
複数文を忍者口調に変換
"""
# 文区切り
sentences = re.split(r'(?<=[。.!?])\s*', text)
ninja_sentences = [ninjaify_sentence(s) for s in sentences if s.strip()]
return '\n'.join(ninja_sentences)
def process_file(input_path: str, output_path: str = None):
try:
with open(input_path, encoding='utf-8') as f:
text = f.read()
ninja_text = ninjaify_text(text)
if output_path:
with open(output_path, 'w', encoding='utf-8') as f:
f.write(ninja_text)
print(f"変換結果を {output_path} に保存したでござる。")
else:
print(ninja_text)
except Exception as e:
logging.error(f"ファイル処理中にエラー: {e}")
sys.exit(1)
def cli():
parser = argparse.ArgumentParser(description='PRコメントを忍者口調に変換するでござる。')
subparsers = parser.add_subparsers(dest='command')
# 変換コマンド
parser_convert = subparsers.add_parser('convert', help='テキストを忍者口調に変換')
parser_convert.add_argument('text', nargs='?', help='変換したいテキスト')
parser_convert.add_argument('-f', '--file', help='テキストファイルから変換')
parser_convert.add_argument('-o', '--output', help='変換後の出力ファイルパス')
# テストコマンド
parser_test = subparsers.add_parser('test', help='サンプル変換を表示')
args = parser.parse_args()
if args.command == 'convert':
if args.file:
process_file(args.file, args.output)
elif args.text:
print(ninjaify_text(args.text))
else:
print('テキストまたはファイルを指定してくだされ。')
sys.exit(1)
elif args.command == 'test':
samples = [
'この関数はバグがあります',
'変数名をもっと分かりやすくしてください',
'テストが落ちています',
'修正をお願いします',
'このロジックは分かりにくいです',
]
for s in samples:
print('原文:', s)
print('忍者:', ninjaify_text(s))
print('---')
else:
parser.print_help()
def main():
cli()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、Pull Requestのコメントを日本語忍者口調に自動変換することで、開発現場にユーモアを加えることを目的としています。ジョーク枠として、堅苦しいレビューの雰囲気を和らげる設計です。
# 公式ドキュメント抜粋
- GitHub Issues/PR Comments API: https://docs.github.com/en/rest/issues/comments
- 日本語形態素解析: https://github.com/megagonlabs/ginza
# 利用例
- PRコメント「テストが落ちています」→「ござる…テスト、落ちてしまったでござる。」
- 「変数名をもっと分かりやすくしてください」→「拙者思うに、この変数名、影の如く分かりにくき候。分かりやすき名へと変えるのが良きと存ずる。」
# 注意点
- 原文の意味が極端に失われないよう、単語単位での置換+テンプレート挿入を採用。
- 機密性の高い内容や公式記録には適用しないよう注意。
- 変換ログや元文のバックアップは自動で保存されません。
# 設計方針
- 既存の自然言語処理ライブラリを活用せず、シンプルな正規表現とテンプレートで高速実装。
- コマンドライン引数やファイル入力にも対応し、ローカルテストやバッチ変換も可能。
- エンタメ性重視のため、多少の意味変化や語感の遊びを許容しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Claude Code がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/claude-code/pr-comment-ninja-translator .claude/skills/pr-comment-ninja-translator
.claude/skills/pr-comment-ninja-translator の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/pr-comment-ninja-translator
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /pr-comment-ninja-translator と Skill 名で出てきます。
5. 動作確認
/pr-comment-ninja-translator で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。
こんな瞬間に便利
- session 開始時: PRコメントや自己紹介を忍者口調で和ませたいとき
- monorepo 移動時: packagesを跨いだやり取りをエンタメ化したい場面
- onboarding 時: 新規参加者との距離を一気に縮めたいとき
- session 再開時: 長時間のやり取りで空気が重くなったときのリフレッシュ
- package 跨ぎ作業時: directoryやpath管理の説明をユーモラスにしたいとき
- long-running workflow 前: 会話のマンネリを打破し、集中力を回復させたいとき
気になるポイント (壊れそうな箇所)
実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:
- stale context 問題: 長時間 workflow で忍者口調が冗長になり、逆に伝わりづらくなる可能性
- directory 増えすぎ問題: PRコメントの変換対象が多いと、出力が長くなり過ぎてしまう
- monorepo 肥大化: packagesが多い構成で、忍者語変換が単調になりやすい
- irrelevant path 混入: 変換対象外のコメントや自動生成文まで変換されるリスク
- Claude Code 固有の引っかかり: Skill descriptionのマッチ精度によっては意図しないタイミングで発動する
- 発動しないケース: コメント文が曖昧すぎる/他Skillが優先/PR外のやり取り
試す前に確かめたいこと
この Skill を実運用に投入する前に確かめたい問いを並べる:
- 実repoでのtoken消費は許容範囲か?
- monorepo (packages多数) で安定して動くか?
- stale contextにならず、長時間workflowでも遊び心が維持されるか?
- CLAUDE.mdとの連携時、説明文も忍者口調で違和感なく使えるか?
- どんな文章でも忍者口調へ面白く変換されるか?
- 既存PRコメントへの適用が簡単か?
- 原文の意味が極端に失われないか?
実際に Claude Code で試した検証ログは Claude Codeで忍者口調に変換してみた!PRコメントが一気に忍法合戦に にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
