AIをチューターにして自分でコードを書く学習方法
更新公開タグ:何か新しい技術を学ぶとき、どんな方法で学習していますか?
私の場合、公式ドキュメントのチュートリアルを触ってみて、そのあと技術書を読んだりUdemyの講座を受講したりすることが多かったです。しかし、これだけで実務で通用するレベルに到達するのは正直難しいです。実務レベルを100とすると、体感でチュートリアルが10、技術書やUdemyが20くらいでしょうか。大きなギャップを感じます。
この点に関してよく言われているのは、その技術を使って個人開発をするとよい、ということです。確かに作りたいものがあればそれが一番だと思いますが、必ずしも作りたいものがあるわけじゃないし、かといって技術書やUdemyのレベルを繰り返していてもなあと思っていました。
そこでふと「AIにプロジェクトの案を出させて、チューターになってもらえばいいのでは?」と思い試してみたところ、かなりいい感じに学習が捗りました。先ほどの実務レベルのたとえで言うと、60くらいの水準まで来られたと感じます。
百番煎じくらいのAI活用ネタだと思いますが、この記事ではその方法を紹介します。
実際に作った学習用プロジェクト
inkstandという記事投稿・購入プラットフォームをつくりました。noteみたいなWebサービスです。学習用なのでデプロイはしていません。
技術スタックはNext.js v16、Supabase、Stripe、Resendなどです。
この題材にしたのは、他人の記事を勝手に編集できないようにする認可や、有料部分をサーバー側で切り落とすペイウォール、Webhookが再送されても購入が二重にならない冪等性の担保といった要素が入るからです。
こうした実務では必要になるものの既存の教材ではあまり扱われない要素を含めると、実務とのギャップを埋めやすくなると思います。
進め方
生成AIはClaudeを使っています。
- Claudeに学習対象を伝え、プロジェクト案を出力させる
- やってみたいプロジェクトを選択し、そのプロジェクトのCLAUDE.mdを出力させる。このとき、AIに書かせる範囲やステップの粒度も一緒に指示しておく
- Claudeにプロジェクトのセットアップを指示し、完了したら学習開始
- 1コミット分くらいの粒度でタスクを区切り、自力で完了させてClaudeにレビューさせる。レビューが通るまで繰り返す
学習の質を上げるためのTips
続いて学習の質を上げるためのTipsを紹介します。ここで挙げるものは、ほとんどがCLAUDE.mdを出力させる段階で仕込んでおくものです。
AIに書かせる範囲を決める
AIに書かせる範囲を最初に決めておくと学習がスムーズに進みます。
今回のプロジェクトでは、CLAUDE.mdに役割分担を書いています。
AIに書かせるもの
- 環境構築・設定ファイル・npm scripts・ディレクトリの雛形
- テスト環境の設定
- スタイリング・見栄えの調整
自分で書くもの
- DBスキーマ・サーバー処理・認可・UIロジック・テストコード
AIの担当はエラーの原因説明・ヒント・設計相談・コードレビューで、答えのコードは出させないようにしています。
自分が学びたいことは何かをCLAUDE.mdに言語化しておくのがコツです。
細かくステップに分ける
学習を進めるにあたって、実装を細かくステップに分けておくと進めやすいです。具体的には1ステップ1コミットぐらいの粒度にすると便利だと思います。
まず大雑把に機能ごとにステップを分け(例えば、「ユーザー登録」や「認可」など)、そのステップをさらに細分化していきます。これはCLAUDE.mdを生成する段階であらかじめ指示しておくとよいです。
粒度の目安としては、CLAUDE.mdに「15分以内に終わり、結果が画面・ログ・DBのどれかに見えること」と書いています。あわせて、確認方法を示さないまま次のステップへ進ませないことも禁止事項として書いています。
何がどうなれば正しいのかが毎回示されるので、動いているか分からないまま先へ進んでしまうことがなくなります。
AIへの質問はしっかり言語化する
詰まって自力で解決できなかったときはAIに質問します。このとき、実装の意図や期待した動作、エラーになる原因の仮説などを言語化するのがおすすめです。
もっと雑に聞いてもAIは解決してくれますが、入力を洗練させることでよりよい出力を得られますし、何より言語化のトレーニングになります。
ヒントは答えではなく着眼点を出させる
質問したときにいきなり答えを出力させるのではなく、着眼点を提示するようにしています。答えではなく、どこを見ればいいかだけを示させるイメージです。
答えを出力させることで目の前の問題は解決しますが、理解への寄与は薄くなってしまいます。なるべく自分で考える時間を増やし、その場しのぎでない理解を深められるようにしています。
ただし、何時間も悩み続けても非効率です。10分間は自分で考える、といった時間で区切るルールを設けるとよいと思います。
ステップの終わりにレビューさせる
AIにレビューさせるときは、観点を決めておくと指摘が安定します。
CLAUDE.mdには、セキュリティ、命名、配置と責務、型が契約として効いているか、条件分岐の網羅、アクセシビリティ、重複の7つを重要度順に書いています。「動くかどうか」だけを聞いたときでも、この観点でその場で指摘させるようにしています。
観点を決めておかないと、レビューのたびに指摘の粒度が変わってしまうからです。
レビューのあとには、そのステップの実装や判断を正しく理解できているかを確認する質問もさせています。自分では分かったつもりでいた箇所のズレに気づけます。
なお、レビューの前に自分のコードの良い点を褒めさせるようにもしています。単にレビューさせるだけだと味気ないですし、AIと言えども褒められて悪い気はしません。ただ精神論的ではあるので、いらない人は入れなくてもいいと思います。
CLAUDE.mdは書き換えながら使う
学習を進めるにつれて、もっとステップの粒度を細かくしたいとか、全く知見のない分野なので教えてもらいながら進めたい、といったことを思うかもしれません。そのときはAIにそうしたい旨を伝え、必要であればCLAUDE.mdに記載しておきます。
気兼ねなくこういった要望を反映できるのがAIチューターのメリットです。
また、決めたことや後回しにした課題も記載しています。決めたことは議論の蒸し返しを防げますし、後回しにした課題は次にやることとして残ります。セッションをまたいでも引き継がれるので便利です。
まとめ
この記事では、AIにプロジェクトの案を出させ、チューターになってもらう学習方法を紹介しました。
- AIに書かせる範囲を最初に決める
- ステップは確認方法とセットで細かく分ける
- 答えではなく着眼点を出させる
- 決めたことと後回しにした課題はCLAUDE.mdに書き戻す
どれもCLAUDE.mdに書いておくだけのことです。とはいえ、ここを決めずに始めるとAIはすぐに答えを出してきますし、こちらもつい受け取ってしまいます。
この方法で、チュートリアルや技術書だけでは届かなかったところに手が届くようになりました。
作りたいものが特にないけれど手を動かして学びたい、という人には向いている方法だと思います。参考にしてみてください。