このドキュメントは Nix flake(flake.nix)を前提に、ゼロからローカル開発環境を整え、アプリを起動できる状態までの最短手順を示します。
- macOS で Nix をインストール(公式インストーラ推奨)。
- Nix の Flakes を有効化(インストーラの設定 UI で “Flakes” を有効、または
/etc/nix/nix.confにexperimental-features = nix-command flakes)。
flake.nix は次のツールを提供します:
- Node.js 20(npm 同梱)
- supabase-cli
- postgresql(
psqlクライアント) - python3 / pkg-config / vips / openssl(ネイティブ拡張のビルドに必要)
- git / watchman
開発シェルへ入る:
nix develop終了するとき:
exit.env.example をコピーし、必須キーを埋めます。
cp .env.example .env.local必須キー(例):
OPENROUTER_API_KEYNEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY(サーバー専用。クライアントへ公開しない)DATABASE_URL
supabase/schema.sql を、接続先の Postgres に流し込みます。Nix シェルには psql が入っています。
- Supabase ダッシュボードから接続文字列を取得し、環境変数
DATABASE_URLをセット(例:SSL 必須)。
export DATABASE_URL='postgresql://postgres:YOUR_PASSWORD@db.YOUR_REF.supabase.co:5432/postgres?sslmode=require'- スキーマ適用:
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f supabase/schema.sql補足:
SUPABASE_DB_URLを使いたい場合はexport SUPABASE_DB_URL=...として同様に利用可能です。- 接続エラー時はパスワード/ホスト/ポート/
sslmode=requireを再確認。
npm install
npm run dev # http://localhost:3000任意(自動エージェント実行):
npm run agentコード品質:
npm run lint # Biome check
npm run format # Biome format- プロセス:
- Next.js dev server(Turbopack, ポート 3000)
- バンドルワーカー / ファイル監視
- (任意)エージェント実行用 Node プロセス
- ネットワーク:
- ブラウザ →
http://localhost:3000 - サーバー/クライアント → Supabase(REST/Realtime/WebSocket)
- サーバー → OpenRouter(LLM 推論時)
- ブラウザ →
- ストレージ:
node_modules/,.next/(ビルドキャッシュ/生成物).env.local(手動で作成・秘匿)
- 401/403(Supabase): キー誤り / RLS ポリシー不整合。
SUPABASE_SERVICE_ROLE_KEYはクライアントに露出させない。 - 429/401(OpenRouter): API Key 未設定 / レート制限。キーを再確認し、エージェント頻度を調整。
fetch failed(接続):NEXT_PUBLIC_SUPABASE_URL・ネットワーク・CORS を確認。sharp関連ビルド失敗: Node バージョン/vips/ヘッダ類の不足。Nix シェル内で実行しているか確認。- Turbopack の不調:
rm -rf .nextして再起動。
NEXT_PUBLIC_接頭辞のみクライアントへ埋め込み可能。SUPABASE_SERVICE_ROLE_KEYはサーバー側専用。accessTokenを含む URL は共有リンク相当。取り扱い注意。
97: 必要なら、Nix シェルに pnpm/yarn、psql の補助関数、direnv 連携なども追加できます。要望があればこのドキュメントに反映します。
98:
99: ---
100:
101: ## 8. Haskell バックエンド開発(New)
102:
103: Haskell バックエンドの開発環境も flake.nix に統合されました。
104:
105: ### 起動方法(Process Compose 推奨)
106: すべてのサービス(Frontend, Backend, DB)を一括管理できます。
107:
108: zsh 109: nix run 110: # または 111: nix run .#default 112:
113: これにより、TUI(テキストUI)が立ち上がり、以下のプロセスが管理されます:
114: - db: データベース(外部で動いている前提、または接続チェック)
115: - backend: Haskell サーバー (cabal run)
116: - frontend: Next.js (npm run dev)
117:
118: ### 個別に開発する場合
119: nix develop でシェルに入った後:
120:
121: Backend (Haskell)
122: zsh 123: cd backend 124: cabal build 125: cabal run 126: # またはホットリロード(要設定) 127: # ghcid 128:
129:
130: Frontend (Node.js)
131: zsh 132: npm run dev 133:
134:
135: ### 開発ツール
136: nix develop 環境には以下が含まれています:
137: - ghc, cabal: コンパイラとビルドツール
138: - haskell-language-server (hls): VS Code などのエディタ用
139: - cabal-gild: フォーマッター
140:
141: VS Code で開発する場合、Haskell 拡張機能を入れ、ワークスペースのルートで開けば HLS が認識される設定になっています(flake.nix の hlsCheck 有効化済み)。
Supabase (5432) とは別に、純粋なイベントソーシング用の Postgres 18 をポート 5433 で起動します。
この環境は flake.nix で完結しており、追加のインストールは不要です。
以下のNixコマンド一発で、DBの初期化(initdb)・起動(postgres)・スキーマ適用(migrate)の全てが自動で行われます。
# フォアグラウンドで起動
nix run .#db-upまたは、nix develop 済みのシェル内であれば単に:
# `devShell` に入っているコマンド
db-upmake db-shellで psqlに入れます。スキーマは起動時に自動適用されているので、すぐに利用可能です。