PlanetScale 終了後、Supabase / Neon への移行ガイド

公開: / 著者: StackComp 編集部

2024年に PlanetScale が Hobby プラン(無料枠)を廃止し、 現在は実質エンタープライズ向けのみのサービスとなりました。 個人開発で PlanetScale を使っていたユーザーの多くが、Supabase または Neon に移行しています。 本記事では移行先の選び方と、MySQL → PostgreSQL 移行の手順を整理します。

移行先の選択(まずここ)

PlanetScale は MySQL ベースですが、代替として人気の Supabase・Neon は両方とも PostgreSQL ベースです。 つまりMySQL → PostgreSQL のスキーマ移行が必要になります。

MySQL → PostgreSQL の主な互換性問題

実際に PlanetScale → Supabase/Neon 移行で躓くポイントは大きく4つ。

1. 自動採番カラム

2. データ型の違い

3. クエリ構文の違い

4. ON DUPLICATE KEY UPDATE

移行手順(Neon 移行を例に)

0. 事前準備

1. スキーマ変換

MySQL の CREATE TABLE 文を PostgreSQL 形式に変換します。 手動変換 + pgloader(オープンソースの自動変換ツール)併用が定石。

brew install pgloader  # macOS
pgloader mysql://user:pass@old-host/db postgres://user:pass@neon-host/db

pgloader はスキーマ + データを一括変換してくれますが、複雑なインデックス・ストアドプロシージャは手動で確認・修正が必要。

2. アプリのクエリ書き換え

Prisma / Drizzle / TypeORM 等の ORM を使っているなら、設定の provider を切替えれば 大半は自動で対応されます。生 SQL を書いている部分は前述の互換性問題を1つずつ修正。

3. 接続文字列の差し替え

Neon のダッシュボードで取得する Postgres 接続文字列(postgresql://user:pass@ep-xxx.neon.tech/db)を アプリの環境変数に設定します。SSL 必須なのでクエリパラメータに ?sslmode=require を忘れずに。

4. データ整合性のテスト

5. 本番切替

料金比較(PlanetScale 旧 Hobby vs 移行先)

サービス無料/最安備考
PlanetScale 旧 Hobby無料(5GB)2024年に廃止
Supabase 無料無料(500MB)1週間放置でPause
Supabase Pro$25/月(8GB込み)Auth/Storage/Realtime込み
Neon 無料無料(500MB / コンピュート100h)Pause なし
Neon Launch$19/月(10GB込み)純粋なPostgres

詳細な月額試算は マネージドDB月額シミュレーター で。

まとめ

PlanetScale 終了は寝耳に水でしたが、Supabase・Neon ともに本番運用に耐える品質なので、 移行先の選択を間違わなければ事業継続に大きな影響はありません。 移行コストは「スキーマ + クエリの書き換え」がほぼ全てで、データ自体の移送は pgloader で済みます。