PostgRESTがバックエンドコードの80%を削減する

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00もしPostgresデータベースがそのままAPIになり、
00:00:05バックエンドのコードを一切書かなくて済むとしたらどうでしょう?
00:00:14APIを作るたびに、同じようなコードを何度も書いていますよね。
00:00:21ルーティング、コントローラー、バリデーション、認証など、
00:00:29すべてはデータベースとやり取りするためだけのものです。
00:00:31そしてカラムを1つ変えるだけで、すべてが壊れてしまいます。
00:00:40カスタムコードも、コントローラーも、ORMレイヤーも不要です。
00:00:44それがPostgRESTです。Supabaseの裏側で動いているエンジンであり、
00:00:49本格的な商用トラフィックにも対応しています。
00:00:56これから、わずか数分でその方法をお見せしましょう。
00:01:03API開発において、これはスタック全体の中で
00:01:10最も厄介な悩みを解決してくれます。
00:01:19ロジックの重複です。データベースでデータを定義し、
00:01:24別の場所でアクセスルールやコード、バリデーションを定義します。
00:01:26さらにレスポンス処理も別の場所で行います。
00:01:32同じシステムなのに階層が分かれ、バグが混入する隙だらけです。
00:01:38PostgRESTはこれらを一掃します。GitHubで26,000以上のスターを獲得し、
00:01:45Supabaseによって商用規模で利用されています。
00:01:51スキーマをわずか数分で、本番対応のREST APIに変換します。
00:01:55ORMもコントローラーもありません。
00:02:04セキュリティはデータベース内で完結するため、重複や保守の手間が減り、
00:02:09退屈な繋ぎ込み作業に費やす時間を大幅に削減できます。
00:02:17お見せしましょう。ワークフローを加速させるツールがお好きなら、
00:02:22ぜひチャンネル登録をお願いします。定期的に動画を公開しています。
00:02:29では、実際に作ってみましょう。構成はコンテナ3つ。
00:02:35それだけです。Postgres、PostgREST、そしてドキュメント用のSwagger UIです。
00:02:41これがDocker Composeファイルです。特別なことは何もありません。
00:02:503つのサービスを連携させているだけです。
00:02:56docker-composeコマンドで起動すれば、準備完了です。
00:03:04依存関係のインストールも、サーバーの設定も不要です。データベースを見てみましょう。
00:03:11このコマンドを実行します。非常にシンプルな「todos」テーブルです。
00:03:21ID、タイトル、完了フラグ、作成日時など、基本的な項目だけです。
00:03:26構成はこれだけですが、ここからが本領発揮です。
00:03:33行単位セキュリティ(RLS)です。誰がどのデータにアクセスできるかを、
00:03:40SQLでデータベース内に直接定義します。
00:03:45システムの別の場所に認証ロジックを置く必要はありません。ポリシーはこちらです。
00:03:52匿名ユーザーにフルアクセスを許可する設定にしています。
00:04:02では、このcurlコマンドでtodosを取得してみましょう。ご覧の通り、
00:04:07APIコードなしでPostgresから直接JSONが返ってきました。
00:04:13フィルタリングも即座に機能します。
00:04:23ソートも一瞬です。次に、新しい行を追加してみましょう。
00:04:28JSONボディを付けてPOSTリクエストを送るだけで完了です。
00:04:34すでにデータベースに反映されています。同期を待つORMレイヤーもありません。
00:04:38そして驚くべきは、OpenAPIドキュメントとSwagger UIが自動生成されることです。
00:04:43これを開けば、フル機能のインタラクティブなAPIを確認できます。
00:04:51エンドポイントのテストやスキーマの確認も自由自在です。
00:04:55ゼロから、CRUD、フィルタリング、ソート、ページネーションが揃い、
00:05:02RLSによる認証とドキュメントまでが1分足らずで手に入ります。
00:05:10なぜこれを使うのか? 従来のバックエンド開発には「税金」があるからです。
00:05:15その大半は製品開発ではなく、ただの保守作業です。
00:05:23一般的なスタック、例えばExpressやPrismaでは、コントローラーや
00:05:32バリデーションが点在し、認証も別の場所にあります。
00:05:40対してPostgRESTなら、スキーマがAPIを定義し、セキュリティはRLSです。
00:05:50リレーションも既にDBにあります。データの周囲に翻訳レイヤーを築くのではなく、
00:05:58データを正しく公開するだけ。これが大きな違いです。

Key Takeaway

PostgRESTはデータベーススキーマを直接本番対応のREST APIに変換することで、従来のバックエンドコードの80%を占める保守的な「繋ぎ込み作業」を削減する。

Highlights

PostgRESTはGitHubで26,000以上のスターを獲得しており、Supabaseのバックエンドエンジンとして商用規模で稼働している。

Postgres、PostgREST、Swagger UIの3つのコンテナのみで、API開発に必要な環境構築が完結する。

行単位セキュリティ(RLS)をSQLでデータベース内に直接定義することで、アプリケーション側の認証ロジックが不要になる。

OpenAPIドキュメントとSwagger UIが自動生成され、CRUD、フィルタリング、ページネーション機能が1分足らずで利用可能になる。

データスキーマの変更が即座にAPIへ反映されるため、コントローラーやORMレイヤーの保守作業を排除できる。

Timeline

バックエンド開発におけるロジック重複の解消

  • データベース定義、アクセスルール、バリデーションが異なる階層に点在することがバグの要因となる。
  • PostgRESTはスキーマから直接APIを生成するため、ORMやコントローラーの記述を必要としない。
  • セキュリティ設定をデータベース内で完結させ、システム全体の保守コストを大幅に下げる。

開発者がAPIを作成する際、ルーティングやコントローラーの作成といったデータベース操作のための反復的なコード記述が負担となっています。カラムを1つ変更するだけでスタック全体が壊れる脆弱性が課題です。このツールはデータの翻訳レイヤーを築くのではなく、データを正しく公開する手法を採ります。

3つのコンテナによる迅速な環境構築

  • Postgres、PostgREST、Swagger UIの3つのサービスをDocker Composeで連携させるだけで準備が整う。
  • 依存関係のインストールや複雑なサーバー設定作業を一切行わずにAPIを起動できる。
  • 標準的なSQLコマンドでテーブルを作成するだけで、直ちにエンドポイントが有効になる。

特別な構成を必要としないDocker Composeファイルにより、数分で開発環境が立ち上がります。IDやタイトル、完了フラグを持つシンプルな「todos」テーブルを例に、データベースの作成からAPI公開までの手順が簡略化されています。サーバーサイドのコードを1行も書かずに、本番環境レベルの基盤が手に入ります。

RLSによる認証とインタラクティブなドキュメント生成

  • 行単位セキュリティ(RLS)により、誰がどのデータにアクセスできるかをSQLで直接制御する。
  • curlコマンドを用いたPOSTリクエストにより、ORMレイヤーの同期を待たずに即座にデータが反映される。
  • Swagger UIが自動生成されるため、エンドポイントのテストやスキーマ確認をブラウザ上で行える。

認証ロジックをアプリケーション側ではなく、SQLポリシーとして定義することでセキュリティの重複を防ぎます。フィルタリング、ソート、ページネーションといった高度なクエリ機能もデフォルトで備わっています。APIの仕様書作成も自動化されており、開発者は製品の本質的なロジックに集中できます。

従来型スタックとPostgRESTの構造的な違い

  • ExpressやPrismaのような従来型スタックは、バリデーションや認証が各所に点在する「保守税」を強いる。
  • PostgRESTはリレーションシップをデータベース構造から直接引き出すため、マッピングのミスが発生しない。
  • データの周囲に複雑な翻訳レイヤーを構築する手間を省き、データベースのポテンシャルを直接外部へ公開する。

従来の開発手法では、製品価値を生まない保守作業に多くの時間が費やされています。スキーマ自体がAPIの定義となるため、情報の整合性が常に保たれます。データの持ち方と公開方法を直結させることが、開発速度を劇的に向上させる鍵となります。

Community Posts

View all posts