
AIのサンプルコードが動かない|バージョン違いの切り分け方
「このライブラリで、こういう処理を書くには?」とAIに聞いて、返ってきたサンプルコードをそのまま貼る。
実行すると、いきなりエラー。「そんな関数はありません」「その引数は知りません」。AIに聞き返すと、別の書き方が返ってきて、それもまた動かない。気づけば30分、同じところをぐるぐるしている——そんな夜、ありますよね。
このとき、つい「自分の環境がおかしいのかな」「自分の理解が足りないのかな」と自分を疑いがちです。でも実は、AIのサンプルコードが動かない原因のかなりの部分は、「手元のバージョン」と「AIが想定しているバージョン」がずれていることにあります。あなたの腕の問題ではないことが、けっこう多いんです。
この記事では、動かないサンプルコードを前にしたとき、どこから見ればいいかを順番に整理します。
結論:AIのサンプルコードが動かないときは、次の3ステップで切り分けます。①手元を見る——まず自分の環境で実際に入っているバージョンを確かめる(AIに聞く前に)。②エラーで分ける——「そもそも見つからない」「呼び方が合わない」「動くけど結果が違う」の3つのどれかを見る。③合わせて聞き直す——手元のバージョンと、エラー全文を添えてAIに聞き直し、出てきた書き方は公式ドキュメントの同じバージョンのページで確かめる。
覚え方は 手元を見る → エラーで分ける → 合わせて聞き直す。AIに「動きません」とだけ返すのをやめるのが、いちばんの近道です。
今日は①の「バージョンを1つ確かめる」だけでも大丈夫です。それだけで、AIとのやりとりの往復がぐっと減ります。
何が起きているのか——AIは「いつのバージョンの話か」を言わない
AIのサンプルコードがバージョン違いで動かなくなるのには、いくつか構造的な理由があります。
1つ目は、AIの知識に「止まった時点」があること。学習した時点より後に出たバージョンのことは知りません。逆に、昔のバージョンの書き方もたくさん学んでいるので、新旧の書き方が混ざった答えが出てくることがあります(背景はAIの知識は少し前で止まる|古い情報で最新仕様を扱う注意点で詳しく整理しています)。
2つ目は、AIがバージョンを明示しないこと。人間の書いた技術記事なら「v3系での書き方です」と前置きがあることが多いのですが、AIの答えにはそれがないことがほとんどです。どのバージョン向けのコードか分からないまま、手元に貼っている。ここがずれの入り口です。
3つ目は、こちらもバージョンを伝えていないこと。「このライブラリで〜するには?」という聞き方だと、AIは「どこかのバージョンの、それらしい書き方」で答えるしかありません。質問の側にも、ずれの種があります。
4つ目は、エラーが「バージョン違い」とは教えてくれないこと。エラーメッセージは「この名前は見つからない」とだけ言います。それが「書き間違い」なのか「名前が変わった」なのか「まだ存在しない」なのかは、こちらが見分けるしかありません。だから迷うんです。
裏を返すと、バージョンを先に揃えてしまえば、AIのサンプルコードはかなり頼りになるということでもあります。
具体例——エラーの形で、原因の見当がつく

エラーメッセージは言語やライブラリによって表現がちがいますが、だいたい次の3つの形のどれかに入ります。どれに当たるかで、見に行く場所が変わります。
A. 見つからない(名前がない)
- 「モジュールが見つからない」「その名前はインポートできない」
- 「そのオブジェクトにそんな属性(メソッド)はない」「〜 is not a function」
このタイプは、関数・クラス・モジュールの名前そのものが、手元のバージョンに存在しないことが多いです。考えられるのは3つ。
- 新しいバージョンで追加されたものを、古いバージョンで呼んでいる
- 古いバージョンにあったものが、新しいバージョンで改名・移動・削除された
- AIがそれらしい名前を作ってしまった(そもそも、どのバージョンにも存在しない)
1と2はバージョンを合わせれば解決します。3だけは別の問題なので、公式ドキュメントで実在を確認するのが早道です(見分け方はAIのハルシネーションの見抜き方|開発現場で気づく型)。
B. 合わない(呼び方が違う)
- 「予期しないキーワード引数」「引数の数が違う」
- 型が合わない、必須の設定が足りない、と言われる
名前は存在するのに、引数の名前・順番・型・必須かどうかが変わっているパターンです。設定ファイルの項目名や階層が変わった、というのもここに入ります。エラーの行がはっきりしているぶん、実は3つの中ではいちばん直しやすいタイプです。
C. 動くけど結果が違う(エラーが出ない)
- 動くのに、出力の形が違う(配列のはずがオブジェクト、など)
- 日付や文字コード、丸め方が想定と違う
- 「非推奨」の警告だけが出ている
いちばん気づきにくいのがこれです。既定値(デフォルト)や戻り値の形がバージョン間で変わっていると、エラーにならずに結果だけずれます。警告が出ていたら、それは大事な手がかりです。読み飛ばさずにメモしておいてください。
影響——「動かない」より、「適当に動いてしまう」ほうが後に響く
動かないコードは、困るけれど、少なくとも気づけます。後から響きやすいのは、こんな形です。
- ぐるぐる時間が溶ける:「動きません」とだけAIに返すと、AIはまた別の(やはりバージョンの合っていない)書き方を出します。往復が増えるほど、どの書き方を試したのかも分からなくなります(抜け出し方はAIとの修正ループが終わらない|堂々巡りから抜ける手順)。
- バージョンを「合わせにいって」しまう:サンプルを動かすために、ライブラリを勝手に上げたり下げたりすると、今度はプロジェクトの別の箇所が動かなくなることがあります。サンプルに合わせるのは、手元ではなくコードの側です。
- 新旧の書き方が混ざる:あちこちのサンプルをつなぎ合わせて動いたコードは、古い書き方と新しい書き方が同居していて、次のバージョンアップで一番に壊れます。
- 「自分が悪い」と抱え込む:これがいちばんもったいない影響です。原因はバージョンのずれなのに、自分の力不足だと思って誰にも聞けなくなる。そういう時間は、本来なくていいものです。
ここは、少し安心していいところでもあります。バージョン違いは、仕組みで減らせる種類の問題です。最初に手元を見て、それを伝える。それだけで、多くのずれは入り口で止まります。
明日からやること(手元を見る・エラーで分ける・合わせて聞き直す)
上から順に、小さく始められます。今日は1だけで十分です。
1. 手元を見る——AIに聞く前に、入っているバージョンを確かめる
まず見るのは、AIではなく自分の環境です。「入れたつもり」のバージョンと、「実際に入っている」バージョンは違うことがあります。
- ロックファイルを見る:
package-lock.json、go.mod、requirements.txtなど、プロジェクトが実際に固定しているバージョンの記録。ここがいちばん確かな情報源です。 - コマンドで確かめる:Pythonなら
pip show <パッケージ名>、Node.jsならnpm ls <パッケージ名>のように、インストール済みのバージョンを表示するコマンドがたいていの言語に用意されています。 - 言語・ランタイムのバージョンも見る:ライブラリだけでなく、言語そのもののバージョンが古くて新しい書き方が使えない、ということもあります。
- どの環境で動かしているかを確認する:仮想環境やコンテナの中か外か。ターミナルとIDEで別の環境を見ていた、というのは本当によくある話です(環境づくりの手順はAIに環境構築の手順を書かせる|動かない時の切り分け方)。
ここで分かったバージョンを、メモ帳に1行書いておきます。次の手順で使います。
2. エラーで分ける——3つのどれに当たるかを見る
エラーメッセージを、上の具体例の A・B・C のどれかに当てはめます。ここで大事なのは、エラーの最後の1行だけでなく、全文をコピーしておくことです。どのファイルの、どの行で止まったかが、後の聞き直しで効いてきます(読み方のコツはAIにビルド・実行エラーの原因を解説させる|検索より速い直し方)。
- Aなら:その名前を、公式ドキュメントで手元のバージョンに切り替えて検索します。見つからなければ、改名・削除か、AIの作った名前です。
- Bなら:その関数の、手元のバージョンでの引数の一覧を公式ドキュメントで見ます。たいていはそこで答えが出ます。
- Cなら:警告が出ていないかを見て、変更ログ(changelog)で既定値や戻り値の変更を探します。
多くの公式ドキュメントには、ページの上部などにバージョンを切り替える場所があります。検索で開いたページが最新版とは限らないので、手元のバージョンに合わせてから読むのがコツです。
3. 合わせて聞き直す——バージョンとエラー全文を添える
「動きませんでした」の代わりに、こう聞き直してみてください。
先ほどのサンプルコードを実行したところ、下のエラーが出ました。
私の環境のバージョンは次のとおりです。このバージョンで動く書き方に直してください。
・言語/ランタイム:(例:〇〇 x.y)
・ライブラリ:(例:〇〇 x.y.z)
あわせて、次も書いてください。
・このエラーは「名前が存在しない」「呼び方が違う」「その他」のどれだと考えられるか
・修正案がどのバージョン以降/以前を前提にしているか
・確実でない部分は「不明」と書き、推測で埋めないでください
エラー全文:(ここに貼る)
ポイントは、「どのバージョンを前提にしているか」を書かせることです。AIが前提を言葉にすると、こちらは公式ドキュメントのどのページを見に行けばいいかが分かります。前提が手元とずれていれば、その場で気づけます。
さらに確かにしたいときは、手元のバージョンの公式ドキュメントの該当ページを、AIに貼ってしまうのが一番です。記憶で答えさせず、目の前の資料から答えさせる形にすると、ずれはぐっと減ります。
出てきた書き方は、最後にもう一度、公式ドキュメントの同じバージョンのページで実在を確かめてから取り込みます。動いたら、軽く動作確認をして(AI生成コードの動作確認|そのまま使わない最低限の型)、コミットメッセージやメモに「〇〇 x.y 向けの書き方」と1行残しておくと、次にバージョンを上げる人が助かります。
サンプルコードが動かないときのチェックリスト(コピーして使えます)
全部に○が要るわけではありません。気になった行だけ見れば十分です。
① 手元を見る
- ロックファイルで、実際に固定されているバージョンを確認したか
- コマンドで、インストール済みのバージョンを確かめたか
- 言語・ランタイムのバージョンも確認したか
- 実行している環境(仮想環境・コンテナ・IDEのインタプリタ)が想定どおりか
- 確かめたバージョンを1行メモしたか
② エラーで分ける
- エラーメッセージを全文コピーしたか
- A(見つからない)・B(合わない)・C(結果が違う)のどれか当てはめたか
- 公式ドキュメントを、手元のバージョンに切り替えてから読んだか
- 非推奨の警告が出ていないか見たか
- 名前がどのバージョンにも存在しない(AIの作った名前)可能性を考えたか
③ 合わせて聞き直す
- 「動きません」だけでなく、バージョンとエラー全文を添えて聞き直したか
- 修正案がどのバージョンを前提にしているか、AIに書かせたか
- 必要に応じて、公式ドキュメントの該当ページをAIに貼ったか
- サンプルに合わせて、手元のライブラリを勝手に上げ下げしていないか
- 取り込む前に、公式ドキュメントで書き方の実在を確かめたか
- 「どのバージョン向けの書き方か」を1行残したか
この記事のまとめ
AIのサンプルコードが動かないとき、原因はあなたの腕ではなく、手元とAIの想定のバージョンのずれであることが少なくありません。
やることは3つ。①手元を見る——AIに聞く前に、実際に入っているバージョンを確かめる。②エラーで分ける——「見つからない」「合わない」「結果が違う」のどれかを見て、公式ドキュメントを手元のバージョンで開く。③合わせて聞き直す——バージョンとエラー全文を添え、どのバージョン前提の書き方かをAIに言葉にさせる。
この順番にすると、AIとの往復は「当てずっぽうのやり直し」から「条件をそろえた相談」に変わります。

サンプルコードが動かない時間は、外から見ると何も進んでいないように見えます。でも、手元のバージョンを確かめて、エラーを分けて、条件をそろえて聞き直す——その一つひとつは、次に同じ場面に出会ったときの自分を確実に楽にしています。
まずは次に「動かない」と思ったとき、AIに聞き返す前に、バージョンを1つ確かめてみてください。それだけで、もう半分は切り分けが済んでいます。
よければ、こちらも
- AIの知識が古くなる仕組みそのものはAIの知識は少し前で止まる|古い情報で最新仕様を扱う注意点
- 存在しない関数名を見抜くならAIのハルシネーションの見抜き方|開発現場で気づく型
- 手元のライブラリを上げるときはAIにライブラリのバージョンアップを任せる|破壊的変更の追い方
- 新しく依存を足す前にはAIが提案するライブラリを鵜呑みにしない|依存追加前の確認
- 修正のやりとりが長引いたらAIとの修正ループが終わらない|堂々巡りから抜ける手順