「Pythonプログラムを作りたいけどコードが書けない」という方に朗報です。ClaudeCodeを使えば、日本語で指示するだけでPythonスクリプトを作ってもらえます。
この記事では、ClaudeCodeを使って実際にPythonプログラムを作る手順を、具体的なプロンプト例とコード例を交えながら解説します。
ClaudeCodeの基本的な使い方は ClaudeCodeとは? で確認できます。
事前準備:Pythonとプロジェクトの準備
Pythonがインストールされているか確認
まず、Pythonがパソコンに入っているか確認します。
python3 --version
Python 3.x.x と表示されれば大丈夫です。表示されない場合は Python.org からインストールしてください。
作業フォルダを作る
mkdir python-projects
cd python-projects
claude
ClaudeCodeが起動したら準備完了です。
基本的な使い方:「Hello World」から始める
まずは最もシンプルな例から試してみましょう。
プロンプト例1:シンプルなスクリプト作成
あなたの指示:
「こんにちは、世界!」と表示するだけのPythonスクリプトを
hello.py というファイル名で作ってください。
ClaudeCodeの出力(作成されるコード):
# hello.py
print("こんにちは、世界!")
実行方法:
python3 hello.py
出力:
こんにちは、世界!
たったこれだけで完成です。
実践例1:Webサイトからデータを取得する(Webスクレイピング)
Webスクレイピングとは、Webサイトから自動でデータを収集することです。例えば、毎日特定のサイトの情報をチェックして保存するようなスクリプトが作れます。
プロンプト例2:天気情報の取得
あなたの指示:
requests と BeautifulSoup を使って、以下のことをするPythonスクリプトを
weather_check.py というファイル名で作ってください。
・https://wttr.in/Tokyo というURLにアクセスする
・ページのタイトルと本文テキストを取得する
・取得した情報をターミナルに表示する
・エラーが起きたときは「接続できませんでした」と表示する
実行に必要なライブラリのインストールコマンドも教えてください。
ClaudeCodeが作成するコード例:
# weather_check.py
import requests
from bs4 import BeautifulSoup
def get_weather_info(url: str) -> None:
"""指定されたURLから情報を取得して表示する"""
try:
# URLにアクセス(タイムアウト10秒)
response = requests.get(url, timeout=10)
response.raise_for_status() # エラーがあれば例外を発生させる
# HTMLを解析
soup = BeautifulSoup(response.text, 'html.parser')
# タイトルを取得
title = soup.title.string if soup.title else "タイトルなし"
# 本文テキストを取得(preタグの内容)
pre_content = soup.find('pre')
body_text = pre_content.get_text() if pre_content else "データなし"
print(f"=== 天気情報 ===")
print(f"タイトル: {title}")
print(f"内容:\n{body_text[:500]}") # 最初の500文字だけ表示
except requests.exceptions.ConnectionError:
print("接続できませんでした。インターネット接続を確認してください。")
except requests.exceptions.Timeout:
print("接続がタイムアウトしました。")
except Exception as e:
print(f"エラーが発生しました: {e}")
if __name__ == "__main__":
url = "https://wttr.in/Tokyo"
get_weather_info(url)
必要なライブラリのインストール:
pip3 install requests beautifulsoup4
実行:
python3 weather_check.py
スクレイピングの注意点
スクレイピングを行う場合、以下の点に注意してください:
- 対象サイトの利用規約を確認する
- 短時間に大量のリクエストを送らない(サーバーに負荷をかけない)
- 個人情報や著作権のあるデータの扱いに注意する
実践例2:CSVファイルのデータ処理
Excelの代わりにPythonでデータを処理する例です。
プロンプト例3:売上データの集計
あなたの指示:
以下の内容のCSVファイル(sales.csv)を作成して、
そのファイルを読み込んで分析するスクリプト(analyze_sales.py)も作ってください。
CSVの内容:
- 日付(date)
- 商品名(product)
- 売上金額(amount)
- 担当者(staff)
サンプルデータを10行程度入れてください。
分析スクリプトでやりたいこと:
1. 合計売上を計算する
2. 商品別の売上ランキングを表示する
3. 担当者別の売上を表示する
4. 結果をresult.txtに保存する
ClaudeCodeが作成するCSV(sales.csv):
date,product,amount,staff
2026-05-01,商品A,15000,田中
2026-05-01,商品B,8000,佐藤
2026-05-02,商品C,22000,田中
2026-05-02,商品A,12000,鈴木
2026-05-03,商品B,9500,佐藤
2026-05-03,商品C,18000,田中
2026-05-04,商品A,20000,鈴木
2026-05-04,商品B,7500,佐藤
2026-05-05,商品C,25000,田中
2026-05-05,商品A,11000,鈴木
ClaudeCodeが作成するスクリプト(analyze_sales.py):
# analyze_sales.py
import csv
from collections import defaultdict
def analyze_sales(filepath: str) -> dict:
"""CSVファイルを読み込んで売上を分析する"""
product_sales = defaultdict(int)
staff_sales = defaultdict(int)
total = 0
with open(filepath, encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
amount = int(row['amount'])
product_sales[row['product']] += amount
staff_sales[row['staff']] += amount
total += amount
return {
'total': total,
'product_sales': dict(product_sales),
'staff_sales': dict(staff_sales)
}
def display_and_save_results(data: dict, output_file: str) -> None:
"""結果を表示してファイルに保存する"""
lines = []
lines.append("=== 売上分析レポート ===\n")
lines.append(f"合計売上: {data['total']:,}円\n")
lines.append("\n【商品別売上ランキング】")
sorted_products = sorted(
data['product_sales'].items(),
key=lambda x: x[1],
reverse=True
)
for rank, (product, amount) in enumerate(sorted_products, 1):
lines.append(f" {rank}位 {product}: {amount:,}円")
lines.append("\n【担当者別売上】")
sorted_staff = sorted(
data['staff_sales'].items(),
key=lambda x: x[1],
reverse=True
)
for staff, amount in sorted_staff:
lines.append(f" {staff}: {amount:,}円")
result_text = '\n'.join(lines)
print(result_text)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(result_text)
print(f"\n結果を {output_file} に保存しました。")
if __name__ == "__main__":
data = analyze_sales('sales.csv')
display_and_save_results(data, 'result.txt')
実行:
python3 analyze_sales.py
出力例:
=== 売上分析レポート ===
合計売上: 148,000円
【商品別売上ランキング】
1位 商品C: 65,000円
2位 商品A: 58,000円
3位 商品B: 25,000円
【担当者別売上】
田中: 80,000円
鈴木: 43,000円
佐藤: 25,000円
結果を result.txt に保存しました。
実践例3:ファイルを自動整理するスクリプト
ダウンロードフォルダなどにたまったファイルを種類別に自動で整理します。
プロンプト例4:ファイル整理ツール
あなたの指示:
指定したフォルダ内のファイルを、拡張子ごとのサブフォルダに
自動で移動するスクリプト(organize_files.py)を作ってください。
仕様:
- 実行時にフォルダのパスを引数で指定できる
- 指定しない場合はカレントディレクトリを対象にする
- 画像ファイル(jpg, png, gif)→ imagesフォルダ
- 文書ファイル(pdf, docx, txt)→ documentsフォルダ
- 動画ファイル(mp4, mov, avi)→ videosフォルダ
- 音楽ファイル(mp3, wav)→ musicフォルダ
- その他 → othersフォルダ
- サブフォルダは存在しない場合に自動作成する
- 移動したファイルの数をまとめて表示する
- ドライランモード(実際には移動せず確認だけ)を--dryrunオプションで実行できる
ClaudeCodeが作成するコード:
# organize_files.py
import os
import shutil
import argparse
from pathlib import Path
from collections import defaultdict
# 拡張子とフォルダのマッピング
EXTENSION_MAP = {
'images': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'],
'documents': ['.pdf', '.docx', '.doc', '.txt', '.xlsx', '.pptx'],
'videos': ['.mp4', '.mov', '.avi', '.mkv', '.wmv'],
'music': ['.mp3', '.wav', '.aac', '.flac', '.m4a'],
}
def get_target_folder(extension: str) -> str:
"""拡張子から移動先フォルダ名を返す"""
for folder, extensions in EXTENSION_MAP.items():
if extension.lower() in extensions:
return folder
return 'others'
def organize_files(target_dir: str, dry_run: bool = False) -> None:
"""ファイルを整理する"""
target_path = Path(target_dir).resolve()
if not target_path.exists():
print(f"エラー: フォルダが見つかりません: {target_path}")
return
moved_count = defaultdict(int)
for file_path in target_path.iterdir():
# フォルダは対象外
if file_path.is_dir():
continue
# 拡張子を取得
extension = file_path.suffix
if not extension:
continue
# 移動先フォルダを決定
folder_name = get_target_folder(extension)
dest_dir = target_path / folder_name
dest_path = dest_dir / file_path.name
print(f"{'[DRY RUN] ' if dry_run else ''}移動: {file_path.name} → {folder_name}/")
if not dry_run:
dest_dir.mkdir(exist_ok=True)
shutil.move(str(file_path), str(dest_path))
moved_count[folder_name] += 1
# 結果サマリー
print("\n=== 整理結果 ===")
if not moved_count:
print("移動するファイルはありませんでした。")
else:
total = 0
for folder, count in sorted(moved_count.items()):
print(f" {folder}: {count}件")
total += count
print(f" 合計: {total}件")
if dry_run:
print("\n※ドライランモード: 実際のファイル移動は行いませんでした。")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='ファイルを拡張子ごとに整理します')
parser.add_argument(
'directory',
nargs='?',
default='.',
help='整理するフォルダのパス(省略時はカレントディレクトリ)'
)
parser.add_argument(
'--dryrun',
action='store_true',
help='実際には移動せず、確認だけ行う'
)
args = parser.parse_args()
organize_files(args.directory, dry_run=args.dryrun)
実行方法:
# カレントディレクトリを整理
python3 organize_files.py
# ドライランで確認
python3 organize_files.py --dryrun
# 特定のフォルダを整理
python3 organize_files.py ~/Downloads
プロンプトのコツ:より良いコードを作ってもらうために
コツ1: 仕様を具体的に書く
悪い例:
データを処理するスクリプトを作って
良い例:
CSVファイルを読み込んで、「金額」列の合計・平均・最大・最小を計算して
ターミナルに表示するスクリプトをcalculate.pyとして作ってください
コツ2: エラー処理についても指示する
・ファイルが存在しない場合は「ファイルが見つかりません」と表示して終了する
・ネットワークエラーが起きた場合は「接続できませんでした」と表示する
コツ3: テストも一緒に作ってもらう
上記のスクリプトに対するユニットテスト(test_calculate.py)も
一緒に作ってください。pytestを使ってください。
コツ4: 動かなかったときは詳細を伝える
エラーが出ました。以下がエラーメッセージです:
ModuleNotFoundError: No module named 'requests'
どうすれば解決できますか?
デバッグもClaudeCodeに任せる
コードが動かないときは、エラーメッセージをそのままClaudeCodeに貼り付けて相談できます。
プロンプト例:
以下のエラーが出て動きません。原因と解決策を教えてください。
エラーメッセージ:
Traceback (most recent call last):
File "analyze_sales.py", line 8, in <module>
with open(filepath, encoding='utf-8') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'sales.csv'
ClaudeCodeが原因(ファイルが見つからない)と解決策(ファイルパスの確認方法)を丁寧に教えてくれます。
まとめ
ClaudeCodeを使ってPythonプログラムを作る方法を実践例で解説しました。
- Webスクレイピング: URLを指定して情報を自動取得
- データ処理: CSVを読み込んで集計・レポート出力
- ファイル整理: 拡張子ごとに自動でフォルダ振り分け
大事なポイントは指示を具体的に書くことです。「何をしたいか」「どんな仕様にしたいか」「エラー時はどう動かしたいか」を明確に伝えるほど、使えるコードが生成されます。
プログラミングの知識がゼロでも、ClaudeCodeと一緒に試行錯誤しながら作っていけます。まずは簡単なスクリプトから始めてみましょう。