Notebook LMとGitHub Copilotを使って学習を回す
最近実践している、新しい言語やプロダクトの理解をする際の勉強方法を共有します。
使うもの
- Notebook LM
- VSCode
- Github Copilot
教師を作る
まずは、Notebook LMで言語のベースとなる教師を作ります。
もう比較的一般的な方法になるかとは思いますが、まず学習する言語などのオープンになっているリファレンスドキュメントを探します。すべてを網羅したベースとなるリファレンスが一つになっているとよいのですが、必ずしもそうではないかと思います。その場合は複数のソースを取り込むとよいとでしょう。ただ、むやみやたらとリソースを追加しても、回答の制度は上がるどころか下がる一方だとおもうので、それなりに絞ったリソースを追加するのが良いようには思います。
PDFになっているとベストですが、Notebook LMはURLでアクセスした先の文書も読み込みが可能。読み込めないというパターンも少なくないですが。
事前学習をする
Notebook LMで言語、環境の特徴や概要を教えてもらいます。概要と、その特徴が分かれば、コードを読む心づもりができるかと思います。
コードを読む
サンプルコードを読んでみます。VSCodeを使うことを想定していますが、別にVSCodeに限らずシンタックスハイライトが最低限効く環境であればそれでいいので、開いてまず読んでみます。多分サンプルコードぐらいでしたら読むことができるとは思います。
動いているコードを読む
次に、それなりのボリュームのある、運用されているオープンなコードを読んでいきます。動いているサービスのコードであれば確実に動作をする生きた教材です。githubを確認すれば、どんな言語でも生きているコードが多少は出てくるかと思います。社内で使われている言語やプラットフォームであれば、社内にも閲覧可能なコードがあるかと思います。実際にそういったコードを読んでみます。サンプルコードと違って、生きているコードは初見では全然わかりません。生きているコードでは、書いている人の癖もあり、見えづらいこともあってチュートリアルが終わった後に放り出されると、まったく読めないことも多々あります。素晴らしく綺麗なコードであれば、一定読めるとは思いますが、泥臭いコードになると、一定読みにくさが増します。
コードを読むきっかけを作る
次に、何かしらそのコードの中での関心ごとを一つ決め、それを適当なキーワードであたりをつけて検索をしていきます。複数のファイルにまたがっているコードベースであれば、まずもって何がどのファイルなのかわからないので、探すところからスタートです。
手あたり次第にコードのキーワードを拾ってさらっと読み、それらしいコードを見つけたらビンゴです。詳細にコードを読んでみましょう。この「関心ごとに関連するコードを探す」作業はプロダクト全体像の理解においても、コードを書いている人の癖に目を慣らすという点においても非常に有効だと考えています。
詳細に読み込む際には、コードの一部を選択してgithub copilot chatで要約を依頼します。この時ctrl + i
でチャットウインドウを開き、/explain
で要約をしてくれるので活用して理解を深めながら進めます。一つ一つの関数については、github copilotよりもNotebook LMのほうがより正確な表現をしてくれるので、必要に応じて使い分けながら理解を進めていくと、学習が進みやすいです。Notebook LMの特性上、ふわっと「概要」とかを聞くとふわっとした回答しか返ってこないので、リソースとなっているドキュメントの中で具体的に知りたいことを聞くと、より明確な回答となると思います。
実際に書く
コードが追えて、コードが修正できるようになったら今度はゼロからプロジェクトを立ててみるということができるかと思います。githubと伴走してもらいながらコードを書き、わからないところはgithubやNotebook LMに確認していきます。Notebook LMでは、回答を作成するのに使ったドキュメントの引用箇所を参照することができるので、さらに深堀したり、場合によってはググったりして自分の書くコードをより深く理解できるように努力をします。
コマンドラインのエラー
ビルドの実行時にコマンドラインでエラーが表示されたなら、それもcopilot chatに@terminal /explain
で解説をしてもらいましょう。エラーの解決方法自体は的外れなことのほうが多いようには思いますが、出力内容がおおすぎて、terminal上では重要なところを見逃してしまいがちであってもそこのエラーの内容自体は拾ってくれるため、その部分だけは一定の信用ができます。解決方法はおいておいて、エラーの解説だけは原因を考えるきっかけづくりとして利用しましょう。
コードを理解する努力をする
その場ですべてが理解できなくても、努力するだけでよいです。理解できなかったところをとりあえず何かに書いておき、全く違うところで理解できることも多々あるので、その時までわからなかったことリストにストックしましょう。聞けばよいからと理解する努力を放棄するのだけはだめです。
一つ一つの理解を積み重ねることで、全然読めなかった、書けなかったコードが数日でも比較的すらすらと読めるようになっていることでしょう。
まとめ
新しい言語やプラットフォームを使うことになった場合に、Notebook LMおよびGithub copilotを使うことで学習を高速化し、コーディングを進めることができます。わからないことをその都度確認しながら進めることができるため、初めての技術でも比較的速度を落とさずに、学びを止めずに仕事を進めることが可能です。
技術についてのビギナーでコードのレビューが適切に行えない場合には、CLINEを使うよりもNotebookLMとGithub Copilotを使って効率的にまずは学習をすることが大事なので、新しい技術を扱う場合には、こちらのスタイルで学習を進めるほうがおすすめです。学習が進んだらCLINEやGithub Copilotのエージェントモードを組み合わせてそもそものコード生成自体をAIに投げることも考えて良いです。(ただし、その質的な保証は自分自身がわかっていないとできないので、やっぱり自分で書けることも大事)
Discussion