ChatGPTやCursorに頼りすぎてない?「AIに書かせる」から「AIとペアプロする」への思考転換
Pythonをブラウザで実行しながら実践的に学ぶ
Pythonの基礎からソフトウェアアーキテクチャ,アルゴリズムなどの応用的な内容まで幅広く学べます。
ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
「AIに頼めば、あっという間にコードができあがる」
ChatGPTやCursorといったAIツールが当たり前になった今、プログラミングの学習風景は劇的に変わりました。少し前までは、分厚い技術書を何冊も読み込み、エラーが出たら何時間も画面とにらめっこするのが当たり前でしたよね。
でも今はどうでしょうか?
作りたいものを日本語で打ち込めば、ものの数秒でAIが立派なコードを返してくれます。エラーが出ても、そのままコピーしてAIに貼り付ければ「ここが間違っていますよ」と優しく教えてくれます。本当に便利な時代になりました。
だからこそ、最近プログラミング学習を始めたあなたは、こんな不安を抱えていないでしょうか。
「自分はただ、AIが書いたコードをコピペしているだけなんじゃないか?」 「このままAIに頼りきりで、本当にエンジニアとしての実力は身につくのだろうか?」
その不安、すごくよくわかります。エンジニア歴10年になる私自身も、初めてChatGPTが書いた完璧なコードを見たときは、「もう自分の仕事はなくなるかもしれない」と本気で焦りました。
しかし、現場でAIを使い倒していくうちに、ある明確な事実に気がついたのです。それは、AIを「ただの自動コーディングマシン」として使う人と、AIを「優秀な相棒」として使いこなす人とでは、1年後に圧倒的なスキルの差が生まれるということです。
今回は、AIツールに依存しすぎて成長が止まってしまう「AIに書かせる」状態から抜け出し、劇的にスキルを伸ばす「AIとペアプログラミング(ペアプロ)する」状態へとシフトするための思考転換について、私の実体験を交えながらじっくりとお話ししていきます。
「AIに書かせる」ことの本当の恐ろしさ¶
なぜ、AIにコードを書かせ続けると危険なのでしょうか。
答えはシンプルです。
「自分が理解していないブラックボックス」がどんどん積み上がっていくからです。動いているうちは良いのです。魔法のようにアプリが完成していく過程は、とても楽しくてワクワクしますよね。
しかし、システムの規模が少し大きくなったり、AIが考慮していなかった複雑なエラーが発生したりした瞬間、パタリと手が止まってしまいます。
以前、私の運営するPython学習サイトの受講生から、こんなSOSをもらったことがありました。「ChatGPTに書いてもらったコードを組み合わせてアプリを作ったんですが、突然動かなくなりました。どこがおかしいのか全くわかりません」と。
コードを見せてもらうと、確かにAIが書いたであろう高度な構文が使われていました。しかし、変数名の付け方に一貫性がなく、不要なライブラリがインポートされたままになっており、いわゆる「ツギハギだらけのフランケンシュタイン」のような状態になっていたのです。
AIは「その場しのぎの正解」を出すのは得意ですが、システム全体を見通した設計までは責任を持ってくれません。もしあなたが、綺麗なコードって何?初心者から一歩抜け出す「リーダブルコード」の3つの基本で解説したような基礎知識を持たないままAIに丸投げしてしまうと、後から誰もメンテナンスできないシステムを生み出してしまうことになります。
なぜエラーが起きているのか説明できますか?¶
プログラミング学習において最も成長する瞬間は、なぜエラーになったのかを深く理解し、自力で解決できたときです。
AIにエラー文を貼り付けて修正版のコードをもらい、それをただ貼り付けて「直った!ラッキー!」で終わらせていませんか?
もしそうなら、非常にもったいないです。それは、数学のドリルで答えのページだけを見て丸写ししているのと同じだからです。答えは合っていても、テスト本番(実際の開発現場)では全く点数が取れません。
エラーが出たときは、なぜAIがその修正を提案してきたのかを考え抜く必要があります。【PythonのSyntaxErrorとは?】初心者がつまずく構文エラーの原因と対処法を徹底解説などの記事でも触れていますが、エラーには必ず原因があります。その原因とAIの解答を紐付ける作業こそが、本当の意味での学習なのです。
「AIに書かせる」と「AIとペアプロする」の決定的な違い¶
では、「AIに書かせる」のではなく「AIとペアプロする」とは、一体どういう状態なのでしょうか。
ペアプログラミング(ペアプロ)とは、本来2人のプログラマが1台のパソコンを共有し、相談しながらコードを書いていく開発手法のことです。1人がコードを書き(ドライバー)、もう1人が全体を俯瞰してレビューやアドバイスを行います(ナビゲーター)。
AI時代におけるペアプロとは、この相棒役をChatGPTやCursorなどのAIに任せるという考え方です。
言葉だけではイメージしづらいと思いますので、両者の違いをわかりやすく比較してみましょう。以下の表を見てみてください。
| 比較項目 | 「AIに書かせる」人(丸投げ型) | 「AIとペアプロする」人(協業型) |
|---|---|---|
| 指示の出し方 | 「〇〇を作るコードを書いて」 | 「〇〇を作りたい。まずは構成案を3つ出して」 |
| コードの扱い | そのままコピペして動かす | 意図を理解し、自分の言葉でコメントを追記する |
| エラーへの対応 | エラー文をそのまま貼り付ける | 「このエラーは〇〇が原因だと思うが、どう修正すべき?」と聞く |
| 学習のスタンス | 早く完成させることが目的 | プロセスから設計思想や新しい文法を学ぶことが目的 |
| 主導権 | AIが持っている | 自分が持っている |
どうでしょうか。少し思い当たる節があったかもしれません。
主導権は常に「あなた」が持つこと¶
ここで一番重要なのは、一番下の項目にある「主導権」です。
AIに丸投げしている状態は、タクシーに乗って「とりあえずいい感じの場所へ連れて行って」と言っているようなものです。どこに着くかは運転手(AI)次第になってしまいます。
一方、AIとペアプロをしている状態は、自分がハンドルを握りながら、隣の優秀なナビゲーターに「次の交差点は右折した方が渋滞を避けられるかな?」と相談している状態です。最終的にハンドルを切る決断をするのは、常に「あなた自身」でなければなりません。
AIはあなたの代わりにコードをタイピングしてくれる便利な「手」にはなりますが、システム全体の責任を負う「頭脳」にはなれないのです。
エンジニア歴10年の私が実践する「AIペアプロ」の具体例¶
理屈はわかっても、いざ実践するとなると難しいですよね。ここからは、エンジニア歴10年の私が普段どのようにAIツール(特に最近人気のCursorエディタ)を使って「ペアプロ」をしているのか、リアルな具体例をお見せします。
ただコードを書かせるのではなく、思考のプロセスをAIと共有することがポイントです。
事例1:要件定義と設計をAIの壁打ちで行う¶
いきなり「TodoアプリをPythonで作って」とは絶対に言いません。まずは、自分が作りたいものの解像度を上げるためにAIを利用します。私はよく、AIを「少し口うるさい先輩エンジニア」に見立てて質問を投げかけます。
例えば、こんな感じです。
「今からPythonとFastAPIを使って、自分専用のシンプルなタスク管理APIを作ろうと思う。初心者向けではなく、実務レベルのディレクトリ構成で進めたいんだけど、最初に検討すべき設計のポイントを教えてくれる?」
するとAIは、「データベースの選定はどうしますか?」「認証機能は必要ですか?」「Pydanticを使ったバリデーションの構成案はこちらです」と、私が一人では抜け漏れてしまうような視点を提供してくれます。
※Pydanticについては、Pydantic v2で堅牢なデータバリデーションをやってみよう!で詳しく解説しています。
こうして事前に「設計の壁打ち」をすることで、自分の中にシステム全体の地図ができあがります。地図さえあれば、あとはAIと一緒にその道を歩いていくだけです。
事例2:コードの意図をコメントで宣言してから書かせる(Cursor活用法)¶
AIエディタのCursorを使うときも、ただ「Cmd+K」で丸投げするわけではありません。
私は必ず、「自分がこれから何をしたいのか」を日本語のコメントとして書き出し、そのコメントをAIに読ませてコードを補完させます。
いわゆる疑似コードから本物のコードを生成するアプローチです。
以下に、Pythonで簡単なデータ処理を行う際の、AIとのペアプロの様子をサンプルコードとして再現してみましょう。
# 【私の思考プロセス(Cursorに読ませるコメント)】
# 1. 顧客データが入ったリスト(辞書型)がある
# 2. この中から、年齢が20歳以上、かつ購入金額が5000円以上の優良顧客だけを抽出したい
# 3. 抽出したデータは、名前のアルファベット順にソートして返したい
# 4. リスト内包表記を使ってスッキリ書きたい
customers = [
{"name": "Alice", "age": 25, "purchase": 6000},
{"name": "Bob", "age": 19, "purchase": 8000},
{"name": "Charlie", "age": 30, "purchase": 4000},
{"name": "David", "age": 22, "purchase": 12000},
]
# --- ここから下をCursorのAIに補完(生成)させる ---
premium_customers = sorted(
[c for c in customers if c["age"] >= 20 and c["purchase"] >= 5000],
key=lambda x: x["name"]
)
for customer in premium_customers:
print(f"優良顧客: {customer['name']}")
このように、まずは自分がやりたい「論理的なステップ(1〜4)」を明確にします。このステップを考えること自体が、プログラミング的思考のトレーニングになります。
AIはそのステップを読み取り、正確なPythonの文法(リスト内包表記やラムダ式)に翻訳してくれます。もしAIが意図と違うコードを出してきたら、「自分のステップの書き方が悪かったのか?」あるいは「AIが誤解したのか?」を検証することができます。
これが、「AIをナビゲーターとして使う」ということです。自分が考えた筋道に沿ってAIがコードを書き、そのコードを自分がレビューして実行する。まさに理想的なペアプログラミングの形だと思いませんか?
AI時代だからこそ、基礎力があなたの武器になる¶
「AIがコードを書いてくれるなら、昔みたいに基礎文法を必死に覚える必要はないのでは?」
そんな声もよく聞きますが、私は全く逆だと思っています。AI時代だからこそ、プログラミングの「基礎力」が圧倒的な武器になります。
なぜなら、AIが生成したコードが正しいかどうかを判断(レビュー)するためには、正確な基礎知識が不可欠だからです。
AIは「平均点のコード」を秒速で生み出すのは得意です。しかし、プロジェクト特有の複雑な要件に合わせた「最適なコード」を最初から出してくれることは稀です。
出てきたコードを見て、「ここはfor文ではなく内包表記にしたほうがパフォーマンスが良いな」とか、「ここでPythonの例外処理のアンチパターン5選をご紹介!|初心者がやりがちな「べからず集」で書いたようなダメな例外処理をしているから直させよう」と判断できるのは、基礎をしっかり学んだ人間だけなのです。
エラー解決力こそが人間の価値¶
さらに言えば、これからのエンジニアの価値は「ゼロからコードを書くスピード」ではなく、「複雑に絡み合ったエラーを解きほぐす力」にシフトしていきます。
AIが書いた大量のコードが複雑に連携し合うと、AI自身でも解決の糸口が見つけられない難解なバグが発生することがあります。その時、ログを読み解き、仮説を立て、深い言語仕様の知識を引き出しながら原因を特定していく。泥臭いですが、このトラブルシューティングの能力こそが、現場で最も重宝されるスキルです。
だからこそ、初学者のうちから「AIにエラーを丸投げ」する癖をつけてしまうのは危険なのです。
明日から始める「AIとの健全な付き合い方」3つのステップ¶
ここまで読んでいただき、ありがとうございます。「AIとペアプロする」感覚が、少しずつ掴めてきたのではないでしょうか。
最後に、明日からの学習ですぐに実践できる、具体的な行動ステップを3つ紹介して締めくくりたいと思います。箇条書きではなく、思考の流れに沿って説明しますね。
最初のステップは、どんなに簡単なプログラムでも、まずは日本語で「処理の流れ」を書き出すことです。いきなりコードを書き始めたり、AIにプロンプトを投げたりしてはいけません。「入力として何を受け取り」「どんな加工をして」「どう出力するのか」。この論理構造を自分の頭で組み立てる時間を必ず作ってください。この数分間が、あなたの論理的思考力を決定的に鍛え上げます。
次のステップは、エラーが出たときに「直して」ではなく「なぜ?」と聞くことです。AIにエラーコードを貼り付けるときは、「直して」という言葉を封印してみましょう。代わりに、「このエラーが発生している原因の仮説を3つ教えて」とAIに聞いてみてください。AIが提示した仮説を読み、自分のコードと照らし合わせて、「あ、スペルミスだったのか」と自分で気づくプロセスを踏むのです。これにより、自力でエラーを解決する力が確実に身につきます。
そして最後のステップは、動いたコードを「1行ずつ声に出して説明する」ことです。AIが書いてくれて無事に動いたコードがあったとします。そこで満足せず、画面に向かって「この1行目でモジュールを読み込んで、2行目で変数を定義して…」と、誰かに教えるつもりで説明してみてください(これをラバーダック・デバッグと呼んだりします)。もし説明に詰まる行があれば、そこがあなたの理解が不足している部分です。その部分だけをピンポイントでAIに「この行の仕組みを小学生にもわかるように解説して」と質問しましょう。
この3つのステップを意識するだけで、あなたのAIツールの使い方は「丸投げ」から「協業」へと劇的に変化するはずです。
おわりに:AIは最強の「アシスタント」であり「主役」ではない¶
周りの優秀な人がAIを使って爆速でアプリをリリースしているのを見ると、[72エンジニアの生存戦略としての「マイペース学習術」周りの優秀な人と比べて落ち込むあなたへ。]でも書いたように、焦ったり落ち込んだりすることもあるでしょう。
「自分はまだ基礎の文法でつまずいているのに…」と。
しかし、プログラミング学習において焦りは禁物です。AIがどれほど進化しても、ものづくりの主役は常に「人間」です。AIは、あなたの「こんなものを作りたい!」「この問題を解決したい!」という熱意を形にするための、最強のアシスタントでしかありません。
「AIに書かせる」のではなく、AIという優秀な相棒と肩を組み、「AIとペアプロする」楽しさを味わってください。基礎を一つずつ積み上げながら、自分のペースで着実に進んでいきましょう。
エンジニア歴10年の私も、いまだに毎日AIと格闘しながら新しいことを学んでいます。一緒に、このエキサイティングなAI時代を乗りこなしていきましょう!