Ask モードの効果的な活用
学習目標
Ask モードを使って、コードの理解、技術的な質問、アイデアのブレインストーミングを効果的に行う方法を学習します。
学習内容
1. Ask モードの基本
演習1: モードの切り替えと基本的な質問
- Ask モードへの切り替え
- Chat view を開く(Ctrl+Alt+I)
- モードドロップダウンから「Ask」を選択
-
または直接開く: VS Code Stable
-
基本的な質問の練習
2. コードの理解
演習2: 複雑なコードの解析
-
サンプルコードの準備
public class OrderProcessor { private readonly IOrderRepository _orderRepo; private readonly IInventoryService _inventory; private readonly IPaymentGateway _payment; private readonly INotificationService _notification; public async Task<OrderResult> ProcessOrderAsync(Order order) { using var transaction = await _orderRepo.BeginTransactionAsync(); try { // 在庫確認 var availableItems = await _inventory.CheckAvailabilityAsync( order.Items.Select(i => (i.ProductId, i.Quantity)) ); if (!availableItems.All(a => a.IsAvailable)) { return OrderResult.InsufficientInventory( availableItems.Where(a => !a.IsAvailable).ToList() ); } // 支払い処理 var paymentResult = await _payment.ProcessPaymentAsync( order.PaymentInfo, order.TotalAmount ); if (!paymentResult.IsSuccessful) { return OrderResult.PaymentFailed(paymentResult.ErrorMessage); } // 注文保存 order.PaymentTransactionId = paymentResult.TransactionId; order.Status = OrderStatus.Confirmed; await _orderRepo.SaveOrderAsync(order); // 在庫更新 await _inventory.ReserveItemsAsync(order.Id, order.Items); await transaction.CommitAsync(); // 通知送信 await _notification.SendOrderConfirmationAsync(order); return OrderResult.Success(order.Id); } catch (Exception ex) { await transaction.RollbackAsync(); throw; } } }
-
理解を深める質問
3. ブレインストーミング
演習3: 機能拡張のアイデア出し
-
既存システムの拡張
-
アーキテクチャの検討
4. コンテキストを活用した質問
演習4: #-mentionによる具体的な質問
-
ファイル全体の分析
-
複数ファイルの関連性
-
コードベース全体の理解
5. 特殊なキーワードの活用
演習5: @-mentionとスラッシュコマンド
-
@-mentionの使用
-
スラッシュコマンドの活用
実践プロジェクト
シナリオ: レガシーコードの理解と改善
既存のレガシーシステムを理解し、改善提案を行います:
- コードの理解フェーズ
// LegacyOrderManager.cs public class LegacyOrderManager { private SqlConnection _connection; public void ProcessOrder(int orderId) { _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString); _connection.Open(); var cmd = new SqlCommand("SELECT * FROM Orders WHERE Id = " + orderId, _connection); var reader = cmd.ExecuteReader(); // 複雑な処理ロジック... } }
質問: - "このコードの問題点を列挙してください" - "モダンなC#での書き換え案を提示してください"
-
改善提案フェーズ
-
段階的移行の計画
応答の活用
コードブロックの適用方法
- Apply in Editor
- 提案されたコードをエディタに直接適用
-
スマートな挿入位置の自動判定
-
Copy to Clipboard
- 必要な部分だけをコピー
-
他のファイルやドキュメントへの転用
-
Insert at Cursor
- カーソル位置への正確な挿入
- 部分的な変更に便利
Ask モードのベストプラクティス
効果的な質問の仕方
- 具体的で明確な質問
- ❌ "このコードを改善して"
-
✅ "このコードのエラーハンドリングを改善し、ログ出力を追加してください"
-
コンテキストの提供
- ❌ "認証を実装して"
-
✅ "#User.cs #IAuthService.cs JWT認証を実装してください"
-
段階的な質問
- まず概要を理解
- 次に詳細を掘り下げる
- 最後に具体的な実装方法
Quick Chat の活用
素早い質問には Quick Chat (Ctrl+Shift+Alt+L) を使用: - 簡単な構文の確認 - エラーメッセージの意味 - ライブラリの使用方法
まとめ
学習した内容: - Ask モードの基本的な使い方 - コード理解のための効果的な質問方法 - ブレインストーミングへの活用 - コンテキストを使った具体的な質問 - 応答の様々な活用方法
次のステップ
次は「Edit モード」について学習し、複数ファイルの効率的な編集方法を習得しましょう。