9月頭に例の病1にかかってしまい、1週間程度寝込んでしまった。
2・3週間近くコーディングなどの技術的なことから離れてしまう羽目になり2、その間にすっかり何もできなくなってしまった。 これはいけないとリハビリをすることにした。以前からChatGPT Plusに課金していたので、せっかくなのでこれを使うことにした。
今回の例ではGPT-4を使い、TypeScriptを学習する例になる。
学習方法
2と3のPull Requestは省略してもいい。
- 学習したい内容についてお題を出してもらう
- お題をGitHub Issueにコピーして貼りつける
- 1つずつ解く。Pull Requestを作ったらコードを貼り付けて送信
- フィードバック内容をもとに更に質問したり、修正したりする
- 納得できたらmergeして次のお題に進む。以降繰り返す
1. 学習したい内容についてお題を出してもらう
雑に聞いてしまってもいいが、やりたいことやレベル感を示すと練習したいものに近いお題が返ってくる気がする。 次の文言が入っていれば良い。
- 言語
- (範囲を絞りたい場合)言語機能など
- レベル感
- お題を出してほしい旨
# 生成例 TypeScriptで処理を書くリハビリをしたいです。 何かお題を出せますか?初級者レベルからお願いしたいです。
2. お題をGitHub Issueにコピーして貼りつける
GitHub Issueにお題を転記しておくと、コードを解いているときに調べたことや考えたことをまとめておける。 ChatGPTは生成結果をクリップボードにコピーできるので、それを使ってやるのが良い。
コードブロックもコードブロックとしてコピーされる。すごい。複数のお題が返ってきた場合、1リスト:1 Issueにしておくといい。差分が小さい方が見返したときにわかりやすいため。
タスクリストにしておけばジャンルごとの学習内容をまとめておけるのでいいかもしれない。
3. 1つずつ解く。Pull Requestを作ったらコードを貼り付けて送信
解くときにテストケースを書いてもいいなと思った。お題と照らし合わせてレビューしてもらえる。 境界値やエッジケースも考慮してレビューしてくれるので、テストケースが足りていないか不安になることもない。
プロンプトは次の通り。ペルソナを与えるなどすればもっと自分の求める答えが返ってきそうだが、これだけでも充分レビューしてもらえる。
# ケースがあるとき 「タイトル」についてテストケースとコードを書きました。レビューいただけますか? # ケースがないとき 「タイトル」についてコードを書きました。レビューいただけますか?
コードが分かれる場合は次のように、コメントアウトにファイル名を書き、続けてコードも送る。
// A.ts // A.ts のコード // B.ts // B.tsのコード
4. フィードバック内容をもとに更に質問したり、修正したりする
生成AIなので、反対意見を壁打ちしたり、追加で質問したりできる。これがすごく嬉しい。
対人だと好みや相手の力量でレビューの深さが変わってしまう3が、ChatGPTだとわかりやすさを重視した安全寄りのレビュー観点で実施してくれる。
相手が生成AIなので、わざと頓珍漢な質問をして詳しく説明してもらうこともできる。反対意見も言いやすい。 突っ込んで何回も質問できるので、納得できるまで解説してもらう・案を聞いてみるなどするのがいい。
やり取りはPull Requestに転記しておくと、自分が詰まった点が記録できる。それをもとに更に次のお題を生成してもらえるので記録をつけておくといい。
今はできていないが、レビューや提案されたものが技術的に正しいか裏どりすると良さそう。裏どり結果もPull Requestに書いておけば自分の勉強記録もつけられて良さそう。
5. 納得できたらmergeして次のお題に進む。以降繰り返す
繰り返していると解けるものと解けないものが出てくるので、またお題を生成してもらう。 あとは繰り返し。
工夫点など
追加で質問をする場合「解答例は生成しないでください」とつけておいた方がいい。なぜなら質問した瞬間に解答例が生成されてしまうため。カンニングすると意味がないため、そもそも生成させないように指示する。やってほしくないことを明快に指示しないと親切心で余計なことをしてしまう…みたいなところは人と一緒かもしれない。
また、同じチャット内であれば過去のお題を参照できるので、複数の日にちがかかっても問題ない。 毎日1つくらいのペースで進めると無理なくできる。
GitHub Copilotでもできそうだが、Copilotは生成結果のコピーが面倒なのと、どうしても画面が狭くなりがちなので一長一短かもしれない。リポジトリのdiffを見てレビューできればCopilotの方が便利そう。とはいえ、記録をつけて見返したいならChatGPTの方が便利。
この技は新しい言語でも使えそうだなと思った。