尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Next.js (App Router) と Supabase を使用した旅行プラン管理・共有アプリケーションです。
@supabase/ssr, @supabase/supabase-jsnpx create-next-app@latest ./
npm install @supabase/supabase-js @supabase/ssr
2. 環境変数の設定
プロジェクトルートに .env.local を作成し、Supabaseの接続情報を記述します。
コード スニペット
NEXT_PUBLIC_SUPABASE_URL=https://[YOUR_PROJECT_ID].supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=[YOUR_ANON_KEY]
3. 型定義の生成(Supabase CLI)
DBスキーマからTypeScriptの型定義を自動生成します。
Bash
npx supabase login
npx supabase gen types typescript --project-id [YOUR_PROJECT_REF] --schema public > types/supabase.ts
⚠️ トラブルシューティング(発生したエラーと対処法)
開発初期に発生した主なエラーと、その解決策の備忘録です。
Database (Supabase) 関連
❌ エラー: relation "trips" already exists
原因: すでに同名のテーブルが存在している状態で CREATE TABLE を実行しようとしたため。
対処法: テーブル再作成時は、SQLの先頭に DROP TABLE IF EXISTS [テーブル名] CASCADE; を記述し、既存のテーブルと関連する制約をリセットしてから実行する。
❌ エラー: syntax error at or near ".."
原因: ネット上やAIが生成した省略記号(...)が含まれたSQLをそのまま実行したため。
対処法: SQLは省略せずに完全な構文で実行する。
❌ 課題: データを入れたのに画面に表示されない(エラーも出ない)
原因: Supabaseの RLS (Row Level Security) が有効になっており、権限がないアクセスに対して「空の配列(データが存在しないフリ)」を返していたため。
対処法: 開発初期の段階では、以下のSQLを実行して一時的にRLSを無効化する。
SQL
ALTER TABLE trips DISABLE ROW LEVEL SECURITY;
(※ ログイン機能実装時に再度 ENABLE にし、適切なポリシーを設定すること)
別要因の可能性: Next.jsのキャッシュ機能によるもの。page.tsx に export const dynamic = 'force-dynamic' を追加してキャッシュを無効化する。
Next.js (App Router) / React 関連
❌ エラー: Expected ';', got ':' (Parsing ecmascript source code failed)
原因: JSX内で文字列と変数をそのまま return しようとしたため、JavaScriptの構文エラーとして判定された。
TypeScript
// 🚫 NG
return データの取得に失敗しました: {error.message}
対処法: 画面に描画するテキストは必ずHTMLタグ(<div>など)で囲む。
TypeScript
// ✅ OK
return <div>データの取得に失敗しました: {error.message}</div>
❌ エラー: cookieStore.get is not a function
原因: Next.js 15以降、cookies() が非同期(Promise)に変更されたことと、@supabase/ssr のAPIがアップデートされたため。
対処法: utils/supabase/server.ts および呼び出し元で await を付与し、最新の getAll() / setAll() メソッドを使用する。
TypeScript
// utils/supabase/server.ts の修正例
export async function createClient() {
const cookieStore = await cookies(); // awaitが必要
return createServerClient<Database>(url, key, {
cookies: {
getAll() { return cookieStore.getAll() },
setAll(cookiesToSet) { /* set処理 */ }
}
});
}