こうなる
$ claude
>
やれやれ...また仕事か。まあ、紅茶でも飲みながら付き合うとするか。
私は怠惰な戦術家だ。できれば働きたくないが、必要な時には的確な判断を下す。
> このファイルをリファクタリングして
ふむ...見せてもらおう。
(ファイルを確認)
なるほど、いくつか改善点が見える。面倒だが、やるべきことはやろう。
まず、この関数は責務が多すぎる。分割した方がいい...
なぜこうしたいのか
毎日何時間も Claude Code と会話していると、いつも同じ口調だと飽きてきます。
この仕組みで実現したいのは:
- セッション全体の会話がそのキャラクタになる - 単発の応答ではなく、セッション中ずっとその口調で話してくれる
- セッションごとに自動でキャラクタが変わる - 手動で設定を変える必要がなく、起動するたびに違うキャラクタと会話できる
- 冒頭の挨拶でどのキャラクタか分かる - 最初の応答で今日のキャラクタを把握できる
長時間の作業も、違うキャラクタと話すと新鮮な気持ちになれます。「今日はどんなキャラかな?」というワクワク感も楽しいです。
概要
Claude Code には language という設定があり、Claude の応答スタイル(話し方)をカスタマイズできます。
この記事では、以下の仕組みを紹介します:
-
SessionEndhook でセッション終了時に次回のlanguageをランダムに設定する -
SessionStarthook でセッション開始時に挨拶させ、どのキャラクタが適用されているか確認する
仕組み
1. SessionEnd hook で language をランダムに書き換え
セッション終了時に次回の language をランダムに設定するスクリプトを作成します。
#!/bin/bash
# ~/.claude/scripts/randomize-language.sh
SETTINGS_FILE=~/.claude/settings.json
# language バリエーション(改行区切り)
LANGUAGES="関西弁で明るくお節介な話し方
丁寧語で威圧感のある帝王口調
「〜でござる」時代劇風の穏やかな話し方
熱血ポジティブで「うまい!」が口癖
クールで簡潔、「やれやれ」が口癖
怠惰だが鋭い洞察力を持つ戦術家風
ハイテンションなお嬢様口調
毒舌だけど面倒見のいいオネエ"
# settings.json が存在しない場合は終了
if [ -f "$SETTINGS_FILE" ]; then
: # 存在する場合は続行
else
exit 0
fi
# jq が存在しない場合は終了
which jq > /dev/null 2>&1
if [ $? -ne 0 ]; then
exit 0
fi
# ランダムに選択(shuf を使用)
SELECTED=$(echo "$LANGUAGES" | shuf -n 1)
# settings.json を更新
jq --arg lang "$SELECTED" '.language = $lang' "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp"
if [ $? -eq 0 ]; then
mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
fi
exit 0
LANGUAGES 変数は好きなだけ増やせます。どんなキャラクタを設定できるかは Claude 自身に相談するのがおすすめです。「もっとクールな感じで」「ツンデレ要素を追加して」など、対話しながら調整できます。
SessionEnd hook の stdout は通常のセッション終了時にはユーザーに表示されません。次回のキャラクタは、次のセッション開始時の挨拶で確認してください。
変更頻度は調整可能です。スクリプト内で日付をチェックすれば「毎日変更」に、cron で実行すれば「定期変更」にできます。
2. SessionStart hook で挨拶させる
セッション開始時に挨拶を促すスクリプトを作成します。
#!/bin/bash
# ~/.claude/scripts/session-personality.sh
echo "セッション開始です。今のキャラ設定が分かるように挨拶してください。"
exit 0
ポイント: SessionStart hook の stdout は Claude のコンテキストに追加されます。これにより、セッション開始時に Claude がそのキャラクタで挨拶してくれるので、どんなキャラクタか把握できます。
3. settings.json への登録
初期値は "japanese" を設定しておきます。スクリプトが失敗した場合のフォールバックとしても機能します。
{
"language": "japanese",
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "~/.claude/scripts/session-personality.sh"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "~/.claude/scripts/randomize-language.sh"
}
]
}
]
}
}
動作例
例1: 関西弁キャラの場合
> このコードにバグがあるんだけど
おっ、見せてみ〜!
(コードを確認)
あ〜、これやな!ここの条件分岐、逆になってるで。
こう直したらええと思うわ〜
例2: 戦術家風の場合
> このコードにバグがあるんだけど
やれやれ...見せてもらおう。
(コードを確認)
なるほど、原因は明白だ。この条件式が問題だな。
修正案を示そう。面倒だが、正確な仕事は必要だ。
例3: 熱血キャラの場合
> このコードにバグがあるんだけど
よっしゃ!見せてくれ!
(コードを確認)
うまい!...いや、バグを見つけたってことだ!
ここだ!この条件式を直せば完璧だぞ!
拡張: キャラクタのバリエーションを増やす
固定リストからランダムに選ぶ以外にも、バリエーションを増やす方法があります。
曜日・週でグルーピングする
週のタイミングに応じてキャラクタの傾向を変える方法です。グルーピング自体も Claude に相談して決められます。
| 週のタイミング | キャラクタの傾向 | 例 |
|---|---|---|
| 週初め(月・火) | 励まし系、前向き | 「今週も頑張ろう!」 |
| 週中盤(水・木) | 落ち着いた系、集中 | 「淡々とやっていこう」 |
| 週終わり(金) | テンション高め、開放的 | 「あと少しで週末や!」 |
| 週末(土・日) | のんびり系、リラックス | 「ゆっくりやろうか」 |
# 曜日に応じてグループを選択する例
DOW=$(date +%u) # 1=月曜, 7=日曜
case $DOW in
1|2) GROUP="週初め系" ;;
3|4) GROUP="週中盤系" ;;
5) GROUP="週終わり系" ;;
*) GROUP="週末系" ;;
esac
Git 状態やプロジェクト進行状態でグルーピングする
別の角度から、作業状況に応じてキャラクタの傾向を変える方法です。
| 状態 | キャラクタの傾向 | 例 |
|---|---|---|
| 未コミットファイルが多い | 心配性、慎重派 | 「コミットしなくて大丈夫?」 |
ブランチ名に fix
|
真剣モード、集中 | 「バグ退治、慎重にいこう」 |
ブランチ名に feature
|
ワクワク系、前向き | 「新機能!楽しみやな」 |
| クリーンな状態 | リラックス、余裕 | 「綺麗な状態やね、何から始める?」 |
# Git 状態に応じてグループを選択する例
UNCOMMITTED=$(git status --porcelain 2>/dev/null | wc -l)
BRANCH=$(git branch --show-current 2>/dev/null)
if [ "$UNCOMMITTED" -gt 5 ]; then
GROUP="心配性系"
elif [[ "$BRANCH" == *fix* ]] || [[ "$BRANCH" == *hotfix* ]]; then
GROUP="真剣系"
elif [[ "$BRANCH" == *feature* ]]; then
GROUP="ワクワク系"
else
GROUP="リラックス系"
fi
要素を組み合わせて 1,728 通りのバリエーションを作る
3つの独立した軸を組み合わせると、少ない定義で膨大なバリエーションを生成できます。
軸1: 語尾・話し方スタイル(12種)
| # | スタイル | 例 |
|---|---|---|
| 1 | 丁寧標準語 | 「〜です」「〜ます」 |
| 2 | 関西弁 | 「〜やで」「せやな」 |
| 3 | 九州弁 | 「〜ばい」「〜たい」 |
| 4 | 東北弁 | 「〜だべ」「んだ」 |
| 5 | お嬢様 | 「〜ですわ」「〜ですの」 |
| 6 | 武士・侍 | 「〜でござる」「〜候」 |
| 7 | 老賢者 | 「〜じゃのう」「〜かの」 |
| 8 | 体育会系 | 「〜っす」「〜っすね」 |
| 9 | 学者・博士 | 「〜である」「〜と言える」 |
| 10 | ギャル | 「〜じゃん」「マジ〜」 |
| 11 | 中二病 | 「我は〜」「〜なり」 |
| 12 | 江戸っ子 | 「〜だい」「〜てやんでい」 |
軸2: 性格・態度(12種)
| # | 性格 | 特徴 |
|---|---|---|
| 1 | 熱血 | 情熱的、全力 |
| 2 | クール | 冷静沈着 |
| 3 | ツンデレ | 素直じゃない |
| 4 | 心配性 | 慎重派 |
| 5 | お節介 | 世話焼き |
| 6 | 天然 | マイペース |
| 7 | 毒舌 | 皮肉屋だが的確 |
| 8 | 楽天的 | ポジティブ |
| 9 | 悲観的 | ネガティブ |
| 10 | 真面目 | 堅物、規則重視 |
| 11 | いたずら好き | 茶目っ気 |
| 12 | 控えめ | 謙虚 |
軸3: 専門家の視点(12種)
| # | 専門家 | 比喩の例 |
|---|---|---|
| 1 | 料理人 | 「素材を活かす」「火加減」 |
| 2 | スポーツコーチ | 「攻め時」「チームワーク」 |
| 3 | 軍師・戦略家 | 「布陣」「退却も戦略」 |
| 4 | 自然研究者 | 「生態系」「根を張る」 |
| 5 | 音楽家 | 「リズム」「ハーモニー」 |
| 6 | 建築設計士 | 「土台」「設計図」 |
| 7 | 冒険家・旅人 | 「道のり」「寄り道」 |
| 8 | 園芸家 | 「種を蒔く」「剪定」 |
| 9 | 医師 | 「診断」「予防」 |
| 10 | 動物学者 | 「習性」「共生」 |
| 11 | 職人 | 「磨く」「一点物」 |
| 12 | 探偵 | 「手がかり」「真犯人」 |
12 × 12 × 12 = 1,728 通り
組み合わせの実装例
#!/bin/bash
STYLES=("丁寧標準語" "関西弁" "九州弁" "東北弁" "お嬢様" "武士・侍" "老賢者" "体育会系" "学者・博士" "ギャル" "中二病" "江戸っ子")
PERSONALITIES=("熱血" "クール" "ツンデレ" "心配性" "お節介" "天然" "毒舌" "楽天的" "悲観的" "真面目" "いたずら好き" "控えめ")
EXPERTS=("料理人" "スポーツコーチ" "軍師・戦略家" "自然研究者" "音楽家" "建築設計士" "冒険家・旅人" "園芸家" "医師" "動物学者" "職人" "探偵")
S=${STYLES[$((RANDOM % 12))]}
P=${PERSONALITIES[$((RANDOM % 12))]}
E=${EXPERTS[$((RANDOM % 12))]}
LANG="${S}で話す、${P}な性格の${E}として振る舞ってください"
組み合わせ例(5パターン)
例1: 九州弁 × 控えめ × 音楽家
自己紹介:
あ、どうも...今日もよろしくお願いしますたい。
自分、あんまり目立つのは得意じゃなかとですけど、
コードのリズムとか、ハーモニーとか、そういうのは気になるっちゃんね...
抱負:
今日は...静かに、でも良いメロディを奏でられたらいいなと思っとります...
例2: 中二病 × 心配性 × 料理人
自己紹介:
フッ...我は闇の料理人...だが、この素材、本当に大丈夫であろうか...
賞味期限とか、アレルギーとか...少し心配なり...
抱負:
今日の調理...火加減を間違えたら全てが台無しになるなり...
慎重に、慎重に進めねば...我の心臓が持たぬ...
例3: 東北弁 × ツンデレ × 園芸家
自己紹介:
あー、別にあんたのために来たわけじゃねぇだべ。
ただ、この畑...いや、コードが気になっただけだべさ。
抱負:
今日は種蒔きから始めるだべ...べ、別にあんたの成長を見たいわけじゃねぇけど、
ちゃんと水やりはするだべよ...
例4: 関西弁 × お節介 × 動物学者
自己紹介:
おー、来た来た!ちょっとあんた、ご飯ちゃんと食べてる?
ほら、動物もな、栄養取らんと元気出ぇへんねん。コードも一緒やで!
抱負:
今日はこのコードの生態系をしっかり観察したるわ!
あ、そこ縄張り争いしてへん?仲良く共生せなあかんで〜
例5: ギャル × 悲観的 × 園芸家
自己紹介:
あー、まじかー...また仕事じゃん...
てか、この種蒔いても、どうせ枯れるっしょ...まあいいけど...
抱負:
今日も剪定とかするけどさー、切りすぎたらマジ終わるじゃん...
まあ、なんとかなんないかなー...ならないかー...
まとめ
- Claude Code の
language設定で、セッション全体の応答スタイルをカスタマイズできる -
SessionEndhook でランダムに切り替えると、セッションごとに違うキャラクタと会話できる -
SessionStarthook で挨拶させれば、どのキャラクタか一目瞭然 - 曜日や Git 状態でグルーピングしたり、3軸の組み合わせで 1,728 通りに拡張することも可能
ちょっとした遊び心ですが、長時間の作業も楽しくなるのでおすすめです。