masalibの日記

システム開発、運用と猫の写真ブログです

GraphQLツールとライブラリー

f:id:masalib:20190701005511p:plain

個人的に集めているものです。
使いこなせていないのが残念なところwww
オススメのツールがあったら教えてください。

Apollo

f:id:masalib:20190701002758p:plain

Apolloクライアント

データの取得、キャッシュ、ロードとエラーの状態の追跡、そしてUIの更新のためのすべてのロジックがコンポーネントカプセル化されています。
公式より便利なのが驚きのところです。

apollographql.com

Apolloサーバー

Express、Koa、Hapi、LambdaなどのNode.jsのほとんどすべてのHTTPサーバーフレームワークで動作します。
キャッシュ、モック作成の補助、エラー処理、重複排除、GraphQLプレイグラウンド、認証などの機能があります。

www.apollographql.com

Apolloツール

GraphQLスキーマを構築、モック、およびステッチする

ゾルバー、インターフェース、共用体、およびカスタムスカラーを完全にサポートしたスキーマを生成します。生成されたスキーマはGraphQL.jsと完全に互換性がありま

github.com

Relay

Relayは、GraphQLを使用するアプリケーションのための
高性能でスケーラブルなインフラストラクチャとして機能するようにFacebookによって構築されたJavaScriptフレームワーク
自分の認識だとreact専用のイメージ・・・。

github.com

Prisma

Prismaは、使用可能な既製のCRUD操作、
パフォーマンスの高いクエリ解決エンジン、Apollo(クライアントとサーバー)の互換性、タイプセーフなリゾルバなどを備えた、弾力的で量産対応のGraphQLサーバーを簡単に実装できる
ORM、移行、管理UI(Postgres、MySQL、MongoDB)簡単に言えば、Prismaは従来のORMを置き換え、データベースのワークフローを簡素化できます

github.com

// Retrieve all users
const allUsers = await prisma.users()

// Retrieve a single user by email
const bob = await prisma
  .users({ email: "bob@prisma.io" })

// Retrieve all comments of a post in a single request
const commentsOfPost = await prisma
  .post({ id: "cjl4srkaqqxa30b46pqcyzpyo" })
  .comments()
// Send a raw GraphQL query
const graphQLResult = await prisma.$graphql(`
query {
  posts {
    title
    author { name }
  }
}
`)

// Use GraphQL fragments for field selection
const posts = await prisma
  .posts()
  .$fragment(`
    fragment PostWithAuthorsAndComments on Post {
      title
      author { name }
      comments { text }
    }
  `)

GraphQLエディタ

GraphQLスキーマを理解しやすくするための視覚的なNodeエディタです。
ビジュアルブロックを結合することによってスキーマを作成することができます

github.com

graphqleditor.com

npm i graphql-editor

でインストールできる

GraphQLプレイグラウンド

ドキュメントやコラボレーションの管理などできるGraphQL IDE
デスクトップアプリやWeb版がある。

自動補完とエラーの強調表示ができる
インタラクティブな複数列のドキュメント
リアルタイムのGraphQLサブスクリプション、複数のプロジェクトとエンドポイントによる設定サポート、さらにはApollo Tracingサポートなどの機能を提供します。

GraphiQLと比較して、GraphQLプレイグラウンドは以下が違います

Altair

f:id:masalib:20190701004612j:plain

GraphQLのためのgraphQLサーバーへのgraphQLクエリを作成するためのgraphQLクライアント
ヘッダにリクエストの作成に使用されたHTTPヘッダを追加、編集、削除することができます。
許可されたアクセスを必要とする要求を行うときに認証トークンのヘッダなどを追加する必要がある場合、これは特に便利です。

GraphQL変数を追加することができます。変数を使用すると、クエリで動的な値を簡単に使用できます。

各リクエストに対して表示されたレスポンス統計情報の表示にクエリにかかる時間を簡単に知ることができます。
ドキュメント検索、構文の強調表示、強調表示エラー、クエリ内のエラーも強調表示 いつも通り、expressにインストールできる。

github.com

GraphQL Voyager

GraphQL Voyagerは、任意のGraphQL APIインタラクティブなビジュアルグラフとして表します

github.com

urql

urqlは「リアクトのための高度なカスタマイズと汎用性のGraphQLクライアント」

github.com

import { useQuery } from 'urql';

const YourComponent = () => {
  const [result] = useQuery({
    query: `{ todos { id } }`,
  });

  const { fetching, data } = result;
  return fetching ? <Loading /> : <List data={data.todos} />;
};

AWS Amplifyクライアント

AWS Amplifyは、さまざまなカテゴリのクラウド運用にわたって宣言的で使いやすい
インターフェースを提供します。
AWS Amplifyは、JavaScriptベースのフロントエンドワークフローやモバイル開発者向けのReact Nativeに適しています。
AWS以外クラウドでも使う事ができます

github.com

GraphQLとしてのツールもあるので一応・・記載

例 エンドポイントURLの設定

// configure a custom GraphQL endpoint
Amplify.configure({
  API: {
    graphql_endpoint: 'https://www.example.com/my-graphql-endpoint'
  }
});


// Or configure an AWS AppSync endpoint.
let myAppConfig = {
  // ...
  'aws_appsync_graphqlEndpoint': 'https://xxxxxx.appsync-api.us-east-1.amazonaws.com/graphql',
  'aws_appsync_region': 'us-east-1',
  'aws_appsync_authenticationType': 'API_KEY',
  'aws_appsync_apiKey': 'da2-xxxxxxxxxxxxxxxxxxxxxxxxxx',
  // ...
};
   
Amplify.configure(myAppConfig);

クエリー

import API, { graphqlOperation } from "@aws-amplify/api";

const ListEvents = `query ListEvents {
  listEvents {
    items {
      id
      where
      description
    }
  }
}`;

const allEvents = await API.graphql(graphqlOperation(ListEvents));

11. Graphql-hooks

Graphql-hooksはReact用の最小限のフックファーストのGraphQLクライアントです。
カスタムキャッシュプラグイン、サーバーサイドレンダリングをサポートし、すばやく起動して実行するための最小限の設定が必要です。

github.com

react-hooksもGraphql-hooksも今後使えると思う

www.nearform.com

bitであったコンポーネント

先日、紹介したbitであったコンポーネント

masalib.hatenablog.com

https://bit.dev/giladshoham/github-graphql

感想

Apolloは避けて通れないかな。今の段階は最強じゃないの?

業務で使えないので勉強の速度が遅い。使えるお仕事がほしい。贅沢は言わないからreactと経由でデータ取得したい。