2024年、AIコードライティングは生活のあらゆる分野に浸透し、ソフトウェアのライフサイクル全体に大きな影響を与えている。そこで疑問なのは、人々が使用するAIコードツールは良いと言うが、なぜ我々は通常、ソフトウェアを使用してもあまり進歩を感じないのだろうか? それは我々が間違った方法でAIを使用しているからですか?
最近、グーグルのエンジニアリング責任者であり、アマゾンのベストセラー作家でもあるアディ・オスマニが、AIアシスト・コーディングが最前線の開発において実際にどのようなものかを明らかにし、AIツールが現実の開発においてもたらす課題と機会を共有した。
エンジニアはAIをどう使うのか?
一般的に、AIを使ったチーム開発には、「ブートストラッパー」と「イテレーター」という2つの異なるモデルがある。 どちらのモデルも、エンジニア(そして技術的素養の弱いユーザーでさえも)がアイデアから実際のコードまでの距離を縮めるのに役立っている。
ブーツストラッパー
このカテゴリーには、ボルト、v0、スクリーンショット・トゥ・コードなどのAIツールが含まれる:
- デザイン画や大まかなコンセプトから始める;
- AIを使って完全な初期コードベースを生成する;
- 数時間から数日でプロトタイプを完成させる能力;
- アイデアの実現可能性を迅速に検証することに重点を置く
これは素晴らしいワークフローです。例えば、独立した開発者は、『ボルト』を使って、Figmaのデザインを、すぐに動くウェブ・アプリケーションに変えることができます。プロダクション・レベルとまではいきませんが、最初のユーザー・フィードバックを得るには十分です。
イテレータ
このカテゴリーでは、主にカーソル、クライン、コパイロット、および以下のような日々の開発ワークフローを担当する。 ウインドサーフ このようなツールは、上記のような「派手さ」はないが、より実用的である:
- コード補完の自動化、コード提案の提供
- 複雑なコードのリファクタリングを行う;
- テストコードとドキュメントの作成
- 「プログラミング問題の解決策としての「プログラミングパートナーの双子化
どちらの方法も開発を大幅にスピードアップさせることはできるが、諺にもあるように、"タダ飯はない"。
AIスピード」の隠れたコスト
上級エンジニアが使用 カーソル もしかしたら コパイロット このようなAIツールは、機能全体の基本的なフレームワークを数分で構築し、適切なテストとドキュメントを完備することができる。
しかし、よく見てみると、シニア・エンジニアはAIの推奨を参照するだけでなく、次のようなことも行っている:
- AIが生成したコードをより小さなモジュールにリファクタリングする;
- 様々な極限状況への対応を追加;
- 型定義とインターフェースデザインの最適化;
- 包括的なエラー処理メカニズムを追加する;
- あるいは、AIが与えた建築的解決策に疑問を呈することさえある。
言い換えれば、彼らは長年蓄積されたエンジニアリングの知識を、AIのアウトプットを形成し制限するために適用しているのだ。
しかし、若手エンジニアはこうした重要なステップを見落としがちだ。彼らはAIの出力をそのまま受け入れる可能性が高く、いわゆる「ハウス・オブ・カード・コード」(表面上は完成しているように見えるが、実世界のストレス下では簡単に崩れてしまうコード)を生み出すことになる。
知的パラドックス
つまり、AIは初心者よりも経験豊富な開発者を助ける方が得意なのだ。
シニア・エンジニアはAIを使用して、アイデアを迅速にプロトタイプ化したり(要件を理解するため)、基本的な実装を生成したり(その後の改良を促進するため)、既知の問題に対する代替ソリューションを検討したりします;
それどころか、初心者はしばしば、AIが与える誤った、あるいは時代遅れの解決策をそのまま採用し、重要なセキュリティやパフォーマンスの問題を無視し、AIが生成したコードのデバッグ方法を知らず、十分に理解していない脆弱なシステムを構築してしまう。
70% 質問
AIを使ってコードを書く非エンジニアは、しばしばもどかしいジレンマに陥る。70%の仕事は驚くほど速くこなせるが、最後の30%は格別に辛い。
70%問題」は、AIによる開発の現状を明らかにするもので、最初は天の恵みであるかのように思われるが、やがて現実に「こき下ろされる」ことになる。
現実はたいていそうだ:
- 小さなバグを修正しようとしている
- AIが一見合理的な変更を提案
- この変更は残りのコードを壊す -->。
- AIに新たな問題を解決してもらう
- 新しいバグが2つ発生しました。
- 無限ループ
このサイクルは、何が本当に間違っていたのかを理解する専門知識を持たない非エンジニアにとっては、特に苦痛を伴う。
バグに遭遇した経験豊富な開発者は、長年の経験とパターン認識に基づいて、潜在的な原因と解決策を推測することができる。このような背景知識がなければ、基本的に完全に理解していないコードを「ゴリ押し」することになり、問題は無限に広がる。
ラーニング・パラドックス
さらに深い問題がある。非エンジニアにAIコード作成ツールにアクセスさせると、かえって彼らの学習を妨げることになりかねないのだ。
コードは生成され、実行されるが、「開発者」は基本原理を理解していない。この時点で、彼らは基本的なプログラミングパターンを学び、デバッグスキルを身につけ、将来メンテナンスや拡張が必要となるアーキテクチャの決定について推論する機会を逃している。
その結果、"開発者 "たちは自力で問題を処理するための専門知識を身につけることなく、問題解決のために常にAIに頼っている。
非エンジニアがAIコード作成ツールを使うための最良の方法は、おそらく「ミックスモード」だろう:
- AIによるラピッドプロトタイピング
- 生成されたコードがどのように機能するかを理解するのに時間をかけてください。
- 基本的なプログラミングの概念とAIの使い方を学ぶ
- ステップ・バイ・ステップで知識ベースを構築
- 単なるコードジェネレーターではなく、学習ツールとしてAIを使う
しかし、それには忍耐と献身が必要であり、そもそも多くの人がAIツールを使う目的とは正反対である。
70%問題」は、現在のAIが多くの人が期待するような「完璧なAI」ではないことを示している。結局のところ、30%の仕事(本番環境で使用可能なソフトウェア、保守可能なソフトウェアなどを作る)には、AIで完全に置き換えることのできない本物の工学知識がまだ必要なのだ。
ベストプラクティス
アディ・オスマニは、何十ものチームを観察した結果、いくつかのベストプラクティスのアプローチを導き出した:
- 「AI初稿」モデル
AIにコードの基本的な実装を生成させ、手作業でレビューを行い、モジュール式のリファクタリングを行い、包括的なエラー処理を追加し、包括的なテストケースを書き、重要な決定を文書化する。 - 「継続的対話」モデル
異なるタスクごとに新しいAIダイアログを開始し、コンテキストを集中的かつ簡潔に保ち、変更を頻繁にレビューしてコミットし、フィードバックのループを密に保つ。 - 「信頼するが検証する」モデル
AIを使用して初期コードを生成し、すべてのクリティカルパスを手作業でレビューし、さまざまなバウンダリーケースのテストを自動化し、定期的なセキュリティ監査を実施する。
AIの本当の未来は?
こうした課題にもかかわらず、著者らはソフトウェア開発におけるAIの役割について楽観的である。重要なのは、AIの真のメリットを最大限に活用することである:
- 加速度既知
AIは、無限の忍耐力と速いタイピング速度を持つ双子のプログラミング・パートナーのように、私たちがすでに知っているパターンを実現する手助けをすることに長けている。 - 可能性を探る
AIは、アイデアを素早くプロトタイプ化し、さまざまなアプローチを模索するのに適している。コンセプトを素早くテストできるサンドボックスのようなものだ。 - オートメーション・ルーチン
AIは、サンプルコードや日常のプログラミング作業に費やす時間を劇的に削減し、より興味深い問題に集中できるようにする。
AI支援開発の実験を始めたばかりであれば、著者のアドバイスは、小さく始めることだ。非連成で明確に定義されたタスクにAIを使い、生成されたコードの一行一行を精査し、徐々に大きな機能を構築していく。
開発プロセスにおけるモジュール性を維持する:すべてを小さく、焦点を絞った文書に分割し、コンポーネント間の明確なインターフェイスを維持し、モジュールの境界を文書化する。
重要なのは、自分の経験を信じることだ。AIは開発を加速させるために使われるが、自分の判断に取って代わることはできない。
エージェントの出現
2025年に向けて、AI支援開発の状況は劇的に変化している。現在のツールはプロトタイプの作成と反復の方法を変えたが、私たちはさらに重要な変革の始まりにいる。AIエージェント(Agent)ソフトウェアエンジニアリングの台頭だ。AIエージェントは命令に応答できるだけでなく、自律性を高めてソリューションを計画し実行できるようになるだろう。
例えば、アントロピックだ。 クロード コンピューターに直接アクセスできる。 クライン ブラウザーを起動し、テストを自動的に実行することができる。
デバッグ中、AIエージェントはバグ修正を提案するだけでなく、潜在的な問題をプロアクティブに特定し、テスト・スイートを起動して実行し、UI要素を調査してスクリーンショットをキャプチャし、修正を提案して実装し、ソリューションが機能するかどうかを検証する。
次世代のツールは、視覚的理解(UIのスクリーンショット、モデル、ダイアグラム)、言語による対話、環境によるインタラクション(ブラウザ、端末、API)をシームレスに統合できるようになるだろう。
未来のAIは、開発者に取って代わるものではなく、人間の指導や専門知識を尊重しながら、積極的に仕事を引き受けることができる、ますます強力な共同パートナーになることだ。