2019年2月7日

GraphQL Nexus のご紹介: コードファースト GraphQL サーバー開発

前回の投稿では、SDLファースト GraphQL サーバー開発の問題点について概説しました。今週は、コードファースト GraphQL ライブラリである GraphQL Nexus を発表できることを嬉しく思います。Tim Griesser 氏によるゲスト投稿です。

Introducing GraphQL Nexus
パート1
 
「スキーマファースト」GraphQL サーバー開発の問題点
パート2
 
(現在閲覧中)
GraphQL Nexus のご紹介: コードファースト GraphQL サーバー開発
パート3
 
GraphQL Nexus をデータベースと連携して使用する

要約: SDLファースト開発の問題点

前回の投稿で概説したように、SDLファースト GraphQL サーバー開発には、SDL とリゾルバーの同期を保つ、GraphQL スキーマをモジュール化する、優れた IDE サポートを実現するなど、多くの課題があります。ほとんどの問題は解決できますが、学習、使用、そして多数の追加ツールを統合するコストがかかります。

本日、GraphQL サーバー開発にコードファーストアプローチを実装するライブラリ、GraphQL Nexusをご紹介します。


GraphQL Nexus のご紹介

両方の長所: スキーマファーストとコードファースト

前回の記事では、GraphQL サーバーを構築するためのスキーマファースト、SDLファースト、コードファーストのアプローチについて理解を深めました

  • スキーマファースト: 事前のスキーマ設計は開発プロセスの重要な部分です
  • SDLファースト: GraphQL スキーマの SDL バージョンが API の信頼できる情報源です
  • コードファースト: GraphQL スキーマはプログラムで構築されます

GraphQL Nexus はコードファーストフレームワークですが、スキーマファースト開発にも使用できます。スキーマファーストとコードファーストは対立するアプローチではありません。組み合わせることでさらに有用になります。

Nexus を使用すると、GraphQL スキーマはプログラムで定義および実装されます。そのため、sangria-graphql (Scala)、graphlq-rubygraphene (Python) など、他の言語の GraphQL サーバーの実証済みの手法に従います。

タイプセーフ、GraphQL エコシステムと互換性があり、データ非依存

GraphQL Nexus は、TypeScript/JavaScript のインテリセンスを念頭に置いて設計されました。TypeScript ジェネリクス、条件型、および型マージを組み合わせて、完全な自動生成型カバレッジを提供します。Nexus の中心的な設計目標は、可能な限り少ない手動型アノテーションで、可能な限り最高の型カバレッジを実現することです。

Type-safe, compatible with GraphQL ecosystem & data-agnostic

Nexus は graphql-js のプリミティブに基づいて構築されており、現在の GraphQL エコシステムとの高い互換性を実現しています。

Nexus で GraphQL スキーマを定義および実装する

Nexus の API は、GraphQL スキーマの構成要素を定義および実装するための多数の関数を公開しています。たとえば、オブジェクト型ユニオンインターフェース列挙型、および GraphQL の型システムにあるその他すべてのものです。

Query 型と Mutation 型は、GraphQL スキーマにおけるいわゆるルート型です。Nexus は、これらを定義するための簡略化された API を提供します。

GraphQL スキーマのすべての型を定義したら、makeSchema 関数を使用して、GraphQL サーバー (graphql-yogaapollo-server など) の基盤となる GraphQLSchema インスタンスを作成できます。

makeSchema では、生成されたコードがスタイルガイドライン💅に準拠するように、prettier 設定を提供することもできます。

GraphQL Nexus を始める

Nexus を始める最も速い方法は、公式のを調べるか、オンライン Playground を使用することです。

1) インストール

GraphQL Nexus は graphql-js に大きく依存しているため、インストールにはピア依存関係として必要です。

2) 設定とベストプラクティス

ドキュメントのベストプラクティスのセクションには、理想的なエディター設定と Nexus プロジェクトの構成に関するヒントが多数含まれています。

GraphQL Nexus は型定義をオンザフライで生成するため、最高の開発者体験は、コーディング中にバックグラウンドで実行されている開発サーバーによって実現されます。ファイルを保存するたびに、生成された型定義の更新を処理します。

TypeScript を使用する場合、可能な設定の 1 つは、開発サーバーに ts-node-dev を使用することです。

次に、package.json で開発用の npm スクリプトを設定できます。

JavaScript を使用する場合、nodemon を使用できます。

次に、package.json で開発用の npm スクリプトを設定できます。

3) graphql-yoga を使用した「Hello World」

エディターの設定が完了したら、GraphQL スキーマの構築を開始できます。graphql-yoga を使用した「Hello World」アプリは次のようになります。

4) SDLファースト API からの移行

SDL コンバーターを使用すると、SDL スキーマ定義を提供し、対応する Nexus コード (リゾルバーなし) を出力できます。

SDL converter


優れた開発者体験を目指して

Nexus API は、開発者体験に特別な注意を払って設計されています。主な設計目標は次のとおりです。

  • デフォルトでタイプセーフ
  • 可読性
  • 開発者のエルゴノミクス
  • Prettier との容易な統合

API を構築するときに実行されている開発サーバーは、導入したばかりのスキーマ変更に対して常にオートコンプリートとエラーチェックを取得できるようにします。

GraphQL Playground の新しいスキーマポーリング機能を使用すると、スキーマを調整すると GraphQL API も瞬時にリロードされます。


ご意見をお聞かせください

私たちは GraphQL Nexus に非常に興奮しており、皆様もそうなることを願っています。公式のを調べたり、ドキュメントの「はじめに」の手順に従って、Nexus をぜひお試しください。

問題が発生した場合は、GitHub issue をオープンするか、Slack でお問い合わせください。

次回の投稿をお見逃しなく!

Prisma ニュースレターに登録する