ガチ勢(商売でWebをやっているような人たちとか、そこそこのサービス動かしている人たち)向けの記事ではないです。私はWebプログラミングで遊ぶのが趣味のただの人なので、「しょしんしゃ」でない方はご遠慮ください。役に立たないし、「は?何めんどくさいことやってんの?」ってことを多分やっていると思う…。
どうでもいい経緯
昨晩、とても暇だった。あまりにも暇だったので、Qiitaの「しつもんコーナー」というところ覗き、的外れなコメントを乱発するという迷惑行為を行ったのだが、一つだけ気になる質問があった。それが、今回のタイトルにあるPlanetScaleというサービスに関わるものだった。
全く聞いたこともなく、知りもしなかったのだが、「質問」されているということは、ナウでヤングなサービスに違いないと思い、ちょっと見てみたら本当にナウでヤングなサービスでした。私のように、中途半端にWebを触ったことのあるあなたなら、絶対に好きになるぞ。なんと、サーバーレスDBと呼ばれる類のサービスで、
MySQLデータベース5GBまで無料で使わせてくれる。
そんなサービスの模様。大昔はXAMPPとかlocal(by flywheel)とかでローカル環境構築してたもんだけど、今時誰もそんなことしないんだね。なんか、Web業界って5年くらいで浦島太郎になるよね(いやXAMPPとか言ってたのは、もう十年以上まえだけどさ!)。
ちなみに、PlanetScaleを使いたい人は、サイトに行ってSign Upしたらすぐ使えるようですぞ。拙者はgmailで登録しました。
後は画面の指示に従って、DB名を入力すれば新しいデータベースができるぞ。
コマンドラインツール
ちなみに、このPlanet Scaleにはコマンドラインツールが用意されている。その名もpscale(ここでエコーがかかる)。
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」って押すと、あんな情報や、こんな情報が見れるぞ。
というわけで、直接接続する場合、ここの情報を使って刺さって行けば、データベースにアクセスできるっぽい(わざわざ、サンプルコードまで表示してくれている。親切。感謝)。
ちなみに、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でしこしこやるくらいなら、こっちの方がよっぽど便利。
テーブルができた模様。
ローカルホストにバインド
なお、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に登録したときのデータベース名ね。
>>> 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()
おー、ここまで来たらあとはやり放題ですな。ハハハ。
ちゃんとデータも入ったようでなによりです。あとは、CSVなりなんなりで、まー、SQLダンプとかの人は「なんとかアドミン」とかのツール使ったりして、データを入れればいいと思うぜ。
感想
こういうサービスって、「とっても簡単です♡」みたいな雰囲気を醸し出しておきながら、使ってみるとクソ面倒だったりすることがよくある。私もちょろっとWebの仕事に関わったくらいだし、あんまりこういうののお勉強には時間使いたくないなーと思ったりするので(いや、やってみたいとは思ってるよ!Web!興味あり!あれ、今時の、なんだっけ、ReactとかVue.jsとかね!React知ってる!知ってるよ!インストールしたもん)、めんどいのは嫌である。仕事でやっている人はなおさらそうだろう。
ところが、である!このPlanetScaleってやつは、タダもんじゃないよ。普通、記事書くのにかかる時間と記事の準備にかかる時間って、大体半々くらいになるのね、毎回。今回に関しては、作業にかかった時間30分もないからね。MySQLクライアントの「いんすとーる」から始めたのにさ。それもこれも、PlanetScaleが導入しやすいおかげだ。ちょっと興味を持ってからトータル2~3時間無駄にしたけど、2時間はこのうんこ記事の推敲に費やされた時間。マジで。もう誰も読まない記事なんて書くのやめようかなぁ…ただね、あたしにゃね、物書きの衝動があるんよね。
というわけで、まとめ。
- 私のように遊び半分の人は、5GBの無料MySQLサーバーとして遊べる。
- 「ブランチ」みたいな機能があるのが便利そう。ダウンタイムなしでスキーマ変更みたいな、そういうの。
というわけで、真面目に何かやろうとしている人も、遊びの人もPlanetScaleを使ってみたらいいと思うぜ。よけいな「きのう」とか「いんたーふぇいす」がなくて、コマンド一発で何でもできるところが、とてもいい感じでした。