AI

AIにバグ修正頼んだら「いや、そこ!?」な提案に爆笑

AIにバグ修正頼んだら「いや、そこ!?」な提案に爆笑

「動かない!」「エラーが出てる!」 プログラム開発につきものな、バグとの戦い。そんな時、あなたならどうしますか?

AIに丸投げ、してみませんか?

先日、私はAIにバグ修正をお願いしました。すると、予想もしない修正案が飛び出し、思わず笑ってしまったのです。「いや、そこ直すの!?」という、AIの斜め上すぎる提案は、バグ修正の概念をぶち壊してくれました。

この記事では、AIを使ったバグ修正の始め方から、実際に私が体験した「爆笑の修正案」、そしてAIを相棒にするためのコツまで、楽しく紹介します。

「AIでバグ修正」って、どこまでできるの?

AIはバグを修正できるが、私たちの意図とは違う方向に進む時がある。この意外性がAIとの対話の醍醐味です。

AIはコードを解析し、エラーメッセージを読み解きます。その上で、解決策を提案してくれるのです。しかし、AIはコードの「意図」まで深く理解しているわけではありません。表面的な問題解決にフォーカスし、結果として私たちの予想を裏切るような修正案を出す場合があります。これが、AIとのバグ修正で面白い部分です。

例えば、リストのインデックスエラーをAIに渡すとします。AIは「リストの長さをチェックするコードを追加する」と提案するかもしれません。しかし、私たちの本当の意図が「リストの要素を増やす」ことだった場合、AIの提案は全く別の方向を向いているわけです。

準備は5分!AIとバグと対峙する環境を整えよう

AIとバグ修正を始めるには、特別な環境は不要です。使い慣れたAIがあれば十分。5分で準備完了です。

AIバグ修正のスタートラインは、ChatGPTのようなチャットAIを使うことです。または、VS Codeなどのエディタに統合されたGitHub Copilotも良い選択肢でしょう。これらのツールは、コードを貼り付けたり、コードを書きながらリアルタイムで提案を受けたりできます。

ChatGPTを使う場合、Webブラウザを開き、アカウントにログインするだけで準備は完了。GitHub Copilotを使うなら、VS Codeに拡張機能をインストールし、GitHubアカウントと連携します。例えば、VS Codeの拡張機能マーケットプレイスで「GitHub Copilot」と検索し、インストールボタンを押すだけ。たったこれだけで、あなたの開発環境にAIの力が加わります。

# VS CodeでGitHub Copilotをインストールする手順(拡張機能ビューから検索・インストールが一般的)
# コマンドラインからのインストールは通常行わないため、参考情報として記載

# 1. VS Codeを開く
# 2. 左側のアクティビティバーから「拡張機能」アイコン(四角が4つ並んだもの)をクリック
# 3. 検索窓に「GitHub Copilot」と入力
# 4. GitHub Copilotの拡張機能を見つけ、「インストール」ボタンをクリック
# 5. インストール後、GitHubアカウントとの連携を促されるので、指示に従って認証を完了させる

注意点として、これらのAIツールはインターネット接続が必須です。また、無料版では利用制限がある場合もあるため、利用規約を事前に確認しましょう。

まずは簡単バグで試運転!AIにコードを渡してみよう

短いコードと具体的なエラーメッセージをAIに渡すことで、AIはすぐに修正案を提示します。簡単なバグから試すのがおすすめです。

例えば、PythonでよくあるIndexErrorを例にしてみましょう。以下のようなコードがあるとします。

data = [10, 20, 30]
print(data[3]) # IndexError: list index out of range

このコードは、リストdataには3つの要素しかなく、インデックス3にアクセスしようとするとエラーが発生します。このコードとエラーメッセージをAIに渡してみましょう。

AIへのプロンプト例:

以下のPythonコードでIndexErrorが発生しています。
print(data[3]) # IndexError: list index out of range

data = [10, 20, 30]
print(data[3])

このエラーを修正するコードを提案してください。

AIはすぐに、以下のような修正案を提示するはずです。

data = [10, 20, 30]
# リストの範囲外アクセスを防ぐために、インデックスを修正するか、要素が存在するかを確認します。
# 例1: 存在するインデックスにアクセスする
# print(data[2])

# 例2: リストの長さをチェックしてからアクセスする
if len(data) > 3:
    print(data[3])
else:
    print("指定されたインデックスには要素がありません。")

# 例3: 適切なインデックスに変更する
print(data[len(data) - 1]) # 最後の要素にアクセス

AIはエラーの原因を特定し、複数の解決策を提示してくれます。ここで重要なのは、コード全体を渡すのではなく、問題箇所とエラーメッセージを明確に伝えることです。これにより、AIは的確な修正案を出しやすくなります。

「え、そこ直す!?」AIの斜め上な提案に驚く

AIはバグ修正の意図を誤解し、全く別の観点からコードを書き換えることがあります。この「意図せぬ修正」こそが、AIバグ修正の面白いポイントです。

私が体験した爆笑エピソードを紹介します。ある時、私はPythonのコードで、リストの要素を処理する際に範囲外アクセス(IndexError)が発生するバグに悩んでいました。期待する動作は「リストの最後に要素を追加し、全ての要素を安全に処理する」ことでした。

そこで、問題のコードとエラーメッセージをAIに渡しました。

# 元のコード(問題箇所)
my_list = [1, 2, 3]
for i in range(len(my_list) + 1): # 意図的に範囲外アクセスを起こす
    print(my_list[i])

このコードはmy_listの要素が3つなのに、range(4)0, 1, 2, 3とループするため、my_list[3]でエラーになります。 私の頭の中では「my_list.append(新しい要素)して、for i in range(len(my_list))で回せば解決するかな?」と考えていました。

しかし、AIから返ってきた修正案は、私の想像をはるかに超えていました。

# AIの提案
my_list = [1, 2, 3]
# エラーを回避するため、リストの長さを変更します
my_list.extend([0]) # リストの末尾に要素を追加して長さを4にする

for i in range(len(my_list)):
    print(my_list[i])

AIは、なんとリストそのものを変更して、インデックスエラーが発生しないようにしたのです!

これには「いや、そうじゃない! リストの要素を増やすのが目的じゃなくて、安全にループするのが目的だよ!」と、思わずツッコミを入れてしまいました。AIは、私の「リストの最後に要素を追加する」という潜在的な意図を読み取ることなく、「インデックスエラーを解消する」という表面的な問題解決に特化してしまったのです。

この時の「なぜか」は、AIがコードの背景にあるビジネスロジックや開発者の深い意図までは読み取れない点にあります。AIは与えられた情報から最も直接的な解決策を導き出そうとします。この経験は、AIとの付き合い方について、大切な気づきを与えてくれました。

AIを「バグ修正の相棒」にするための3つのコツ

AIをただの「修正機」として使うのではなく、真の相棒にするにはプロンプトの工夫が重要です。意図を正確に伝える3つのコツがあります。

AIは私たち人間と同じように、曖昧な指示では最高のパフォーマンスを発揮できません。具体的な期待値を伝えることで、AIはより質の高い修正案を提示できるようになります。

  1. コードの目的を最初に伝える

    AIにバグ修正を依頼する前に、そのコードが「何を達成しようとしているのか」を明確に伝えます。例えば、「このコードはユーザーの入力データを検証し、データベースに保存するためのものです」のように、目的を簡潔に書きます。AIはコードの全体像を把握しやすくなり、意図を汲み取った修正案を出しやすくなります。

  2. 具体的な期待値を明記する

    「Yというバグが発生している。これをZに修正したい」と、具体的に何が問題で、どうなってほしいのかを伝えます。例えば、「データが重複して登録されるバグが発生している。データベースにデータが存在しない場合のみ登録するように修正したい」のように、期待する結果を明確に書きます。これにより、AIは修正の方向性を正確に理解できます。

  3. 制約条件も加える

    「ただし、Aのロジックは変えないでほしい」など、変更してほしくない部分や、守ってほしいルールがあれば伝えます。例えば、「この修正では、既存の認証ロジックには手を加えないでください」のように、制約条件を付け加えます。これは、AIが意図しない範囲まで修正してしまうリスクを減らすために非常に有効です。

これらのコツを意識してプロンプトを作成することで、AIは単なるコード修正ツールから、あなたの開発を強力にサポートする心強い相棒へと進化します。プロンプトは簡潔に、しかし具体的に書くことが大切です。長すぎるプロンプトはAIを混乱させる可能性があります。

もはやAIは「ただの修正機」じゃない!発想の転換を楽しむ

AIはバグ修正の直接的な答えだけでなく、別の視点や新たなアプローチを教えてくれます。AIの「斜め上」な提案は、私たちの固定観念を打ち破るきっかけになります。

前述の「リストの長さを変更してインデックスエラーを回避する」というAIの提案は、私の意図とは異なりました。しかし、この提案から私は別の気づきを得ました。それは「そもそも、なぜリストの範囲外アクセスが発生してしまうのか?」という根本的な問いです。

AIは、問題解決の方法として、コードのロジックを微修正するだけでなく、データ構造そのものや、処理フロー全体の見直しを示唆することもあります。私たちの思考が「バグを直す」という一点に集中しがちなのに対し、AIはより広範な可能性を提示してくれるのです。

AIの提案を鵜呑みにせず、常にクリティカルな視点を持つことは大切です。しかし、その上でAIの「意外な発想」を楽しむ姿勢を持つことで、私たちは開発者としての視野を広げられます。AIの提案から「なぜAIはそう考えたのか?」と問いを立てることで、私たちのコードに対する理解も深まります。

AIは、開発者が陥りがちな思考のパターンから私たちを解放し、新しい解決策や、より堅牢な設計へのヒントを与えてくれる、そんな存在になりつつあります。

「AIに全部任せたら動かなくなった!」体験談から学ぶこと

AIによるバグ修正は確かに便利ですが、人間のレビューは必須です。すべてをAIに任せると、思わぬ落とし穴にはまることがあります。

あるインディーゲーム開発者(以下Aさん)は、リリース直前でゲーム内の特定の条件下で発生する複雑なバグに悩まされていました。納期まで残り3日という状況で、Aさんは藁にもすがる思いでAIにバグ修正を依頼したのです。

  1. 何に困っていたか Aさんが困っていたのは、ゲームのアイテム所持数にまつわるバグです。特定のアイテムを連続で大量に入手すると、所持数が正しく更新されず、ゲームがクラッシュすることが稀に発生しました。再現性が低く、原因特定に時間がかかっていたのです。

  2. なぜそれを選んだか Aさんは、AIであれば複雑なロジックでも瞬時に解析し、解決策を提示してくれると期待しました。残された時間が少なく、手動でのデバッグでは間に合わないと感じたため、AIの力を借りることを決断したのです。過去の簡単なバグ修正でAIが効果的だった経験も、AIに頼る決め手となりました。

  3. どう解決できたか(と思われたか) AIはすぐに修正案を提示しました。Aさんはその修正案を深く確認することなく、そのままコードに適用しました。その場ではクラッシュが再現されなかったため、「バグが直った!」と喜びました。しかし、翌日のテストプレイで、ゲーム内の別の場所にある「キャラクターのスキルポイント割り振り」機能が全く動かなくなっていることが判明したのです。AIの修正が、意図せず別の機能の変数に影響を与えていました。Aさんは結局、AIの修正を元に戻し、手動で原因を特定し、修正するのに丸1日を費やしてしまいました。

この体験から読者が学べることは、AIが提案した修正コードは、必ず人間の目でレビューし、徹底的にテストする必要がある、ということです。AIは万能ではなく、思わぬ副作用を生み出す可能性があります。

今日から実行できるアクションプラン:

  • AIが修正したコードは、必ず元のコードとの変更差分を細部まで確認する。
  • 修正を適用したら、その機能だけでなく、関連する全ての機能で既存のテストケースを全て実行する。
  • 複雑なバグの修正は、AIと対話しながら、小さく段階的に修正を進め、その都度動作確認を行う。

まとめ

AIによるバグ修正は、時に私たちを驚かせ、時に笑わせてくれます。しかし、その「斜め上」な提案の裏には、AIがコードをどのように解釈し、問題を解決しようとしているのか、というヒントが隠されています。

AIはまだ完璧ではありませんが、その意外性やユニークな発想は、私たち開発者の思考を刺激し、新たな発見をもたらしてくれます。AIの提案を鵜呑みにせず、好奇心を持って対話することで、あなたの開発はもっと面白くなるはずです。

さあ、あなたもAIにバグ修正を丸投げして、その意外な提案を楽しんでみませんか?

参考文献


まとめ・次のステップ

この記事が役に立ったら、ブログのメールマガジンへ登録してください。 AI活用・個人開発・副業に関する最新情報を週1回お届けします。

👉 無料メルマガに登録する(Waitlist)


このブログでは、会社員をしながら副業でSaaSを開発する過程をリアルに発信しています。使用スタック: Next.js / Supabase / Claude API / Vercel

広告

-AI