「データベースのスキーマ変更のたびにサービスを停止するのが怖い」「本番環境でのDB運用をもっと安全にしたい」――PlanetScaleは、Gitのようなブランチ機能でこうした課題を解決するサーバーレスデータベースサービスです。
本記事では、PlanetScaleのアカウント作成から基本操作、スキーマ変更のワークフローまで、初心者でも安心して始められるよう実践的に解説します。
PlanetScaleとは?基本的な特徴を理解しよう
PlanetScaleは、MySQLベースのサーバーレスデータベースサービスです。最大の特徴は、サービスを停止せずにスキーマ変更ができる点にあります。
従来、データベースのスキーマ変更は開発者にとって緊張を伴う作業でした。本番環境でテーブル構造を変更する際、サービス停止やユーザーへの影響が避けられなかったためです。PlanetScaleは「ノンブロッキングスキーマ変更」という仕組みでこの課題を解決しています。
また、Gitのようなブランチ機能を備えており、開発環境と本番環境を明確に分けた運用が可能です。YouTubeを支える技術として知られるVitessをベースに構築されており、高いスケーラビリティと信頼性を実現しています。
ただし、2024年4月に無料プランが廃止され、最低でも月額$29からの有料プランが必要になりました。本記事では、PlanetScaleの使い方を基礎から実践まで解説します。
他のデータベースサービスとの違い
PlanetScaleの最大の差別化要素は、開発フローそのものがデータベースに組み込まれている点です。主な特徴は以下の通りです。
技術的特徴:
- サーバーレスアーキテクチャ: インフラ管理不要、自動スケーリング対応
- ノンブロッキングスキーマ変更: ダウンタイムなしでテーブル構造を変更
- ブランチ機能: 開発環境を分岐・マージできる
- 自動バックアップ: データ保護が標準装備
- グローバル対応: 世界中のリージョンから選択可能
AWS RDSやGoogle Cloud SQLなどの従来型マネージドサービスでは、スキーマ変更時のダウンタイムや複雑な移行作業が必要です。PlanetScaleでは、新しいスキーマをブランチで開発・テストしてから本番環境にデプロイできるため、アプリケーションコードと同じような運用が可能になります。
料金プランと導入の判断基準
2024年4月の料金改定により、無料プランが廃止されました。現在の料金体系は以下の通りです。
| プラン | 月額料金 | 主な用途 |
|---|---|---|
| Scaler | $29〜 | 小規模ビジネス向け |
| Scaler Pro | $39〜 | 高パフォーマンス要求 |
| Enterprise | 要相談 | 大規模運用、SLA保証 |
料金はストレージ容量と読み取り/書き込み回数で変動します。小規模Webアプリケーションなら月額$29〜50程度で運用可能です。
導入が効果的な場面:
- 頻繁なスキーマ変更が必要: 新規サービスの立ち上げ期や継続的な改善を行うプロダクト
- 小規模チームでの開発: 専任データベースエンジニアがいない中小企業
- グローバル展開を見据えたサービス: 複数リージョンへの展開が必要
- SaaS型ビジネス: 顧客管理や予約システムなど機能追加が継続的に発生
導入に向かないケース:
- 複雑な外部キー制約が必須のシステム
- PostgreSQL特有の機能が必要な場合
- コスト最優先で無料サービスを探している場合
月額$29のコストは、専任エンジニアの人件費やデータベース障害によるビジネス損失と比較すれば、十分に検討価値のある投資と言えます。
アカウント作成から初期設定まで
PlanetScaleの導入は簡単です。アカウント作成から最初のデータベース立ち上げまでの手順を解説します。
アカウント登録手順
GitHubアカウントでの登録をおすすめします。CLI認証がスムーズに行えるためです。
登録の流れ:
- PlanetScale公式サイトにアクセスし「Sign up」をクリック
- 「Continue with GitHub」を選択(推奨)
- GitHubで認証を許可
- 組織名を設定(個人利用なら自分の名前、会社なら会社名)
- 利用目的を選択(アンケート形式)
- プラン選択(14日間のトライアル期間あり)
登録完了後、ダッシュボード画面が表示されます。
最初のデータベースを作成する
作成手順:
- ダッシュボードの「Create a database」をクリック
- データベース名を入力(英数字とハイフン、後から変更不可)
- リージョンを選択(日本なら「AWS ap-northeast-1 (Tokyo)」推奨)
- 「Create database」をクリック
数秒で作成が完了し、自動的に「main」という本番用ブランチが作成されます。
作成時の重要ポイント:
- データベース名は慎重に: 変更できないため、プロジェクト名やサービス名を反映
- リージョンは近い場所を: レイテンシに直結するため、主なユーザーに近い場所を選択
Web UIの基本的な見方
PlanetScaleのWeb UIは直感的に操作できます。主要な画面を理解しておきましょう。
主要セクション:
- Overview: 稼働状況、ストレージ使用量、クエリ数などを表示
- Branches: ブランチ一覧と新規作成
- Console: ブラウザ上でSQLクエリを実行
- Settings: データベースの各種設定
- Deploy requests: スキーマ変更の申請と管理
よく使う操作は、ブランチ作成、SQL実行、接続情報の確認です。複雑なコマンドを覚える必要はありません。
最低限必要なセキュリティ設定
データベースは企業の重要資産です。以下の設定を必ず行いましょう。
必須設定:
- パスワード管理: 自動生成されたパスワードを使用し、環境変数で管理
- 削除保護: Settings → 「Safe migrations」を有効化
- アクセス権限: チームメンバーには必要最小限の権限のみ付与
- 二段階認証: GitHubアカウントで二段階認証を設定
- 定期的な監査: アクセスログを確認し、不審なアクセスをチェック
セキュリティは設定して終わりではなく、定期的な見直しが重要です。
PlanetScale CLIのセットアップと活用
より効率的な作業やCI/CD環境での利用には、CLI(コマンドラインインターフェース)が欠かせません。
CLIのインストール
各OS環境に対応したインストール方法を紹介します。
macOS:
brew install planetscale/tap/pscale
pscale version # バージョン確認
Windows:
scoop bucket add pscale https://github.com/planetscale/scoop-bucket.git
scoop install pscale
Linux(Ubuntu/Debian):
curl -fsSL https://raw.githubusercontent.com/planetscale/cli/main/install.sh | sh
認証とデータベース接続
認証手順:
# ログイン
pscale auth login
# 認証確認
pscale org list
# データベースに接続
pscale shell <データベース名> <ブランチ名>
ブラウザで認証画面が開くので、「Confirm code」をクリックして認証を完了します。
基本的なCLIコマンド
日常的に使用する主要コマンドを紹介します。
データベース管理:
pscale database list # 一覧表示
pscale database create <DB名> --region <リージョン> # 作成
ブランチ管理:
pscale branch list <DB名> # 一覧表示
pscale branch create <DB名> <ブランチ名> # 作成
pscale branch delete <DB名> <ブランチ名> # 削除
デプロイ操作:
pscale deploy-request create <DB名> <ブランチ名> # リクエスト作成
pscale deploy-request list <DB名> # 一覧表示
pscale deploy-request deploy <DB名> <番号> # デプロイ実行
Web UIとCLIの使い分け
それぞれの得意な場面を理解し、効率的に使い分けましょう。
Web UIが向いている場面:
- 初めての操作や視覚的な確認
- スキーマ変更の差分確認
- パフォーマンス監視
- チームメンバーとの画面共有
CLIが向いている場面:
- 日常的なデータベース操作
- スクリプトでの自動化
- 複数ブランチの頻繁な作成
- ローカル開発環境での作業
両方の特性を理解して、状況に応じた「ちょうどいい」使い方を見つけましょう。
ブランチを使った開発フロー
PlanetScaleの最大の特徴であるブランチ機能を活用した、安全な開発フローを学びます。
ブランチベース開発の考え方
PlanetScaleはGitのようなブランチ機能を備えています。この機能により、データベースもコードと同じように管理できます。
基本概念:
- mainブランチ: 本番環境(保護されている)
- 開発ブランチ: 新機能やスキーマ変更を試す環境(自由に変更可能)
推奨される開発フロー:
- mainブランチから開発ブランチを作成
- 開発ブランチでスキーマ変更を実施
- テストとデータ投入で動作確認
- デプロイリクエストを作成
- 差分をレビューして承認
- 本番環境にノンブロッキングでデプロイ
この流れは、アプリケーション開発のGitフローと同じです。
実務での活用例:
- feature/user-profile: 新しいテーブル追加
- fix/column-type: カラムの型修正
- improve/add-index: インデックス追加
ブランチ名は変更内容がわかりやすいものにすると、後から振り返りやすくなります。
テーブル作成とスキーマ設計
実際にテーブルを作成してみましょう。顧客管理システムを例に解説します。
開発ブランチの作成:
pscale branch create my-first-db dev-customer-table
pscale shell my-first-db dev-customer-table
テーブル作成:
CREATE TABLE customers (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL,
phone VARCHAR(20),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY (email)
);
PlanetScaleでのスキーマ設計の注意点:
- 外部キー制約は使えない: Vitessベースのため、アプリケーション側でデータ整合性を保つ
- 主キーは必須: すべてのテーブルに主キーを設定
- インデックスは慎重に: 検索パフォーマンスに直結するため、適切に設計
データ操作とデプロイ
開発ブランチでテストデータを投入し、動作確認を行います。
データ投入:
INSERT INTO customers (name, email, phone)
VALUES ('山田太郎', 'yamada@example.com', '090-1234-5678');
デプロイリクエストの作成:
pscale deploy-request create my-first-db dev-customer-table
Web UIで差分を確認し、問題なければ承認してデプロイします。変更はノンブロッキングで本番環境に反映されるため、サービスを停止する必要はありません。
アプリケーションとの接続
実際のアプリケーションからPlanetScaleに接続する方法を解説します。
接続文字列の取得
Web UIの「Connect」ボタンから接続情報を取得できます。環境変数として設定することを推奨します。
接続文字列の例:
DATABASE_URL="mysql://user:pass@host.psdb.cloud/database?sslaccept=strict"
主要フレームワークとの連携
Next.jsでの接続例:
import mysql from 'mysql2/promise';
const connection = await mysql.createConnection(process.env.DATABASE_URL);
const [rows] = await connection.execute('SELECT * FROM customers');
Prismaを使った接続:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma" // 外部キー制約の代替
}
接続エラーの確認ポイント:
- 接続文字列が正しいか
- SSL設定が有効か
- IPアドレス制限がかかっていないか
- ブランチが正しく指定されているか
運用時のポイントと注意点
PlanetScaleを本番環境で運用する際の重要なポイントを解説します。
モニタリングとパフォーマンス管理
Web UIのOverviewで以下の指標を定期的に確認しましょう。
- クエリ実行時間: 遅いクエリがないか
- ストレージ使用量: 容量の増加傾向
- 接続数: 同時接続数の推移
パフォーマンス低下が見られたら、インデックスの追加やクエリの最適化を検討します。
バックアップとデータ保護
PlanetScaleは自動バックアップ機能を標準装備しています。
- 自動バックアップ: 毎日実行される
- ポイントインタイムリカバリ: 過去の任意の時点に復元可能(プランによる)
- ブランチでの保護: 重要な変更前にブランチを作成
料金最適化のTips
コストを抑えるための運用方法を紹介します。
- 不要なブランチの削除: 使わなくなった開発ブランチは削除
- クエリの最適化: N+1問題の解消、適切なインデックス設計
- ストレージの定期清掃: 不要なデータの削除
- 接続プーリング: アプリケーション側で接続を効率的に管理
代替サービスとの比較
無料プラン廃止後、代替サービスを検討する動きも見られます。
主な代替サービス:
- Neon: PostgreSQL互換、無料枠が充実
- Supabase: バックエンド機能も含む統合サービス
- AWS RDS: 従来型マネージドサービス
重要なのは、無料であることよりもビジネスに適したサービスを選ぶことです。月数千円のコストで運用負担が大幅に軽減されるなら、それは十分に価値のある投資と言えます。
まとめ
本記事では、PlanetScaleの使い方を基礎から実践まで解説しました。
重要なポイント:
- ノンブロッキングスキーマ変更により、サービスを停止せずにデータベースを進化させられる
- Gitのようなブランチ機能で、安全な開発フローを実現
- 専任のデータベース管理者がいなくても運用可能
- 月額$29からのコストは、運用負担軽減の価値と比較して検討
次のステップ:
1. トライアル期間を活用して実際に触ってみる
2. 小規模なプロジェクトで導入を試す
3. チーム内でブランチベースの開発フローを確立
4. 本番運用に向けたセキュリティとモニタリング体制を整備
PlanetScaleは、中小企業が「ちょうどいい」データベース環境を手に入れるための有力な選択肢です。まずは14日間のトライアルで、その使い心地を確かめてみましょう。