>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
TypeScript

CRUDを書くのをやめて、Hasuraで生きよう

身に覚えはありませんか?新しいプロジェクトを始めると、最初の2週間は単調なルーティンに費やされます。データベースのスキーマを定義し、コードでモデルを作成し、作成・読み取り・更新・削除のためのエンドポイントを書き、それからページネーション、フィルタリング、ソート、そしてもちろんアクセス権限の設定も必要になります。実際のビジネスロジックにたどり着く頃には、情熱はすでに薄れかけているでしょう。

典型的なWebアプリケーションのバックエンドの80%は、データベースからJSONへのデータのやり取りに過ぎないと、何度も考えました。Hasuraがまさに解決してくれる問題です。

そもそも何なのか

端的に言えば、Hasuraはデータベースに接続するだけで、本番環境対応のGraphQL APIを即座に提供する готовый движокです。Node.js、Go、Pythonでサーバサイドのコードを書く必要はありません。Postgres、MS SQL Server、さらにはMongoDBでテーブルを定義すれば、Hasuraがリレーションシップを含むスキーマを自動生成します。

Hasuraのロゴ

GitHubプロジェクトはすでに3万2000個以上のスターを集めており、単なる「別のラッパー」ではありません。GraphQLクエリを効率的なSQLに変換する本格的なコンパイラです。

Hasuraが実際の業務でどのように役立つか

私が初めてHasuraを試したとき、心を掴んだのは、開発者を「金の籠」に入れようとしない点です。以下に、Hasuraを便利にしているいくつかの機能を示します。

必要な機能がすべて揃ったAPIを即座に提供

データベースを接続するだけで、複雑なクエリを実行できるようになります。ユーザー、その最新の5件の注文、そしてその注文の中で1000ルーブル以上の商品だけを引っ張りたいと思った場合、従来のRESTでは3つのリクエストを送信するか、多数のJOINを含むカスタムエンドポイントを記述する必要があります。Hasuraでは、1つのGraphQLクエリで済み、データベースに対して1つの効率的なSQLクエリとして実行されます。

行レベルのセキュリティ

これは、おそらくこのエンジンの最も強力な機能です。Hasuraには組み込みのアクセス制御システム(RBAC)があります。「editorロールを持つユーザーは、自分が著者として記載されている記事のみ表示できる」というような設定が可能です。これはコンソール内またはYAML設定ファイルで直接構成でき、各コントローラメソッドでif (user.id === article.author_id)をチェックする必要はありません。

組み込みのリアクティブ機能

リアルタイム更新が必要な場合(チャットや通知フィードなど)、HasuraはGraphQL Subscriptionsをサポートしています。データベースの変更を自動的に監視し、WebSocket経由でクライアントにデータをプッシュします。手動でゼロからこれを設定するのは、特にアクセス権限を考慮する必要がある場合、相当な作業になります。

イベント駆動型アーキテクチャ

Hasuraはデータベースが変更されたときにWebhookをトリガーできます。新しいユーザーが追加されたら?HasuraがマイクロサービスにPOSTリクエストを送信し、ウェルカムメールが送られます。これにより、重いロジックを外部関数(サーバーレスまたは通常のマイクロサービス)にオフロードし、APIをクリーンに保てます。

バージョン3の新機能

Hasura V3は現在積極的に開発されています。チームはアーキテクチャを再考し、コネクタに焦点を当てました。エンジンは теперь( now)Rustで書かれています(以前はHaskell)。これはメモリ消費と速度に良い影響を与えるはずです。

V3では「スーパagraph」という概念が導入されました。これは、Postgres、Mongo、ClickHouseなど異なるソースからのデータを単一の論理的APIに統合できる仕組みです。同時に、TypeScript、Python、GoでカスタムロジックをSDKを使って記述することもできます。

技術的なニュアンスと玉にきず

「銀の弾丸」とは考えないでください。Hasuraはインフラストラクチャの追加レイヤーです。

  1. デバッグの難しさ:生成されたSQLクエリで何か問題が発生した場合、Hasuraがなぜそのように構築したのかを理解するのが難しい場合があります。ただし、コンソールにはクエリの実行計画を表示するAnalyzeツールがあります。
  2. DB構造への依存:Hasuraはデータベースの設計方法に大きく依存します。外部キーがない乱雑なテーブル群がある場合、魔法は起こりません。まずデータスキーマを整理する必要があります。
  3. 学習曲線:非常にクイックスタートできますが、アクセス権限の深い設定やRemote Schemasの操作には、ドキュメントから学ぶ時間がかかります。

誰が恩恵を受けるか

Hasuraは、フロントエンドチームが迅速に動きながらバックエンドのエンドポイント作成を待つ必要がないプロジェクトに最適です。MVP、内部管理パネル、大量のデータ作業とフィルタリングが必要なダッシュボードに適しています。

CRUDパラダイムに組み込むのが難しい非常に具体的なビジネスロジックを持つシステムを構築している場合、Hasuraは依然としてその上にサービスを構築できる「データレイヤー」として有用です。

試す最も簡単な方法はDocker経由です。リポジトリには готовые( ready-made)Dockerファイルが用意されています。 literally5分以内に、GraphQLサンドボックスを備えた動作するコンソールが手に入ります。繰り返しのcontroller記述に厌倦しているなら、これは試す価値のあるツールです。

関連プロジェクト