💡

AIによる学習:ChatGPT先生にCDK v2 (TypeScript) を教えてもらったときに使ったプロンプトパターン

2023/08/06に公開

概要

3カ月ほどかけて CDK v2 (TypeScript) の勉強をしていました。そのときの勉強方法が『ひたすらChatGPTに教えてもらう』でした。ChatGPT 3.5 を使ってどのようにCDK v2 を勉強したかを備忘録としてここに残します。

ChatGPTについて

無料版の ChatGPT 3.5 (GPT-3.5) を使用しました。

技術力について

執筆時点の私のCDK v2 の技術力を見える化するとたぶんココらへん。

  • 勉強開始時の知識
    • CDK v2 わからん
    • JavaScript知ってるけどTypeScritp知らない

※グラフは "完全に理解した曲線" をベースに自作したCDKの熟練度グラフ

勉強方法について

最初に1週間くらいは、独学で CDK v2 の基礎を習得し、あとはChatGPT 3.5 に質問しまくってコードを書いてもらいました。さきほど紹介した、自作のCDKの熟練度グラフだとこんな感じ。

独学期間では、CDK v2 について ChatGPT 3.5 用にプロンプトを書くことができることと、ChatGPTが出力した結果の真偽を確認できる技術(*1)を習得してました。

  • (*1)具体的には以下です。
    • CDKコードをデプロイできる
    • デプロイ時にエラーが発生したかわかる

作成したコードについて

あまり整理してないけど、ここにおいてます。

https://github.com/zgw426/AWS-CDK_memo/tree/main


ここから ChatGPTの話になります

ChatGPT 3.5 はなぜか CDK v2 コードを書いてくれる

よくわかりませんが、ChatGPT 3.5 はなぜか CDK v2 コードを書いてくれます。

AWS CDK v2 は、2021年12月に一般公開されたそうです。かたや、ChatGPT 3.5 は、2021年9月までの情報しか無いとのこと。なので、ChatGPT 3.5 は CDK v2 の情報は持ってないはず。ですが聞き方(プロンプトの書き方)によっては CDK v2 のコードを書いてくれました。なぜ、CDK v2 コードが書けるのかよくわかりませんが、ありがたいことなのでスルーします。

プロンプトパターン概要

CDK v2 (TypeScript) を ChatGPT 3.5 を教えもらったときのプロンプトパターンの概要です。

  • (1)サンプルコードを書いてもらう
  • (2)作成したコードで発生したエラーを対処してもらう
  • (3)作成したコードを書き換えてもらう
  • (4)補填してもらう
  • (5)分割してもらう

プロンプト詳細

プロンプトパターン概要で紹介したプロンプトの詳細です。

(1)サンプルコードを書いてもらう

以下のプロンプトで

プロンプトパターン(1)サンプルコードを書いてもらう
#命令書
あなたはプロのプログラマーです。以下の制約条件に従って、入力する条件をもとにスクリプトをかいてください。

#制約条件
・aws cdk v2 スクリプト
・プログラム言語はTypeScript

#入力する文章
VPCとCloud9を作るスクリプトを作る。
VPCは、NATGWを持つパブリックサブネットワークが2つと、外部に直接アクセスできないプライベートサブネットワーク2つを持つ。
Cloud9はプライベートサブネットに配置し、IAMユーザーは、hoge,fugaの2ユーザー分のCloud9を作成する。

(2)作成したコードで発生したエラーを対処してもらう

ChatGPT 3.5 に書いてもらったコードを実行したときに発生したエラーを ChatGPT 3.5 に修正してもらうときにプロンプトです。このプロンプトを数回繰り返しても、エラーを対処できない場合は、従来の方法(Google検索)で対処しました。

プロンプトパターン(2)作成したコードで発生したエラーを対処してもらう
以下のコードで発生したエラーを対策してください。

#コード
{CDK v2 TypeScript コード}

#エラー
{エラーメッセージ}

(3)作成したコードを書き換えてもらう

作成したコードの一部を書き換えたい場合に使用したプロンプトです。以下例は、リージョンを明示するようコードの書き換えをお願いしています。他には変数名を書き換えたり、CFnOutputのコードを追記したいときとかに使いました。

東京リージョンを明示するようコードを修正してもらう
#命令書
あなたはプロのプログラマーです。以下の制約条件に従って、入力する条件をもとにスクリプトをかいてください。

#制約条件
・aws cdk v2 スクリプト
・プログラム言語はTypeScript
・cdk deployは東京リージョンで実行
・デプロイするリソースは東京リージョン

#入力する文章
以下のスクリプトを参考にして、S3バケットを作成するスクリプトを書いて

"""typescript
import { App, Stack, StackProps } from 'aws-cdk-lib';
import { Bucket } from 'aws-cdk-lib/aws-s3';

class MyStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);

    // S3バケットを作成
    const bucket = new Bucket(this, 'MyBucket', {
      bucketName: 'my-unique-bucket-name',
    });
  }
}

const app = new App();
new MyStack(app, 'MyStack');
app.synth();
"""

(4)補填してもらう

サイトで紹介されているコードは、importなどの記載が省略されており、そのままでは実行できないコードがあります。そのように省略されたコードを補填してもらいます。

プロンプトパターン(4)AWSがサイトで提供するサンプルを実行可能なコードに更新する
以下のコードについて、不足しているコードを追記してください。

#コード
{CDK v2 TypeScript コード}

(5)分割してもらう

プロンプトパターン(1)~(4)で得たコードは1ファイルでまとめられたコードになります。CDK v2 では、./bin./lib 配下のディレクトリにコードを分割することが通例のようです。そのため、得たコードを分割してもらいます。

プロンプトパターンですが、メモ残ってなくてわかりません(やっちまった)
たしか、こんな感じだったと思う。

(5)分割してもらう(こんな感じだったはず)
以下のコードについて、interfaceとclassを別ファイルに分割してください。

#コード
{CDK v2 TypeScript コード}

これでおわり
誰かの役に立てば幸いです。

Discussion