AI

OSSデータベースツール比較:DBeaver vs pgAdmin vs Beekeeper Studio

オープンソースラボ編集部2026年6月14日

OSSデータベースツール比較:DBeaver vs pgAdmin vs Beekeeper Studio

DataGrip(年$229/ユーザー〜)・TablePlus($89/ライセンス〜)に対して、DBeaver(100+DB対応の多機能OSS)・pgAdmin(PostgreSQL公式GUI)・Beekeeper Studio(モダンUI・SQL特化のOSS)はデータベース管理を無料でセルフホストできます。

OSSデータベースツールを使う理由

  • コスト: DataGrip(年$229×10名 = $2,290/年)→ DBeaver Community Editionは完全無料
  • 100+DB対応: DBeaver一本でMySQL・PostgreSQL・SQLite・MongoDB・Redis・Oracle・Snowflake・BigQueryを管理
  • セキュリティ: 接続情報・クエリ履歴が手元のマシンに保存(SaaS不要)
  • 自動化: JDBCドライバー・スクリプト・ER図生成・データエクスポートを自動化

主要ツールの概要

DBeaver

2010年公開、Java製のOSSです。GitHubスター40k+(最大シェア)。PostgreSQL・MySQL・SQLite・MongoDB・Cassandra・Redis・Oracle・Snowflakeなど100+データベースに単一GUIで接続できるため、マルチDBを扱うチームのデファクトスタンダードです。

# DBeaver Community Edition のインストール
# Ubuntu/Debian
sudo add-apt-repository ppa:serge-rider/dbeaver-ce
sudo apt update
sudo apt install dbeaver-ce

# macOS(Homebrew)
brew install --cask dbeaver-community

# Windows(Chocolatey)
choco install dbeaver

# Docker(Headless版 - DBeaver Team Edition Community)
docker run -d -p 8978:8978 --name dbeaver-te   -v /var/dbeaver/workspace:/opt/cloudbeaver/workspace   dbeaver/cloudbeaver:latest
# DBeaver のプロジェクト設定を自動化(Python + psycopg2でのDB接続自動化)
import psycopg2
import json
import os
from contextlib import contextmanager

# マルチDB接続設定を管理
DB_CONFIGS = {
    'production': {
        'host': os.environ['PROD_DB_HOST'],
        'port': 5432,
        'dbname': os.environ['PROD_DB_NAME'],
        'user': os.environ['PROD_DB_USER'],
        'password': os.environ['PROD_DB_PASSWORD'],
        'sslmode': 'require',
    },
    'staging': {
        'host': os.environ['STAGING_DB_HOST'],
        'port': 5432,
        'dbname': 'app_staging',
        'user': os.environ['STAGING_DB_USER'],
        'password': os.environ['STAGING_DB_PASSWORD'],
    },
    'analytics': {
        'host': os.environ['ANALYTICS_DB_HOST'],
        'port': 5432,
        'dbname': 'analytics',
        'user': os.environ['ANALYTICS_DB_USER'],
        'password': os.environ['ANALYTICS_DB_PASSWORD'],
    },
}

@contextmanager
def get_db(env: str = 'staging'):
    '''接続管理コンテキストマネージャー'''
    conn = psycopg2.connect(**DB_CONFIGS[env])
    try:
        yield conn
        conn.commit()
    except Exception:
        conn.rollback()
        raise
    finally:
        conn.close()

# テーブル統計の自動レポート(DBeaver ERダイアグラムのデータソース)
def get_table_stats(env: str = 'production') -> list:
    with get_db(env) as conn:
        with conn.cursor() as cur:
            cur.execute('''
                SELECT
                    schemaname,
                    tablename,
                    pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) AS size,
                    n_live_tup AS row_count,
                    n_dead_tup AS dead_rows,
                    last_autovacuum,
                    last_autoanalyze
                FROM pg_stat_user_tables
                ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC
                LIMIT 20
            ''')
            cols = [d[0] for d in cur.description]
            return [dict(zip(cols, row)) for row in cur.fetchall()]

# 未使用インデックスを検出(パフォーマンス最適化支援)
def find_unused_indexes(env: str = 'production') -> list:
    with get_db(env) as conn:
        with conn.cursor() as cur:
            cur.execute('''
                SELECT
                    schemaname,
                    tablename,
                    indexname,
                    pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
                    idx_scan AS index_scans
                FROM pg_stat_user_indexes
                WHERE idx_scan = 0
                  AND indexrelname NOT LIKE 'pg_toast%'
                  AND indexname NOT LIKE '%_pkey'  -- 主キーは除外
                ORDER BY pg_relation_size(indexrelid) DESC
            ''')
            cols = [d[0] for d in cur.description]
            return [dict(zip(cols, row)) for row in cur.fetchall()]

# 使用例
stats = get_table_stats('production')
for s in stats[:5]:
    print(f'{s["tablename"]}: {s["size"]} ({s["row_count"]:,}行)')

unused = find_unused_indexes('production')
for idx in unused:
    print(f'未使用インデックス: {idx["indexname"]} ({idx["index_size"]})')
-- DBeaver でよく使うクエリスニペット集(PostgreSQL)

-- 1. 遅いクエリを特定(pg_stat_statements必要)
SELECT
    left(query, 80) AS query_preview,
    calls,
    round(mean_exec_time::numeric, 2) AS avg_ms,
    round(total_exec_time::numeric / 1000, 2) AS total_sec,
    rows
FROM pg_stat_statements
WHERE calls > 10
ORDER BY mean_exec_time DESC
LIMIT 20;

-- 2. テーブルサイズ一覧(トップ10)
SELECT
    table_name,
    pg_size_pretty(pg_total_relation_size(table_name::regclass)) AS total_size,
    pg_size_pretty(pg_relation_size(table_name::regclass)) AS table_size,
    pg_size_pretty(pg_indexes_size(table_name::regclass)) AS index_size
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY pg_total_relation_size(table_name::regclass) DESC
LIMIT 10;

-- 3. テーブルロックを確認
SELECT
    pid,
    usename,
    state,
    wait_event_type,
    wait_event,
    left(query, 60) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'Lock'
ORDER BY pid;

-- 4. バキュームが必要なテーブルを検出
SELECT
    relname AS table_name,
    n_dead_tup AS dead_tuples,
    n_live_tup AS live_tuples,
    round(n_dead_tup::numeric / nullif(n_live_tup + n_dead_tup, 0) * 100, 2) AS dead_pct
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY dead_pct DESC;

pgAdmin 4

2003年公開(4系は2016年)、Python/React製のOSSです。GitHubスター4k+(PostgreSQL公式)。PostgreSQL公式の管理ツールで、クエリツール・バックアップ/リストア・ER図・スロークエリ解析・接続プーリング(pgBouncer)管理まで PostgreSQL に特化した完全機能を無料で提供します。

# docker-compose.yml - pgAdmin 4 + PostgreSQL
version: '3.8'
services:
  pgadmin:
    image: dpage/pgadmin4:8.9
    restart: unless-stopped
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
      PGADMIN_CONFIG_SERVER_MODE: "True"
      PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION: "True"
      PGADMIN_CONFIG_LOGIN_BANNER: '"開発環境 pgAdmin - 本番DBへの接続には注意してください"'
      # LDAP SSO 設定
      PGADMIN_CONFIG_AUTHENTICATION_SOURCES: "['ldap', 'internal']"
      PGADMIN_CONFIG_LDAP_SERVER_URI: "'ldap://ldap.yourcompany.com'"
      PGADMIN_CONFIG_LDAP_BASE_DN: "'dc=yourcompany,dc=com'"
    volumes:
      - pgadmin_data:/var/lib/pgadmin
      # サーバー接続を事前定義
      - ./pgadmin-servers.json:/pgadmin4/servers.json:ro

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: ${PG_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data

volumes:
  pgadmin_data:
  pg_data:
{
  "Servers": {
    "1": {
      "Name": "Production DB",
      "Group": "Servers",
      "Host": "prod-db.yourcompany.com",
      "Port": 5432,
      "MaintenanceDB": "postgres",
      "Username": "readonly_user",
      "SSLMode": "require",
      "Comment": "本番環境 - 読み取り専用ユーザーで接続"
    },
    "2": {
      "Name": "Staging DB",
      "Group": "Servers",
      "Host": "staging-db.yourcompany.com",
      "Port": 5432,
      "MaintenanceDB": "postgres",
      "Username": "app_user",
      "SSLMode": "prefer"
    }
  }
}

機能比較表

比較項目DBeaverpgAdmin 4Beekeeper Studio
対応DB数100+PostgreSQL専用主要RDBMS6種
ER図生成
データエクスポート✅(多形式)
GUIの使いやすさ★★☆★★☆★★★
MongoDB/Redis対応
無料ライセンスCE(フル機能)完全無料CE(完全無料)

OSSデータベースツールはDevOpsカテゴリ/categories/devopsのObservabilityスタック(Grafana+Prometheus)と組み合わせて、クエリパフォーマンスの可視化・インデックス最適化の自動検出を行います。セキュリティカテゴリ/categories/securityのVaultと連携してDB接続情報をシークレット管理することでDB認証情報の平文保存を排除できます。

FAQ

Q. DBeaver Community版とPro版の違いは何ですか?

A. Community版(無料)とPro版(年$199/ユーザー〜)の主な違いは①ノーSQLデータベース: Community版はMongoDBのベーシック操作のみ、Pro版はフルCRUD・集計クエリ・スキーマ管理②Mockデータ生成: Pro版はリアルな偽データを自動生成してテスト環境を構築③ER図エクスポート: Community版はPNG、Pro版はPDF・SVG・HTML④Salesforce・Googleシート接続: Pro版限定⑤データ変換・マスキング: 本番DBのマスキングデータを開発環境に同期する機能はPro版のみ。スタートアップ・個人開発者にはCommunity版で十分です。Pro版が必要になるのはMongoDB本格利用・Salesforce連携・データマスキングが業務要件になった時です。

Q. pgAdminとDBeaver、PostgreSQL開発にはどちらが向いていますか?

A. PostgreSQL一本に集中するなら pgAdmin複数DB・チーム開発なら DBeaver が向いています。pgAdminが優れる点: ①PostgreSQL固有の機能(テーブルスペース・pg_hba.conf・レプリケーション状態・VACUUM詳細)をGUIで管理②バックアップ/リストア(pg_dump/pg_restore)の統合③pgBouncerとの統合④Explain詳細(ビジュアルクエリプラン)がPostgreSQL標準に沿っている。DBeaver が優れる点: ①MySQL・SQLite・Oracle・Redshiftなど複数DBを同時管理②チームでのクエリ共有(プロジェクト機能)③VS Code・JetBrains連携④データ比較(2テーブル・2DB間のdiff)⑤ERダイアグラムの自動レイアウト。

Q. DBeaverでER図を自動生成するには?

A. ①DBeaver左サイドバーでデータベース接続 → スキーマを右クリック②「ER Diagram」を選択→スキーマ内全テーブルのER図が自動生成③テーブルを選択して「Show References」でリレーションを表示④PNG/SVGでエクスポート(Pro版はPDF対応)⑤テーブルを手動でドラッグしてレイアウト調整可能。特定テーブルのみER図を生成: 複数テーブルをCtrl+クリックで選択→右クリック→「Create ER Diagram」。PostgreSQLの外部キー制約が定義されていれば自動でリレーションが表示されます。外部キーなしの場合は「Virtual Foreign Keys」でDBeaver内に仮想的なリレーションを定義できます。

Q. Beekeeper Studio はDBeaver・pgAdminと比べてどんな人に向いていますか?

A. **「SQLクエリを書くことだけに集中したい人」「UIがシンプルで起動が速い方がいい人」**にBeekeeper Studioが最適です。Beekeeper Studioの強み: ①Electron製でネイティブアプリ並みの軽快な動作(DBeaverはJVM起動で重い)②テーブルビュー・クエリ結果・接続管理のみのシンプルUI③SQLシンタックスハイライト・オートコンプリート④クエリ結果をCSV・JSON・Excelでワンクリックエクスポート⑤接続情報を暗号化ストレージで管理。限界: MongoDBやNoSQL非対応、ER図生成なし、高度なDB管理(バキューム設定・レプリケーション)は不可。PostgreSQL・MySQL・SQLite・MariaDB・MSSQLを扱うWebデベロッパーのデイリーツールとして人気です。

まとめ

ユースケース推奨ツール
100+DB対応・チーム利用・ER図・データ分析DBeaver CE
PostgreSQL専用・バックアップ・細かい管理pgAdmin 4
軽量・高速・SQLクエリ特化・シンプルUIBeekeeper Studio CE

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。