AIによる学習:ChatGPT先生にCDK v2 (TypeScript) を教えてもらったときに使ったプロンプトパターン
概要
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コードをデプロイできる
- デプロイ時にエラーが発生したかわかる
作成したコードについて
あまり整理してないけど、ここにおいてます。
ここから 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)サンプルコードを書いてもらう
以下のプロンプトで
#命令書
あなたはプロのプログラマーです。以下の制約条件に従って、入力する条件をもとにスクリプトをかいてください。
#制約条件
・aws cdk v2 スクリプト
・プログラム言語はTypeScript
#入力する文章
VPCとCloud9を作るスクリプトを作る。
VPCは、NATGWを持つパブリックサブネットワークが2つと、外部に直接アクセスできないプライベートサブネットワーク2つを持つ。
Cloud9はプライベートサブネットに配置し、IAMユーザーは、hoge,fugaの2ユーザー分のCloud9を作成する。
(2)作成したコードで発生したエラーを対処してもらう
ChatGPT 3.5 に書いてもらったコードを実行したときに発生したエラーを ChatGPT 3.5 に修正してもらうときにプロンプトです。このプロンプトを数回繰り返しても、エラーを対処できない場合は、従来の方法(Google検索)で対処しました。
以下のコードで発生したエラーを対策してください。
#コード
{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
などの記載が省略されており、そのままでは実行できないコードがあります。そのように省略されたコードを補填してもらいます。
以下のコードについて、不足しているコードを追記してください。
#コード
{CDK v2 TypeScript コード}
(5)分割してもらう
プロンプトパターン(1)~(4)で得たコードは1ファイルでまとめられたコードになります。CDK v2 では、./bin
や ./lib
配下のディレクトリにコードを分割することが通例のようです。そのため、得たコードを分割してもらいます。
プロンプトパターンですが、メモ残ってなくてわかりません(やっちまった)
たしか、こんな感じだったと思う。
以下のコードについて、interfaceとclassを別ファイルに分割してください。
#コード
{CDK v2 TypeScript コード}
これでおわり
誰かの役に立てば幸いです。
Discussion