バイブコーディングとは?AIにコードを任せるとき人がすべきこと
バイブコーディングを単に「言葉で頼めばAIが勝手に作ってくれるもの」と捉えるのではなく、人が要件と確認基準を決め、AIが作った結果を点検する作業方法として理解します。架空の家計簿CSV集計ツールを例に、入力・出力・してはいけないこと・確認方法を1ページのメモに整理します。
これまでに作った架空のexpenses.csvと要件メモを使い、最初の小さなPythonツールを作る流れを練習します。依頼文に入力例・期待出力・制約をまとめて入れ、完成したsummarize.pyをClaude CodeではなくGPTチャットのPythonツールで実際に実行し、結果を確認します。
対象読者Claude Codeのインストールと最初の読み取り練習を終え、小さな1ファイルを対象に初めてコード生成を試したい初心者
最初の実習の目標は、多機能な家計簿アプリではなく、expenses.csvを読み込んで月別のamount合計だけを出力するsummarize.pyという1ファイルです。範囲を小さくすると、AIが作った結果が正しいかを人が直接確認しやすくなります。入力ファイルはUTF-8 CSVで、列名はdate, category, amountです。dateはYYYY-MM-DD形式、amountは整数とします。
| 項目 | 今回の実習で固定する内容 | 確認基準 |
|---|---|---|
| 入力ファイル | expenses.csv | 元ファイルを変更しない |
| 入力列 | date, category, amount | 別の列を勝手に要求しない |
| 出力 | 月別amount合計 | 2026-09 = 26600, 2026-10 = 9800 |
| 実装範囲 | summarize.py 1ファイル | 不要な設定ファイルやパッケージを追加しない |
| ライブラリ | Python標準ライブラリ | 外部パッケージをインストールしない |
この段階で重要なのは、「家計簿を作って」のような広い依頼をしないことです。AIがUI、データベース、グラフ、ログインなどの機能を勝手に追加する余地を減らし、1回の実行で正解と照合できる作業だけを任せます。
Claude Codeに作業を依頼するときは、入力ファイルの構造と正解を一緒に提示します。期待出力があれば、AIがコードを書いた後に何を満たすべきかが明確になり、ユーザーは結果を目で比較できます。また、「標準ライブラリだけを使う」「元のCSVを変更しない」「summarize.pyだけを書く」のように、してはいけない範囲も一緒に書きます。
現在のフォルダーにあるexpenses.csvを読み込み、月別のamount合計を出力するsummarize.pyを作ってください。
入力:
- UTF-8 CSV
- 列名: date, category, amount
- date形式: YYYY-MM-DD
- amountは整数
期待出力:
2026-09 = 26600
2026-10 = 9800
制約:
- Python標準ライブラリだけを使用
- expenses.csvは変更しない
- 実行コマンドは python summarize.py expenses.csv
- 必要なファイルと変更内容を先に説明した後、summarize.pyだけを書いてください。このコードブロックはClaude Codeの応答ではなく、ユーザーが入力する依頼文です。依頼文にはすでに正解として確認する値が含まれているため、後で結果がもっともらしく見えるかだけではなく、2つの数値が正確に一致するか比較できます。
Claude Codeは必要なファイルを読み、ファイル変更やコマンド実行の前に承認を求めることがあります。承認画面が出たらすぐYesを押すのではなく、どのファイルを読んだのか、新しく作るファイルがsummarize.pyだけか、expenses.csvに触れないかを確認します。初めて見るコマンドを実行しようとしている場合は、その目的を説明してもらっても構いません。
変更する前に確認します。
1) 読むファイルと作るファイルをそれぞれ教えてください。
2) expenses.csvを変更しないことを確認してください。
3) 外部パッケージをインストールしないことを確認してください。
4) 実行後に期待出力と比較する方法を1行で教えてください。Claude Codeの実際の回答は環境や時期によって変わる可能性があるため、この記事では特定の応答を成功例のようには作りません。確認すべき対象は応答の文体ではなく、ファイルの範囲とコマンドの範囲です。
以下のsummarize.pyは、この記事の要件を満たす検証用の完成コードです。csv.DictReaderで各行を読み、dateの先頭7文字からYYYY-MMを取り出し、amountを整数に変換して月ごとに加算します。出力順を固定するため、月のキーを並べ替えます。このコードはClaude Codeで実際に生成された応答をコピーしたものではなく、記事の実習結果を再現するために作成し、別途実行確認したコードです。
import csv
import sys
from collections import defaultdict
def summarize_monthly(path):
totals = defaultdict(int)
with open(path, "r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
month = row["date"][:7]
amount = int(row["amount"])
totals[month] += amount
return totals
def main():
if len(sys.argv) != 2:
raise SystemExit("Usage: python summarize.py expenses.csv")
totals = summarize_monthly(sys.argv[1])
for month in sorted(totals):
print(f"{month} = {totals[month]}")
if __name__ == "__main__":
main()標準ライブラリだけを使うため、追加パッケージのインストールは不要です。実行コマンドは以下のとおりで、Windows環境でpythonの代わりにpyが設定されている場合は`py summarize.py expenses.csv`を使えます。
python summarize.py expenses.csvGPTチャットのPythonツールで上のコードと架空のexpenses.csvをファイルとして保存し、`python summarize.py expenses.csv`を実際に実行しました。標準出力は下の2行と正確に一致しました。この検証はClaude Codeで行ったものではありません。
2026-09 = 26600
2026-10 = 9800| 月 | 期待値 | 実行値 | 判定 |
|---|---|---|---|
| 2026-09 | 26600 | 26600 | 一致 |
| 2026-10 | 9800 | 9800 | 一致 |
この段階では、2行が一致したという事実だけを確認します。今後、別形式のCSV、空の値、不正な数値まで全部処理できると拡大解釈してはいけません。現在のテストデータと現在の要件に対してのみ、結果が一致したという意味です。
合計は手計算でも一度確認できます。9月は12000 + 1450 + 8500 + 3200 + 1450 = 26600で、10月は9800が1件なので9800です。このような小さな例では、プログラム出力と人が計算した基準値が同じかを相互確認しておくと、後で機能を拡張したときにどこから結果が変わったか追跡しやすくなります。
最初のツールでよくある範囲拡大は、「せっかく作ったのでカテゴリ別合計、グラフ、自動保存も追加しよう」といったものです。しかし今回の記事の完了条件は、月別合計の2行が合っていることです。完了条件を満たしたら、現在の状態を基準点として残し、次の機能は別の依頼に分ける方がよいでしょう。
次の記事では、毎回長い制約を書き直さなくて済むよう、プロジェクトのルールをCLAUDE.mdに整理します。このファイルも強制設定ではなく、Claude Codeがセッション開始時に読むプロジェクトの文脈なので、短く具体的に保つことが重要です。
GPTチャットのPythonツールでPython 3を使い、summarize.pyと架空のexpenses.csvを保存した後、`python summarize.py expenses.csv`を実行 · Claude Codeの実行なし
検証はこの記事の6行の架空CSVだけを対象に実施しました。空の値、不正な日付、数値ではないamountなどの例外入力まで検証した結果ではなく、Claude Code自体の生成結果や画面も実際にはテストしていません。