こんにちは、Sh33p(シープ)です。
現在、未経験からIT業界への挑戦を目指して、毎日Pythonのプログラミング学習を続けています。
普段はpaizaという学習サービスを使って練習問題を解いているのですが、実はその裏で、とても頼りになる「専任の家庭教師」に助けてもらっています。
それが、Googleが提供しているAI、GeminiやGoogle AI Studioです。
「AIを使うと答えを丸写しして、実力がつかないのでは?」と思う方もいるかもしれません。
でも、AIの使い方をちょっと工夫するだけで、答えを教えずにひらめきを引き出してくれる最高の勉強パートナーになってくれます。
今回は、僕がGoogle AIと二人三脚で実践しているPython勉強法と、実際のバグ解決の体験談をまとめて紹介します。
答えは絶対に教えない!AIと決めた「3つの学習ルール」

AIをただの便利ツールにしないために、Google AIにあらかじめプロンプトを与えて、あえて「答えを教えない家庭教師」として動いてもらう設定にしています。
ただし、ひとつ大切な注意点があります。
⚠️ paizaの問題文をそのままAIに貼り付けるのはNG
paizaの利用規約では、サービス内のコンテンツを外部に複製・公開することが禁止されています。問題文をそのままAIのチャットに貼り付ける行為も、この規約に抵触する可能性があります。
AIへの質問は、以下のように自分の言葉で状況を説明する形にするのがおすすめです。
❌ NG:「この問題を解いてください。(問題文をそのまま貼り付け)」
✅ OK:「リストから特定の要素を削除する処理を書いたらバグが出ました。原因のヒントだけ教えてください」
✅ OK:「forループ中にremove()を使うと要素がスキップされる理由を、例え話で教えてください」
この「自分の言葉で状況を説明する」習慣自体が、問題の本質を理解する訓練にもなるので、一石二鳥だと思っています。
① 答えを直接書かず、必ず「ヒント」だけを出す
答えのコードをそのまま貼り付けてもらうと、その場は解決した気になりますが、頭には何も残りません。
そこで、エラーで詰まったときは”解決のヒントだけを段階的に出す”ように設定しています。自分の力で「あ、そういうことか!」とひらめいた瞬間が、一番成長できる瞬間だからです。
② 難しい専門用語を「身近な例え話」に変換する
「イテレータ」や「メモリ空間」といった専門用語は、そのまま説明されても初心者にはなかなか伝わりません。
「お菓子の列」や「貯金箱」のように、頭の中にイメージ図が浮かびやすい例え話に変換して解説してもらうようにしています。
③ 学んだ基礎を「自作ゲーム」に結びつけたクイズで復習する
ただ問題を解くだけの座学では、知識はすぐに抜けてしまいます。
paizaで「リスト」などの基礎を学んだら、趣味で開発している「2D弾幕ゲーム」の実際のコードをAIに読み込ませて、「さっき学んだ知識は、この自作ゲームのここで使われているよ!」という形で、実践に結びついた復習クイズを出してもらっています。
【実録】forループ中の「remove()の罠」をAIとの連携で乗り越えた話

この勉強法のおかげで、Python初心者が必ず一度はハマるらしい(Gemini曰く)「仕様上の罠」を、先日は自力で解決することができました。
趣味で作っている弾幕ゲームで、「敵の弾がプレイヤーに当たったとき、その弾をリスト(enemy_bullets)から削除する」という処理を書いていたときのことです。
enemy_bullets.remove(bullet) と書いたのに、なぜか特定の弾の当たり判定や移動処理がスキップされてしまう、謎のバグに遭遇しました。
このとき、AIは答えのコードを教えるのではなく、こんな「例え話」を投げかけてくれました。
「お菓子の列(チョコ、クッキー、ガム……)から、順番に1つずつチェックしている最中に、途中のクッキーを突然引っこ抜くとどうなるかな?」
この一言は、理解が深まった瞬間でした。
「そうか、途中の要素を引っこ抜くと、全体の列が1つ前にズレるから、次にチェックされるはずだったガムの処理がすっ飛ばされてしまうのか」
Pythonのforループ内でremove()を使った場合にバグが起きるコード例
# ❌ ループ内で直接削除すると、順番がズレてバグる
for bullet in enemy_bullets:
if hit_player(bullet):
enemy_bullets.remove(bullet) # 次の弾の処理がスキップされる
ループ処理中のリストの動的削除によるインデックスのズレというバグの本質を、例え話だけで完全に理解できた瞬間でした。
理解できた流れで、AIにコードを書かせることなく、自分でこんな解決策を思いつきました。
当たった弾をその場で消すのではなく、一度画面外(X座標を9999などの遥か彼方)にワープさせておいて、すべてのループが終わった後にリスト内包表記でまとめて片づければいいのでは?
リスト内包表記を使ってforループのバグを解決したPythonコード例
# ✅ 解決策:ループ内では「画面外」に移動させ、後でまとめてリストを再構築する
for bullet in enemy_bullets:
if hit_player(bullet):
bullet.x = 9999 # 一度画面外へ飛ばす
# ループ終了後に、画面内の弾だけを抽出してリストを再構築
enemy_bullets = [bullet for bullet in enemy_bullets if bullet.x < 9000]
すでに別の場面で使っていたリスト内包表記と、今回のバグの対策が、頭の中でひとりでに結びついた瞬間でした。
このパズルのピースがはまったような感覚は、モチベーションの向上にもつながります。
まとめ:AIは「答えを聞く道具」ではなく、最高の「壁打ち相手」

AIに答えを丸写しするだけでは、自分の実力はなかなか上がりません。
でも、答えを教えない家庭教師として使うことで、未経験の僕でもゲームのバグを自力で解決できるようになり、プログラミングがどんどん楽しくなっています。
Pythonの勉強やプログラミングを始めようと思っている方や、AIの活用法に悩んでいる方は、ぜひヒントだけをもらう勉強法を一度試してみてください。
それでは、また次の記事でお会いしましょう!



コメント