はじめに
前回は、MySQLに位置情報データ(POINTデータ)を登録し、内容を確認する方法を説明しました。ST_AsText()関数を使って「黒い画面」で緯度経度の数字を見る方法は、これはこれで良いものですが、やはり地理情報は地図上で確認して初めてデータの実感が湧くというものです。
そこで今回は、地理情報データの閲覧に便利なツールとして「DBeaver」を紹介します。
DBeaverとは
DBeaverはオープンソースのデータベース操作ツールです。MySQLをはじめとして数多くのRDBMSに接続して操作できます。SQLを実行したりテーブル定義に関する操作をしたりなど、一般的なデータベース操作を行うためのツールですが、私は「地理情報データを地図上に表示してくれる便利ツール」として愛用しています。この記事を書いている時点での最新バージョンは「25.2.2」です。
DBeaverのインストール
DBeaverはWindows、MacOS X、Linuxで動作します。Windowsはインストーラまたはzipで、MacOSはdmgで、Linuxはdeb/rpmパッケージやtar.gzにて配布されています。インストールに難しいところはないので、DBeaverのサイトを参考にインストールしてみてください。
MySQLへの接続
それでは、DBeaverでMySQLサーバに接続してみましょう。
- インストールしたDBeaverを起動して、左側にある「データベースナビゲータ」内での右クリックが便利です。「作成」-「接続」と進みます。
- DBeaverは多くのデータベースへの接続に対応しています。データベースを選択する画面を見ると「DuckDB」や「TiDB」といった比較的新しいデータベースに対応していることからも、開発の活発さが伺えますね。ここでは“MySQL”を選択します。
- MySQLの接続設定画面では接続情報を入力します。Server Host名、Database名、接続のためのユーザ名とパスワードあたりが主な入力項目です(MySQLサーバのポート番号を3306番以外に変更している場合はPortも)。左下にある「テスト接続」ボタンを押して正しく接続できることを確認しておくと良いでしょう。
以上で接続設定は完了です。画面左側の「データベースナビゲータ」に作成した接続設定が表示されます(私はlocalhostの代わりにLAN内にある他のサーバ上のMySQLに接続しているためIPアドレスで表示されています)。
SQLの実行
DBeaverには様々な機能がありますが、今回はとにかく「データ内容を地図上で見ることができる」という点に注目して説明を進めます。まず、SQLを実行して、その結果を確認する手順を確認しましょう。
「データベースナビゲータ」内のデータベース名(ここでは“thinkit”)を右クリックして「SQLエディタ」-「SQLコンソールを開く」を選択すると、右側にSQLを入力するための真っ白な画面が表示されます。ここにSQL文を入力して実行することができます。ここでは前回作成した「g1」テーブルの全件を確認してみることにしましょう。
SELECT * FROM g1;
入力したSQL文は、すぐ左にある三角形のボタンを押すことでも実行できますが、私は普段、SQL文を入力した場所で[Ctrl]キー+[Enter]キーを押して実行することが多いです。慣れるとキーボードから手を離さずにSQL文を実行できるので便利です。実行結果は画面下部に表示されます。
地理情報データの確認
実行結果には、SELECT文の結果である2件のid列、name列、g列の値が表示されています。g列に前回登録したPOINTの情報が含まれていることが分かりますね。ここで「id=1 インプレス」のg列の枠をクリックしてみます。“POINT (139.760397 35.694572)”と表示されている部分です。クリックすると右側の「値ビューワ」に地図が表示され、このポイントの位置が青い丸で示されます。
列タイトルをクリックすると、その列の値がまとめて地図上に表示されます。値が間違っていたり、測地系が正しく指定されていないととんでもない場所に表示されることになるので、データの正しさの確認にとても便利です。
ただし、この機能は大量のデータ行がある場合にはすべてが表示されず、その一部のみが表示されます。あくまでも数件程度の位置情報データの簡易的な確認用と割り切って使用しましょう。
割り切りとは言っても、何件もの緯度経度の数字だけを眺めていてもそれが示す場所や形に関するイメージは湧きにくいので、このように簡単に地図上に表示して確認できるツールは非常に便利なものだと思います。
GUIツールをお勧めする理由、お勧めしない理由
このように便利なGUIツールですが、実は学習者にはあまり使用を勧めていません。それは、こういったツールを使用すると「何が起こっているのか」が見えにくくなるからです。GUIツールはデータベース操作を効率的に行えるように様々なお世話をしてくれます。便利ではありますが、それはDBサーバとの会話経路の間に変換処理が入っている可能性があるということを意味します。しかし、これの何が問題なのでしょうか。
勘の鋭い方は、今回紹介したSQLの結果に違和感を持ったことと思います。前回コマンドラインで同じSQL文を実行した際、g列はバイナリで結果を得ていたはずです(それ自体も本来のバイナリからHEX表現へと「変換」されているとも言えるのですが)。POINT情報として結果を得るためにST_AsText()関数を使用しましたね。それが、今回のDBeaverの結果ではいきなりPOINTデータの数字として画面上で確認できています。これこそが「DBeaverの便利なポイント」でもあり、ここで自動変換が行われていることを知らないまま使っている人にとっては「本来の結果ではないものを見てしまっている」という側面なのです。
実はGUIツールは、DBMSの学習や理解という面では「却って難しくなるもの」であるとも言えるのです。学習中はコマンドラインでの操作を中心に行い、データベースとなるべく近いところでの会話を楽しむことをお勧めする所以です。
では、いつになったらGUIツールを解禁して良いのか。それは「GUI操作中に何かおかしいと気づける感覚が身についている(今回の例では“この結果はバイナリのはず”など)」かつ「おかしいと思ったときすぐにコマンドラインの操作で確認できるワザが身についている」といったあたりを目安にすると良いでしょう。
DBeaverとMySQLサーバが別のマシン上で動作している場合に、うまくデータベースへ接続できず悩む人も多いと思います。接続して利用するためには、
- DBeaverからMySQLの稼働するサーバに3306番ポートが疎通していること
- MySQLサーバ上に適切なアクセスの権限があること
2.はMySQLのユーザ管理の仕組みが単にユーザ名ではなく「ユーザ名+アクセス元ホスト名」の組み合わせで行われていることを知る必要があります。例えば、192.168.0.103からのgeouserユーザアクセスを許可する場合、以下のように「192.168.0.103からのgeouser」というユーザを作成してから、「そのユーザがデータベースthinktへのアクセス権限を持つように」と2段階の設定を行います。
「geouserユーザは作成済なのに…」と思った場合は、geouser@localhostユーザが作成されていてもgeouser@アクセス元のユーザが作成されていないことが原因であることがほとんどです。
CREATE USER 'geouser'@'192.168.0.103' IDENTIFIED BY 'パスワード';
GRANT ALL ON thinkit.* TO 'geouser'@'192.168.0.103';
