Pythonバイブコーディング講座 — Part 3
ChatGPTと対話してコードを書いてもらう
Part 2 で環境ができたので、ここからが本講座の真骨頂です。本パートでは、「やりたい解析」を日本語でLLMに伝え、Pythonコードを .ipynb ファイルとして書いてもらい、自分のVSCodeで実行するというスタイルを身につけます。コードが書けなくても、LLMに頼めば書いてもらえます。エラーが出ても、LLMに聞けば直してもらえます。この往復のスタイルを「バイブコーディング」と呼びます。
バイブコーディング(Vibe Coding)とは、コードを自分で書く代わりに、自然言語で意図を伝えてLLMにコードを書いてもらうコーディングスタイルのことです。「こういう解析をしたい」「このCSVを読み込んで列ごとに集計したい」と日本語で伝えれば、LLMがそのままPythonコードに変換してくれます。
本講座では、無料で使える ChatGPT(OpenAI)または Claude(Anthropic)を使えば十分です。どちらも無料プランで本講座の内容はすべて実行できます。
有料プラン(ChatGPT Plus、Claude Pro)にすると、より高性能なモデルが使えてコードの精度が上がります。ただし、まずは無料プランで十分です。慣れてきてから有料プランの導入を検討してください。
実際にLLMを使い始める前に、絶対に守ってほしい大前提を最初に確認します。読み進めるうちに「うっかり情報を送ってしまった」とならないよう、はじめにお伝えします。
絶対にLLMに送ってはいけないもの:
・実験データの生データ(特に被験者情報・個人を特定できる情報を含むもの)
・未公開の論文の本文・図表
・共同研究で守秘義務のある情報
・個人情報(氏名、住所、ID など)
LLMに伝えてよいのは、「データの構造(列名・列の意味・行数の概略)」だけです。例えば次のような書き方なら問題ありません。
コードはあくまで自分のローカル環境で実行することを前提とし、LLMにはデータの形だけを伝えるのがコツです。実行は自分のPC内で完結するため、データ自体が外に出ることはありません。
ChatGPTやClaudeには 一時チャット(Temporary Chat) という機能があり、会話の内容が学習データとして使用されず、チャット履歴にも残らない設定で会話できます。守秘性が気になる依頼や、研究室内の構造を相談する場合は、この機能の併用が有効です。
「一時チャット」を使っても、データそのものを送ることが推奨されるわけではありません。あくまで 送る情報を最小限にしたうえで、追加の安全策として一時チャットを併用する という考え方です。
Step 02 のとおり、データそのものをLLMに送ることはできません。一方で、データの構造(列名・型・行数など)をLLMに伝えないと、的確なコードを書いてもらえません。この矛盾を解決するのが、バイブコーディングの第一歩となる 「データ概要を自分の手元で抽出し、構造情報だけをLLMに伝える」 という二段階ワークフローです。これをやらずにいきなり依頼すると、LLMは想定と異なる列名や型を仮定したコードを出力してしまうため、必ずここから始めましょう。
実行結果(例:「列名は A, B, C で、A は数値、欠損値なし、minは0.5、maxは12.3...」のような情報)をLLMに貼り付けてから本番の解析を頼むと、LLMはデータ構造を踏まえた精度の高いコードを返してくれます。データの中身は一切送っていないので秘匿性も保てます。
バイブコーディングで一番大事なスキルは、Pythonの文法を覚えることでも、便利なライブラリを知っていることでもありません。「自分が何をやりたいのか」を自分自身が精密に理解し、それをLLMに具体的・体系的に伝えることです。
LLMは万能ではありません。こちらの伝えた情報からコードを推測しているにすぎません。「データを集計してください」のような曖昧な依頼では、LLMもどう集計すればよいか判断できず、的外れなコードが返ってきます。逆に「列Aの値ごとに、列Bの平均と標準偏差を計算し、列A降順にソートしたうえで、結果をCSVファイルとして results/ フォルダに保存してください」のように具体的に伝えれば、ほぼ意図どおりのコードが一発で出てきます。
☐ 目的:何のためにこの解析をするのか
☐ 入力:何が・どこに・どんな構造であるのか(Step 03 で抽出した構造情報を貼る)
☐ 処理:具体的にどんな計算・集計をするのか
☐ 出力:何を・どこに・どんな形式で保存するのか
☐ 制約:使ってほしいライブラリ、避けたい挙動など
このチェックリストを意識するだけで、LLMから返ってくるコードの精度は劇的に上がります。逆に、自分でも「やりたいこと」がぼんやりしていれば、何度LLMに頼んでも欲しい結果は出てきません。解析の半分は、コードを書くより前に「自分の意図を言葉にする」段階で決まると思ってください。
ChatGPT(または Claude)を開いて、新しいチャットを始めます。現在のLLM(ChatGPT・Claudeとも)は、.ipynbファイル自体を直接出力してダウンロードできるようにしてくれます。コードを1セルずつコピペする必要はありません。最初の依頼で、明示的に「.ipynbファイルとして書き出して、ダウンロードできるようにしてください」と頼みましょう。
Web サーチを ON にすると精度が上がる:ライブラリの最新バージョンの仕様や、エラーの最新の対処法を参照したい場合は、ChatGPT 入力欄下の 「Web サーチ」アイコン(地球のマーク)を ON にして依頼すると、最新情報を踏まえた回答になります。Claude も同様の Web 検索機能があります。新しめのライブラリや、リリース直後のバージョン関連の質問では特に有効です。
LLMがファイルを生成してくれたら、画面にダウンロードリンクが表示されます。次の手順で取り回します。
analysis.ipynb をダウンロード(通常は「ダウンロード」フォルダに保存される)analysis.ipynb を Part 2 で作ったプロジェクトフォルダ(例:my_first_analysis/)の中に移動するanalysis.ipynb をクリックすれば、そのまま実行できますダウンロードしたファイルをプロジェクトフォルダに置き忘れると、コード内の相対パス(例:"sample_data.xlsx")でデータを読めず、FileNotFoundError が出ます。必ずデータと同じフォルダ階層に置きましょう。
ダウンロードした analysis.ipynb を VSCode で開きます。上から順にセルを実行してください(Shift + Enter)。動作を確認しつつ、変更したいところがあれば、LLM に自然な日本語で頼みましょう。
アプローチを根本的に変えたい場合は、「コード全体を書き直してください」と頼みます。
エラーは必ず出ます。むしろ初回でエラーが出ない方が珍しいです。エラーが出ても焦る必要はありません。エラーメッセージを丸ごとコピーして、ChatGPTにそのまま貼り付けるだけで対処できます。
LLM はエラー内容から原因を推測して、修正したファイルを返してくれます。修正版をダウンロードして再度実行する、というサイクルを繰り返してください。
ModuleNotFoundError:必要なライブラリがない → ターミナルで pip install ライブラリ名
FileNotFoundError:ファイルパスが間違っている → ファイル名・場所を確認
KeyError:列名が間違っている → Excelの列名と完全に一致しているか確認
SyntaxError:コードの書き方ミス → LLMに修正依頼
解析を進めていくと、「このライブラリは Python 3.10 までしか対応していない」「あのライブラリは Python 3.12 以降が必要」のように、Pythonバージョンを変える必要が出てくることがあります。LLMがエラー解決の中で「Python 3.X を使ってください」と提案してくることもあります。
Pythonバージョンを変える場合の手順は次のとおりです。
.venv フォルダをエクスプローラ/Finderで削除します(フォルダごと削除でOK)。py -3.10 -m venv .venv、Mac/Linux なら python3.10 -m venv .venv を実行。.venv\Scripts\Activate.ps1 でアクティベート → pip install ... でライブラリを入れ直し。.venv を選択。仮想環境は「使い捨て」できる作業部屋です。ためらわずに削除して作り直して大丈夫です。中身に大事な設定は何もありません。requirements.txt(Part 4で説明)さえ残しておけば、再現は簡単です。
実際の解析で繰り返されるパターンをまとめると次のようになります。
この往復を続けていくうちに、「こう聞けばこういうコードが返ってくる」という感覚が身についてきます。Pythonの文法を覚える必要はありません。代わりに、「やりたいことをはっきり言語化する力」が鍛えられていきます。
次のPart 4では、ここまでで作った解析コード一式について、第三者が同じ環境で再現できるようにする「requirements.txt」の作り方を学びます。