『プロフェッショナルAI駆動開発』を、著者の一人であるサカモトさんから献本いただいた。もう一人の著者の松本さんもSNSでよくお見かけする方で、2人とも自分とかなり近い界隈にいる方かなと思う。
この本は8月に発売されている。
すでにベストセラーというくらい評価の高い本なので、ちょっと今さらかなーという気もしている。
最近Xにも読んだ感想をポストしたが、改めて最初から最後まで全部の文章に目を通したので、それも踏まえて、より詳しいレビューをまとめておきたい。
献本してもらったという性質上、基本的にはこの本の良かったところを書いていく。ただ、あまりにもベタ褒めのことしか書かないと、それはそれでこの記事を読む人にとって有益にならない気もする。なので、「この辺はちょっと気になるかも」という部分も含めて、できるだけ正直に感想を書いていく。
全体の印象
この本は基本的に、普段AIを使って開発している人や、バイブコーディングをやったことがある人を前提にしている。
自分も普段、毎日AIにコードを書かせている身だが、
- 全体の5割: すでに知っていたり、実践していたり、すごく共感できる内容だった
- 3割: 今まで知らなくて、明日からでもすぐに試してみたいもの
- 2割: 使える機会があったら試してみたい
くらいだった。
特にコーディングエージェントについて言えば、ここ1〜2年でAIエージェントがかなり普及してきて、それまでのプログラミングの書き方や開発の仕方に関する常識が、ガラッと変わっている。
自分を含めて、AIを毎日使ってる人間は、いろいろな試行錯誤をしていて、「こうやるとうまくいく」「こうやるとうまくいかない」といった現場の「あるある」があると思う。
この本はそういうものをきれいに言語化してくれている。
最近のAI開発がよくわからないという人は、とりあえずこの本を1冊読んでおけば、「AI開発って今こうなっているんだ」というのがわかると思う。
基本はY = F(X)
この本の中で繰り返し出てくるのが、Y = F(X) という表現だ。
入力のXはLLMに渡すコンテキスト、FはLLMのモデルなどで決まる部分、Yはアウトプットを指している。
X、F、Yのそれぞれをどう改善すればいいのかというところからスタートして、実践的な話に進んでいく。その辺の話がかなりクリアでわかりやすかった。
X:コンテキストをどう整えるか
読んでいて特に「ああ、そうだよね」と思ったのは、Xをどうするかという部分だ。
本当に初期のChatGPTであれば、入力は基本的にプロンプトだけだった。なので、入力をどうにかしようと思ったら、プロンプトエンジニアリングをどう頑張るかという話になる。ただ、今は与える資料や外部の情報、ルールを決めたテキストなども含めて、全部がコンテキストになる。
なので、必要最低限でありながら、本当に必要なコンテキストをどう与えるのかが大事だ、という話になる。
例えば、コードの外部で管理している資料があるなら、ちゃんとそこにアクセスできるようにしておく。
自分もやっているなーと思ったのは、ミーティングのトランスクリプトをテキストに起こして、AIに読み込ませるような形に置いておくことだ。
また、改めて大事だなと思ったのは、「コンテキストにどこまでの情報を載せるか」の部分だ。自分は CLAUDE.md や AGENTS.md に、なんとなくそのリポジトリの説明をダラダラと書いていることも多かった。だが、これらは何をするときにも必ずコンテキストに載ってくる。
つまり、AGENTS.mdに膨大な量を書くと、コンテキストを圧迫してしまう。なので、特定の操作をするときにしか使わない部分はルールとして毎回全部は読み込まないようにしておいたり、使えそうなものはスキルとしてまとめておいたりして、AGENTS.md にはできるだけ本当に最低限のことだけを書くようにする。
どちらかというと、AGENTS.mdは、AIがリポジトリ全体のディレクトリ構造を把握して、必要なファイルを読みに行きやすいように整える。
何でも文脈を与えればいいというわけではなく、必要なときに必要な情報を渡せるような構成に整えておくことが大事だというのは、改めて感じた。
Y:アウトプットをどう制御するか
Yの部分は、AIを使う前からシステム開発やプログラミングをしていた人にとっては、かなり納得しやすいところが多いのかなと感じた。
要はYをどう制御しようかと考えたときに、大事なのは結局テストなのだ。AIが何かを出力したら、その結果が本当に正しいかどうかは、ちゃんとテストして確かめないといけない。テストはこれまでも、テスト駆動開発などで当たり前に行われてきたことなので、そこはAIの時代になっても、人間が書いているときとそんなに変わらないのかなと思っている。
違いとしては、人間ではなくAIがそれを行う場合に、どう最適化していくかという部分がある。AIを前提としたときにテストをどう進めていくのかは、かなり細かく書かれていた。
F:モデルをどう選ぶか
自分が一番知らなくて、「そうなんだ」と思うところが多かったのは、Fをどう制御するかという部分だ。Fは要するに、LLMのどのモデルを選ぶのかという話である。
自分がこれまでやっていたのは、重めの難しいタスクをやりたいときはOpus 5.5などを使い、そんなに難しくないときは軽めのモデルを使う、というくらいだった。どこでどうサブエージェントを使うかも、結構ノリで使っている部分があった。その辺をどう制御するかが、かなり詳しく載っていた。
陳腐化しにくい内容
このFの部分もそうだが、この本全体でいいなと思ったのは、できるだけ陳腐化しないような情報にしようと、すごく意識しているところだ。
例えば、「こういうプロンプトを書くと精度がちょっと上がる」というプロンプトのテクニックや、「OpenAIのこのモデルはここが強いので、これを使いましょう」という話は、今この瞬間は役に立つかもしれない。だが、1か月、2か月経つとすぐにアップデートされて陳腐化してしまう。
書籍においては、そのあたりは特にリスクとなる。
この本では、具体的なモデルの名前やプロンプトのテクニックはできるだけ触れず、もう少し実用的な部分にフォーカスしている。
例えば、モデルを使うときは、最小限のコストで一番高いアウトプットを出せるような選び方をする必要がある。また、LLMは原理的に確率で揺れてしまうので、その揺れをどう制御するかという話もある。
一つひとつのLLMは確率で揺れてしまうが、サブエージェントを活用して並列で走らせたり、得意分野ごとに割り当てたりすることで、最終的なタスクの成功確率を上げていく。
そのあたりは自分があまり詳しくない部分だったので、非常に参考になった。
AIと人間の役割分担
AIでいろいろなことができるようになると、「どこまでをAIにやらせて、何を人間がやるべきなのか」すごく迷ってしまう。自分もいまだにたまに迷う。
この本は、そのあたりもカバーしている。コードを書かせる部分やレビューのループの部分など、AIにできるところ、得意なところはどんどんAIにやらせる。それ以外の、ビジネス的な判断や影響など、人間しかできない・見なきゃいけないところだけを、ピンポイントで人間がやる、という考え方だ。
最終的には、具体的なリポジトリの構成やスキル、どういうときにサブエージェントを使うのかという部分も含めて、かなり細かく書かれていた。さっきのFの部分と、最後のリポジトリ全体の設定や「こうやってスタートすればいい」という部分は、すぐに試せそうだった。
一点だけ気になったところ
一点だけ気になった点を挙げるとすれば、全体的に文章がちょっと生成AIっぽいなとは感じた。
例えば「AではなくB」のような言い回しや、「〜に効く」「〜が壊れる」といった、結構特有の言い回しがある。
ただ、それはあくまで書き方のフォーマットの話で、書いてある内容自体は本当に有益だと思うので、読んでいくうちにそんなに気にならなくなった。今後はやっぱり、生成AIで文章を書かせるのも当たり前になってくるのかなぁ、とも感じた。
(何を隠そう、この記事もほぼ全て生成AIが書いてる)
読み終えて
ページ数は300ページ弱で、結構さくっと読める。その割に、これ1冊読めば今のAI開発の本当に最前線に立てるという意味で、めちゃくちゃいい本だと思った。