LinuxでEdgeDBをインストールしてマスターする:強力なSQL代替ソリューション

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

クイックスタート:5分以内でEdgeDBを動かす

設定に時間をかけずに、最新のツールを試してみたいですか?Ubuntu、Debian、またはCentOSを使用している場合、わずか3ステップでプロジェクトにEdgeDBを導入できます。

ステップ1:EdgeDB CLIのインストール

curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh

インストール後、ターミナルを再起動するか、source ~/.bashrc を実行して edgedb コマンドを有効にします。

ステップ2:プロジェクトの初期化

新しいディレクトリを作成し、初期化コマンドを実行します。EdgeDBは非常にスマートで、適切なバージョンを自動的にダウンロードし、プロジェクト専用のデータベースインスタンスを個別に起動します。

mkdir my-edgedb-app && cd my-edgedb-app
edgedb project init

デフォルト設定を選択するには、そのまま Enter を押してください。

ステップ3:最初のクエリを書く

edgedb コマンドを使用して、コマンドラインインターフェース(REPL)に直接アクセスします。

select "Hello EdgeDB!";
select 1 + 1;

これで完了です。PostgreSQLやMySQLのような長い .conf ファイルをいじることなく、モダンなデータベースエンジンを手に入れることができました。

ピュアSQLという苦悩

2年前、私はPostgresで動作するECサイトのシステムを管理していました。悪夢が始まったのは、Category テーブルの構造が5階層の入れ子になった時です。当時のSQLクエリは100行を超え、JOINGROUP BY で溢れかえっていました。一週間後にコードを読み返しただけで、頭を抱えてしまったのを覚えています。

私たち開発者はオブジェクト(Object)単位で思考しますが、従来のデータベースはテーブル(Relational)形式で保存します。このギャップを埋めるためにORMを使わざるを得ませんが、ORMは往々にして非常に低速で制御の難しいSQLクエリを生成してしまいます。

EdgeDBは、PostgreSQLをベースにしながらもオブジェクト形式で通信することで、この問題を根本から解決します。SQLのように強力でありながら、JSONのように読みやすく整理された EdgeQL を使ってクエリを実行できます。

Linuxでのプロフェッショナルなインスタンス管理

実際の運用環境では、リソースの競合を避けるためにインスタンスの管理方法を理解することが非常に重要です。

プロセスの制御

EdgeDBの各プロジェクトは通常、個別のインスタンスに関連付けられています。サーバーで何が実行されているかを確認するには、以下のコマンドを使用します:

edgedb instance list

チーム内でバージョンを統一するために特定のバージョン(例:4.2)が必要な場合は、以下のコマンドでインストールします:

edgedb server install --version 4.2

データセキュリティ

edgedb project init は認証を自動的に処理しますが、本番サーバーにデプロイする際はパスワードを厳格に管理する必要があります。インスタンスのパスワード変更は非常に簡単です:

edgedb instance reset-password my_instance_name

スキーマ定義:オブジェクト指向의思考

味気ない「テーブル(Table)」のことは忘れましょう。EdgeDBではタイプ(Type)を扱います。すべての設定は dbschema/default.esdl ファイルにまとめられます。

例えば、複雑なリレーションを持つブログシステムの設計は以下のようになります:

module default {
  type User {
    required property name -> str;
    property email -> str {
      constraint exclusive; # メールアドレスは重複不可
    }
  }

  type Post {
    required property title -> str;
    property content -> str;
    required link author -> User; # 非常に明示的な1対多のリレーション
    multi link tags -> Tag;       # 中間テーブル不要の多対多のリレーション
  }

  type Tag {
    required property name -> str;
  }
}

link キーワードこそが最も価値のある機能です。これは外部キーや面倒な中間テーブルを完全に置き換えます。開発者はビジネスロジックに集中するだけでよく、ストレージの詳細はEdgeDBに任せることができます。

マイグレーションはもう怖くない

.esdl ファイルを編集したら、以下のコマンドを実行するだけです:

edgedb migration create
edgedb migrate

EdgeDBは変更を比較し、「’title’ を ‘header’ に変更しましたか?」といった確認を求めてきます。このプロセスにより、手動でSQLスクリプトを書く場合に比べて、データ損失のリスクを90%削減できます。

EdgeQLの真の力

JOIN句を一切使わずに、EdgeQLがどのようにネストされたデータ(Deep Fetching)を取得するか見てみましょう。

select Post {
  title,
  content,
  author: {
    name
  }
} filter .author.name = 'Tuan IT';

返される結果はクリーンなJSON配列であり、バックエンドでデータを再マッピングすることなく、そのままフロントエンドで使用できます。

実践的な経験:いつ導入すべきか?

非常に優れていますが、EdgeDBはあらゆる状況に対応する万能ツールではありません。

メリット(すぐに使うべきケース):

  • 新規プロジェクト(Greenfield): バックエンドのコーディング速度を2〜3倍に向上させます。
  • 複雑なリレーションデータ: 権限管理システムや複雑なSNSのようなアプリケーションには、EdgeDBが最適です。
  • TypeScriptエコシステム: EdgeDBのジェネレーターが、コードに対して非常に正確な型(Type)を自動生成します。

制限事項(検討が必要なケース):

  • 既存の大規模データ: 以前、100GB의データベースをPostgresからEdgeDBに移行しようとしたことがあります。結果として3日間の準備を費やしましたが、社内の既存のBI(ビジネスインテリジェンス)ツールがまだEdgeQLをサポートしていなかったため、断念せざるを得ませんでした。
  • コミュニティ: サードパーティ製のGUI管理ツールは、30年の歴史を持つMySQLのエコシステムに比べればまだ少ないです。

総じて、EdgeDBはデータベースプログラミングの体験における大きな飛躍と言えます。長いSQLクエリに疲れ果てているなら、ぜひ今日 Linuxにインストールしてみてください。きっと以前のやり方には戻りたくなくなるはずです。

Share: