はじめに
Claude Codeを便利に使うための拡張機能であるカスタムスキル(Skills)。定型的なワークフローや独自のコマンドを定義して作業を自動化している方も多いのではないでしょうか。
私はキーボード入力の手間を減らしたい、いわゆるめんどくさがりなタイプで、その解消策としてスキルにAskUserQuestionを組み込むことをよくやっています。今回はこの組み込みツールの利点と、その簡単な導入方法について紹介します。
結論:ユーザー確認は「自由入力」から「選択肢」へ
スキル実行中にユーザーへ確認・ヒアリングを行う際、自由記述で質問していませんか?
Claude: 「どの環境にデプロイしますか? staging または production と入力してください。」
あなた: (キーボードでカタカタ...)staging [Enter]
AskUserQuestion を使えば、これが選択式のインタラクティブなUIに変わります。
1. 矢印キーや番号でサクッと選べて入力が楽
自由記述だとスペルミスや表記揺れ(stg / staging / stage など)が発生し、スキルのパース処理がコケる原因にもなります。選択肢UIなら、キーボードの上下選択や1キータッチで即決定できます。
2. 「有力な選択肢」をAI自身に推論・提示させられる
事前に固定の選択肢を用意するだけでなく、コンテキストを読んだClaudeに「最適な選択肢の候補」を推論させて提示させることができます。
- 「コードの差分を見たところ、コミットメッセージのプレフィックスは
feat:またはfix:が適切そうです。どちらにしますか?」 - 「エラーログから推測すると、原因はDB接続か環境変数設定です。どちらの調査を優先しますか?」
このように、AI側から候補を絞り込んで提示してくれるため、ユーザー側の思考リソースや入力の手間を削減できます。
実装は簡単(面倒なフロー制御は不要)
「インタラクティブな確認を入れるとなると、複雑な分岐処理やスクリプトが必要なのでは?」と思うかもしれませんが、面倒な実装は一切不要です。
必要な設定は以下の2点だけです。
- スキルの
allowed-toolsにAskUserQuestionを追加する - プロンプト内に「
AskUserQuestionを使って選択肢を提示すること」と指示する
実装例:デプロイ・リリースコマンド用スキル
.claude/skills/deploy.md (またはスキルの定義ファイル)に以下のように書くだけで動作します。
---
name: deploy-app
description: アプリケーションをビルドして指定の環境にデプロイするスキル
allowed-tools:
- Bash
- AskUserQuestion
---
## 指示
1. 現在のGitブランチと変更ステータスを確認してください。
2. デプロイ先を決定するために、`AskUserQuestion` を使用してユーザーに以下の選択肢を提示してください。
- `staging` (ステージング環境)
- `production` (本番環境)
- `preview` (PRプレビュー環境)
3. ユーザーの選択に応じて、適切なビルドおよびデプロイコマンド(Bash)を実行してください。
4. 実行結果をサマリーとして報告してください。
実装例:AIに選択肢を推論させるスキル(コミットメッセージ作成)
---
name: smart-commit
description: 変更内容を解析して最適なコミットメッセージを提案・実行するスキル
allowed-tools:
- Bash
- AskUserQuestion
---
## 指示
1. `git diff` を解析し、変更内容の要約を作成してください。
2. 変更内容に基づき、適切なコミットメッセージの候補(Conventional Commits準拠)を3つ推論してください。
3. `AskUserQuestion` を使用し、推論した3つのメッセージを選択肢としてユーザーに提示してください。
4. ユーザーが選択したメッセージで `git commit` を実行してください。
このように、ツールの利用許可を与えてプロンプトで指示するだけで、Claudeが自律的に適切なタイミングで AskUserQuestion を呼び出してくれます。
おまけ:CLAUDE.md に書いておくのもおすすめ
スキル内だけでなく、プロジェクト全体の振る舞いを定義する CLAUDE.md に以下のようなルールを追記しておくのも地味に便利です。
## Interaction Guidelines
- ユーザーに2つ以上の選択肢や方針を確認する際は、可能な限り `AskUserQuestion` ツールを使用して選択肢形式で質問してください。
これを記述しておくと、通常の対話セッション中にもClaudeが自発的に選択肢UIを使ってくれるようになり、ターミナル上でのやり取りが一段とスムーズになります。
まとめ
- スキルに
AskUserQuestionを組み込むと、入力の手間が削減され、スペルミスなどの事故も防げる。 - 「AIに最適な選択肢を推論させて提示させる」 ことで、スキルの実用性と体験(UX)が向上する。
- 実装は利用可能ツールへの指定とプロンプトへの1行で完結。
カスタムスキルを作成する際は、AskUserQuestion の組み込みを検討してみてはいかがでしょうか。