Slide 1

Slide 1 text

個人iOSアプリ開発で使っている Claude Code Hooksの紹介 nkjzm 2025年09月05日

Slide 2

Slide 2 text

なかじ @nkjzm ● VRとプログラミング が得意 ● 最近将棋のYouTubeチャンネルを始め た Unity / VR Engineer

Slide 3

Slide 3 text

今日話すこと ● Claude Code Hooksの概要 ● 個人開発アプリでの活用について

Slide 4

Slide 4 text

作っているアプリ 『毎日ジムに行くこと』を コンセプトにした トレーニング記録のアプリ GitHubのContributionsのように トレーニング実績を確認できる 毎日ジム

Slide 5

Slide 5 text

毎日ジムでの Claude Code 活用 Claude Codeが76%くらいの コードを書いている Claude Codeに書かせる上で コード品質を保つための工夫が必要 → Claude Code Hooksを紹介

Slide 6

Slide 6 text

Claude Code Hooksとは ● Claude Codeのライフサイクルの様々な時点で実行される ユーザー定義のシェルコマンドのこと ● LLMによる実行ではないので、確実に実行される ○ 一方で、CLAUDE.mdに書いた内容は無視されることがある Claude Code フックを始める https://docs.anthropic.com/ja/docs/claude-code/hooks-guide

Slide 7

Slide 7 text

Claude Code Hooksはいつ実行できる? Hooksを設定できるタイミングはいろいろある(太字はよく使いそうなもの) ● PreToolUse: ツール呼び出しの前に実行(ブロック可能) ● PostToolUse: ツール呼び出し完了後に実行 ● UserPromptSubmit: ユーザーがプロンプトを送信したときに、 Claudeが処理する前に実行 ● Notification: Claude Codeが通知を送信するときに実行 ● Stop: Claude Codeが応答を終了するときに実行 ● SubagentStop: サブエージェントタスクが完了するときに実行 ● PreCompact: Claude Codeがコンパクト操作を実行しようとする前に実行 ● SessionStart: Claude Codeが新しいセッションを開始するか既存のセッションを再開するときに実行 ● SessionEnd: Claude Codeセッションが終了するときに実行 Claude Code フックを始める - Anthropic より

Slide 8

Slide 8 text

PreToolUseとPostToolUseは、もう少し細かく指定できる( matcher) ● Task - サブエージェントタスク (サブエージェントドキュメントを参照) ● Bash - シェルコマンド ● Glob - ファイルパターンマッチング ● Grep - コンテンツ検索 ● Read - ファイル読み取り ● Edit、MultiEdit - ファイル編集 ● Write - ファイル書き込み ● WebFetch、WebSearch - Web操作 Claude Code フックを始める - Anthropic より

Slide 9

Slide 9 text

実際に開発で使っている Hooksの抜粋(ファイルの編集後) ファイルの編集後に実行 ローカライズキーのバリデータ フォーマッタ( json) フォーマッタ(コード)

Slide 10

Slide 10 text

Hooksで実行したコマンドの終了コードが 2の時、 stderrをClaude Codeにフィードバックする仕組みがある (一般的なエラー時の終了コード 1ではフィードバックされないので注意) → エラーが発生すると、 Claude Codeが対処をしてくれる状態になる 開発で使っているHooksでは… ● フォーマッターの場合 ○ 基本的にフォーマット実行のみ ○ フォーマットできないような構文エラーがあるとClaude Codeに通知 ● ローカライズキーのバリデーションの場合 ○ キーの過不足があったらClaude Codeに通知 Hooks実行時のエラーを Claude Codeに通知する フック リファレンス - Anthropic より

Slide 11

Slide 11 text

Hooksでエラーが出たときの実際の様子 エラー時の stderr (修正のための情報も 併せて出力) Claude Code(LLM)側が エラーを受けて対応をする →自走状態

Slide 12

Slide 12 text

実際に開発で使っている Hooksの抜粋(応答終了後) PostToolUseと同じ内容を Stop側でも実行している (serenaなど別のツール経由でファイル編集がされることがあるので念のため) 接続中の実機に対してビルド + インストール + 起動を行うワンライナー Claude Code終了後に、指示した内容が反映されたアプリが起動している状態になる

Slide 13

Slide 13 text

おまけ:よくミスする操作の工夫 jsonの編集が頻繁に失敗する(構文エラー状態になる)ので、 専用のシェルスクリプトを用意したらミスが減った プロジェクト内のCLAUDE.mdより抜粋

Slide 14

Slide 14 text

おわり