toggle Engineer Blog

トグルホールディングス株式会社のエンジニアブログでは、私たちの技術的な挑戦やプロジェクトの裏側、チームの取り組みをシェアします。

PlanetScaleの紹介と実際の活用例

記事をお読みいただきありがとうございます。CTOの久森です。

ここ10年のクラウドサービスの浸透により、自分でデータベースソフトウェアをインストールして使う・運用するということはなくなってきました。 しかし、それに伴ってどのサービスを使うかということに焦点が移ってきました。

データベースの選択は、現代のウェブ開発において重要な決定の一つです。 その中で、PlanetScaleは開発者に大いにメリットを与えるデータベースサービスです。
本記事では、PlanetScaleの特徴や利点について紹介し、弊社でどのように活用しているかに触れます。

PlanetScaleとは?

PlanetScaleは、MySQLをベースにしたスケーラブルなデータベースを提供するサービスです。
元々はYouTubeの開発チームが始めたVitessというオープンソースプロジェクトを基盤にしており、大規模なデータの取り扱いやスケーリングに強みを持っています。

開発者にとっての大きな魅力

1.Gitのようなブランチ機能

PlanetScaleの最もユニークな機能の一つは、データベースをGitのようにブランチで管理できることです。
開発者は新しい機能や変更を行う際に、データベースのブランチを作成し、安心して変更を加え、その後にマージすることができます。
このブランチベースのワークフローにより、本番環境への安全なデプロイが可能になり、誤操作によるトラブルを大幅に減らすことができます。

2.スキーマの変更がノーダウンタイム

通常、データベースのスキーマ変更はダウンタイムを伴いがちですが、PlanetScaleではノーダウンタイムでのスキーマ変更が可能です。
これにより、ユーザーに影響を与えることなく、リアルタイムでデータベースの構造を改善したり、修正したりできます。これも、開発者がストレスフリーにスケーラビリティを確保できる大きなポイントです。

これらの機能によって、これまでマイグレーションが面倒とか、リリースに一定の儀式を必要としたデータベースが関連する開発についても、ソフトウェア開発のメンタルモデルが適用できるようになったことが大きいです。データベースの管理がコードの変更と同じように柔軟かつ安全に行えるため、開発のスピードと品質が向上し、チーム全体でのコラボレーションがより効率的に行えるようになりました。

PlanetScaleの使い方と開発体験

PlanetScaleは開発者体験を重視しており、CLIを通じて簡単にデータベースの管理が可能です。また、直感的なWeb UIも提供されているため、データベースのブランチ操作やスキーマの変更が視覚的に行えます。GitHubのようなプルリクエストの概念をデータベース管理に取り入れているため、チームでのコラボレーションもスムーズです。

例えば、ブランチでデータベースのスキーマ変更を行い、その変更内容をレビューしてから本番環境にマージするといった、コードのデプロイと似た形で進めることができます。これにより、開発者はデータベースに対してより安全かつ効率的に変更を加えることができます。

PlanetScale CLIの使い方

PlanetScaleはCLIコマンドラインインターフェース)を提供しており、これを利用することでデータベースの作成や管理を簡単に行うことができます。以下に、いくつかの基本的な使い方を紹介します。

1.PlanetScale CLIのインストール
弊社ではdevcontainerを活用しているので、Dockerfileの中で以下のように記述して開発環境にインストールしています。

   # planetscale-cli
   ARG PSCALE_VERSION={VERSION_NAME}
   RUN ARCH=$(dpkg --print-architecture) && \
       if [ "$ARCH" = "arm64" ]; then \
           PSCALE_DEB_FILE=pscale_${PSCALE_VERSION}_linux_arm64.deb; \
       else \
           PSCALE_DEB_FILE=pscale_${PSCALE_VERSION}_linux_amd64.deb; \
       fi && \
       curl -L "https://github.com/planetscale/cli/releases/download/v${PSCALE_VERSION}/${PSCALE_DEB_FILE}" -o ${PSCALE_DEB_FILE} && \
       sudo dpkg -i ${PSCALE_DEB_FILE} && \
       rm ${PSCALE_DEB_FILE}

2.ログイン
まず、PlanetScaleにログインする必要があります。以下のコマンドを使用して、ブラウザを通じて認証を行います。

   pscale auth login

3.データベースの作成
新しいデータベースを作成するには、次のコマンドを使用します。

   pscale database create <データベース名>

これにより、クラウド上に新しいPlanetScaleデータベースが作成されます。

4.ブランチの作成と管理
Gitのようにデータベースのブランチを作成して作業することができます。

   pscale branch create <データベース名> <ブランチ名>

ブランチを使うことで、データベースに変更を加える際のリスクを減らし、安全に開発を進めることが可能です。

5.データベースの接続
PlanetScaleのデータベースに接続するには、以下のコマンドを使用して接続用のトンネルを作成します。

   pscale connect <データベース名> <ブランチ名>

これにより、ローカル環境からPlanetScaleのデータベースに接続することができます。

6.スキーマ変更のマージ
ブランチで行った変更を本番環境に反映するためには、次のコマンドを使ってマージを行います。

   pscale deploy-request create <データベース名> <ブランチ名>

これにより、デプロイリクエストが作成され、他のチームメンバーと協力して変更内容をレビューし、本番環境にマージすることができます。

PlanetScale CLIは、このように簡単に使えるコマンドを提供しており、データベースの管理をより効率的に行うことができます。 詳細な使い方についてはPlanetScaleの公式ドキュメントを参照してください。

toggle holdingsでの活用例

PlanetScaleはtoggle holdingsでの開発ワークフローに組み込まれています。 特に、Makefileからスクリプトを呼び出すことで、Gitブランチの作成に合わせてデータベースのブランチも作成する仕組みが構築されています。 これにより、各開発ブランチが対応するデータベースブランチを持つことで、並行して複数の機能を安全に開発することが可能です。

典型的には、以下のようなコマンドで、Gitブランチに対応するPlanetScaleのデータベースブランチを自動的に作成できるようにしています。

git checkout -b {branch-name}
make create-db-branch
make start-db-branch

これらのコマンドだけで、Gitのブランチ名に基づいて新しいデータベースブランチを作成し、各開発ブランチごとに独立したデータベース環境を作ります。 これだけで、データベーススキーマの変更をリスクなく試行できますし、その変更をPull-Requestのように扱うことができるようになります。

データベースブランチの作成後は、mysql -uroot -h127.0.0.1 を叩くだけでそのブランチに接続することができます。 開発者から見ると、ローカルにMySQLがあるようにしか見えないのも開発者体験的に良い点だと思います。

まとめ

PlanetScaleは、開発者にとって利便性の高いデータベース管理プラットフォームです。 Gitに似たブランチ機能やノーダウンタイムでのスキーマ変更といった機能を通じて、データベースの管理がより柔軟で安全なものになっています。
もし、あなたのプロジェクトがデータベースのマイグレーションや開発者体験向上に課題を抱えているならば、PlanetScaleは強力な選択肢になるでしょう。

toggle holdingsではこうした開発者体験を向上させる技術を積極的に取り入れてプロダクト開発を行っています。
エンジニア向けにHandbookを公開していますので、是非そちらもご覧ください。

engineer.toggle.co.jp

最後までお読みいただきありがとうございました。 次回は弊社エンジニア中村による記事です!