尚未偵測到更新。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処理 */ }
}
});
}