DBeaverガイド:PostgreSQL・MySQL・SQL Serverを一つの画面で管理する

Database tutorial - IT technology blog
Database tutorial - IT technology blog

深夜2時。何ヶ月も問題なく動いていたクエリが突然、本番テーブルをロックしている。一つのターミナルにはpsqlが開いていて、別のタブにはMySQL Workbenchが立ち上がり、2つの異なるデータベース間でデータを照合しながら何が食い違ったのかを探っている。コンテキストの切り替えだけで疲弊する——しかもその時間帯となると、危険すぎる。

この経験には覚えがある。MySQL、PostgreSQL、MongoDBを別々のプロジェクトで使ってきたが、それぞれのデータベースに確かな強みがある一方、切り替えるたびにかかるツールの管理コストは本当に痛い問題だった。それがDBeaverで全てを一元管理するようになったきっかけで、深夜2時も昼の2時も、仕事のやり方が大きく変わった。

アプローチの比較:専用ツール vs. 統合GUI

多くの開発者は「データベースごとに専用ツール」というアプローチから始める:

  • pgAdmin——PostgreSQL用
  • MySQL Workbench——MySQL/MariaDB用
  • SSMS(SQL Server Management Studio)——SQL Server用
  • MongoDB Compass——MongoDB用

プロジェクトごとに一種類のデータベースしか使わないなら、これで十分だ。しかし現実のバックエンド開発はそうもいかない。新しいPostgreSQL環境の隣に古いMySQLデータベースが鎮座していたり、SQL ServerからPostgresへのデータ移行が発生したりして、気づけば4つのアプリケーションを同時に開いている羽目になる。

もう一つの選択肢が統合GUI——全てのデータベースを一つのアプリケーションで扱えるものだ。DBeaver、DataGrip、TablePlusがこのアプローチを採用している。DBeaverとDataGripは内部でJDBCドライバを使っており、macOS向けのTablePlusはネイティブクライアントライブラリを使っている。

この違いは、何かトラブルが起きたときに顕著になる。使い慣れたインターフェースで新しい接続を開くのは10秒で済む。散らかったタスクバーの中からMySQL Workbenchのアイコンを深夜2時に探すのとは訳が違う。

メリット・デメリット比較:DBeaver vs. その他のツール

DBeaverコミュニティエディション(無料)

メリット:

  • 無料かつオープンソース——10人チームでもライセンス費用ゼロ
  • クロスプラットフォーム対応:Linux・macOS・Windowsで同じ操作感
  • JDBCドライバ経由で80以上のデータベースをサポート——PostgreSQL・MySQL・SQL Server・SQLite・MongoDB・Redisなど
  • 内蔵のERダイアグラムビューア——ドキュメントのないレガシースキーマを引き継いだときに本当に役立つ
  • 自動補完・シンタックスハイライト・実行計画の可視化を備えたSQLエディタ
  • 追加購入なしでCSV・JSON・SQL・Excelへのデータエクスポートが可能

デメリット:

  • Javaベースのためネイティブ代替と比べてメモリ使用量が多い——300〜600MBのRAMを消費する
  • TablePlusやDataGripと比べるとUIが古く感じる
  • 新しいJDBCドライバのインストール後、最初の起動は遅い場合がある
  • Git連携やモックデータ生成などの高度な機能はDBeaver PROが必要

DataGrip(JetBrains製、有料)

DataGripはコードインテリジェンスの精度が高く、JetBrainsのエコシステムをすでに使っているならIDE連携がよりスムーズだ。SQLリファクタリングツールの完成度は明らかに高い。ただし1ユーザーあたり年間$229という価格は踏み切りにくい——DBeaverが無料で日常業務の90%を同じようにこなせることを考えると特に。

TablePlus(macOS/Windows、フリーミアム)

動作が軽く、ネイティブな操作感で、UIがシンプル。macOSを使っていて主に参照系クエリを実行するだけなら最適だ。無料プランは開けるタブが2つに制限され、データベースフィルタも使えないため、すぐに不満が出てくる。有料版は買い切り$89——妥当な価格だが、タブ制限があるせいで購入前にきちんと試すのが難しい。

結論

PostgreSQL・MySQL・SQL Serverを日常的に行き来するなら、DBeaverコミュニティエディションがバランスのとれた選択肢だ。無料でどのOSでも動き、ショートカットを覚えれば存在を忘れるくらい自然に使えるようになる——データベースツールとはそうあるべきだ。

推奨セットアップ

最初のデータベースに接続する前に、いくつかの設定を決めておくと後々助かる。

DBeaverのインストール

Ubuntu/Debian(Ubuntu 22.04以降は最新のキーリング形式を使用)の場合:

# DBeaverのリポジトリを追加してインストール
wget -O /usr/share/keyrings/dbeaver.gpg https://dbeaver.io/debs/dbeaver.gpg.key
echo "deb [signed-by=/usr/share/keyrings/dbeaver.gpg] https://dbeaver.io/debs/dbeaver-ce /" | sudo tee /etc/apt/sources.list.d/dbeaver.list
sudo apt update && sudo apt install dbeaver-ce

macOSでHomebrewを使う場合:

brew install --cask dbeaver-community

Windowsの場合:

winget install dbeaver.dbeaver

フォルダで接続を整理する

デフォルトの「Database Navigator」パネルは、接続が5つを超えるとすぐに混雑する。環境に対応したフォルダ構成を作ろう:

📁 本番環境
   ├── 🐘 prod-postgres (PostgreSQL 15)
   ├── 🐬 legacy-mysql (MySQL 5.7)
   └── 🟥 analytics-sqlserver (SQL Server 2019)
📁 ステージング
   └── 🐘 staging-postgres
📁 ローカル開発
   ├── 🐘 localhost:5432
   └── 🐬 localhost:3306

Database Navigatorで右クリック→「Create」→「Folder」でこの構成を作る。そして本番接続を赤にカラーコーディングしよう——DBeaverでは接続ごとにボーダーカラーを設定でき、そのカラーがSQLエディタのタブ内にも表示される。4時間しか寝ていないとき、その赤いボーダーが本番環境ではなくステージングにDELETEを実行してしまうのを防いでくれる。

本番の読み取り接続ではオートコミットを無効にする

本番の読み取り接続はオートコミットを無効にしておくべきだ。誤ってUPDATEDELETEを実行しても、明示的に確認するまでコミットされない。設定は:Edit Connection → Connection Settings →「Auto-commit」のチェックを外す。後で必ず感謝する日が来る。

実装ガイド:複数のデータベースへの接続と操作

PostgreSQLへの接続

New Connection → PostgreSQLを選択。初回使用時はJDBCドライバのダウンロードを促されるので承認する。接続情報を入力しよう:

Host: your-postgres-host
Port: 5432
Database: your_db_name
Username: your_user
Password:(DBeaverの暗号化ボールトに保存)

踏み台サーバー(bastion host)経由の本番データベースでも、SSHトンネル用に別のターミナルは不要だ。DBeaverがネイティブに処理してくれる:

# 接続ダイアログのSSHタブで設定する:
Host/IP: your-bastion-server.com
Port: 22
Username: ubuntu
Authentication: Public Key
Private key: ~/.ssh/your-key.pem

# DBeaverがトンネルを管理する——別のターミナルは不要

MySQLへの接続

同じ手順で——New Connection → MySQL。MySQL 8.xでよくある問題として、古いクライアントから接続すると認証プラグインの不一致が発生することがある。DBeaverが接続に失敗する場合は、MySQLサーバーで以下を実行する:

-- 認証プラグインの不一致を修正する
ALTER USER 'your_user'@'%'
  IDENTIFIED WITH mysql_native_password
  BY 'your_password';
FLUSH PRIVILEGES;

またはDBeaverの「Driver Properties」タブに以下のプロパティを追加する方法もある:

allowPublicKeyRetrieval = true
useSSL = false

SQL Serverへの接続

New Connection → SQL Server。MicrosoftのJDBCドライバを使おう(DBeaverがダウンロードを提案する)。ローカル開発環境でDockerで動かしているSQL Serverの場合、接続はこうなる:

Host: localhost
Port: 1433
Database: master
Username: sa
Password: YourStrong@Passw0rd

SQL認証よりWindows認証を使いたい場合は、Driver Propertiesに以下を追加する:

integratedSecurity = true
authenticationScheme = nativeAuthentication

複数のデータベースを並行してクエリする

3つの接続が全て有効な状態で、それぞれに別々のSQLエディタタブを開く。DBeaverは各タブにアクティブなデータベース接続を紐付けており、エディタ上部の接続セレクタでスキーマコンテキストを切り替えても、タブが閉じることはない。

MySQLのソースとPostgreSQLの送り先でデータを照合していたあるインシデントの際、3つのエディタタブを並べて開いていた。誤って閉じないよう各タブをピン留めし、DBeaverの結果セット比較機能——結果を右クリック→「Compare with Clipboard」——で出力を直接diffした。3つの別々のアプリでそれをやってみるといい。

データベース間でデータをエクスポート・移動する

テーブルを右クリック→「Export Data」。エクスポート先として「Database Table」を選択し、別のデータベース接続を選べば、DBeaverがデータベース間の基本的な型マッピングを処理してくれる。MySQLからPostgreSQLへ単一テーブルを移動する場合はこうなる:

1. MySQLのソーステーブルを右クリック→「Export Data」
2. ターゲットとして「Database Table」を選択
3. 送り先としてPostgreSQL接続を選択
4. カラムの型マッピングを確認する(DBeaverが標準的な型のほとんどを自動マッピング)
5. 最初の200行をプレビュー→転送を開始

外部キーやシーケンスを含む本番作業ではpg_dumpや専用の移行ツールの代わりにはならない。開発中にルックアップテーブルを移動したり、マイグレーションスクリプトのカラムマッピングを確認したりするなら、1分以内に終わる。

見慣れないスキーマを可視化する

ドキュメントが何もなく、作った人も2年前に辞めたレガシーデータベースを引き継いだとき——DBeaverで任意のスキーマを右クリック→「View Diagram」。既存の外部キー関係からERダイアグラムを自動生成してくれる。アプリケーションコードで管理されていてDB制約として定義されていないリレーションは検出できない。ただ、30秒で全体像を把握する手段としては、他に匹敵するものはない。

日常的に使う前に知っておくべきこと

DBeaverは接続パスワードをマスターパスワードで暗号化して保存する。デフォルトは空文字列——暗号化の仕組みは存在するが、簡単に突破できてしまう。本番の認証情報を保存する前に必ず設定しよう:Window → Preferences → General → Security → Master Password。

もう一つ:DBeaverのメジャーバージョンアップ後は、JDBCドライバが正常に残っているか確認しよう。大型アップデートでドライバ設定がリセットされ、昨日まで動いていた接続で「Class not found」という不可解なエラーが出ることがある。修正方法:Database → Driver Manager → 該当ドライバを探す → Download/Update。

特別なことは何もない。しかし、PostgreSQL・MySQL・SQL Serverにまたがるデータの不整合を3時間かけてデバッグしているとき、このセットアップはその価値を発揮する。使い慣れた一つのツール。環境ごとにカラーコーディングされた整理された接続。すでに設定済みのSSHトンネル。日の出前に解決できるか、チームが出社してもまだ別々のウィンドウを見つめ続けるかの違いはそこにある。

Share: