生成AI研修
Part 3: 生成AI の基礎

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コードを貼り付ける]

On this page