ChatGPTをさっと使って部分的に生産性を向上させる

# 前提
本稿では生成AIのサービスはChatGPTを使うことのみ想定。GitHubCopilotなど他のサービスでは普通に使える機能も混ざっている可能性がある。
本稿では「さっと使って部分的に」がテーマである。要件確定～設計～開発まで生成AIドリブンで限りなく自動化して、という大層なことには触れない。

# 使い道

## データ変換系

### json⇔csv切り替え
```
以下のjson配列を、「キー1」「キー2」「キー3」が列名であるcsvに変換してください。
{json配列}
```

### jsonデータからjsonスキーマ作成
```
以下のjson配列について考えます{json配列}
これを以下のjsonスキーマのような形にしてください。
{jsonスキーマ}
```
ここでいうjsonスキーマは以下のようなfunction callingのスキーマを想定しています。
```
"parameters": {
    "type": "object",
    "properties": {
        "list":{
        "type" "array",
        "items": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "日本の都市名を表す文字列です。",
            },
            "unit": {
              "type": "string",
              "description": "気温を取得する場合の単位です。摂氏と華氏のいずれかです。",
              "enum": ["celsius", "fahrenheit"],
              "default": "celsius",
            },
            "required": ["location", "unit"],
          }
        }
        }
    },
    "required": ["list"],
},
```
### json⇔pydanticモデル

```
以下のjson配列をpydanticモデルに変換してください。{json配列}
```

入力
```
{
  "function_call": {
    "function_name": "get_weather_forecast",
    "parameters": {
      "location": {
        "city": "Tokyo",
        "country": "Japan"
      },
      "date": "2024-12-03",
      "units": "metric"
    }
  },
  "response": {
    "status": "success",
    "data": {
      "location": {
        "city": "Tokyo",
        "country": "Japan"
      },
      "forecast": [
        {
          "date": "2024-12-03",
          "temperature": {
            "min": 8,
            "max": 15
          },
          "condition": "Cloudy"
        },
        {
          "date": "2024-12-04",
          "temperature": {
            "min": 9,
            "max": 16
          },
          "condition": "Sunny"
        }
      ]
    }
  },
  "error": null
}
```

出力
```
from typing import List, Optional
from pydantic import BaseModel


class Location(BaseModel):
    city: str
    country: str


class Temperature(BaseModel):
    min: int
    max: int


class Forecast(BaseModel):
    date: str
    temperature: Temperature
    condition: str


class ResponseData(BaseModel):
    location: Location
    forecast: List[Forecast]


class FunctionCallParameters(BaseModel):
    location: Location
    date: str
    units: str


class FunctionCall(BaseModel):
    function_name: str
    parameters: FunctionCallParameters


class Response(BaseModel):
    status: str
    data: Optional[ResponseData]


class Error(BaseModel):
    code: Optional[str]
    message: Optional[str]


class RootModel(BaseModel):
    function_call: FunctionCall
    response: Optional[Response]
    error: Optional[Error]


# JSONデータをPythonオブジェクトに変換する例
json_data = {
    "function_call": {
        "function_name": "get_weather_forecast",
        "parameters": {
            "location": {
                "city": "Tokyo",
                "country": "Japan"
            },
            "date": "2024-12-03",
            "units": "metric"
        }
    },
    "response": {
        "status": "success",
        "data": {
            "location": {
                "city": "Tokyo",
                "country": "Japan"
            },
            "forecast": [
                {
                    "date": "2024-12-03",
                    "temperature": {
                        "min": 8,
                        "max": 15
                    },
                    "condition": "Cloudy"
                },
                {
                    "date": "2024-12-04",
                    "temperature": {
                        "min": 9,
                        "max": 16
                    },
                    "condition": "Sunny"
                }
            ]
        }
    },
    "error": None
}

# Pydanticモデルのインスタンスを作成
model_instance = RootModel(**json_data)
print(model_instance)

```

### unicode文字を変換

ログで日本語がunicode文字で出てきてしまったときによく使う
```
｛対象のunicode文字｝を日本語に変換してください
```

## その他

### テストデータ準備
```
以下の関数のテストデータを作成してください。
ただし、境界値やカバレッジなどについても考慮して複数セット用意してください。
{関数}
```

### cURL⇔wget⇔pythonのrequestsモジュールでの記法変換
（省略）