結論:Pythonが必要になる4つの場面
このスタック(Stitch→Figma→Cursor→GitHub→Supabase)はTypeScript/Next.jsで完結する。PythonはTypeScriptでは難しいことが出てきたときだけ使う道具。最初から覚える必要はない。
1
大量データの前処理・バッチ処理
PDFや大量テキストをベクトル化してSupabaseに一括投入するとき。数百〜数千件のドキュメントを一括処理する場合、Node.jsより pandas + Python の方が速くて楽。
2
RAGの実験・プロトタイピング
LangChain / LlamaIndex はPython版の方がライブラリが豊富でドキュメントも多い。「まず動かして試す」段階ではPythonが断然速い。動いたらTypeScriptに移植する。
3
ファインチューニング
HuggingFaceやUnslothを使ってモデルを特定タスクに適応させるとき。PyTorchはPython専用なのでここはPython一択。ただしRAGで解決できるケースは先にRAGを試す。
4
自動化スクリプト・定期バッチ
毎晩Webスクレイピングして結果をSupabaseに保存、毎朝レポートを生成してSlackに投稿など、バックグラウンドで動く処理。CronジョブとPythonスクリプトの組み合わせ。
! 学習順序の目安:Phases 01〜02(プロンプト・API入門)はPython不要。Phase 03(RAG・エージェント)に入ったタイミングで、必要になった場面だけPythonを学ぶ。
TypeScript vs Python — 使い分けの判断基準
TS使う → Webアプリ・API・Supabase連携・Vercelデプロイ
TS使う → Claude API呼び出し・ストリーミング・フロントUI
Py使う → PDFパース・大量データ処理・CSV変換
Py使う → RAG実験・埋め込みバッチ生成・ファインチューニング
Py使う → スクレイピング・定期バッチ・データ分析
場面①:PDFや大量テキストをSupabaseに一括投入
クリエイターの資料(デザインガイド・提案書・過去案件PDF)をRAGで参照できるようにする。PDFを読んでチャンクに分割し、埋め込みベクトルを生成してSupabaseに保存するバッチスクリプト。
1
必要なライブラリをインストール
Google Colabで実行する場合はインストール不要なものも多い。ローカルで実行する場合は以下を実行。
コピー
pip install anthropic supabase pypdf2 langchain-text-splitters python-dotenv
2
PDFを読み込んでチャンク分割 → Supabaseに保存
以下のスクリプトをCursorで「処理したいPDFファイル名と保存先Supabaseの情報を入れて調整して」と指示すればそのまま動く。
コピー
import os
from dotenv import load_dotenv
from PyPDF2 import PdfReader
from langchain_text_splitters import RecursiveCharacterTextSplitter
import anthropic
from supabase import create_client
load_dotenv()
client = anthropic.Anthropic()
supabase = create_client(
os.environ["SUPABASE_URL" ],
os.environ["SUPABASE_SERVICE_KEY" ]
)
def load_pdf(path: str) -> str:
reader = PdfReader(path)
return "\n" .join(page.extract_text() for page in reader.pages)
splitter = RecursiveCharacterTextSplitter(
chunk_size=500 , chunk_overlap=100
)
def embed(text: str) -> list[float]:
res = client.messages.create(
model="claude-3-5-sonnet-20241022" ,
max_tokens=1 ,
messages=[{"role" : "user" , "content" : text}]
)
import voyageai
vo = voyageai.Client(api_key=os.environ["VOYAGE_API_KEY" ])
return vo.embed([text], model="voyage-3" ).embeddings[0 ]
pdf_text = load_pdf("design_guide.pdf" )
chunks = splitter.split_text(pdf_text)
for i, chunk in enumerate(chunks):
vector = embed(chunk)
supabase.table("documents" ).insert({
"content" : chunk,
"embedding" : vector,
"metadata" : {"source" : "design_guide.pdf" , "chunk" : i}
}).execute()
print(f"投入完了: チャンク {i+1}/{len(chunks)}" )
print("全チャンク投入完了!" )
! このスクリプトはGoogle Colabで実行するのが一番簡単。ファイルをアップロードして実行するだけ。ローカル環境の構築は不要。
場面②:LangChainでRAGを素早くプロトタイプ
TypeScriptで本格実装する前に、Pythonで動作確認する。LangChainのPython版はドキュメントが豊富で、RAGパイプラインを20行程度で作れる。「まず動かす」ための道具。
コピー
pip install langchain langchain-anthropic langchain-community chromadb
from langchain_anthropic import ChatAnthropic
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import VoyageAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import TextLoader
loader = TextLoader("my_document.txt" , encoding="utf-8" )
docs = loader.load()
chunks = RecursiveCharacterTextSplitter(
chunk_size=500 , chunk_overlap=50
).split_documents(docs)
vectorstore = Chroma.from_documents(
chunks,
embedding=VoyageAIEmbeddings(model="voyage-3" )
)
llm = ChatAnthropic(model="claude-3-5-sonnet-20241022" )
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k" : 5 })
)
answer = qa_chain.invoke("このドキュメントの要点を教えて" )
print(answer["result" ])
! プロトタイプが動いたら、このロジックをTypeScriptに移植してNext.jsアプリに組み込む。Pythonはあくまで「実験場」。本番コードはTypeScript。
Claudeに「Pythonコードを書いてもらう」方法
コピー
Pythonで以下のスクリプトを書いてください:
目的:[やりたいこと]
入力:[どんなデータを処理するか]
出力:[何を出力・保存するか]
使うライブラリ:anthropic, supabase, langchain
Google Colabで実行できる形式で。
各処理にコメントを日本語で追加して。
場面③:ファインチューニング — モデルを特定タスクに特化
ファインチューニングとRAGの使い分けが重要。まずRAGで解決できないか試す。RAGで無理なとき(特定のトーン・スタイル・形式を徹底させたいとき)にファインチューニングを検討する。
判断
RAGとファインチューニングの使い分け
「特定の情報を参照させたい」→ RAGで解決。「特定の文体・形式で常に出力させたい」「専門用語を正確に覚えさせたい」→ ファインチューニングを検討。
RAGで解決 → 社内ドキュメントへの質問応答
RAGで解決 → 最新情報・頻繁に更新されるデータへの参照
FTで解決 → 「このブランドの文体でしか書かない」の徹底
FTで解決 → 特定ジャンルのコード生成精度を上げる
Claude APIのファインチューニング(最も簡単な方法)
コピー
{"messages" : [
{"role" : "user" , "content" : "このデザインのフィードバックをください" },
{"role" : "assistant" , "content" : "[理想的な返答例]" }
]}
import anthropic
client = anthropic.Anthropic()
with open("training_data.jsonl" , "rb" ) as f:
response = client.beta.files.upload(
file=("training_data.jsonl" , f, "application/jsonl" )
)
print(f"ファイルID: {response.id}" )
! 実際のファインチューニングはAnthropicのコンソール(console.anthropic.com)からGUIで操作できる。Pythonはデータ準備と前処理のみに使う。100件程度の高品質なデータから始めること。
Python環境の構築 — 2つの選択肢
A
Google Colab(推奨・最も簡単)
ブラウザで動く無料のPython実行環境。インストール不要、GPU無料枠あり、Googleドライブと連携できる。スクリプトを試すだけならColabで十分。colab.research.google.com にアクセスするだけで使える。
B
ローカル環境(uvを使う・最新の方法)
ローカルでPythonを管理するなら「uv」が最速。pip・venv・pyenvを全部置き換えられる。インストール1コマンド、プロジェクト作成1コマンドで環境が完成する。
コピー
curl -LsSf https://astral.sh/uv/install.sh | sh
uv init my-python-scripts
cd my-python-scripts
uv add anthropic supabase python-dotenv langchain voyageai
uv run python ingest.py
ANTHROPIC_API_KEY =sk-ant-xxxxxxxx
SUPABASE_URL =https://xxxxxx.supabase.co
SUPABASE_SERVICE_KEY =eyJxxxxxxxx
VOYAGE_API_KEY =pa-xxxxxxxx
Pythonで覚える最低限の構文(LLMエンジニアに必要なもの)
コピー
name: str = "kinjo"
count: int = 10
items: list[str] = ["a" , "b" , "c" ]
def embed_text(text: str) -> list[float]:
return [0.1 , 0.2 , 0.3 ]
for i, chunk in enumerate(chunks):
result = embed_text(chunk)
print(f"処理中: {i+1}/{len(chunks)}" )
try :
response = client.messages.create(...)
except anthropic.APIError as e:
print(f"APIエラー: {e}" )
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ["ANTHROPIC_API_KEY" ]
! PythonはTypeScriptの知識があれば1日で読めるようになる。型の書き方が少し違うだけで、ロジックの考え方は同じ。Cursorに「このTypeScriptコードをPythonに変換して」と頼めば一瞬で移植できる。
ターミナルでPython環境を完全に操作する
Pythonの開発はターミナルが主戦場。uvを使えばプロジェクト作成・パッケージ管理・スクリプト実行まで全てCLIで高速に行える。Cursorのターミナルから直接実行できるため、コードを書きながらその場でテストできる。
1
uvで環境作成からスクリプト実行まで
pip・venv・pyenvを全て置き換える高速パッケージマネージャー。uv run は仮想環境のactivateすら不要で実行できる。
2
Cursorのターミナルで直接実行
Cursor内蔵ターミナル(Ctrl+` )からPythonスクリプトを実行。エラーが出たら即AIに相談できる理想的な環境。
3
バッチ処理をcronで定期実行
PDFの埋め込み生成やデータ収集スクリプトをcrontabに登録して自動化。crontab -e で設定。
コピー
curl -LsSf https://astral.sh/uv/install.sh | sh
uv init llm-scripts
cd llm-scripts
uv add anthropic supabase python-dotenv langchain voyageai
uv run python ingest.py
cat > .env << 'EOF'
ANTHROPIC_API_KEY=sk-ant-xxxxxxxx
SUPABASE_URL=https://xxxxxx.supabase.co
SUPABASE_SERVICE_KEY=eyJxxxxxxxx
VOYAGE_API_KEY=pa-xxxxxxxx
EOF
crontab -e
0 2 * * * cd /path/to/llm-scripts && uv run python ingest.py >> logs/ingest.log 2>&1
tail -f logs/ingest.log
! Cursorのターミナル(Ctrl+`)でスクリプトを実行 → エラーが出たら即そのエラーをAIチャット(Cmd+L)に貼り付けて修正 → 再実行。このサイクルがPythonスクリプト開発の最速ルーティン。