カテゴリー

  • プログラミング
  • 英語学習
  • 海外
  • キャリア
  • Kredo
Kredoオンラインキャンプ
KredoIT留学
無料カウンセリングはこちら
Kredoオンラインキャンプ体験談
KredoIT留学体験談
外貨を稼ぐ!海外フリーランス無料セミナー
未経験から即戦力ITグローバル人材 無料セミナー
Kredo Blog 英語・IT・AIで、人生の選択肢を広げる。
無料ウェビナー参加 ↗ 無料カウンセリング予約無料相談↗
MENU
EXPLORE KREDO BLOG

知りたいことから、世界が広がる。

ブログTOP ↗
留学・セブSTUDY & LIFE
留学・セブの記事をすべて読む ↗ 海外留学→海外移住→海外就職→
英語学習ENGLISH
英語学習の記事をすべて読む ↗ 英語学習法→英語フレーズ→
IT・AITECH & CREATIVITY
IT・AIの記事をすべて読む ↗ プログラミング学習→プログラミング知識→AI・テクノロジー→デザイン→
キャリアYOUR NEXT CHAPTER
キャリアの記事をすべて読む ↗ 転職情報→キャリアデザイン→
KredoOUR SCHOOL
Kredoの記事をすべて読む ↗ ニュース・キャンペーン→セブ島情報→インタビュー→
STUDENT DIARIES留学生のリアルな日記noteの体験記を読む ↗YouTube・Instagramで留学を知る ↗
記事を探す ブログTOP
留学・セブ
STUDY & LIFEセブで学ぶ。海外で暮らす。留学の準備から、現地の毎日まで。
留学・セブを知るすべての記事 ↗
海外留学費用・期間・学校選びを知る↗海外移住海外で暮らすためのヒント↗海外就職世界で働く選択肢を探す↗
FROM CEBU / note留学生の、
リアルな毎日。
写真とことばで読む留学日記日記を読む ↗
英語学習
ENGLISH英語が、世界を近くする。学び方と、今日から使える英語。
英語学習を知るすべての記事 ↗
英語学習法自分に合った学び方を見つける↗英語フレーズ会話で使える表現を読む↗
FROM CEBU / note留学生の、
リアルな毎日。
写真とことばで読む留学日記日記を読む ↗
IT・AI
TECH & CREATIVITYつくる力を、次の一歩に。プログラミングとAIをもっと身近に。
IT・AIを知るすべての記事 ↗
プログラミング学習はじめ方・学び方を知る↗プログラミング知識仕組みやスキルを深める↗AI・テクノロジーAIの活かし方と最新の話題↗デザイン伝わるものづくりのヒント↗
FROM CEBU / note留学生の、
リアルな毎日。
写真とことばで読む留学日記日記を読む ↗
キャリア
YOUR NEXT CHAPTER学びの先の、働き方。転職・海外就職・これからのキャリア。
キャリアを知るすべての記事 ↗
転職情報次の仕事へ向かう準備↗キャリアデザイン自分らしい働き方を考える↗
FROM CEBU / note留学生の、
リアルな毎日。
写真とことばで読む留学日記日記を読む ↗
Kredo
OUR SCHOOLKredoを、もっと知る。学校のこと、セブのこと、学ぶ人のこと。
Kredoを知るすべての記事 ↗
ニュース・キャンペーンKredoからのお知らせ↗セブ島情報現地の暮らしを知る↗インタビュー受講生・卒業生の声を読む↗
FROM CEBU / note留学生の、
リアルな毎日。
写真とことばで読む留学日記日記を読む ↗
留学日記 ↗

ENGLISH · IT · AI / STUDY IN CEBU

学ぶって、冒険だ。

英語・IT・AIで、人生の選択肢を広げよう。

留学の無料相談へ ↗Kredo Blogを読む →
JAPAN✈CEBU
Kredoで、講師と一緒に英語とITを学ぶ受講生
LEARN SOMETHING NEW.
セブの海を望む場所で学ぶ日常
HELLO, NEW WORLD.
  • TOP
  • プログラミング
  • Web・プログラミング(学習)
  • AIにバグ修正を頼む方法|最小再現コードと確認手順

AIにバグ修正を頼む方法|最小再現コードと確認手順

アバター画像
さおり
公開日:2026.10.06
更新日:2026.10.06
Web・プログラミング(学習) |
ノートとパソコンを見比べながら、不具合を再現する短いコードを整理する男性の自然な写真イメージ

こんにちは!Kredo Blog編集部のさおりです!

AIに「このバグを直して」と頼んだのに、別の場所まで変わったり、「こちらでは再現しません」と返ってきたり。そんなときは、依頼文を長くする前に、同じ不具合が起きる短いコードを用意してみましょう。

今回は、Pythonの「1回目は正常に見えるのに、2回目から前のメモが混ざる」問題を使います。不具合の再現、AIへ渡す情報、修正候補の比較まで、実行結果と一緒に確かめます。コードが短くなっても、問題が起きる呼び出し順序は残すのがポイントです。

記事のもくじ

  • 最小再現コードは、同じ問題が起きる小さな例
  • まず、2回目にメモが混ざる問題を再現する
    • 呼び出しを1回だけにすると、問題が見えなくなる
  • AIには、実測値と変えたくない条件を渡す
  • 修正は小さく行い、原因と変更点を結び付ける
  • 最初の不具合が直っても、別の使い方を試す
    • 同じ6項目で、3つの実装を比べる
  • 元のコードへ戻した後も、実際の操作で確かめる
  • 練習:再現に必要な情報を選んでみる
    • 問題1:どちらの例をAIへ渡しますか?
    • 問題2:if not版は5項目通ったので、採用してよいですか?
    • 問題3:再現コードでは直りました。報告に何を残しますか?
  • AIへのバグ修正依頼でよくある質問
    • エラーメッセージがないと、バグを説明できませんか?
    • 何行まで短くすれば、最小再現コードですか?
    • AIにテストも作ってもらえば十分ですか?

最小再現コードは、同じ問題が起きる小さな例

長い資料から問題に関係する部分を取り出し、短いコードでも同じ不具合が起きるかを確かめる水彩図解
必要な部分へ絞っても、元と同じ問題が起きることを確かめます。

最小再現コードとは、不具合を調べるために、必要な部分へ絞った実行できる例のことです。英語ではminimal reproducible example、略してMREと呼ばれます。

短さだけで決めるものではありません。Stack Overflowの公式ヘルプでは、必要な部分を絞ること、再現に必要なものを含めること、実際に同じ問題が起きるか試すことが示されています。参考:How to create a Minimal, Reproducible Example

たとえば、長いアプリから関数だけを抜き出しても、どの値を渡したかがなければ相手は試せません。「2回目だけおかしい」なら、1回目からの順番も必要です。

残す情報 この教材で用意するもの
実行するコード メモをリストへ追加するadd_note関数
入力と順番 「朝のメモ」、次に「夜のメモ」で呼び出す
期待する結果 省略時は、呼び出しごとに別のリストになる
実際の結果 2回目の結果に1回目のメモも含まれる
試す環境と実行方法 Pythonのバージョン、実行するファイルとコマンド

作業は元のコードのコピーや別の練習ファイルで行います。少し削るたびに実行し、同じ問題が残っているかを確認してください。必要な設定・初期データ・処理順まで消してしまったら、直前の状態へ戻して切り分けます。

まず、2回目にメモが混ざる問題を再現する

最小再現コードの練習教材をダウンロードする(ZIP)を専用フォルダーへ展開します。修正前・修正候補・修正版、確認用コード、依頼文、実行結果、READMEが入っています。Python 3を使い、追加パッケージは不要です。

次は、教材のbroken.pyです。labelは追加する文字列、notesは追記先のリストです。

def add_note(label, notes=[]):
    notes.append(label)
    return notes


if __name__ == "__main__":
    print(add_note("朝のメモ"))
    print(add_note("夜のメモ"))

展開したフォルダーをターミナルで開き、ファイル全体を一度実行します。使っているPython 3のコマンドがpythonやpyなら、python3を置き換えてください。

python3 -B broken.py

実際の出力:

['朝のメモ']
['朝のメモ', '夜のメモ']

この教材で期待している2行目は['夜のメモ']です。ところが、実際は「朝のメモ」も残っています。例外が表示されず、実行が最後まで進んでいても、期待どおりとは限りません。

呼び出しを1回だけにすると、問題が見えなくなる

最初の一行だけなら、['朝のメモ']が出て正常に見えます。だから、この例では同じ関数を定義した状態で、続けて2回呼ぶことを残します。対話画面で毎回関数を定義し直すなど、条件を変えてしまうと、同じ比較になりません。

if __name__ == "__main__":より下は、このファイルを直接実行したときの確認用コードです。教材のテストから関数を読み込むときには、この表示処理を実行しないようにしています。-Bは、教材を試す際のバイトコードキャッシュ作成を抑えるための指定です。

AIには、実測値と変えたくない条件を渡す

不具合を確認したら、コードに加えて「何を期待しているか」「どこは今の使い方を保ちたいか」を書きます。この練習では、次の仕様に合わせて直します。

  • notesを省略したときは、毎回新しいリストを作る。
  • 前の呼び出しが返したリストへ、後の呼び出しの内容を混ぜない。
  • リストを明示して渡したときは、そのリスト自身へ追記し、同じリストを返す。空のリストも対象にする。
  • Noneを明示した場合は、省略時と同じく新しいリストを作る。

「渡したリストを書き換えず、コピーを返す」仕様も考えられますが、この教材では採用していません。どちらを期待しているかを先に決めると、修正候補を判定できます。

次の依頼文には、短いコード・実測値・期待値がそろっています。実際に使う際は、自分の環境で確認した情報へ置き換えてください。

Pythonの関数で、2回目の結果に1回目のメモが混ざります。
原因の根拠と、必要最小限の修正を説明してください。

実行環境:Python 3.12.14、macOS
実行方法:以下をbroken.pyへ保存し、python3 -B broken.pyでファイル全体を実行

再現コード:
def add_note(label, notes=[]):
    notes.append(label)
    return notes

print(add_note("朝のメモ"))
print(add_note("夜のメモ"))

期待する出力:
['朝のメモ']
['夜のメモ']

実際の出力:
['朝のメモ']
['朝のメモ', '夜のメモ']

修正後に必要な条件:
・notesを省略するかNoneを渡すと、呼び出しごとに新しいリストを返す。
・後の呼び出しで、前に返したリストの内容を変えない。
・notesにリストを渡すと、そのリスト自身へ追記して同じリストを返す。
・空のリストを明示して渡した場合も、同じリストへ追記する。
・labelは文字列、notesは省略・None・リストを使う教材。
・関数名と、文字列を追記する用途は変えない。

回答してほしいこと:
1. 原因と、その説明を確かめられるPython公式資料
2. 小さな修正差分と理由
3. 元の再現手順、および明示した空リストを使う確認方法
4. 実行した確認と、まだ実行していない確認の区別

これは練習用の依頼文です。実際に使う際は、環境・コード・期待値・実測値を自分で確認した内容へ置き換えてください。

コードは、必要な部分をコピーできるテキストで渡します。表示崩れなら画面画像も役立ちますが、コードの画像だけでは、同じコードを実行して確かめにくくなります。実務のコードやログを使う場合は、共有できる範囲を確かめ、認証情報や個人情報を架空データへ置き換えた後でも問題が再現するか試してください。

この依頼文は独自の教材で、どのAIでも同じ回答が返ることを保証するものではありません。以下の修正候補も記事用に作成して実行したもので、特定のAIサービスから実際に得た回答という扱いではありません。

修正は小さく行い、原因と変更点を結び付ける

省略したリストを共有する修正前と、呼び出しごとに別のリストを用意する修正後を、メモの入れ物で比べる水彩図解
この例では、省略時のリストを呼び出しごとに用意し、前のメモが混ざる問題を直します。

今回の原因は、引数の初期値に使った[]が、呼び出すたびに新しく作られるわけではないことです。Pythonのデフォルト値は関数を定義したときに評価されます。リストのように中身を変更できる値を初期値にして追記すると、後の呼び出しにも内容が残ります。参考:Python公式チュートリアルのデフォルト引数

教材のfixed.pyでは、初期値をNoneにして、省略時またはNoneを受け取ったときに、関数の中で新しいリストを作ります。

def add_note(label, notes=None):
    if notes is None:
        notes = []
    notes.append(label)
    return notes


if __name__ == "__main__":
    print(add_note("朝のメモ"))
    print(add_note("夜のメモ"))

python3 -B fixed.pyで、修正前と同じ順番で2回呼んだ結果:

['朝のメモ']
['夜のメモ']

2回目の出力に「朝のメモ」は含まれなくなりました。appendで追記してリストを返す部分はそのままです。明示して渡されたリストは、ここでは新しいリストに置き換えません。

AIの説明がもっともらしくても、修正前と同じ入力・順番で試す工程は残します。変更した部分が原因とどう関係するかを、自分の言葉で一文説明できるかも確認してみてください。

最初の不具合が直っても、別の使い方を試す

最初の不具合を同じ手順で確かめ、別の使い方も試してから元の処理へ戻す3段階の水彩図解
最初の問題を同じ手順で確認し、別の使い方も試してから元の処理へ戻します。

次は、見落としやすい別の修正候補です。if notes is None:の代わりに、if not notes:を使っています。省略時の呼び出しだけを見れば、問題が直ったように見えます。

def add_note(label, notes=None):
    if not notes:
        notes = []
    notes.append(label)
    return notes


if __name__ == "__main__":
    provided = []
    result = add_note("共有メモ", provided)
    print("返された値:", result)
    print("渡したリスト:", provided)
    print("同じリスト:", result is provided)

python3 -B candidate_truthy.pyの実行結果:

返された値: ['共有メモ']
渡したリスト: []
同じリスト: False

返された値にはメモがあるのに、渡したprovidedは空のままです。空のリストもif not notesの条件に当てはまり、新しいリストへ置き換えられたためです。この教材の「渡したリスト自身へ追記する」という条件には合いません。

値が同じかだけでなく、同じリストを使っているかを確認する理由が、ここにあります。教材のテストでは、内容の比較にassertEqual、同じオブジェクトかの比較にassertIsを使っています。参考:Python公式unittest

同じ6項目で、3つの実装を比べる

次のコマンドで、教材の確認プログラムを実行できます。brokenとcandidate_truthyは、違いを観察するため意図的に不合格になる例です。

python3 -B check_notes.py broken
python3 -B check_notes.py candidate_truthy
python3 -B check_notes.py fixed
確認する振る舞い 修正前 if not版 is None版
最初の呼び出しで1件を返す 合格 合格 合格
2回目に前のメモが混ざらない 不合格 合格 合格
後から呼んでも最初の結果が変わらない 不合格 合格 合格
渡した空リスト自身へ追記する 合格 不合格 合格
渡したリストの既存メモを残して追記する 合格 合格 合格
Noneを明示しても毎回別のリストになる 例外発生 合格 合格

実行した結果、修正前は3/6項目、if not版は5/6項目、is None版は6/6項目で条件を満たしました。修正前の最後の項目ではAttributeErrorになっています。例外発生と、実行できても値が違う不合格は、ログでも分けて記録しています。

修正版のテスト結果の末尾:

Ran 6 tests in 0.000s

OK

テスト所要時間の数字は、実行する環境によって変わります。また、この6項目の合格は、決めた仕様に対する確認結果です。入力型の誤り、同時実行、実際の画面や保存処理まで検証したことにはなりません。

元のコードへ戻した後も、実際の操作で確かめる

小さな例で直ったら、元のコードへ必要な変更を戻します。このとき、切り出した例だけを動かして作業を終えず、最初に問題を見つけた操作を元の環境でも行います。

  1. 元のコードとの差分を見て、必要な変更だけを反映する。
  2. 最初に問題が起きた入力・順番で、もう一度試す。
  3. もともと動いていた使い方も試す。今回なら、追記先のリストを渡す場合。
  4. 期待値と実測値、試した環境、まだ試していない範囲を残す。

今回の配布物は、関数の動きを確かめる小さな教材です。既存の業務アプリへ実装して確認した、という実績ではありません。画面入力・保存・再読み込みを含むアプリの確認は、AIで作ったアプリのテスト方法へ進むと、別の範囲を練習できます。

AIへ追加の質問をするときも、「まだ直りません」だけでなく、新しく試した手順と結果を添えます。英語で報告する必要があるなら、英語のバグ報告テンプレートで、期待する動作と実際の動作を整理してください。

練習:再現に必要な情報を選んでみる

問題1:どちらの例をAIへ渡しますか?

Aは、add_noteを1回だけ呼び、正常な結果を表示するコード。Bは、同じ関数を続けて2回呼び、2回目に前のメモが混ざるコードです。

解答:Bです。今回の問題が起きる順番を再現できています。短くするために2回目の呼び出しを消すと、調べたい現象も消えてしまいます。

問題2:if not版は5項目通ったので、採用してよいですか?

この教材では、空のリストを明示して渡した場合も、そのリスト自身へ追記する必要があります。

解答:そのままでは採用できません。必要な1項目が不合格です。合格数だけでなく、どの条件が満たされていないかを見ます。

問題3:再現コードでは直りました。報告に何を残しますか?

解答例:「Python 3.12.14の教材で、同じ2回の呼び出しと6項目のテストを実行し、修正版はすべて合格。元アプリへの反映と画面操作は未確認」。試した範囲を具体的に書きます。

AIへのバグ修正依頼でよくある質問

エラーメッセージがないと、バグを説明できませんか?

説明できます。この例も、最初の2回の実行では例外が出ません。期待していたリストと、実際に出たリストの違いが手がかりになります。例外が出る場合は、種類とメッセージを原文で残しましょう。Pythonの英語エラーを読む練習も参考になります。

何行まで短くすれば、最小再現コードですか?

決まった行数ではありません。同じ問題を再現するために必要な処理・入力・設定があり、余分な部分を減らせているかで考えます。名前やインデントまで削って読みにくくする必要はありません。

AIにテストも作ってもらえば十分ですか?

テスト作成の補助には使えます。ただ、AIが解釈した仕様に合わせたテストだけでは、こちらが必要な条件を落とす場合があります。今回なら「空のリストを渡したら、そのリストへ追記する」という条件が含まれているか、自分でも見比べます。

次に修正を頼むときは、「実行する短いコード」「期待値」「実測値」の3つを先にそろえてみてください。返ってきた修正は同じ条件で動かし、残したい使い方も確かめる。この往復を小さくすると、どこが変わって直ったのかを追いやすくなります。

一次資料・実行確認:2026年10月6日。教材はPython 3.12.14/macOSで実行。コード・メモ・依頼文は独自の練習用です。写真・水彩図解はAI生成の学習イメージで、実在の受講生や勤務先の記録ではありません。

英語でIT・AIを学べるKredo

英語×IT・AIのスキルを身につけてグローバルに活躍しませんか?

当メディアを運営しているKredoは、英語×ITをオンラインで学ぶ「Kredoオンラインキャンプ」と、フィリピンのセブ島で英語とIT・AIを学ぶ「KredoIT留学」「KredoAI留学」を提供しています。これまでの卒業生は3,000名以上。卒業生の多くが、国内外のIT企業への転職、フリーランスなどへのキャリアチェンジを実現しています。これからの時代に必要な英語×IT・AIのスキルを身につけてグローバルに活躍しませんか?

\ セブ島でIT×英語を学ぶ /IT留学の無料カウンセリングを予約する
\ オンラインでIT✕英語を学ぶ / Kredoオンラインキャンプの詳細をみる >>
  • ツイート
  • シェア
  • はてな
  • ポケット
この記事を書いた人
アバター画像
さおり

小学校教員、特別支援学校教員を経て、退職後半年間フィジー留学。帰国後Kredoオンラインキャンプを3か月受講したのち、未経験でIT企業へ転職。現在はフリーランスでWebディレクターなどをしながら、Webデザインと英語を勉強中。個人でブログ運営。食べることが大好き♪

関連記事

  • ノートパソコンと紙の表を見比べながら、CSVの日本語表示を確認する大人の自然な写真イメージ
    Web・プログラミング(学習)

    PythonでCSVが文字化けする原因と直し方|UTF-8・BOM・CP932

  • カレンダーとパソコンで日付のずれを考える学習イメージ
    Web・プログラミング(学習)

    JavaScriptの日付が1日ずれる原因と直し方|UTCと日本時間

    2026.10.05
  • CSVの表データをパソコンと紙で照合する学習イメージ
    Web・プログラミング(学習)

    PythonのCSV読み込みで列がずれる原因と直し方

  • Pythonの英語エラーを調べる学習者のイメージ写真
    Web・プログラミング(学習)

    Pythonの英語エラーの読み方|6種類の原因と直し方

新規CTA
KREDO JAPAN株式会社

\ SNSで留学の様子を更新中! /

  • Instagram
  • LINE
  • X
  • YouTube
©KREDO JAPAN Inc. 2024 All rights reserved.
Kredoのサービス
セブ島で学びたい方はこちら KredoIT留学
自宅で学びたい方はこちら Kredo Online 英語×アプリ開発コース
運営会社 会社概要 採用情報 お問い合わせ
利用規約 プライバシーポリシー 特定商品取引に基づく表示 資料請求