ソフトウェア

AIを使って効果的にプログラミングを行う方法とは?


近年のAI分野の発展により、一部のソフトウェア開発者らはAIを使ってコードを生成するようになったほか、AIを使ってプログラミングをサポートするツールも登場しています。プログラマーのデヴィッド・クローショー氏が、プログラミングに生成AIを使用した個人的な感想を自身のブログで振り返っています。

crawshaw - How I program with LLMs - 2025-01-06
https://crawshaw.io/blog/programming-with-llms



新しいテクノロジーに興味を抱くクローショー氏は、生成AIの「難しい質問に対する洗練された回答を短時間で生成できるテクノロジー」に着目し、自身のプログラミング作業に生成AIを導入しました。クローショー氏は「自動入力」「検索」「チャット駆動型プログラミング」という3つの方法で生成AIを利用しているとのこと。

・自動入力
クローショー氏によると、AIは明白なタイピング作業を代行することで生産性を大幅に向上させてくれるとのこと。クローショー氏は「AIなしでは1週間分の業務をこなせなくなってしまいました」と述べ、繰り返し作業の負担軽減を高く評価しています。

・検索
「CSSでボタンを透明にするにはどうすればいいか」などの質問がある場合、従来の検索エンジンを使って方法を確認するよりもGPT-o1やClaude 3.5 Sonnetなどの消費者向けAIに質問した方がはるかに良い答えが得られるとのこと。なお、クローショー氏は「人間が間違うことがあるように、AIも間違うことがある」として盲信しないよう注意を述べています。

・チャット駆動型プログラミング
AIとの対話を通じてプログラミングを行う「チャット駆動型プログラミング」について、自然言語で指示できて複雑なプログラミング言語の構文を覚える必要がないほか、AIがコード生成の大部分を担うことで開発者はより高度な問題解決に集中できるという点を挙げてクローショー氏は「AIの価値を最大限に感じられる」と高く評価しているものの、同時に「AIが誤ったコードや非効率なコードを生成する可能性があるうえ、AIから価値を引き出す方法を学ぶには手間がかかり、さらにプログラミングの方法を調整する必要もある。3つの方法の中で一番難しい手法だ」と述べました。

AIを使用してプログラミングを行う場合、人間の主な仕事は「生成されたコードを読み、適切かどうかを判断すること」になります。クローショー氏は生成されたコードを判断しやすくするため、AIにプログラミングしてもらう際には以下の点に気をつけているとのこと。

・問題は具体的かつピンポイントにする
リポジトリの情報全てをAIに渡すと、AIの気が散ってしまって適切なコードを生成しにくくなります。クローショー氏はウェブ版のAIチャットを使用することでコンテキストを絞り、単一のタスクに焦点をあててプロンプトを作成しているとのこと。

・完全なコンテキストを用意する
関連するライブラリや関数、そしてどんな結果が必要なのかなど、タスクを理解するために必要な情報全てをAIに渡すことが大切です。

・検証しやすい作業を依頼する
AIにとって理想的なタスクは、人間には扱いきれないような多くの一般的なライブラリを使用する必要のある、読みやすいテストを記述できるものです。AIはタスクを通常数十秒程度で終えて簡単にやり直しができるため、一度タスクを実行させた後に「テストを読みやすくするために○○という概念を導入して全てやり直してください」などの指示を行うのも良いとのこと。

具体的なタスクを指示すると共に必要な情報を過不足なく提供するという意味で、「学校の試験問題のようなプロンプトを書くのが最もAIを効果的に使用する方法だ」とクローショー氏は述べました。


クローショー氏はAIを活用する実例として、浮動小数点数四分位数リザーバーサンプラープログラムに関するコードとテストを生成し、AIとの対話を通じてコードの修正やテストの改善を行う様子をブログに掲載しています。

クローショー氏がAIにタスクを依頼すると、良さげなコードとともに以下のテストが生成されました。これは人間がよく記述するテストの形式で、他のツールや手動計算によって期待される出力を生成し、コードの結果と一致するかを確かめています。しかし、計算が苦手なAIは「期待される出力」をでっち上げることが多いためこの手法は最適ではありません。


そこで、クローショー氏は正確な四分位数を計算する別の実装を用意させ、テスト対象の出力と比較することでより信頼性の高いテストの生成に成功しました。また、新たなテストコードはランダムな入力データを大量に生成して予期せぬバグを発見するファズテストを導入できる構成にもなっています。


クローショー氏は「AIを活用することで、より包括的なテストを簡単に記述できるようになるほか、これまで開発者が時間をかけて構築する必要のあったファズテストの実装を記述することができるようになるはずです」と述べています。

また、クローショー氏はAIを活用したプログラミングを支援するツールとして「sketch.dev」を開発しています。このツールは、Go Playgroundのような環境を提供し、チャットインターフェースやさまざまなツールとの統合、AIモデルへの自動フィードバックなどの機能を備えていることが特徴で、クローショー氏は「AIの活用により、将来的にはより専門化されたコードや一般化されたパッケージの減少、より可読性の高いテストが増加するでしょう」と予測しました。

この記事のタイトルとURLをコピーする

・関連記事
AIに「もっといいコードを書いて」と繰り返し要求するとコードの実行速度は向上するがバグが増えるという報告 - GIGAZINE

コードを自動生成するAIを使うプログラマーはAIを使用しないプログラマーよりも安全性の低いコードを生成しやすいという研究結果 - GIGAZINE

Claude 3.5 Sonnetでインタラクティブなシングルページアプリを作成できる機能「Artifacts」で作成されたアプリの例まとめ - GIGAZINE

知識のない人でもプロンプトを入れるだけでアプリを作れるAI「Replit Agent」をReplitがリリース - GIGAZINE

Googleのエンジニアが語るAI支援コーディングの「70%問題」、AIが生産性を爆上げしたのになぜ製品は改善されない? - GIGAZINE

「みんなのAIの使い方トップ10」がClaudeの分析ツール「Clio」で判明、日本人のAI使用法は「アニメとマンガ」制作 - GIGAZINE

in ソフトウェア, Posted by log1r_ut

You can read the machine translated English article here.