🦔

次世代SQLクライアントArctypeを触ってみる

2022/05/31に公開約6,600字

どうも、株式会社プラハCEOの松原です

先日社内のエンジニアに「このSQLクライアントがイケてそう!」と教わったので早速Arctypeを触ってみました

TL;DR

  • クエリの補完が最高
  • チャートやダッシュボードを通して簡単に可視化できる
  • 操作性に優れていて、見た目が綺麗
  • クエリやダッシュボードごとに権限管理できる
  • プレースホルダーを使えば非開発者ともクエリを共有しやすい

説明しよう、Arctypeとは

https://arctype.com/

なんかイケてるSQLクライアントです

セットアップ

それぐらいしか分からないので、ひとまずDBを立ち上げて実際に使ってみようと思います。こちらのmysql-employeesを使わせていただきましょう

docker run -d \
  --name mysql-employees \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=college \
  -v $PWD/data:/var/lib/mysql \
  genschsa/mysql-employees

大体MySQLだとMySQLWorkbench、PostgreSQLだとPGAdminをこれまで使ってきたのですが、果たしてこれらと比較してどうでしょうか(というかSQLクライアントってめちゃくちゃあるんだな...)

アカウントは作らなくても使えるみたいですが、クエリやダッシュボード(後述のチャートなどをまとめた画面)を共有したり、ワークスペースに他者を招待するためにはアカウントが必要らしいので、一応作っておきます

ワークスペースを作成しましょう。praha-saiyouchuu、っと...

外部キーがないことで最近少しだけ話題に挙げたPlanetScaleにも対応しているようです

チャットサポート

ビックリしたのが、DBの接続に何度か失敗してたら画面左下にチャットサポートの吹き出しが出てきたこと。こんなのSQLクライアントでは見たことない...!

特に聞きたいことはないので「君らのプロダクト最高だね!」とだけ送っておきました

ちなみに接続に失敗していたのは以下の理由から:

140301488557816:error:100000f0:SSL routines:OPENSSL_internal:UNSUPPORTED_PROTOCOL:../../third_party/boringssl/src/ssl/handshake_client.cc:697:

Arctypeはデフォルトでssl-mode=preferred暗号化された接続方式)で接続しようとするのですが、MySQLサーバ側(mysql-employeesの方)が対応していないのでエラーが出てしまいます。(他のSQLクライアントって暗号化接続ができなかったらssl-mode=disabledで再トライしてた気がするんですが、気のせいですかね...?)

今回のサンプルデータベースではローカルでしか動かさないのでssl-mode=disabledに変更してしまいましょう。

テーブル一覧画面

すごく丁寧なことに、テーブル一覧画面の画面上部にはチュートリアルの進捗まで表示されています。「Filter a table for data」をクリックしてみるとこちらのチュートリアル画面に飛ばされます。

毎度思うのですが流行るツールには性能や機能でぶん殴るタイプの他にとにかくドキュメントやチュートリアルやサンプルコードが豊富で、使う側の学習コストが低いタイプのツールが意外と多くて、Arctypeはその典型かもしれません。

テーブル詳細画面

テーブルを表示してみると勝手に全件データが表示されていて嬉しい

sort,filter

試しにソートをかけてみましょう。この辺のUIはairtableに似ている気がします

複数のsort選択やfilter追加も非常に簡単です。「Adamという文字列を名前に含む人を若い順に並べる」みたいな条件を組み立てる際もSQLの知識は求められず、Excel感覚で使えそうです。

サービスを運用しているとCS(カスタマーサポート部門)から「こういうユーザーがいるのでちょっと調べてもらえませんか?」と頼まれる突発タスクが結構多くて開発時間が減ってしまう問題によく悩まされます。

問い合わせが増えてきたタイミングで管理者用画面を作ったり、BigQueryに本番データを流して安全にSELECT系のクエリだけ実行できる環境を整えることが多いのですが、前者に関しては開発工数が、後者に関してはCS側にクエリ学習コストがかかるので、その辺を考えるとfilterやsortが簡単に提供できるUIは非常に有難いですね。

query

とはいえ正規化されているほど単体のテーブルに対するfilter/sortで調査が完結することはないので、試しにクエリも書いてみましょう。「new query」を選択してみたところ...

なんと、すでにUI上で選択されていたfilter/sortが適用された状態のクエリが生成されていました!「これをサンプルとして使ってね」というオモテナシを感じます。丁寧な仕事だなぁ〜!

補完がめちゃくちゃイケてる

いざクエリを書き始めたら補完が効くわ効くわ。これだけでもArctypeに乗り換える理由になりそうなぐらいクエリが快適に書けます。「あのカラムの名前なんだったっけ...」とか調べる必要もないし、大文字小文字の違いでカラム名が一致しなかったりするフラストレーションからも解消されそうです。

流石にASで付けたエイリアスには反応しませんでしたが、補完があるだけでもうArctypeには足を向けて眠れないので文句は言いません。

プレースホルダーも便利

開発者がCS調査用に複雑なクエリを用意しておいて「WHERE ? って書いてあるところの?だけ更新してくださいね!」と一部可変領域だけCS側の用途に応じて調整してもらうことがありますが、「ダブルクオーテーションの部分も削除しちゃってクエリが壊れちゃった!」みたいなミスが多々発生します。エンジニアであればクエリのどの部分を変更してはいけないか判断できるのですが、流石にそれを全員に強いる運用は現実的ではありません。

一方Arctypeのクエリはプレースホルダーが設定できるので、以下のように可変部分だけプレースホルダーとして定義しておけばクエリが破壊される心配はありません。便利!

チャートでqueryの結果を可視化してみる

Arctypeはクエリの結果をチャートとして可視化できるのがウリのようなので、ちょっと試してみましょう。

この会社は成果主義を謳いながら実態は年功序列なのではないかと最近社内で話題になっていたので、社員の年収と入社年月のデータを取得してみましょう。employeesは30万人いるので、とりあえず入社の年に絞ってみてみましょう。

これだけでは分かりづらいので「Chart」を使って可視化してみましょう。

取得したカラムが紫色のカードとして画面右側に表示されているので、これを右下の「x-axis」「y-axis」にドラッグ・ドロップすればチャートが表示されるようです。試してみましょう...

すんげー年功序列の会社でした

マウスオーバーすれば定点データもホバーで表示してくれるので非常に調べやすいですね。

こんな感じでクエリの結果が即座にチャートの状態で可視化されるのは面白いですね!画面右上の「copy link」をクリックすればクエリが共有可能なリンクとして生成されるので同期にチクるのも簡単です。

Dashboard

せっかくなのでsalary関連のチャートをいくつかまとめてダッシュボードを作成してみましょう。

年功序列の事実を目に焼き付けつつ、最も社内で給料が高い5名をモニタリングすることでプロレタリアート精神を常に忘れないダッシュボードが誕生しました

チャートは更新頻度も設定できるので最新状態のモニタリングツールとしても役立ちそうです。

ダッシュボードにはChart以外にもDate Pickerが追加できるようです。変更時に何らかの処理をトリガーできるため、選択された日付に応じてダッシュボードに表示されているチャートの日付範囲を全て変更する機能も作れそうです。

ホバー時の注釈もカスタマイズできるので意図を伝えやすい

ダッシュボード単位で共有可能です。

おまけ

slackのようにcmd+kであらゆるコマンドを検索+実行できるため、キーボードから手を離さなくて済むのも嬉しい。

デメリット

操作性が良すぎて思わず自分がDBに直接接続してクエリを実行していることを忘れてしまいそう。GCPで言うところのData Studio的な用途でも使えそうなのですが、今の所ArctypeはBigQuery等には対応していないので直接DBに接続してクエリを実行している点に注意が必要です。安易に分析系クエリを実行しまくると本番環境が重くなってしまうので...

まとめ

見た目の美しさ、補完の利き方、操作性、チャートやダッシュボードで簡単に可視化できる点など、SQLクライアントとしてはトップクラスのUI/UXで、使ってて最高に楽しい。公式HPのキャッチフレーズ「The SQL client and database management tool that's fun to use」に偽りなし!

良かったら使ってみてください

Discussion

ログインするとコメントできます