AI時代における車輪の再発明型学習のあり方 〜AI Agent自作 with AIから学ぶ〜
クリスマスイブですね。皆様いかがお過ごしでしょうか。私は先週テネシー州ナッシュビルで学会に参加しまして1、アメリカのクリスマスをちょっと感じてきました。
今回は、AI時代における車輪の再発明型学習がどうあるべきかについて、実際にやってみた経験をもとに今考えていることを紹介しようと思います。
車輪の再発明型学習とは
ここでは、「既に世間で普及している技術について、一からコードを書いてStep by Stepで再実装してみる学習法」を指します。
学習法自体はソフトウェアエンジニアの間では一般的なものだと思います。ある技術を基礎から理解する上でとても強力な学習法です。しかしこれを一言で表す単語が見つからなかったので、本記事では「車輪の再発明型学習」と呼ぶことにします。
またさまざまな技術について、車輪の再発明型学習をするための自作コンテンツが、インターネット記事や本で提供されています。パッと思いつく限りでも以下のようなものがあります。
また大学などの教育機関での講義・演習においても一般的なのではないでしょうか。東京大学理学部情報科学科の名物とされているプロセッサ・コンパイラ実験もそうですし、 自分自身も京都大学でプロセッサ自作やプログラミング言語処理系自作などを経験しました2。
これらの自作コンテンツは、理解すべき概念について、Step by Stepで解説を交えながら実際に実装していきます。全部を実装するのは難易度が高いので、重要な最小限の概念に絞って解説するケースが多い印象です。学習者は記事を読んで概念を理解しながら、コードを写経して動かしていきます。
一方で、自作コンテンツのない技術では、理解すべき概念や自作の流れ自体がわからないため、車輪の再発明型学習をする難易度が高いのが現状です。
また自作コンテンツが既にある場合でも、その前提知識が学習者にマッチしていないと取り組む難易度が高い状況です。例えば、使用しているプログラミング言語を知らない場合、まずそのプログラミング言語を学ぶ必要があります。日本語以外の自作コンテンツに日本語話者が取り組むのが難しいという、自然言語の問題もあります。
AI時代の車輪の再発明型学習の進め方
そこでAIをフル活用することによって、この世にない自作コンテンツを自由に生成でき、任意の技術について自分にあった前提知識で車輪の再発明型学習ができるのではないかと考えました。 今回紹介する手法では、Deep Researchを用いて学びたい技術の概要と自作の流れを知り、Coding Agentを用いて実装させながら理解を深めます。
まず、学びたい技術の概要とそれを実装するための流れをAIに聞きます。技術について広く調査してもらうため、Deep Researchに相当するAIを使用します。
[対象技術]をフルスクラッチで実装することで、[対象技術]の理解を深めたいです。
Step by Stepで実装するための手順・チュートリアルを考えて。
[使用言語や前提知識などの各種条件]。
これの解答やさらなるAIとの会話により、その技術についての概要をざっと理解します。
そのあとは早速実装に移ります。実装自体もAIに任せるため、Coding Agentを使用します。
Coding Agentの指示を以下のように書きます。
私の学習のためにフルスクラッチでAI Agentを作成したいです。前提は以下の通りです。
[使用言語や前提知識などの各種条件]
以下に従ってください。
- Step by Stepで実装するために、私の命令外のコードは一切書かないこと。
- 各Stepで実装前に、docs/designディレクトリに新しい設計ドキュメントを日本語で作成すること。
- 実装したコードについてファイルを更新するごとに毎回説明・解説すること。
- [その他一般的に実装の上で必要な指示]
そしてDeep Researchなどで計画したStepに従って実装を進めるように指示します。各Stepで何を実装するかはDeep ResearchやCoding Agentと議論しながら、自分の実装したいものを選択して指示します。 各Stepにおいて、事前の設計・実装コードの説明をAIにさせ、疑問点などをAIにどんどん聞きながら実装を進めて行きます。 この時のAIとのやり取りで技術への理解を深めます。
AI Agent自作をAIでやってみた
今回はAI Agentの自作をAIを用いて実際にやってみました3。 AI Agentの自作コンテンツ自体はいくつかあるようですが、以下の条件を満たす自作コンテンツがなかったのでAIをフル活用して学習を進めることにしました。
- 学習にフォーカスしている(AI Agentを用いたプロダクト開発ではない)
- 日本語での解説がある
- 自分が詳しいGoで書ける
Gemini Deep Researchに以下を聞きます。
AI Agentをフルスクラッチで実装することで、AI Agentの理解を深めたいです。
Step by Stepで実装するための手順・チュートリアルを考えて。
LLMにはOpenAIのAPIを使用します。Goで実装したいです。
出力されたレポートの全文は長いので省略しますが、要約すると以下の内容でした。
- InputからThought, Action, Observationを順に繰り返してOutput(Final Answer)を返すReAct(Reason+Act)パターンが基本である
- Thought: 現在のタスクと履歴を分析し、次に何をすべきかの計画を立てる
- Action: 特定のパラメータを引数にして(外部)ツールを呼び出す(Final Answerも一つのツールとして扱う)
- Observation: ツールの実行結果を取得する
- ツールを使用するための2つの実装方法がある
- OpenAI Tool Calling APIを使う
- ToolのレスポンスがValidであることをAPIが保証してくれる
- ReAct Text Parsingを自分で実装する
- Toolのレスポンス自体をLLMが返すためValidなレスポンスでない可能性がある
- OpenAI Tool Calling APIを使う
- 実装ステップ(ReAct Text Parsingの場合)
- システムプロンプトの検討
- Text Parserの構築
- ReAct Loopの実装
- 各種ツールの実装
- (さらなるステップ) マルチエージェントの実装
一から実装して理解したいので、ReAct Text Parsingを自分で実装することにします。ものすごくざっくり理解したので、ここからはCoding Agentを使用して実際に実装に取り掛かります。今回はClaude Codeを使用します。
まず以下のようなCLAUDE.mdを書きます。実際には、実装を進めながらCLAUDE.mdも修正したり追記したりしてこの状態に至っています。
私の学習のためにフルスクラッチでAI Agentを作成したいです。前提は以下の通りです。
- CLIツール
- Goで実装する
- LLMにはOpenAIのAPIを使用する
- ReAct Text Parsingを採用する
以下に従ってください。
- Step by Stepで実装するために、私の命令外のコードは一切書かないこと。
- 各Stepで実装前に、docs/designディレクトリに新しい設計ドキュメントを日本語で作成すること。
- 実装したコードについてファイルを更新するごとに毎回説明・解説すること。
- Stepの開始前に必ずCLAUDE.mdを読むこと。
- testコードを適切に書くこと。ただし外部へのアクセス(OpenAI APIなど)をしない範囲で実装すること。必要に応じてmockを作成して良いが、意味のないテストは書かないこと。
- Step完了時にmake buildやmake testが成功するのを確認すること。
- Step完了時に以下のファイルを最新の状態に更新すること。
- README.md
- docs/features.md
- CLIツールの各機能についての説明
- docs/package-dependencies.md
- mermaid形式で記述したGoのpackage/directoryの依存関係
- Step完了後に、git commitとgit pushを実行すること。
そして最初のDeep Researchの調査をもとに、以下のようなStepを指示しました。Coding Agentにも最初どのようなStepで進めるべきか聞き、それにある程度従いながら、自分の実装したいものをその都度指示していきました。
- プロジェクトのセットアップ
- OpenAI API呼び出し実装
- チャットインターフェース実装
- ReAct Parsing実装
- ReActとチャットの統合
- ツール呼び出しと実行機能実装
- 各種ツールの実装(テキスト処理・ファイル処理・コマンド実行など)
最終的に、対話的にやり取りして簡単なツールを呼び出して結果を返してくれるCLIコマンドが完成しました。 本当はDeep ResearchやMCPツール呼び出しの実装などもしたかったのですが、まだできていません。
学習効率
今回は、最初の調査から始めておよそ8時間ほどでAI Agentをざっくり学ぶことができました。
この学習方法だと自分の前提知識に沿った方法で進めることができます。 例えば、GoでのCLIツールの自作の作法はある程度把握していたので、容易に実装を把握することができました。 この点、前提知識のずれが生じない分学習効率が良くなると考えています。
また実装を全てCoding Agentに任せていることでも効率化できています。 コードを全て写経した方が、学習内容が身につきやすいという意見もあるかもしれません。 しかし、コードを書くのではなく理解することが重要であると考えています。 写経する代わりに、AIが出力したコードは徹底的に理解するようにしています。これはコードを読むだけでなく、AIにコード解説させながら議論することも含みます。
もちろん時間をかけて良いなら写経をするのも全く問題はありません。 動くものを自分の手で作りたいという観点では写経した方が楽しいかもしれません。個人的には、最初はそのつもりで写経していっても、次第にめんどくさくなってコピペするのが今までの傾向だったというのもあり、あまり写経に拘らずに実装をしています。
十分な知識を得られるか
この手法には少し欠点があります。それはAIが十分な知識を提供してくれているかを保証できないという点です。 今回、AI Agentについてまだ知るべき基本的な知識が残っている可能性もあります。それはこの学習方法では知る方法はありません。 例えば、コンテキストをどうやって圧縮しながら保持するのかなどの知識は最初の調査では説明がありませんでした。
どこまで深掘ってその技術を学習すれば十分なのかについてはAIを信じる必要があります。 しかし、従来の自作コンテンツについても、その自作コンテンツを信じるしかないため同じであるとも考えられます。 また、プロンプトを上手く書いてAIの知識を深掘っていけばある程度改善できるかもしれません。
世の中に自作コンテンツが一切ない技術での適用
AI Agent自作については、少なくとも英語・Pythonでの記事が既にいくつかあるようです。AIは調査の際にこれらを参照した可能性があります。
では、世の中に一切自作コンテンツがない技術についてこの手法は適用できるのでしょうか。 試しに「GoでZigコンパイラ自作」をDeep Researchに調査させてみました4。すると以下のようなStepを提示されました。
- プロジェクトのセットアップ
- Lexerの実装(トークン化)
- Parserの実装(AST構築)
- ZIRの実装(Lowering)
- Semaの実装(解釈とAIR生成)
- CodeGenの実装(QBE出力)
実際に自作に取り組んだわけではなくあくまで表面的な評価に過ぎませんが、一般的なコンパイラの実装方法とZigコンパイラのアーキテクチャの特徴を上手く理解しているように見えます。 この点は今後他の技術についても自作をしてみたいと思っています。
またソフトウェア実装で完結しない技術についてはこの手法の適用は難しいかもしれません。 この手法はソフトウェア実装で完結するからこそCoding Agentをフル活用できています。 ハードウェアが求められるような技術や、GUIコンソールで試してみることにも一定の価値があるインフラやクラウドリソースに関連する技術には向いていないかもしれません。もしかしたら最近のAIブラウザを活用すればそれらでも適用できるかもしれませんが。
そもそもAI時代に車輪の再発明型学習が必要か
実際に手探りでAIを使った自作を進めてみた結果、簡単なプロダクト開発に近いフローになったと感じました。 プロダクト開発でも最初に全体の大まかな調査・設計をします。その後、機能ごとに設計をし、コードを理解しながら実装させます。
そうであれば、何かプロダクト開発を始める前に前提技術を学習したいと思ったとき、わざわざ車輪の再発明型学習で学ぶ必要はないかもしれません。実際にプロダクトの開発を進めながら前提技術についても理解していけば良いからです。
一方で、基礎知識として広く技術を学びたいという目的であれば、依然として車輪の再発明型学習は有効であると考えています。
また、車輪の再発明型学習がプロダクト開発と違う点としては、どれだけブレーキを踏むかにあると思います。プロダクト開発においては、最近はどれだけブレーキを踏まずに開発をAIに任せながら品質を担保するか、という議論もされています5。一方で、車輪の再発明型学習においては徹底的にブレーキを踏みながらAIが出力したコードを理解することが重要です。
おわりに
AI Agentを自作しながら考えていたことを簡単にまとめてみました。 私自身手探りで一回トライしただけなので、まだまだ良い方法があるかもしれません。他の技術についてもこれから試してみたいと思います。
この記事を読んでこれからやってみる方も、すでに実践している方も、ぜひ皆さんの意見もシェアしていただけると幸いです。
こういった大学の講義資料の一部はインターネット上で公開されていることも多いので、学習資料としておすすめです。 ↩︎
そもそもAI Agentについて学びたいというモチベーションが最初にあってAI Agent自作を進めています。AI Agent自作を進めるうちにもっと一般化できるのではないかと思い、本記事の執筆に至っています。 ↩︎
自分の調べた限りだとZigコンパイラの自作コンテンツはインターネット上では見つけられませんでした。 ↩︎
AI開発におけるブレーキと質についてはこの内容がとても学びになりました: https://speakerdeck.com/watany/its-only-the-end-of-special-time ↩︎
