Chapter 17: AI チャットでコードを扱う
ChatGPT / Claude でコードを読む・書く・直す
17.1 ChatGPT / Claude Web の使い方
ブラウザで使える AI チャットサービスを使いこなすための基本操作を押さえましょう。
主要サービスへのアクセス:
- ChatGPT:
https://chatgpt.com - Claude:
https://claude.ai - Gemini:
https://gemini.google.com
コードブロックの扱い:
AI がコードを出力するときは ``` で囲まれたコードブロックになります。右上の「Copy」ボタンでコードをまるごとコピーできます。
TODO: あとで実際のスクリーンショットに置き換え - ChatGPT のチャット画面でコードブロックが表示されている様子(Copyボタンが見える状態)
ファイルのアップロード: ChatGPT Plus や Claude では、コードファイルを直接アップロードして「このファイルを説明して」と依頼できます。
TODO: あとで実際のスクリーンショットに置き換え - Claude のファイルアップロードボタンの場所
17.2 コードを読んでもらう
既存のコードを AI に説明させるのは非常に効果的な使い方です。引き継ぎや勉強に役立ちます。
基本的な説明依頼:
以下の Python コードの処理内容を、初心者にわかるように説明してください。
関数ごとに何をしているかを教えてください。
def calculate_discount(price, user_rank):
discount_rates = {"gold": 0.2, "silver": 0.1, "bronze": 0.05}
rate = discount_rates.get(user_rank, 0)
return price * (1 - rate)処理フローを図で説明させる:
以下のコードの処理フローを Mermaid の flowchart で表現してください。
[コードを貼り付ける]特定の観点で読んでもらう:
以下のコードについて、次の観点で分析してください。
1. このコードが解決しようとしている問題
2. アルゴリズムの計算量(Big-O)
3. 改善できそうな箇所
[コードを貼り付ける]17.3 コードを書いてもらう
コードを生成してもらうときは、「何を作るか」を具体的に伝えることが重要です。
シンプルな関数生成:
Python で以下の仕様の関数を書いてください。
- 関数名: parse_japanese_date
- 入力: 「令和5年3月15日」のような和暦文字列
- 出力: datetime オブジェクト
- エラー処理: 不正な入力の場合は ValueError を raise
- 型ヒントを付ける
- docstring を書くボイラープレートの生成:
FastAPI + SQLAlchemy を使ったユーザー管理 API のボイラープレートを生成してください。
エンドポイント: GET /users, POST /users, GET /users/{id}, DELETE /users/{id}
DB モデル: User(id, email, name, created_at)
バリデーション: Pydantic を使用
ファイル構成も含めて提示してください。既存コードへの機能追加:
以下の関数に、ログ出力とリトライ処理(最大3回)を追加してください。
ライブラリは標準の logging と tenacity を使ってください。
[既存のコードを貼り付ける]生成コードを使う際の注意点:
- 必ずコードを読んで理解してから使う
- 動作確認・テストは自分で行う
- セキュリティに関わる部分(認証・暗号化・SQL)は特に慎重にレビューする
17.4 エラーを解決してもらう
エラーが出たときに AI に相談するのは非常に効果的です。ポイントは「エラーメッセージをそのまま貼り付ける」ことです。
エラー解決の基本プロンプト:
以下のエラーが発生しています。原因と解決方法を教えてください。
【エラーメッセージ】
Traceback (most recent call last):
File "main.py", line 42, in process_data
result = df.groupby("category").sum()
KeyError: 'category'
【コード(エラーが起きている箇所の前後)】
```python
def process_data(df: pd.DataFrame) -> pd.DataFrame:
# カテゴリ別に集計
result = df.groupby("category").sum()
return result【状況】 CSV ファイルを読み込んで処理しようとしています。 データは社内システムからエクスポートしたものです。
**デバッグを手伝ってもらう**:このコードが期待した動作をしません。
【期待する動作】 入力リストの重複を除いて、出力する
【実際の動作】 重複が除かれているが、元の順序が崩れている
【コード】 [コードを貼り付ける]
順序を保ったまま重複を除く方法に修正してください。
---
## 17.5 効果的なコード関連プロンプト集
よく使うプロンプトのテンプレートをまとめます。コピー&ペーストして活用してください。
**コードレビュー依頼**:以下のコードをレビューしてください。 観点: バグ・セキュリティ問題・可読性・パフォーマンス 指摘は重要度(高/中/低)付きで、改善案のコードも示してください。
[コードを貼り付ける]
**テストコード生成**:以下の関数に対する pytest のユニットテストを書いてください。 正常系・異常系・境界値のテストケースを網羅してください。
[コードを貼り付ける]
**リファクタリング**:以下のコードを、可読性を保ちながらリファクタリングしてください。 変更前後のコードと、何を改善したかの説明をセットで示してください。
[コードを貼り付ける]
**ドキュメント生成**:以下の関数に、Google スタイルの docstring を日本語で追加してください。 引数・戻り値・例外・使用例を含めてください。
[コードを貼り付ける]
**コードの変換・移植**:以下の JavaScript コードを、同じ動作をする Python コードに書き直してください。 Python らしい書き方(Pythonic)を心がけてください。
[JavaScriptコードを貼り付ける]