最近、会社では ChatGPT の試用をプログラマーの間で推進しています。試用した人の中には、このものが自分のコーディングの考え方に影響を与え、効率を低下させると感じる人もいます。一方で、試用した人の中には、これに夢中になって離れられず、パソコンの画面が常に ChatGPT によって生成されたテキストの画面になっている人もいます。私もプログラミングの面での ChatGPT の使用シーンを記録してみました。
コード#
コードの理解#
日常的に要件を書くとき、最初から書くわけではありません。多くの場合、他の人が以前に書いたコードを基に修正を行います。各人のコードのスタイルと複雑さは異なります。このような場合、まずコードのロジックを基本的に整理するために ChatGPT を使用します。
キーワード:コードの説明、例を挙げる:{コードの断片}
例
@Aspect
@Slf4j
@Component
public class LogAspect {
public final static String TRACE_LOG_ID = "traceId";
/**
* 切面表达式 此次切面为service的实现类
*/
@Pointcut("execution(* org.lmingyu.projects.cs.*.service.*.impl.*.*(..))")
public void logPointcut() {
}
/**
* 打印日志
*
* @param pjp 入参 traceId从第一个参数获取
* @return 结果
* @throws Throwable 异常
*/
@Around("logPointcut()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
String traceId = MDC.get(TRACE_LOG_ID);
if (StringUtils.isBlank(traceId)) {
if (pjp.getArgs().length > 0 && pjp.getArgs()[0] instanceof BaseReq) {
BaseReq req = (BaseReq) pjp.getArgs()[0];
if (StringUtils.isNotBlank(req.getTraceId())) {
traceId = req.getTraceId();
}
}
if (StringUtils.isNotBlank(traceId)) {
MDC.put(TRACE_LOG_ID, traceId);
} else {
MDC.put(TRACE_LOG_ID, UUID.randomUUID().toString());
}
}
long startTime = System.currentTimeMillis();
// 打印请求参数
log.info("入参:{}", JSON.toJSONString(pjp.getArgs()));
Object result = pjp.proceed();
// 打印出参
log.info("耗时{}ms,出参:{}", System.currentTimeMillis() - startTime, JSON.toJSONString(result));
return result;
}
}
ChatGPT の回答:
コードの作成#
たまに自分が学んだことのない言語でコードを書くのは非常に困難です。この場合、ChatGPT に書いてもらうことができます。または、大まかな実装のアイデアがあるが、どこから始めればいいかわからない場合も、ChatGPT にデモを書いてもらうことができます。
# ChatGPTに、python3.7を使用して完全なスネークゲームのコードを書いてくださいと伝える
キーワード:python3.7を使用して完全なスネークゲームのコードを書いてください
- 提供されたコードが完全に書かれていない場合、ChatGPT に「後続のコードを提供してください」と伝えることができます。
- 提供されたコードに問題があり、実行時エラーが発生する場合、ChatGPT に「問題を説明して、コードを修正してください」と伝えることができます。コードが長すぎて、コードを生成するたびに時間またはトークンを無駄にする場合は、「問題を説明して、修正する必要がある行を指摘してください」というように説明することもできます。
ChatGPT が提供するコードには常に問題があり、解決策を提供するためには、コードを理解する必要があります(または ChatGPT にコードの意味を説明してもらうこともできます)。コードの問題を見つけ、明確に問題を指摘し、ChatGPT に問題の解決策を提供することで、問題解決のスピードを向上させることができます。
コードの品質向上#
ChatGPT にバグを修正してもらう
要件を書き終えた後、いくつかのコアロジックがある場合、ChatGPT にコードにバグがないか確認してもらうことができます。または、オンラインで問題が発生し、特定のコードの問題がわかっているが、具体的な問題の場所がわからない場合、ChatGPT に問題をチェックしてもらい、問題の解決策を提供してもらうことができます。
キーワード:バグを修正する:{コードの断片}
- 問題が発生した行が表示される場合、問題が発生したコードの行を ChatGPT に伝えることもできます。これにより、問題の特定がより正確に行われます。
- コードに非常に詳細な説明を追加することもできます。
ChatGPT にコードを最適化してもらう
ChatGPT にコードを最適化してもらうこともできます。
キーワード:コードを最適化する:{コードの断片}
SQL も最適化してもらうことができます。
キーワード:SQLの最適化:{SQLの断片}
-- 最適化前のSQL
SELECT COUNT(*) AS 'order_count',
SUM(amount) AS 'total_sales',
SUM(amount) / COUNT(*) AS'avg_sales_per_order'
FROM sales
WHERE user_id = 123
AND created_at BETWEENDATE_SUB(NOW(),INTERVAL 7 DAY) AND NOW();
--- 最適化後のSQL
SET @start_date = DATE_SUB(NOW(), INTERVAL 7 DAY);
SELECT
COUNT(*) AS 'order_count',
SUM(amount) AS 'total_sales',
SUM(amount) / COUNT(*) AS 'avg_sales_per_order'
FROM sales
WHERE
user_id = 123 AND
created_at BETWEEN @start_date AND NOW();
テストシナリオ#
テストデータの生成#
開発が終わった後、機能をテストするために自分でテストデータを生成する必要があります。この場合、ChatGPT にテストデータを生成してもらうことができます。これらのデータは、ChatGPT に対応するデータの Python コードを生成してもらうこともできます。
ユニットテストケースの生成#
コードを書いた後、対応するユニットテストケースを作成して、コードの安定性と正確性を確保する必要がありますが、ユニットテストケースの作成には時間がかかることがよくあります。時には元のロジックよりも複雑な場合もあります。この場合、ChatGPT にコードのユニットテストケースを作成してもらうことができます。
キーワード:対応するユニットテストケースを生成する {コードの断片}
問題解決のアシスタント#
要件を受け取るとき、通常はアイデアがなく、または複数の実装方法がある場合があります。この場合、ChatGPT に質問して、問題の解決策を提供してもらうことができます。
プログラミングの学習のサポート#
新しい技術を学ぶとき、どこから始めればいいかわからないことがよくあります。この場合、ChatGPT に学習の概要を提供してもらったり、学習計画を立ててもらったり、問題に直面したらそれを ChatGPT に投げてみたりすることができます。
使用上のヒント#
- 会話が長くなる場合は、セグメントごとに分割して対話し、各セグメントの終わりに「理解したら、理解したと答えてください」と付け加えます。
- ChatGPT の回答がほぼ完全で、修正が必要なのは一部の場合は、それは自分でやるべきです。ChatGPT に完全に一致する答えを求めることは得策ではありません。