クリエイター × LLMエンジニア 実践ラボ

実ツールで
手を動かす
学習環境

Stitch・Figma・Cursor・GitHub・Supabase。実際の現場フローをそのまま学習に。各ステップに「なぜやるか」と「どう操作するか」を詳しく記載。

⚡ Stitch ◈ Figma ▸ Cursor ◎ GitHub ◆ Supabase 🐍 Python
01
Stitch
02
Figma
03
Cursor
04
GitHub
05
Supabase
Stitch Step 01
テキスト指示だけでUIを自動生成 → Figmaへ書き出す
Stitchとは何か・なぜ使うか

StitchはGoogleが開発したAI UIジェネレーター。日本語でUIの内容を書くと、ReactコンポーネントやHTMLのコードを自動生成してくれる。LLMエンジニアにとっての使い方は「デザイナーなしでも動くプロトタイプを数分で作る」こと。Figmaでゼロから作るより10倍速い。

テキスト指示
①入力
Stitch AI生成
②自動生成
プレビュー確認
③確認・修正
Figmaへ書出
④連携
!
クリエイターの強み:UIの良し悪しを直感的に判断できる。Stitchで複数パターンを量産して、デザインセンスで選別する。ムードボード作成と同じ感覚で使える。
画面の構成と操作エリア
左パネル生成したコンポーネント・画面の一覧
中央UIのプレビュー画面(リアルタイムで確認できる)
右パネルコード(React / HTML)の表示エリア
下部バープロンプト入力欄(ここに指示を書く)
右上ボタンExport(Figma・コードの書き出し)
はじめてのUI生成 — 操作手順
1
stitch.withgoogle.com にアクセスしてログイン
Googleアカウントでサインイン。初回は利用規約への同意が必要。「Try Stitch」ボタンをクリックして開始。
2
「New project」をクリックして新規作成
ダッシュボード左上の「+ New project」ボタン。プロジェクト名は後から変更できるので、何でもOK。
3
画面下部のプロンプト欄に指示を入力する
「Describe your UI...」と書かれた入力欄に、作りたいUIの説明を日本語または英語で入力。具体的に書くほど精度が上がる。Enter または送信ボタンで生成開始。
4
プレビューで確認しながら修正指示を出す
生成されたUIを中央エリアで確認。気に入らない部分はプロンプト欄に追加指示を入力(例:「ボタンの色を青に変えて」)。会話形式で何度でも修正できる。
5
コードパネルでReact/HTMLコードを確認
右パネルに生成されたコードが表示される。「Copy code」でそのままCursorに貼り付けられる。React・HTML・CSS各形式でコピー可能。
最初に試すプロンプト
// これをStitchのプロンプト欄に貼り付ける AIチャットアプリのメイン画面を作ってください。 構成: - 左サイドバー(幅240px):会話履歴リスト・新規チャットボタン - メインエリア:チャットバブル(ユーザー=右寄せ、AI=左寄せ) - 下部:テキスト入力欄・送信ボタン・添付ファイルボタン デザイン: - ダークモード(背景 #0a0a0f) - アクセントカラー:青緑(#00b4a0) - フォント:モノスペース+サンセリフの組み合わせ - モダンでミニマル、余白を広めに
!
ポイント:「構成」「デザイン」を分けて書くと精度が上がる。曖昧な指示(「かっこよくして」)より具体的な数値・色・配置を書くほうが一発で決まりやすい。
生成後の修正・反復操作

Stitchは会話形式で修正できる。一発で完璧にしようとせず、「生成 → 確認 → 修正指示」を繰り返す。

1
要素を選択してピンポイントで修正する
プレビュー上の要素をクリックして選択。選択した要素に対してプロンプトで指示を出すと、その部分だけを修正してくれる。全体を作り直さなくてよい。
2
「Variants」で複数パターンを生成する
「Generate 3 variants」ボタンで同じ指示から3パターンを同時生成できる。A/Bテスト感覚で一番いいものを選ぶ。クリエイターとして最も力が発揮できる使い方。
3
複数画面を追加して画面遷移を設計
左パネルの「+ Add screen」で別画面を追加。「先ほどの画面に合わせたスタイルで、設定画面を作って」と指示すれば、デザインを統一したまま新画面を追加できる。
4
「Undo」「Redo」で操作を戻せる
Cmd+Z でひとつ前の状態に戻せる。気に入らない生成結果が出たら即戻して別の指示を出し直せばOK。
修正指示プロンプトの例
// 色・サイズの変更 送信ボタンの色を #00b4a0 に変更して。 ホバー時は少し明るくして。 // 要素の追加 チャット入力欄の左側に、 マイクアイコンボタンを追加して。 クリックで音声入力モードになる想定。 // スタイルの参考指定 Linearアプリのサイドバーに似た スタイルに修正して。 コンパクトで情報密度が高いデザインで。
Stitch → Figma 書き出し手順

StitchのUIをFigmaに書き出すことで、デザインを資産として管理し、Cursorへのコード連携ができるようになる。

1
右上の「Export」ボタンをクリック
Stitchのエディタ右上にある「Export」ボタンをクリック。「Export to Figma」「Download code」「Copy code」の選択肢が出る。
2
「Export to Figma」を選択してFigmaと連携
初回は「Connect to Figma」でFigmaアカウントへのアクセス許可が必要。「Allow」をクリックして連携を承認する。この操作は初回のみ。
3
書き出し先のFigmaファイルを選択
自分のFigmaファイル一覧が表示される。既存ファイルに追加するか、新規ファイルとして書き出すか選択。LLMアプリ用の新規ファイルを作るのが整理しやすい。
4
Figmaで書き出し内容を確認する
Figmaを開くと、Stitchで作ったフレームがそのまま取り込まれている。レイヤー名やグループ構造も維持されているので、そのままコンポーネント化の作業に入れる。
!
Stitch → Figma連携のメリット:Figmaに取り込んだ後はFigma Dev Modeを使ってCursorにデザイン仕様を渡せる。コードとデザインが常に同期した状態になる。
Figma MCP でCursorと直接連携(上級)
# ~/.cursor/mcp.json に追加する設定 { "mcpServers": { "figma": { "command": "npx", "args": ["-y", "@figma/dev-mode-mcp"], "env": { "FIGMA_API_KEY": "figd_xxxxxxxxx" } } } } # FigmaのPersonal Access Tokenは # Figma → Settings → Security → Personal access tokens
Stitchを開く →
ターミナルからStitchを操作する

StitchはブラウザベースのツールだがCLI・APIを組み合わせることで、生成したコードの取得・プロジェクト管理をターミナルから自動化できる。Figmaへの書き出しも含めて一連の流れをスクリプト化できる。

1
Stitch CLIのセットアップ
Node.js環境でnpxを使ってStitch APIと通信するスクリプトを作成。Google Cloud CLIの認証を利用する。
2
生成コードをターミナルで取得
Stitch APIのエンドポイントにリクエストを送り、生成されたReact/HTMLコードをローカルファイルに保存する。
3
Cursorプロジェクトへ自動コピー
取得したコードをCursorのプロジェクトディレクトリに自動配置。以降はCursorで編集できる状態になる。
# Google Cloud CLIでStitchプロジェクトにアクセス # 1. gcloud CLIをインストール(未インストールの場合) brew install google-cloud-sdk # macOS # 2. 認証 gcloud auth login gcloud auth application-default login # 3. Stitch生成コードをcurlで取得してローカル保存 curl -X GET "https://stitch.googleapis.com/v1/projects/{PROJECT_ID}/components" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -o stitch_output.json # 4. 取得したコードをCursorプロジェクトへコピー cat stitch_output.json | jq '.code' > ./src/components/StitchUI.tsx
!
ターミナル操作のメリット:UIの生成→コード取得→プロジェクト配置を1スクリプトで自動化できる。複数画面を一括処理したいときに特に有効。
Figma Step 02
Stitchのデザインを整備 → Dev ModeでCursorに渡す
LLMエンジニアにとってのFigmaの役割

Figmaは「完璧なデザインを作る場所」ではなく、「実装に渡す設計図を整備する場所」として使う。StitchからインポートしたUIをコンポーネント化し、Cursorが読み取れる仕様書を生成する。

Stitch書出
①インポート
コンポーネント整理
②整備
Dev Mode
③CSS確認
Cursorへ
④実装
Figmaの画面構成と各エリアの操作
左パネルLayers(レイヤー一覧)/ Assets(コンポーネント)/ Pages
中央キャンバスデザインの作業エリア。スクロール・ズームで移動。
右パネル選択中の要素のプロパティ(サイズ・色・フォント・CSS)
上部ツールバー選択・テキスト・シェイプ・フレームなどのツール
右上「Dev」ボタンDev Modeへの切り替え(CSSコード確認)
1
キャンバスの移動・ズーム操作
Space+ドラッグでキャンバスを移動。Cmd+= でズームイン、Cmd+- でズームアウト。Cmd+Shift+H で全体表示に戻る。
2
要素の選択と移動
Vキーで選択ツールに切り替え。クリックで要素を選択、ドラッグで移動。Cmd+クリックでグループ内の要素を直接選択。
コンポーネント化の手順

コンポーネント化とは、繰り返し使う要素をFigma内で「部品」として登録すること。ボタン・入力欄・チャットバブルなどを一度作れば、どこでも使い回せる。

1
コンポーネント化したい要素を選択
キャンバス上でボタンや入力フィールドなど繰り返し使う要素をクリックして選択。複数選択する場合は Shift+クリック で追加選択できる。
2
Cmd+Alt+K でコンポーネントに変換
ショートカットを押すと要素が菱形アイコン付きのコンポーネントに変わる。または右クリック →「Create component」でも同じ操作ができる。
3
コンポーネントに名前をつける
左パネルのレイヤー名をダブルクリックして名前を変更。「Button/Primary」「Input/Default」のように「カテゴリ/バリアント」形式で命名するとAssetパネルで整理しやすい。
4
カラースタイルを登録する
要素を選択 → 右パネルの「Fill」横の「+」をクリック → スタイル名を入力して保存。「Primary」「Background」「Text/Muted」などの名前で登録。以降は色を変えたいとき一括で変更できる。
5
テキストスタイルも同様に登録
テキスト要素を選択 → 右パネル「Text styles +」から登録。「Heading/L」「Body/M」「Mono/S」のように体系化すると、Cursorへ渡す際のTailwindクラス設計が楽になる。
!
なぜコンポーネント化するか:Cursorで実装するとき「このボタンのスタイルはFigmaのButtonコンポーネント参照」と指示できるようになる。デザインと実装の乖離が起きにくくなる。
Dev Mode の使い方 — Cursorに渡す設計情報を取得

Dev ModeはFigmaの「エンジニア向けモード」。選択した要素のCSS・Tailwindコード・アセット情報を自動で表示してくれる。Cursorに貼り付けるだけで実装の精度が上がる。

1
Dev Modeに切り替える
ツールバー右上の「<」アイコンをクリック、またはショートカット Shift+D で切り替え。画面左上に「Dev Mode」と表示されれば成功。
2
要素を選択してCSSを確認
フレームや要素をクリックすると、右パネルに自動でCSSコードが表示される。「Copy as CSS」「Copy as Tailwind」ボタンで即コピーできる。
3
FigmaのリンクURLをCursorに共有
Figmaファイルを開いた状態でURLをコピー。Cursorの Cmd+L チャットに「このFigmaデザインをReactコンポーネントに実装して」とURLと一緒に貼り付けると、AIがデザインを読んでコードを生成する。
4
Annotationsでコンポーネント仕様を追記
Dev Mode内の「Annotations」機能で、要素にメモを追加できる。「このドロップダウンはSupabaseのモデル一覧を取得」などの仕様メモを残すと、Cursorへの指示が明確になる。
// Dev ModeのCSSをCursorに渡すプロンプト例 以下のFigmaデザイン仕様でチャットバブルコンポーネントを Reactで実装してください。 Figma URL: https://figma.com/file/xxxxx CSS仕様(Dev Modeからコピー): background: #1c1c28; border-radius: 12px; padding: 12px 16px; font-family: 'DM Mono', monospace; font-size: 13px; color: #e8e4dc; Props: - message: string - role: 'user' | 'assistant' - timestamp: Date
入れるべきFigmaプラグイン一覧
1
Figma to Code — コードを自動生成
フレームを選択してプラグインを起動すると、React・HTML・Tailwind・SwiftUIのコードを出力。インストール:Plugins → Browse plugins → 「Figma to Code」で検索。
2
Tokens Studio — デザイントークンを管理
カラー・スペーシング・フォントサイズをJSON形式で管理。TailwindのCSS変数に直接変換できるため、FigmaとCursorのスタイルを完全に同期できる。
3
Stark — アクセシビリティチェック
コントラスト比・色覚シミュレーションを自動チェック。LLMアプリを本番リリースするなら入れておきたい。
!
プラグインのインストール方法:Figmaのメニューバー「Plugins」→「Browse plugins in Community」→ 検索 → 「Install」ボタン。インストール後は右クリック→Pluginsから呼び出せる。
Figmaを開く →
ターミナルからFigma APIを操作する

Figmaは公式REST APIを公開しており、ターミナルからファイル情報の取得・コンポーネント一覧の取得・エクスポートまでを自動化できる。CursorへのデザイントークンのCI連携などにも使える。

1
Figma Personal Access Tokenを取得
Figma → Settings → Security → Personal access tokens → 「Generate new token」。生成されたトークンを .env に保存する。
2
figma-export CLIでアセットを一括書き出し
figma-exportパッケージを使うとSVG・PNG・デザイントークンをコマンド1行で取得できる。
3
デザイントークンをTailwind設定へ自動変換
取得したトークンJSONをtailwind.config.jsに流し込むスクリプトを作成。FigmaとCursorプロジェクトのスタイルが常に同期した状態になる。
# figma-export CLIのインストール npm install -g @figma-export/cli # .envにトークンを設定 FIGMA_TOKEN=figd_xxxxxxxxxxxxxxxxx FIGMA_FILE_ID=xxxxxxxxxxxxxxxx # FigmaのURLから取得 # コンポーネント一覧をJSONで取得 curl -H "X-Figma-Token: $FIGMA_TOKEN" \ "https://api.figma.com/v1/files/$FIGMA_FILE_ID/components" \ | jq '.meta.components[] | {name, key}' > components.json # SVGアセットを一括エクスポート npx figma-export use-config figma.config.js # デザイントークンをtailwind.config.jsへ変換 node scripts/tokens-to-tailwind.js
!
Figma APIのファイルIDはFigmaのURLから取得できる。https://figma.com/file/ここがID/... の部分をコピー。チームで使う場合はCI/CDに組み込んでデザイン変更を自動検知できる。
Cursor Step 03
AIと対話しながらLLMアプリを実装する
Cursorとは・なぜ使うか

CursorはVSCodeをベースにしたAI組み込みエディタ。VSCodeと操作がほぼ同じなので移行コストが低い。AIへの指示でコードを生成・修正でき、LLMアプリ開発のスピードが劇的に上がる。

1
cursor.com からダウンロードしてインストール
macOS・Windows・Linux対応。インストール後に起動すると、GitHubアカウントかメールアドレスでサインアップを求められる。無料プランでも月500回のAIリクエストが使える。
2
使用モデルをClaudeに設定する
Cmd+Shift+J でSettings → 「Models」タブ → 「claude-3-5-sonnet-20241022」を選択してチェックを入れる。Claudeはコード生成の精度が特に高い。
3
プロジェクトルートに .cursorrules を作成
プロジェクトの最上位フォルダに「.cursorrules」というファイルを作成。ここにプロジェクトの技術スタック・ルール・コーディング規約を書いておくと、全てのAI指示にこのルールが自動で適用される。
.cursorrules の設定内容
# .cursorrules — プロジェクトルート直下に配置 You are an expert LLM application developer. Tech Stack: - Framework: Next.js 14 (App Router) - Language: TypeScript (strict mode) - Styling: Tailwind CSS + shadcn/ui - Database: Supabase (PostgreSQL) - LLM: Anthropic Claude API Rules: - Always use TypeScript with proper type definitions - Error handling: always implement try/catch with user-friendly messages - Comments: write in Japanese - Component structure: Server Components by default, use 'use client' only when needed - API routes: always validate input with zod - Environment variables: never hardcode, always use process.env
.cursorrules を自動生成するプロンプト

Cursorの Cmd+L に貼り付けるだけで、プロジェクトに合った .cursorrules を自動生成してくれる。生成されたテキストをファイルにそのままコピー&ペーストして完成。

!
使い方:① Cursorで .cursorrules ファイルを新規作成 → ② Cmd+L でチャットを開く → ③ 下記プロンプトを貼り付けて送信 → ④ 生成されたテキストをファイルに貼り付けて保存
// ▼ Cursor の Cmd+L に貼り付けるプロンプト 以下の内容で .cursorrules ファイルを作成してください。 そのままファイルに貼り付けられる形式で出力してください。 【プロジェクト概要】 クリエイター・デザイナー向けのLLM学習アプリ。 Stitch → Figma → Cursor → GitHub → Supabase の 実践フローを学べるWebアプリケーション。 【技術スタック】 - Framework: Next.js 14(App Router) - Language: TypeScript(strict mode) - Styling: Tailwind CSS + shadcn/ui - Database: Supabase(PostgreSQL + pgvector) - LLM: Anthropic Claude API(claude-3-5-sonnet) - Deploy: Vercel 【コーディングルール】 - コメントは必ず日本語で、初心者にもわかる丁寧な説明を書く - TypeScriptの型定義は必ず記述する(anyは使わない) - エラーハンドリングは必ずtry/catchで実装し、 ユーザーに見せるメッセージも日本語にする - コンポーネントはServer Componentsをデフォルトにし、 インタラクションが必要な箇所のみ 'use client' を使う - APIルートは必ずzodでバリデーションする - 環境変数は必ずprocess.envから取得し、直接書かない - shadcn/uiのコンポーネントを優先的に使う - Tailwindのクラスは読みやすさを優先して改行して書く 【私について】 - デザイナー・クリエイター出身でコードより指示を重視 - 「なぜこのコードが必要か」の説明を必ず添えてほしい - 一度に大量のコードを出さず、小さく作って確認しながら進める - エラーが出たら原因と解決策を日本語で丁寧に説明してから修正する
!
プロジェクトが変わったり新しいツールを追加したくなったときは「〇〇を追加したので .cursorrules を更新して」とCursorに伝えるだけで更新してくれる。
技術スタック — どこまで知ればいいか

Cursorがコードを書いてくれるので、深く勉強しなくてOK。「読んで意味がわかる」程度で十分。

TypeScript — 最低限これだけ

「型定義って何?」がわかればOK。エラーが出たとき「型が合っていない」という意味がわかる程度で十分。

// 型定義って何?がわかればOK const message: string = "こんにちは" // string型(文字列) const count: number = 3 // number型(数値) const done: boolean = true // boolean型(true/false) // これだけわかればCursorのコードが読める
Tailwind CSS — クラス名の読み方だけ

全部覚える必要はなく「なんとなく読める」で十分。デザイナーなら直感的にわかるはず。

<!-- これが読めればOK --> <div class="flex items-center gap-4 p-6 bg-white rounded-lg"> // flex = 横並び(Flexbox) // items-center = 縦方向の中央揃え // gap-4 = 要素間の余白 // p-6 = 内側の余白(padding) // bg-white = 白背景 // rounded-lg = 角丸(large)
shadcn/ui — 存在を知っていればOK

よく使うUIパーツ(ボタン・入力欄・モーダル)がコピペで使えるコンポーネント集。使うときは公式サイトを見ながらCursorに指示するだけ。

// Cursorへの指示例 "shadcn/uiのButtonとInputを使って ログインフォームを作って" // Cursorが自動でインストールコマンドも教えてくれる npx shadcn-ui@latest add button input
!
まとめ:この3つはCursorが書いてくれる「材料」。あなたがやることは「何を作るか指示する」だけ。コードの細かい文法より、デザイン感覚と指示する力の方が100倍重要。
Cursorの基本操作 3つだけ覚える
Cmd+L — AIチャット(最もよく使う)
右側にチャットパネルが開く。ここで「○○を実装して」「このエラーを直して」など自由に指示できる。@ファイル名でファイルをコンテキストに追加できる。生成されたコードは「Apply」ボタンでファイルに自動適用される。
Cmd+K — インライン編集(コードを選択して使う)
コードの一部を選択してから Cmd+K を押すと、選択範囲に対してその場で指示できる。「この関数にTypeScriptの型をつけて」「このコンポーネントをリファクタリングして」など部分的な修正に最適。
Tab — AIオートコンプリート(書きながら使う)
コードを書いている途中でAIが次のコードを予測して薄く表示される。Tab キーで受け入れ、Esc で却下。コードの意図をAIが読んで自動補完してくれる。
!
使い方の基本:新しい機能を追加するときは Cmd+L(チャット)、既存コードを修正するときは Cmd+K(インライン)を使い分ける。エラーメッセージはそのままチャットに貼り付ければ直してくれる。
Claude APIと繋がるチャットアプリを実装する
1
ターミナルでNext.jsプロジェクトを作成
Cursorのメニュー「Terminal」→「New Terminal」でターミナルを開き、以下を実行。TypeScript・Tailwind・App Routerを全て「Yes」で選択する。
npx create-next-app@latest my-llm-app # 選択肢: # TypeScript → Yes # ESLint → Yes # Tailwind CSS → Yes # src/ directory → No # App Router → Yes cd my-llm-app npm install @anthropic-ai/sdk ai cursor . # Cursorでプロジェクトを開く
2
.env.local ファイルを作成してAPIキーを設定
プロジェクトルートに「.env.local」ファイルを新規作成。AnthropicのAPIキーは console.anthropic.com から取得。絶対にGitHubにpushしないこと(.gitignoreに含まれているか確認)。
# .env.local ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx NEXT_PUBLIC_SUPABASE_URL=https://xxxxxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJxxxxxxxx
3
Cmd+L を開いて下記プロンプトでAPIルートを生成
Cursorのチャットにプロンプトを貼り付けると、必要なファイルを全て生成して「Apply all」で一括適用してくれる。
// Cursorの Cmd+L に貼り付ける 以下のファイルを実装してください: 1. app/api/chat/route.ts - Anthropic SDKを使ったストリーミングAPIルート - リクエスト: { messages: {role, content}[] } - システムプロンプト:「あなたはクリエイター向けのAIアシスタントです」 - エラーハンドリング込み 2. app/page.tsx - useChat(Vercel AI SDK)でチャットUIを実装 - メッセージ一覧の表示 - 送信フォーム - ローディング中はスピナー表示 - Tailwindでスタイリング(ダークモード) 3. 必要なパッケージのインストールコマンドも教えて
Cursorで効果的な指示を出す方法
1
@ファイル名 でコンテキストを追加する
チャットで「@page.tsx に○○を追加して」と書くと、そのファイルをAIが自動で読んだ上で回答してくれる。「@Codebase」と書けばプロジェクト全体を参照させることもできる。
2
エラーメッセージをそのまま貼り付ける
ターミナルのエラーメッセージをコピーしてチャットに貼り付けるだけで原因と修正方法を教えてくれる。「なぜこのエラーが出るか、どう直すか説明してから直して」と添えると理解しながら進められる。
3
小さく指示して段階的に作る
「全部一気に」より「まずAPIルートだけ」→「次にUIだけ」→「最後に繋げる」のように分けた方が精度が上がる。一つの指示で詰め込みすぎると出力が壊れやすい。
4
「説明してから実装して」で理解しながら進む
「このコードが何をしているか日本語で説明してから実装して」と添えることで、コードの意味を理解しながら進められる。コピペで動かすだけでなく、理解が深まる。
!
Cursorの学習サイクル:「指示 → 生成コードを読む → 動かして確認 → 改善指示」を繰り返す。コードを「書く」より「読んで理解する」力が先についてくる。これが最速の学習法。
Cursorをダウンロード →
ターミナルからCursorを操作する

CursorはVSCodeベースのためcursorコマンドでCLI操作が可能。プロジェクトを開く・拡張機能のインストール・設定の同期まで、ターミナルから完結できる。

1
cursor コマンドをPATHに追加
Cursor起動 → コマンドパレット(Cmd+Shift+P)→「Shell Command: Install 'cursor' command in PATH」を実行。以降はターミナルから cursor . でプロジェクトを開ける。
2
プロジェクトの作成から起動まで1コマンドで
npx create-next-app でプロジェクトを作成した直後に cursor . でCursorが自動起動。ディレクトリ移動が不要になる。
3
拡張機能をCLIでインストール
VSCode拡張機能はターミナルから cursor --install-extension コマンドでインストールできる。チームで拡張機能セットを統一したいときに有効。
# cursor コマンドの確認 cursor --version # Next.jsプロジェクト作成 → Cursorで即開く npx create-next-app@latest my-llm-app \ --typescript --tailwind --app \ --src-dir --import-alias "@/*" cd my-llm-app cursor . # 拡張機能をCLIでインストール cursor --install-extension bradlc.vscode-tailwindcss cursor --install-extension esbenp.prettier-vscode cursor --install-extension dbaeumer.vscode-eslint # .cursorrules を自動生成してCursorで開く touch .cursorrules && cursor .cursorrules
!
cursor コマンドがPATHにあると、ターミナルで作業しながらそのままCursorで編集に移れる。GUIを行き来するより断然速い。
GitHub Step 04
コードを管理・公開してポートフォリオにする
GitHubの役割とLLMエンジニアとしての使い方

GitHubはコードの「保存場所・履歴・公開」の全てを担う。LLMエンジニアにとっては「ポートフォリオ」でもある。作ったLLMアプリをGitHubに上げてVercelに繋げると、本番URLが自動で発行される。

Cursorで
コード編集
①ローカル
git commit
+ push
②保存
GitHub
リポジトリ
③リモート
Vercel
自動デプロイ
④本番公開
Gitの基本概念(3つだけ)
1
commit — 変更を「セーブ」する
ゲームのセーブポイントと同じ。「機能Aを追加」「バグBを修正」など変更のまとまりごとにcommitする。commitには必ずメッセージをつける。
2
push — GitHubにアップロードする
ローカル(自分のPC)のcommitをGitHub(クラウド)に送ること。pushするたびにVercelが自動で最新版をデプロイする。
3
branch — 作業を分岐させる
本番(main)に影響させずに新機能を開発するための「別ルート」。完成したらmainにmergeする。最初はmainブランチだけで問題ない。
初回:GitHubにプロジェクトをpushする
1
GitHub.com で新しいリポジトリを作成
github.com にログイン → 右上「+」→「New repository」→ リポジトリ名を入力(例:my-llm-app)→「Create repository」。「Initialize with README」はチェックしない(ローカルからpushするため)。
2
.gitignore に .env.local が入っているか確認
Next.jsのデフォルト.gitignoreには既に .env.local が含まれている。APIキーを絶対にGitHubにpushしてはいけない。念のため確認すること。
3
Cursorのターミナルで以下のコマンドを実行
GitHubのリポジトリ作成後に表示される「…or push an existing repository」のコマンドをそのまま実行する。
# Cursorのターミナルで実行(順番通りに) git init git add . git commit -m "feat: LLMチャットアプリの初期実装" git branch -M main git remote add origin https://github.com/あなたのユーザー名/my-llm-app.git git push -u origin main # GitHubで確認:ファイルが表示されれば成功
!
commit メッセージの書き方:「feat: 〇〇を追加」「fix: 〇〇のバグを修正」「docs: READMEを更新」のように種類+内容で書くと履歴が読みやすくなる。Cursorに「commit メッセージを作って」と頼んでもOK。
日常の操作フロー — コードを変更するたびに行う
1
変更内容を確認する
git status で変更されたファイルの一覧を確認。赤色が未追跡(add前)、緑色が追跡済み(add後)。Cursorの左サイドバーのSource Controlアイコン(分岐マーク)でもGUI確認できる。
2
変更をステージングしてcommit
git add . で全変更を追加、git commit -m "メッセージ" でcommit。CursorのGUIでは変更ファイルの「+」ボタンでaddし、メッセージ入力後「Commit」ボタンを押す。
3
GitHubにpushしてVercelを自動デプロイ
git push でGitHubにアップロード。Vercelと連携済みであれば、pushした瞬間に自動でビルドとデプロイが始まる。数分後に本番URLに反映される。
# 毎回の作業フロー(3コマンドだけ覚える) git add . # 全変更をステージ git commit -m "fix: チャット送信のバグを修正" git push # GitHubへpush → Vercel自動デプロイ
Vercelとの連携設定
1
vercel.com にアクセスしてGitHubでログイン
「Sign Up」→「Continue with GitHub」。GitHubアカウントと連携することで、リポジトリを選択するだけでデプロイが設定できる。
2
「Add New Project」→ GitHubリポジトリを選択
「Import Git Repository」で先ほど作ったリポジトリを選択。FrameworkはNext.jsが自動検出される。
3
環境変数を設定してDeploy
「Environment Variables」セクションに .env.local の内容を入力(ANTHROPIC_API_KEY など)。「Deploy」ボタンを押すと数分で本番URLが発行される。
!
Vercel連携後は git push するだけで自動デプロイ。コードを変更 → push → 数分後に本番URLに反映という流れができあがる。
ターミナルからGitHub / Vercelを操作する

GitはもともとCLIツール。GUIより速く・正確に操作できる。さらにGitHub CLI(gh)を使うとリポジトリ作成・PR・Issueまでターミナルから完結する。Vercel CLIも合わせて使えばデプロイもコマンド1行。

1
GitHub CLI(gh)のインストールと認証
homebrewでインストールして gh auth login で認証。以降はブラウザを開かずにGitHubのほぼ全操作がターミナルから可能になる。
2
リポジトリ作成からfirst pushまで一気に
gh repo create でリモートリポジトリを作成しつつ、ローカルとの紐付けまで1コマンドで完了。ブラウザでポチポチする手間がゼロ。
3
Vercel CLIでデプロイ・環境変数管理
vercel コマンド1つでデプロイ。vercel env add でAPIキーなどの環境変数もターミナルから追加できる。
# GitHub CLI インストール(macOS) brew install gh gh auth login # リポジトリ作成 → push まで一気に git init git add . git commit -m "feat: initial commit" gh repo create my-llm-app --public --source=. --push # 日常の操作フロー(これだけ覚えれば十分) git add . git commit -m "feat: チャット画面を実装" git push # Vercel CLIでデプロイ npm i -g vercel vercel # 初回セットアップ vercel --prod # 本番デプロイ # 環境変数をVercelに追加 vercel env add ANTHROPIC_API_KEY vercel env add SUPABASE_URL vercel env add SUPABASE_ANON_KEY
!
gh cliを使うと「GitHubでリポジトリ作成 → URLをコピー → git remote add origin...」という手順が gh repo create 1行で完結する。毎回やる作業ほどCLI化の恩恵が大きい。
Supabase Step 05
DB・認証・ベクトル検索をゼロから構築する
SupabaseとはLLMアプリでの使い方

SupabaseはオープンソースのFirebase代替。PostgreSQL・認証・ストレージ・Edge Functionsが揃っている。LLMアプリで使う主な機能は3つ:チャット履歴の保存(DB)・ログイン機能(Auth)・ドキュメントの意味検索(pgvector/RAG)。

Auth
ログイン
①認証
PostgreSQL
チャット保存
②DB
pgvector
意味検索
③RAG
Edge Fn
サーバー処理
④API
プロジェクトの作成と初期設定
1
supabase.com でアカウント作成
「Start your project」→ GitHubアカウントでサインアップが便利。無料プランで2つまでアクティブなプロジェクトを持てる。
2
「New project」でプロジェクト作成
Organization(無料プランでは自分の名前)を選択 → プロジェクト名・DBパスワード・リージョン(Northeast Asia)を入力 → 「Create new project」。数分かかる。
3
API KeyをコピーしてNext.jsに設定
左サイドバー「Project Settings」→「API」→「Project URL」と「anon public key」をコピー。.env.local に貼り付けてCursorを再起動する。
4
Supabaseクライアントをインストール
Cursorのターミナルでインストール。Next.jsのApp Routerではサーバー用とクライアント用で使い分けが必要(@supabase/ssr が対応)。
npm install @supabase/supabase-js @supabase/ssr
Supabase Dashboardの画面と操作
Table Editorテーブルの中身をGUIで見る・編集する(Excelのような画面)
SQL EditorSQLを直接書いて実行する。テーブル作成はここで行う
Authenticationユーザー一覧・ログイン設定(OAuthプロバイダーの設定)
Storageファイルアップロード先(画像・PDF等)
Edge Functionsサーバーサイド処理のデプロイ先
LogsAPIアクセスログ・エラー確認
チャット履歴テーブルの作成
1
SQL Editorを開いて下記SQLを実行
左サイドバー「SQL Editor」→「New query」→ 以下のSQLを貼り付けて「Run」(または Cmd+Enter)。
-- チャット履歴テーブル create table chats ( id uuid default gen_random_uuid() primary key, user_id uuid references auth.users on delete cascade, role text not null check (role in ('user', 'assistant')), content text not null, session_id uuid not null, created_at timestamptz default now() ); -- Row Level Security(ユーザーは自分のデータのみ操作可) alter table chats enable row level security; create policy "自分のチャットのみ参照" on chats for select using (auth.uid() = user_id); create policy "自分のチャットのみ追加" on chats for insert with check (auth.uid() = user_id);
2
Table Editorでテーブルが作られたか確認
「Table Editor」を開いて「chats」テーブルが表示されていればOK。列の構造(id・user_id・role・content・created_at)を確認する。
3
CursorでSupabaseへの保存処理を実装
Cursorの Cmd+L に下記プロンプトを貼り付けて実装してもらう。
// Cursorのチャットに貼り付ける @app/api/chat/route.ts のAPIルートに Supabaseへのチャット保存処理を追加してください。 処理の流れ: 1. ユーザーのメッセージをchatテーブルに保存(role:'user') 2. Claude APIにリクエスト送信 3. AIの返答をchatテーブルに保存(role:'assistant') 4. session_idはリクエストボディから受け取る Supabase clientは @/lib/supabase/server.ts を使って。 (まずそのファイルも作成してください)
Supabase Auth — ログイン機能の実装
1
Dashboard でGoogleログインを有効化
左サイドバー「Authentication」→「Providers」→「Google」をクリック → 「Enable」をオンにする。Google Cloud ConsoleでOAuth認証情報を作成してClient IDとSecretを貼り付ける(Cursorに「Google OAuthの設定手順を教えて」と聞けば手順を教えてくれる)。
2
Redirect URLをVercelのURLに設定
SupabaseのDashboard「Authentication」→「URL Configuration」→「Site URL」にVercelのURLを入力(例:https://my-llm-app.vercel.app)。ローカル開発用に http://localhost:3000 も「Redirect URLs」に追加する。
3
CursorでAuth UIを実装
Cursorに「Supabase Authを使ったGoogleログインページを実装して。ログイン後はチャット画面にリダイレクト。ログアウトボタンも追加して」と指示する。
!
Row Level Security(RLS)を設定しておくと、ログインユーザーは自分のデータしか見られない。「誰でもデータを読み書きできる」状態を防ぐセキュリティ機能。本番アプリでは必須。
pgvector でRAGを構築する

SupabaseのpgvectorはPostgreSQLにベクトル検索機能を追加する拡張機能。外部のベクトルDB(Pineconeなど)を使わずにRAGが構築できる。自分のドキュメントをLLMに参照させる仕組み。

1
SQL Editorでpgvectorを有効化してテーブル作成
以下のSQLをSQL Editorで実行する。vector(1536) はOpenAIのtext-embedding-ada-002の次元数。Claude の埋め込みはvoyage-3を使う場合は1024次元。
-- pgvector拡張を有効化 create extension if not exists vector; -- ドキュメントテーブル(埋め込みベクトル付き) create table documents ( id uuid default gen_random_uuid() primary key, content text not null, embedding vector(1536), metadata jsonb default '{}', created_at timestamptz default now() ); -- 類似度検索関数(コサイン類似度) create function match_documents( query_embedding vector(1536), match_threshold float default 0.78, match_count int default 5 ) returns table( id uuid, content text, similarity float ) language sql as $$ select id, content, 1 - (embedding <=> query_embedding) as similarity from documents where 1 - (embedding <=> query_embedding) > match_threshold order by embedding <=> query_embedding limit match_count; $$;
2
CursorでRAGパイプラインを実装
以下のプロンプトをCursorに貼り付けると、ドキュメント登録からRAG検索まで一気に実装してくれる。
// Cursorのチャットに貼り付ける Supabaseのpgvectorを使ったRAGパイプラインを実装してください。 1. app/api/embed/route.ts - テキストをOpenAI embeddings APIで埋め込みベクトル化 - Supabaseのdocumentsテーブルに保存 2. app/api/chat/route.ts に検索処理を追加 - ユーザーの質問を埋め込みベクトルに変換 - match_documents関数で類似ドキュメントを取得(上位5件) - 取得したドキュメントをシステムプロンプトに追加してClaudeに送る 3. 参考情報を返答に含める - AIの返答の最後に「参考にしたドキュメント: ○○」を追記
!
RAGの仕組み:質問をベクトルに変換 → 似たドキュメントを検索 → 検索結果をプロンプトに追加 → LLMが回答。これで「自分のドキュメントに基づいた回答」ができるようになる。
ターミナルからSupabaseを操作する

Supabase CLIを使うとデータベースのマイグレーション・型生成・ローカル開発環境の起動まで全てターミナルから行える。本番DBに直接触れずにローカルで安全に開発できるのが最大のメリット。

1
Supabase CLIインストールとプロジェクト連携
homebrewでインストール後、supabase login で認証。supabase link でローカルとリモートプロジェクトを紐付ける。
2
ローカル開発環境を起動
supabase start でDockerベースのローカルSupabaseが起動。本番DBに触らずテーブル設計・RLS設定を試せる。
3
TypeScript型定義を自動生成
supabase gen types でDBスキーマからTypeScriptの型定義を自動生成。Cursorでの実装時に型安全なDB操作ができるようになる。
4
マイグレーションで本番DBに安全に反映
ローカルで動作確認したスキーマ変更を supabase db push で本番に反映。変更履歴がマイグレーションファイルとしてGitに残る。
# Supabase CLI インストール(macOS) brew install supabase/tap/supabase supabase login # プロジェクト初期化 & リモートと紐付け supabase init supabase link --project-ref xxxxxxxxxxxxxx # ローカル開発環境を起動(要Docker) supabase start # → http://localhost:54323 でDashboardが開く # TypeScript型定義を自動生成 supabase gen types typescript --linked \ > src/types/supabase.ts # マイグレーション作成 → 本番に適用 supabase migration new add_chat_table supabase db push # ローカル環境の停止 supabase stop
!
supabase gen types を package.json の scripts に登録しておくと、DBスキーマを変更するたびに npm run types 1コマンドで型定義を最新化できる。Cursorでの実装精度が大幅に上がる。
🐍
Python 必要な場面だけ
TypeScriptでできないことだけPythonを使う — 4つの場面
結論: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で実行する場合はインストール不要なものも多い。ローカルで実行する場合は以下を実行。
# ターミナルで実行(またはColabのセルに貼り付け) pip install anthropic supabase pypdf2 langchain-text-splitters python-dotenv
2
PDFを読み込んでチャンク分割 → Supabaseに保存
以下のスクリプトをCursorで「処理したいPDFファイル名と保存先Supabaseの情報を入れて調整して」と指示すればそのまま動く。
# ingest.py — PDFをSupabaseのdocumentsテーブルに投入 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"] # service_role key(秘密) ) # PDFを読み込む def load_pdf(path: str) -> str: reader = PdfReader(path) return "\n".join(page.extract_text() for page in reader.pages) # テキストをチャンクに分割(500文字ごと、100文字重複) splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=100 ) # 埋め込みベクトルを生成(voyage-3 経由) def embed(text: str) -> list[float]: res = client.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=1, messages=[{"role": "user", "content": text}] ) # 実際はVoyage AIのembedding APIを使う 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行程度で作れる。「まず動かす」ための道具。

# rag_prototype.py — LangChain + Claude でRAGを試す 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 # ドキュメントを読み込んでベクトルDBに保存 loader = TextLoader("my_document.txt", encoding="utf-8") docs = loader.load() chunks = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50 ).split_documents(docs) # ローカルのChromaDBに保存(Supabase不要で試せる) vectorstore = Chroma.from_documents( chunks, embedding=VoyageAIEmbeddings(model="voyage-3") ) # RAGチェーンを構築 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コードを書いてもらう」方法
// Cursorのチャットに貼り付けるプロンプト Pythonで以下のスクリプトを書いてください: 目的:[やりたいこと] 入力:[どんなデータを処理するか] 出力:[何を出力・保存するか] 使うライブラリ:anthropic, supabase, langchain Google Colabで実行できる形式で。 各処理にコメントを日本語で追加して。
場面③:ファインチューニング — モデルを特定タスクに特化

ファインチューニングとRAGの使い分けが重要。まずRAGで解決できないか試す。RAGで無理なとき(特定のトーン・スタイル・形式を徹底させたいとき)にファインチューニングを検討する。

判断
RAGとファインチューニングの使い分け
「特定の情報を参照させたい」→ RAGで解決。「特定の文体・形式で常に出力させたい」「専門用語を正確に覚えさせたい」→ ファインチューニングを検討。
RAGで解決社内ドキュメントへの質問応答
RAGで解決最新情報・頻繁に更新されるデータへの参照
FTで解決「このブランドの文体でしか書かない」の徹底
FTで解決特定ジャンルのコード生成精度を上げる
Claude APIのファインチューニング(最も簡単な方法)
# Claude APIのFine-tuning(2024年〜一部モデルで対応) # まずトレーニングデータをJSONL形式で用意する # training_data.jsonl の形式(各行が1サンプル) {"messages": [ {"role": "user", "content": "このデザインのフィードバックをください"}, {"role": "assistant", "content": "[理想的な返答例]"} ]} # Anthropic APIでファインチューニングジョブを作成 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のコンソール(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コマンドで環境が完成する。
# ローカル環境のセットアップ(uv を使う場合) # 1. uv をインストール(macOS / Linux) curl -LsSf https://astral.sh/uv/install.sh | sh # 2. プロジェクト作成 uv init my-python-scripts cd my-python-scripts # 3. 必要なパッケージを追加 uv add anthropic supabase python-dotenv langchain voyageai # 4. スクリプトを実行 uv run python ingest.py # .env ファイルに APIキーを設定 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 で設定。
# uvのインストール(macOS / Linux) 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 # .envファイルを作成してAPIキーを設定 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 # スクリプトをcronで毎日深夜2時に自動実行 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スクリプト開発の最速ルーティン。