PostGraphile(ポストグラファイル)は、PostgreSQLのスキーマからGraphQL APIを構築するミドルウェアです。
PostGraphileのメリットは工数削減
PostgreSQLのデータベースをすでに使っているなら、PostGraphileを配置するだけで、GraphQLのAPIが手に入ります。一般的な開発方法でGraphQL APIを作ろうとすると、データベースに問い合わせするコードをApollo Serverなどを利用して、プログラマー自身が実装する必要があります。PostGraphileを使うと、そのようなバックエンドプログラミングの工数を大幅に削減でき、開発時間を節約できます。
PostGraphileの特徴
PostgreSQLのスキーマからGraphQL APIを自動生成
PostGraphileはPostgreSQLのスキーマから、GraphQL APIを自動生成します。なので、DBのスキーマとGraphQLのスキーマを二重で管理するといった手間はありません。
テーブルの関連も自動で認識されるので、GraphQLの醍醐味のひとつである、関連データをひとつのGQLで問い合わせるのもすぐにできます。
GraphQLのCRUDミューテーションも自動生成されます。また、特殊な処理を行うミューテーションを作りたい場合は、PostgreSQLのストアドプロシージャーを定義した上で、それをGraphQLのミューテーションにすることもできます。
データベーススキーマが変更した際には、GraphQL APIも自動的に新しいスキーマに追従するように作られています。
オープンソース
PostGraphileはオープンソースで開発されていて、誰でも無料で使えます。クラウドベンダーロックインのリスクがありません。PostGraphileをホスティングするサーバーは自分で選べます。
先読みでN+1問題を回避する
PostgreSQLをバックエンドにしたGraphQLは、しばしばN+1問題が起こります。この問題を回避するために、DataLoaderを使ってリクエストをバッチ処理する方法がありますが、DataLoaderは常に最適な方法ではありません。PostGraphileでも、DataLoaderが使えますが、より最適なSQLを出せるように先読み機能がPostGraphileにはあります。
PostGraphileのパフォーマンスは、改善が重ねられてきており、Prismaよりもかなり速くなっています。
認可はPostgreSQLのロールベースgrantや行レベルセキュリティーを用いる
データベースをバックエンドにGraphQL APIを構築するミドルウェアは、PostGraphile以外にもHasuraなどがあります。それらと、PostGraphileの違いは、認可システムにPostgreSQLの認可機能をそのまま用いていることです。なので、認可についてミドルウェア独自のACLを学習する必要がありません。PostgreSQLの伝統的なロールベースgrantや、行レベルセキュリティーを学べばよく、これはデーターベース管理スキルとしても応用できるスキルになるので、学びが無駄になることが避けられます。
GraphQLのサブスクリプションに対応
チャットアプリやGoogle Docsのようなアプリでは、リアルタイムにデータベースの変更イベントを受信する必要があります。このようなリアルタイム要件を達成するために、GraphQLにはサブスクリプションがあります。PostGraphileはGraphQLのサブスクリプションに対応しています。PostgreSQLのLISTEN
/NOTIFY
を用いて実現しています。
起動方法がシンプル
PostGraphileはNPMパッケージとして提供されています。そのため、インストールが簡単でDockerなどの環境がなくとも起動できます。NPMがインストールされていれば、次のような1行のコマンドで起動できます:
npx postgraphile -c 'postgres://user:pass@localhost/mydb' --watch --enhance-graphiql --dynamic-json
もちろん、Docker上で起動することもできます。
プラグインによる拡張
PostGraphileにはプラグイン機構があります。必要に応じてGraphile Engineに機能を足せます。