刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Beekeeper StudioはSQLクライアントとして適度に便利

オープンソースSQL クライアントソフトの一つに Beekeeper Studio があります。

Electron ベースの GUI ツールで、GPLv3 ライセンスの Community Edition と商用ライセンスの Ultimate Edition が提供されています。

公式サイトで紹介されているように、モダンで簡単に使えて見目が良く、MySQL, PostgreSQL, SQLite, SQLServer 等に対応している SQL クライアントです。

f:id:infinity_volts:20220322081001p:plain

クロス・プラットホームであり、SQL エディタは自動補完で構文強調付き、タブで処理を切り替えられるし、テーブルのソートやフィルタも利用可能、等々。
確かに今時の GUI ツールと言える特長になってます。

個人的には ODBC ドライバや JDBC ドライバ等を必要としない点がお気に入りです。
サポート対象の DBMS は限定されますが、今の私の用途では十分です。

....

macOS にインストールする場合、公式サイトでは Edition の比較表にある Download ボタン(Community Edition の方は強調されてないけど...) をクリックし、DMG ファイルをダウンロードする方法が紹介されています。

私は Community Edition を Homebrew 経由でインストールしました。

$ brew install --cask beekeeper-studio

※現在のバージョンは 3.2.1 です。

....

先日、このような記事を書きました。

ここでは SQLite のデータファイル yubin10.db から sqlite3 を利用して住所データの CSV ファイルを出力しました。

この記事で用いたクエリを Beekeeper Studio で実行してみます。

・住所データを抽出するクエリ

SELECT
    a.post_app_no AS '番号',
    a.post_app_name_sei AS '氏名(姓)',
    a.post_app_name_mei AS '氏名(名)',
    a.post_app_namekana_sei AS 'フリガナ(姓)',
    a.post_app_namekana_mei AS 'フリガナ(名)',
    a.post_app_disp AS 'リスト表示用氏名',
    a.post_app_disp_kana AS 'リスト表示用フリガナ',
    (CASE WHEN a.post_app_keisho = 1 THEN '様' ELSE '' END) AS '敬称',
    a.post_app_zip AS '郵便番号(自宅欄)',
    a.post_app_address1 AS '自宅住所(都道府県)',
    a.post_app_address2 AS '自宅住所(市区町村)',
    a.post_app_address3 AS '自宅住所(番地等)',
    a.post_app_address4 AS '自宅住所(建物名)',
    a.post_app_disp_address AS 'リスト表示用自宅住所',
    IFNULL(r.post_app_name_mei, '') AS '連名1(名:自宅欄)',
    (CASE WHEN r.post_app_renkeisho = 1 THEN '様' ELSE '' END) AS '連名1(敬称:自宅欄)',
    c.post_app_category_name AS 'カテゴリ'
FROM post_app_adressbook AS a
    LEFT OUTER JOIN post_app_address_category_tbl AS b
    	ON b.post_app_address_no = a.post_app_no
    INNER JOIN post_app_address_category_mst AS c
        ON c.post_app_category_no = b.post_app_category_no
    LEFT OUTER JOIN post_app_renmei AS r
        ON r.post_app_no = a.post_app_no
ORDER BY
    a.post_app_no;

Beekeeper Studio を起動して、

  1. New Connection ウィンドウの Connection Type で SQLite を選択。
  2. Choose File ボタンをクリックしてファイル選択から yubin10.db を開く。
  3. Connect ボタンをクリックして接続。

ここで、前述のクエリを貼り付けて、テキスト選択を解除した状態がこちらです。

f:id:infinity_volts:20220322081510p:plain

ここで Run ボタンをクリックすると、クエリの実行結果が表示されます。

抽出した結果を確認するだけであれば、操作は以上です。
ソートやフィルタを試すのもアリです。

続いて、この結果をエクスポートしたい場合、右下の Download をクリックします。
出力形式は CSV, Excel, JSONクリップボードへのコピーが選択できます。

....

実は今回の作業を行うまで、この Download 機能に気づいてませんでした。

もう 2 年近く Beekeeper Studio のお世話になっているのに、この体たらく。
早速、お試しに CSVExcel を選択してみました。

まずは CSV ファイルですが、残念ながら私の期待する形式ではありません。
どこかにダブルクオートを付加するオプションでもあれば嬉しいのですが。

しかし、Excel形式 のファイル (.xlsx) では特に問題ありません。
Excel 2019 for Mac で普通に開く事ができました。

元々は住所データを CSV ファイルにした後、別途 Excel に取り込んで保存するつもりでした。しかし、UTF-8 のままだと Excel 2019 for Mac でも文字化けするので面倒です。
直接 xlsx ファイルを生成してくれるおかげで、色々と手間が省けて良かったです。

 

あとがき

私は RDBMS を管理・操作する際、基本的には各 RDBMS が提供しているコマンドラインツールを優先的に利用しています。
スクリプトを用意すれば、何度も同じ操作を処理できるし、記録も残せるからです。

それでも、お手軽に GUI ツールを利用したい場面もそれなりにある訳で。

ただ、あくまで個人的な都合ですが、macOS では JRE / JDK 環境や JDBC ドライバが必須なツールは利用したくありません。
その点、単体で動作する Beekeeper Studio は作業に最適なのです。

今までの用途は主にクエリの動作確認でしたが、これで Excel 出力ツールとしても活用できそうです。

一方、Linux では OpenJDK 環境を構築済みなので、DBeaver も併用してます。
DBeaver も良いけど、Beekeeper Studio もお手軽で便利ですよ。

....

もう随分前になりますが、Windows 環境での苦労話です。
Java アプリ / JDBC ドライバで問題なくて、何故か某言語 / ODBC ドライバで不具合が発生する件に関わった事がありました。

当時、調査用に提供されてたツール類は Java で作成されたものばかり。
それらのツールではどうやっても再現せず、ほとほと困りました。
最終的にはその言語で調査用コードを書いて、なんとか原因を突き詰めたのですが...

詳細は控えますが、あまりの結末に虚しくなったのを覚えてます。
その出来事以来、対象となる接続方法に合わせてツールを選択するようになりました。

私が仕事で Java に触れる機会は永久にないので、基本的に Java アプリは利用しない。

自分縛りが厳しい気もしますが、可能な限り実戦して今に至ります。
まぁ Java アプリは種類が豊富なので、稀に禁を破るのはやむ無しという事で。