はじめに
こんにちは!物流開発部 USED開発ブロックの益田です。
本記事ではClaude CodeのAskUserQuestionツールについて紹介します。
AskUserQuestionとは
ReadやBashなどと同様にClaude Codeに組み込まれたツールのひとつで、ユーザーに選択肢形式の質問を提示してくれる機能です。2025年11月時点では公式ドキュメントにこちらに関する記載はありませんが、Claude Codeにツール定義を確認すると以下のような回答が返ってきます。
活用例
以下はガイドラインに沿ってデータベース設計のレビューを行ってくれるカスタムスラッシュコマンドのmdファイルの一部です。mdファイルに定義を記述することでClaude CodeがAskUserQuestionツールを起動してくれるようになります。
mdファイルに記述がなくても、Claude Codeが自動でAskUserQuestionツールを起動してくれる場合がありますが、確実に使用したい場合はmdファイルに明示的に定義することをおすすめします。
**日時/日付カラムの命名規則についてユーザーに事前確認**:
- 抽出したカラムから日時/日付カラム(`xxx_at`、`xxx_on`形式)を抽出
- **スキップ対象**:過去分詞形(`created_at`、`modified_at` など)、現在形(`expires_at`、`starts_on` など)
- **確認対象**:名詞形・動名詞形(`payment_at`、`order_at`、`start_date`、`end_date` など)
- 確認が必要なカラムについて、AskUserQuestionツールを使用して「過去のみ」か「未来を含む」かをユーザーに質問
- **重要**: 複数のカラムがある場合でも、**1回のAskUserQuestionツール呼び出しで複数の質問(questions配列)を使用して、各カラムを個別の質問として同時に確認する**(まとめて1つの質問にしない)
- 質問形式(各カラムごとに1つの質問):「カラム `{カラム名}` は過去のみですか、未来も含みますか?」
- 選択肢:
- 「過去のみ(過去分詞形推奨)」:そのカラムは常に過去の日時のみを指します。過去分詞形(例: paid_at)を推奨します。
- 「未来を含む(現在形推奨)」:そのカラムに未来の日時が含まれる可能性があります。現在形(例: pays_at)を推奨します。
- 回答に基づき判定:過去のみ→過去分詞形(`paid_at`)、未来を含む→現在形(`pays_at`)
実際にカスタムスラッシュコマンドを実行すると、AskUserQuestionツールが起動してインタラクティブな選択肢を表示してくれました。
選択肢の最後のType something.はデフォルトで用意されている入力欄になっています。

全て選択すると最後にSubmitを行うか確認があります。SubmitするとClaude Codeが回答を受け取って処理を続行してくれます。

まとめ
AskUserQuestionツールを使えば、Claude Codeがユーザーに質問しながら進めるようになります。
これまでテキストベースでやりとりしていた内容を、事前に選択肢として組み込むことで、
よりインタラクティブでスムーズなワークフローを実現できます。
ぜひ、皆さんのカスタムスラッシュコマンドやサブエージェントにも取り入れてみてください。

