AIでのソフトウェア開発技法
AIでの開発には「~エンジニアリング」というのが多いですが、今回はハーネスエンジニアリングについて。
ただ、そこに至る過程でプロンプトエンジニアリングやコンテキストエンジニアリングという流れがありますのでそれについても紹介します。
プロンプトエンジニアリング
AI開発でのプロンプトというのは、そのままですがAIに与える指示のことです。
それをエンジニアリングするわけなので「文言の試行錯誤」に重点を置いたものです。
AIエージェントが台頭するまでは「魔法の言葉」を与えることでそれをAIがうまく解釈して求める返答を返してくれるというようなテクニックもありました。
まず「指示を正しく伝えられなければ、正しい返答を返してくれない」というのは至極当然のことですので基本といえます。
もっというとAIには自然言語で指示を与えますので、AI時代のエンジニアにまず求められるのはコミュニケーションスキルという事だったりします。
実際、人間が相手でもコーディングができるようになった後で大事になるのはコミュニケーションですので推して知るべし。
コンテキストエンジニアリング
コンテキストエンジニアリングというのは、AIにどういう情報を与えると効率よく正しいアウトプットを返してくれるかという事に着目したAIでの開発手法です。
プロンプト(指示文言)とは違って、コンテキスト(文脈、背景、状況)というところに注意。
簡単に言うと、AIは限られたコンテキストウィンドウ(容量)の中に、整理してわかりやすく情報をインプットすることで期待した返答を返してくれるということ。
- 情報が少なすぎる
- 情報が多すぎる
- どこに着目すればよいかわからない
こういった情報を与えてもうまくいかないという話ですね。
別に難しい話でもなんでもなく、仕様書などを書く時には概要から始めて主要素などの目次があって、それをたどることで目的の仕様にたどり着けると思いますが、そういう風にコンテキストを組み立てればいいだけです。
しかも面倒なファイルフォーマットもなく、自然言語で。
これまではプロンプトを工夫してなんとかわかってもらう努力をしていましたが、自律的に調査や検証をしてくれるAIエージェントでは、プロンプトよりはコンテキストの方が大事ということですね。
ハーネスエンジニアリング
Anthropicがハーネスデザインについて記事を書いてくれてました。
私もAIエージェントを使ってサービスやネイティブアプリを一から作っていっているのでこの記事の内容も同感できるのですが、すでにコンテキストエンジニアリングでAIにコードを組んでもらうところは、人間が手を入れなくてももうかなり高い精度で動作します。
つまりLLMが賢くなった今、人間の仕事は「AIが自律的に動きやすい環境を整備すること」に移行しました。
例えばAIも間違ったコードを生成しますので、AI自身が間違いを認識して修正するというサイクルを自律的に回せるように環境を整備するとかですね。
具体的にはテスト環境を整備して、テスト結果をAIに自動的に渡せるような仕組みをつくったりします。
次のセクションで詳しく掘り下げます。
ハーネスエンジニアリングのキモ
開発ワークフロー
何はともあれ、まずは開発ワークフローを作らないと話になりません。
この図はAIでイメージを画像にしてもらったのでかなり適当ですが、こういうのを人間が何も操作しなくてもAIだけで回せるようにします。
有名な開発ワークフローフレームワークにsuperpowersがありますので、参考にすると良いと思います。
ただ、「これそのまま使ったらいいんじゃないの?」というと、そういうわけではありません。
特にテスト環境はアプリによって違いますし、この部分を既製品というか他人の物を使うと応用がきかなくなってしまうので、大した作業でもないですし自作することをお勧めします。
初めは
- プラン
- 実装計画
- 実装
- レビュー
程度の超単純な4段階のもので良くて、このイテレーションを回しながら改善していけば、1本アプリを作り終わるころにはしっかりした開発ワークフローが出来上がっているはずです。
AIの手や足
AIを自律的に動かそうと思うと手や足が必要です。
- ファイル操作
- MCPによるツール操作
- ブラウザ操作
など。
AIに適切に権限を与えて生成したコードのテストを行えるようにする感じですね。
AIの目や耳
また、手足だけではなく、目や耳も必要です。
実行したテスト結果をAIに入力することでAIは結果を確認することができるようになり、問題があれば修正、問題なければ次に移るという行動ができます。
これまでは人間がこれらをやることが多かったのですが、ComputerUseなど様々な機能が導入されてこの領域もAIに任せられるようになってきています。
まとめ
ChatGPTが出てきたのがわずか3年前、Claude Codeは1年前です。
この短い期間で、プロンプト → コンテキスト → ハーネスと、エンジニアに求められることは高速に変わってきました。
このペースだと1年後にはハーネスすらエンジニアはやる必要がなくなって、メインの仕事はプランナー領域くらいまで上流になっている可能性が高いと予想されます。
将来的には人間のエンジニアの仕事はほぼなくなるでしょうが、いまは変化を楽しみつつ開発したい気分ですね😂現実逃避