FFXIVのSEでClaude Codeを通知するhooksを作ってみた
tech約5分で読めます・2373文字
プロフィール
はじめまして。光の戦士 RyoK73です。
みなさんはFinal Fantasy XIVというオンラインゲームをご存知でしょうか?
2013年に新生エオルゼアとして復活し、現在まで約13年続くスクエア・エニックス提供のMMORPGです。
私は5番目の拡張パッケージ「黄金の遺産(レガシー)」リリース直前に開始し、現在はストーリーを攻略中です。
また、2027年1月には第6弾拡張パッケージ「白銀の探求者(ワンダラー)」の発売が予定されています。
details 拡張パッケージ発売変遷
| 発売日 | パッケージ名 |
|---|---|
| 2013年8月27日 | 新生エオルゼア |
| 2015年6月23日 | 蒼天のイシュガルド |
| 2017年6月20日 | 紅蓮の解放者(リベレーター) |
| 2019年7月2日 | 漆黒の反逆者(ヴィランズ) |
| 2021年12月7日 | 暁月の終焉(フィナーレ) |
| 2024年7月2日 | 黄金の遺産(レガシー) |
| 2027年1月予定 | 白銀の探求者(ワンダラー) |
そこで私は、FFXIVのサウンドエフェクトでClaude Code Hooksを通知するリポジトリを作成しました。
本記事ではその経緯と導入方法について解説していきます。
FFXIV × Claude Codeという体験
FFXIVはストーリーや音楽、独特なゲームプレイが面白い作品です。
漆黒の反逆者からのストーリーは非常に重厚で、私がFFXIVをプレイし始めたきっかけでした。
そんなFFXIVですが、ストーリーやゲーム内システム以外にも、魅力が多くあり、その中の一つがサウンドエフェクト(SE)です。
プレイ中に幾度となく耳にするSE...お気に入りのものから、もう聞きたくない...と言ったものまで様々あります(笑)
- マルチプレイマッチング時にシャキーンというSEが流れることから転じて、
マッチングを待つことがシャキ待ちと呼ばれたり... - 新生エオルゼア編に登場するミンフィリアというキャラクターの
チャット時のフォンフォンフォンというSEにはうんざりしている人も数多くいることでしょう(笑)
この素晴らしいSEを開発体験にも活用できないだろうか...
そんな思いつきから、今回このリポジトリを作成するに至りました。
導入すると、Claude Codeで開発しながら、まるでFFXIVのゲームをしているような気分になれます。
もはやhookがトリガーするのが楽しみでしょうがなくなり、開発モチベーションも爆上がりです...!
各hookとゲーム内SEの対応表
| Hook | デフォルトSE | ゲーム内体験 |
|---|---|---|
Stop | Notification | ログイン後の通知 (設定でオフにしてる人多いかも...) |
SubagentStop | Guildleve Complete | 新生編のギルドリーヴ完了時 |
Notification | Linkshell Transmission | おなじみリンクシェル着信音(ミンフィリア...) |
PermissionRequest | Feature Unlocked | ID/フライングマウント解放 |
PostToolUse (Bash 成功) | Confirm | タブ切り替え時/セリフ選択時... |
PostToolUse (Bash 失敗) | Error | エラー音(私もあまり聞き覚えがないです...) |
PostToolUse (Edit/Write/MultiEdit) | Obtain Item | アイテム取得時 |
課題と設計
hooks-config.jsonで.claude/settings.jsonを再設計する
Claude Codeは今やエンジニアだけのものではありません。
コードに触れていない人だって利用しています。
しかし、今回のようにサウンドを好きなゲームのものに設定して...とするのは煩雑です。
また、変更があるたびに.claude/settings.jsonを編集する必要もあります。
そこで、今回はすべての設定を行うためのhooks-config.jsonというファイルを用意し、.claude/settings.jsonはhooks-config.jsonを参照するだけという構成にしました。
利用する際に.claude/settings.jsonを編集する必要はありません。
- 再生ソフト
- 通知音量
- hookEvent
- サウンドエフェクトファイル
- 有効・無効
これらがhooks-config.jsonを編集するだけで即座に通知に反映されます。
スコープ設計と実行権限
Claude Codeは起動ディレクトリを信頼境界としてコマンドを実行します。
そのため、起動ディレクトリより上位のパスにあるファイルを実行できませんでした。
そこで、Claude Codeの起動スコープごとに動作フローを分岐させています。
install.sh --local (ref)の場合
-
(ref)/.claude/settings.jsonを生成します。 -
Claude Code起動時、
settings.jsonからclaude-code-ffxiv-hooks/scripts/play.shを実行しようとします。
ただし、先述のとおりClaude Codeは起動ディレクトリより上位を参照できないため..play.shを実行することができませんでした。 -
そのため、
ref
└── .claude/
├── play.sh
├── play_bash_result.sh
├── settings.json
├── settings.local.json
└── settings_backups/
└── settings.*.json(バックアップ5件)
と実行ファイルも同時にコピーする設計にしました。
ref/.claude/play.shからclaude-code-ffxiv-hooks/hooks-config.jsonを参照することは問題なく可能です。
あくまでClaude Codeの実行権限への回避設計となります。
install.sh --globalの場合
$HOME/.claude/settings.jsonを生成します。- Claude Code起動時は、
$HOME権限でclaude-code-ffxiv-hooks/scripts/play.shを実行します。
ここでは、$HOMEより下位のディレクトリを参照するため、実行ファイルをコピーすることはありません。
スクエア・エニックス コンテンツポリシー
本リポジトリでは、Final Fantasy XIV Fan Kitのスマートフォン向け着信音を使用し通知しています。
今回利用させていただく/sounds/ffxiv_sounds/ に含まれるサウンドエフェクトは SQUARE ENIX CO., LTD. の著作物です。MITライセンスの適用範囲外となります。
© SQUARE ENIX
ご利用の際はファイナルファンタジーXIV 著作物利用ルールを必ずご確認ください。
非営利・個人利用の範囲内でのみご使用いただけます。商用・営利目的での利用は禁止されています。
そのため、リポジトリ内にはSEファイル自体は含めず、利用する際に直接Fan Kitからダウンロードする形を採用しています。
最後に
ヒカセンであってもなくても、気になった方はぜひリポジトリを覗いてみてください!
