PlanetScaleを使ってみた、その記録


ガチ勢（商売でWebをやっているような人たちとか、そこそこのサービス動かしている人たち）向けの記事ではないです。私はWebプログラミングで遊ぶのが趣味のただの人なので、「しょしんしゃ」でない方はご遠慮ください。役に立たないし、「は？何めんどくさいことやってんの？」ってことを多分やっていると思う…。

# どうでもいい経緯

昨晩、とても暇だった。あまりにも暇だったので、Qiitaの「しつもんコーナー」というところ覗き、的外れなコメントを乱発するという迷惑行為を行ったのだが、一つだけ気になる質問があった。それが、今回のタイトルにあるPlanetScaleというサービスに関わるものだった。

全く聞いたこともなく、知りもしなかったのだが、「質問」されているということは、ナウでヤングなサービスに違いないと思い、ちょっと見てみたら本当にナウでヤングなサービスでした。私のように、中途半端にWebを触ったことのあるあなたなら、絶対に好きになるぞ。なんと、サーバーレスDBと呼ばれる類のサービスで、

MySQLデータベース5GBまで無料で使わせてくれる。

そんなサービスの模様。大昔はXAMPPとかlocal(by flywheel)とかでローカル環境構築してたもんだけど、今時誰もそんなことしないんだね。なんか、Web業界って5年くらいで浦島太郎になるよね（いやXAMPPとか言ってたのは、もう十年以上まえだけどさ！）。

ちなみに、PlanetScaleを使いたい人は、サイトに行ってSign Upしたらすぐ使えるようですぞ。拙者はgmailで登録しました。

https://planetscale.com/

後は画面の指示に従って、DB名を入力すれば新しいデータベースができるぞ。

# コマンドラインツール

ちなみに、このPlanet Scaleにはコマンドラインツールが用意されている。その名もpscale（ここでエコーがかかる）。

https://planetscale.com/features/cli

Linuxを使っているおりこうさんや、Macを使っているおハイソなお兄さんやお姉さんは、すぐにインストールできるっぽいぞ。いつものあれ（brewとかrpmね）でインストールしませう。

そして、私と同じゲーム厨の君、私たちはWindowsというクソOSを使うという茨の道を選んだのである。よって、binとかscoopというパッケージ管理システムを使うのが良いらしい。私はbinを使った。あのさ、nugetとかってあったよね？あれって、こういうのには対応しないのかなぁ。.NETライブラリとかだけなの？だいぶ前にchocolateyってのもなかったっけか？もう、いい加減にパッケージ管理システムくらいry)　——この先はQiitaのガイドラインに抵触する恐れがあるためカット。

# 初期データのインポート

というわけで、ちょっと使ってみたのだけど、データのインポートの仕方ね。分からん。なんか、画面があるらしいんだけど、そもそも、PlanetScaleを知るきっかけになった質問が、ローカルDB「からの～」インポートに失敗するという話だった。そしてplanetscale.comのインポートの画面を見たら、なんかPlanetScale側から見えてるDBじゃないとダメっぽい雰囲気を醸し出している（未確認だけどそんな雰囲気、情報求む）…ただ、どっちにしろlocalhostにMySQL入れるほどのもの好きでもないので（昔local使ってたって言ってたじゃんって？いや、うん、昔はね！）、ローカルのCSVファイルからインポートを試みるという設定にする。ちょっとPlanetScaleを使って、今時感を出したいだけなので、それでいいや。

# 念のためセキュリティとか

今回私はpythonを使ってMySQLdbで接続することにした。たぶん、SSLかかっていると思うけど、確認したわけでもなんでもない。それに、「○○使ってみた」といういい加減なタイトルの記事だし、第一流すデータがどうでもいいものだし、確認する理由もないのでしていない。が、大事なデータを流す場合、こういうことはちゃんと確認した方が良いので一応、多分、みんなそんなことくらい知っていると思うけど念のため、まかり間違って平文で流してないかとか、確認くらいはしようね（今時大丈夫だと思うけどさ。ライブラリとかも、どうせ下回りでOpenSSLとか使ってるしさ）。特に人のデータな。ま、多分大丈夫だと思うけど、多分でいいのはおうちで遊んでいるときだけね。

# データベースにアクセスする

さて、みんなpscaleは入ってるね。ちゃんとPATHは通したかな？では、おもむろに下記のコマンドを実行してみよう。

```
C:\xxx> pscale auth login

Confirmation Code: XXXXXX

If something goes wrong, copy and paste this URL into your browser: https://auth.planetscale.com/oauth/device?user_code=XXXXXX

Successfully logged in.
```

するとなんということでしょう！勝手にコマンドがブラウザを開いて認証を通してくれる。なんか「APIきー」的なものが必要なのかと思いきや、そんなものいらんとばかりにブラウザ認証だよ。すげー。ナウでヤングなサービスなんだから、こうでなくっちゃね。ブラウザに、変な七桁くらいのコードが表示されるので、とりあえず承認ってやると、端末が認識されるっぽい。すごーい。クール。

というわけで、これで認証できたのであとはやり放題である。PlanetScale側の管理画面から、ユーザー名やパスワードが見えるので、ちゃんと確認しよう。PlanetScaleにログインして、コンソールから「Connect」って押すと、あんな情報や、こんな情報が見れるぞ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377651/438bd6bb-5505-6861-ea43-d0c2452c410d.png)

というわけで、直接接続する場合、ここの情報を使って刺さって行けば、データベースにアクセスできるっぽい（わざわざ、サンプルコードまで表示してくれている。親切。感謝）。

ちなみに、mysqlコマンド（クライアント側で使うあれ）がインストールされている人は、下記のコマンドから直でmysqlの操作ができるよ！ちなみに、このmainとかなんとかってのは、ブランチと呼ばれるものの名前（コンソールから追加したり削除したりできる…と思われ）。あの、バージョン管理のブランチと同じで、複数のバージョンのDBを並行的に管理したりできる模様。

もし、mysqlコマンドがなくても、LinuxやMacの人は大丈夫。いつものやつ（rpmとかbrewね！）で入れればいいから！そして、そこのゲーム厨君、君は私と同じだ。セットアップウィザードが待っているぞ。

ほんとは、データベースをタダで使わせてくれるサービスじゃなくて、こういうところがメインのサービスなんだろうね。システムを止めずに、DBをすぽんと入れ替え出来ますぜ。みたいな。ようするに5GBの無料枠は、お試し用という感じなのでしょうか。こういう、儲かってそうなところからお金を取り、我々貧民にはただでリソースを分けてくれるというサービスっていいよね。これぞ、富の再配分。

```
C:/> pscale shell [DB名] main
xxx/main> create table test( id integer, name varchar(50), primary key(id)  );
```

おもむろにテーブルを作ってみる。実はサイトがわ（PlanetScaleのコンソール）にも「Console」ってメニューがあって、mysqlコマンドを実行できるようになっている。Windowsのシェルからmysqlでしこしこやるくらいなら、こっちの方がよっぽど便利。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377651/99223bab-4439-11f9-e019-93ab94f7f73f.png)

テーブルができた模様。

# ローカルホストにバインド

なお、pscaleのconnectコマンドを利用すると、PlanetScaleのデータベースをローカルにバインドできる。

```
C:\xxx> pscale connect [DB名] main
Secure connection to database XXX and branch main is established!.

Local address to connect your application: 127.0.0.1:XXXX (press ctrl-c to quit)
```

こんな感じでメッセージが表示され、127.0.0.1:[ポート番号]から、あたかもPlanetScaleのDBがローカルにあるかのようにアクセスできるようになる。どうやらpsacleがローカルポートで待ち受けて、通信を中継してくれるらしい。まー、直接アクセスしてもいいのかもしれないけど、開発中とか、設定をlocalhostにしたりするから地味に便利。毎回、やたら小難しいホスト名にアクセスするのではなく、pscaleでlocalhost:ポート番号にバインドして、あとはmysqlなり、なんだかよく知らないけど、あなたのお気に入りのツールなりでデータベースを操作すれば、良い感じですね。

特に、開発してるときとか、楽そう。とりあえず、ローカルでMySQLを動かしておき、設定はlocalhostにする。ある程度、アプリが出来てきたら、ローカルサーバーを止めて、pscale connect経由でPlanetScaleのDBに接続…で、なんかおかしくなったらローカルに戻してデバッグ、のような作業を想定すると地味に便利。

# データを入れる

私のお気に入りのツール、それはpython（ここでエコー）。

というわけで、IDLEX（いや、まじで、これがお気に入り。そこのPythonistaのあなたも、まさかエディタがIDLEXだとは思わなかったでしょう？）をおもむろに起動しよう。ユーザー名とか、パスワードは認証時に一時的に発行されるものなのかも。パスワードは「pscale_pw_」で始まり、後はハッシュみたいなのがずらーっとと言う感じ。dbはPlanetScaleに登録したときのデータベース名ね。

```python
>>> import MySQLdb
>>> connect = MySQLdb.connect(host='localhost', port=XXXX, user='XXXX', password='XXXXX', db='[データベース名]')
>>> cursor=connect.cursor()
>>> cursor.execute("INSERT INTO test (id, name) VALUES (0, 'Yay!')")
1
>>> cursor.execute("INSERT INTO test (id, name) VALUES (1, 'Boo!')")
1
>>> cursor.close()
>>> connect.commit()
>>> connect.close()
```

おー、ここまで来たらあとはやり放題ですな。ハハハ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377651/019aea9f-846b-8361-8522-c65a3628792b.png)

ちゃんとデータも入ったようでなによりです。あとは、CSVなりなんなりで、まー、SQLダンプとかの人は「なんとかアドミン」とかのツール使ったりして、データを入れればいいと思うぜ。

# 感想

こういうサービスって、「とっても簡単です♡」みたいな雰囲気を醸し出しておきながら、使ってみるとクソ面倒だったりすることがよくある。私もちょろっとWebの仕事に関わったくらいだし、あんまりこういうののお勉強には時間使いたくないなーと思ったりするので（いや、やってみたいとは思ってるよ！Web！興味あり！あれ、今時の、なんだっけ、ReactとかVue.jsとかね！React知ってる！知ってるよ！インストールしたもん）、めんどいのは嫌である。仕事でやっている人はなおさらそうだろう。

ところが、である！このPlanetScaleってやつは、タダもんじゃないよ。普通、記事書くのにかかる時間と記事の準備にかかる時間って、大体半々くらいになるのね、毎回。今回に関しては、作業にかかった時間30分もないからね。MySQLクライアントの「いんすとーる」から始めたのにさ。それもこれも、PlanetScaleが導入しやすいおかげだ。ちょっと興味を持ってからトータル2～3時間無駄にしたけど、2時間はこのうんこ記事の推敲に費やされた時間。マジで。もう誰も読まない記事なんて書くのやめようかなぁ…ただね、あたしにゃね、物書きの衝動があるんよね。

というわけで、まとめ。

* 私のように遊び半分の人は、5GBの無料MySQLサーバーとして遊べる。
* 「ブランチ」みたいな機能があるのが便利そう。ダウンタイムなしでスキーマ変更みたいな、そういうの。

というわけで、真面目に何かやろうとしている人も、遊びの人もPlanetScaleを使ってみたらいいと思うぜ。よけいな「きのう」とか「いんたーふぇいす」がなくて、コマンド一発で何でもできるところが、とてもいい感じでした。