<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Takeshi Amano</title>
    <description>The latest articles on DEV Community by Takeshi Amano (@moksahero).</description>
    <link>https://dev.to/moksahero</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F151743%2F70f80dc1-c2a0-465a-9528-830951e4f2d0.jpeg</url>
      <title>DEV Community: Takeshi Amano</title>
      <link>https://dev.to/moksahero</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moksahero"/>
    <language>en</language>
    <item>
      <title>サーバーレスのビジネスロジックを任意のクラウドで楽に実行できるリアルタイムGraphQL API</title>
      <dc:creator>Takeshi Amano</dc:creator>
      <pubDate>Mon, 08 Apr 2019 00:28:19 +0000</pubDate>
      <link>https://dev.to/moksahero/graphql-api-37lk</link>
      <guid>https://dev.to/moksahero/graphql-api-37lk</guid>
      <description>&lt;p&gt;この記事は以下のVladimir Novicの記事を翻訳したものです。&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/vladimirnovick" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F134361%2F2e49c6a6-15f9-4413-9aae-d8de5ef5e06b.jpg" alt="vladimirnovick"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/vladimirnovick/effortless-real-time-graphql-api-with-serverless-business-logic-running-in-anycloud-2j6b" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Effortless Real-time GraphQL API with serverless business logic running in any cloud&lt;/h2&gt;
      &lt;h3&gt;Vladimir Novick ・ Feb 5 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#graphql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#serverless&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#architecture&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cloudcomputing&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;この記事では、サーバーレスのビジネスロジックを使用して、楽にリアルタイムGraphQL APIを作成し、それをあらゆるクラウドにデプロイする方法を紹介します。釣り記事のように聞こえますか？楽にってどういうこと？全く何もしなくてもいいという訳ではありません。あなたがGraphQLに精通しているか、またはそれについて聞いたことがある、そしてどうやってGraphQLサーバを書き始めるのか疑問に思っているならば、あなたは我々があなた自身のGraphQLサーバをつくると思うかもしれません。またクラウドの導入、サーバーレス機能を扱うことになるでしょう。複雑な事に聞こえますよね。&lt;/p&gt;

&lt;p&gt;えーと、ここでのキーワードは「楽に」です。既存のPostgresまたはその拡張機能の上に、自分の選んだ任意のクラウドで独自のGraphQL APIをセットアップして実行するのは非常に簡単です。この記事ではサーバーをセットアップしたりクラウドの展開について話したりすることはありません。ほんの少しだけはあるかな。この記事では、Hasura.ioオープンソースエンジンのほとんどの機能セットと、独自のサーバーを作成せずにリアルタイムGraphQL APIを実現する方法について説明します。既存のサーバー、Postgres以外のデータベース、またはサーバーレスの機能であっても、その機能を使用して詳細な概要とユースケースを説明します。&lt;/p&gt;

&lt;h2&gt;
  
  
  目次
&lt;/h2&gt;

&lt;p&gt;GraphQLの紹介&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hasura GraphQLエンジンの説明、オープンソースの理由&lt;/li&gt;
&lt;li&gt;Herokuで始めましょう&lt;/li&gt;
&lt;li&gt;他のクラウドでの使い方？&lt;/li&gt;
&lt;li&gt;既存のPostgresの上で走らせる&lt;/li&gt;
&lt;li&gt;Postgresエクステンションについて（PostGIS、TimescaleDB）&lt;/li&gt;
&lt;li&gt;Postgresを使わない場合&lt;/li&gt;
&lt;li&gt;Hasuraエンジンコンソールの概要&lt;/li&gt;
&lt;li&gt;データモデリング、関係、およびアクセス制御&lt;/li&gt;
&lt;li&gt;認証&lt;/li&gt;
&lt;li&gt;リモートスキーマとも呼ばれるカスタム外部GraphQLサーバー&lt;/li&gt;
&lt;li&gt;イベントトリガーによる非同期のサーバーレスビジネスロジック&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GraphQL
&lt;/h2&gt;

&lt;p&gt;GraphQLは流行語であるだけでなく、REST APIを徐々に置き換えているサーバーと通信するために広く採用されている方法です。一言で言えば、GraphQLはAPIとデータを定義する特定の型システムのための問い合わせ言語です。データの形状を定義し、サーバーでこのデータを取得する方法を定義した後は、クライアントで特定のクエリ形式を使用してデータの変更を照会(query)、変更(mutation)、または購読(subscribe)することさえできます。あなたが受け取るデータはあなたが要求したのと全く同じ形になるでしょう。このブログ記事では、GraphQLとは何なのかについては詳しく説明しませんが、GraphQLを初めて使用するのであれば、無料の4日間Bootcampをやっています。&lt;br&gt;
React、Angular、またはVueで既存のGraphQL APIを使用する方法を説明し、NodeJSで独自のGraphQL APIを作成する方法も学習します。&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1092359190994173952-343" src="https://platform.twitter.com/embed/Tweet.html?id=1092359190994173952"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1092359190994173952-343');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1092359190994173952&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;この記事のタイトルから想像できるように、ここでは楽なリアルタイムGraphQL APIについて話します。魔法のようですね。しかし確かにhasura.ioオープンソースのGraphQLエンジンでそう感じています！ここから飛び込んでみましょう!&lt;/p&gt;

&lt;h2&gt;
  
  
  Hasura GrahphQLエンジンとは何ですか？オープンソースの理由
&lt;/h2&gt;

&lt;p&gt;Hasura engineはdockerコンテナ内で動作するエンジンを提供し、新規または既存のPostgresデータベースの上にレイヤーとして存在します。&lt;/p&gt;

&lt;p&gt;GraphQL APIを最初から容易に作成することができるだけでなく既存のPostgresデータベースの上でエンジンを走らせることができます。&lt;/p&gt;

&lt;p&gt;Dockerコンテナーで実行されているので、基本的に、Heroku、Digital Ocean、AWS、Azure、Zeit、GCP、さらにはローカル環境でも、dockerが実行可能な場所ならどこでも実行できます。&lt;/p&gt;

&lt;p&gt;Hasuraエンジンには使いやすいUIが付属しており、GraphiQLツールを使用してquery、mutation、subscriptionをテストすることができます。&lt;br&gt;
それではなぜそれがオープンソースなのでしょうか？それが、&lt;a href="https://hasura.io/" rel="noopener noreferrer"&gt;hasura.io&lt;/a&gt;の共同創設者である&lt;a href="https://twitter.com/tanmaigo" rel="noopener noreferrer"&gt;Tanmai Gopal&lt;/a&gt;に尋ねた質問です。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;それはあなたのスタックの一部だからです。そして今の時代には、オープンソースコンポーネントの透明性と柔軟性が必要です。オープンソースにより、コミュニティへの移行、セキュリティの強化、拡張の柔軟性、およびコミュニティへの参加を促進します。コミュニティによって、オープンソース製品をさまざまな環境で実行できるようになります。 Hasuraは、私たちのコミュニティの助けを借りて、自分の好きな環境でそれを実行し、プロジェクトに情報を提供するマルチクラウドおよびマルチプラットフォームです。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Herokuで始めましょう
&lt;/h2&gt;

&lt;p&gt;hasura.ioにアクセスしたときに最初に出てくるのは、無料のオプションとしてのHerokuへのデプロイ方法です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj3upcmlyzvikbi7g4a3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fj3upcmlyzvikbi7g4a3q.png" alt="front-page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これは非常に迅速で非常に堅実なインストール法ですが、プロダクショングレードのアプリケーションの場合は、別のクラウドを使用することを検討する必要があります。ご覧のとおり、さまざまなクラウドオプションから選択できますが、シンプルにはじめるためにHerokuの無料利用枠の基本設定から始めましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--YeAAfhbB--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AXts79g-89CauVyOgvAvZ1Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--YeAAfhbB--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AXts79g-89CauVyOgvAvZ1Q.png" alt="Deploy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この「Deploy to Heroku」ボタンをクリックすると、HasuraエンジンがHeroku PostgresアドオンとともにHerokuにデプロイされます。&lt;/p&gt;
&lt;h3&gt;
  
  
  ここでは何が起こっているの？
&lt;/h3&gt;

&lt;p&gt;Herokuにはデプロイ可能なテンプレートの概念があります。したがって、Herokuへのデプロイを実行しているときに起こっているのは、このリンクをクリックしているということです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://heroku.com/deploy?template=https://github.com/hasura/graphql-engine-heroku" rel="noopener noreferrer"&gt;https://heroku.com/deploy?template=https://github.com/hasura/graphql-engine-heroku&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;実際ここで展開しているテンプレートは次のとおりです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hasura/graphql-engine-heroku" rel="noopener noreferrer"&gt;https://github.com/hasura/graphql-engine-heroku&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  さらに詳しい説明
&lt;/h2&gt;

&lt;p&gt;このテンプレートのapp.jsonファイル（Herokuの設定が定義されているファイル）を確認しましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--hILCpg41--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AjiT6Hg_gOxonE2YP-WYNog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--hILCpg41--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AjiT6Hg_gOxonE2YP-WYNog.png" alt="app.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このjsonファイルはHerokuにPostgresアドオンを使用してWebレイヤーを無料プランでデプロイするように伝えます。&lt;/p&gt;

&lt;p&gt;app.jsonと一緒にheroku.ymlもあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--9fwtsqVw--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252Aw7w-cVyoJIL9J-zhHp0oPw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--9fwtsqVw--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252Aw7w-cVyoJIL9J-zhHp0oPw.png" alt="dockerheroku"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Dockerが全部やってくれる！
&lt;/h2&gt;

&lt;p&gt;ご覧のとおり、実行するDockerfileがあることを指定しています。そのため、Herokuへのデプロイは基本的に、dockerコンテナをHerokuにデプロイする際の構文上の問題になります。 Digital Oceanの場合、ワンクリックデプロイは少し異なりますが、同じ考え方に沿っています。&lt;/p&gt;

&lt;p&gt;Digital OceanイメージはUbuntu + docker + Postgresがすでに設定されているだけです。&lt;/p&gt;

&lt;p&gt;AWSとAzureの設定はもう少し複雑ですが、考え方は同じです。Dockerコンテナでエンジンを実行し、それをPostgres dbに接続するというものです。&lt;/p&gt;
&lt;h2&gt;
  
  
  他のクラウドは？
&lt;/h2&gt;

&lt;p&gt;あなたがおそらく考え出したように、&lt;a href="https://hasura.io/" rel="noopener noreferrer"&gt;hasura.io&lt;/a&gt;エンジンを動かすことはあなたがDockerとPostgresを動かすことができるどこでも可能です。 AWS、Azure、Zeit、GCPなんでもありです。&lt;/p&gt;

&lt;p&gt;たとえば、Hasuraをローカルの環境に設定しましょう。&lt;/p&gt;
&lt;h3&gt;
  
  
  前提条件
&lt;/h3&gt;

&lt;p&gt;エンジンをローカルにインストールする前に、DockerとDocker Composeが必要です。ここからインストールできます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/install/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Docker Compose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  マニフェストの取得
&lt;/h3&gt;

&lt;p&gt;それでは、docker-composeファイルを次のリポジトリから取得しましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hasura/graphql-engine/tree/master/install-manifests" rel="noopener noreferrer"&gt;https://github.com/hasura/graphql-engine/tree/master/install-manifests&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このリポジトリには、Hasuraをどこにでもデプロイするために必要なさまざまなインストールマニフェストが含まれています。&lt;/p&gt;

&lt;p&gt;それを取得するには、新しいディレクトリを作成して実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/docker-compose/docker-compose.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker containerの実行
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ここでコンテナが実行されているかどうかを確認します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;この様な出力が確認できるはずです&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--cmeyVX1q--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AXSk0VOUZ1La3UVMPcXX3Eg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--cmeyVX1q--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AXSk0VOUZ1La3UVMPcXX3Eg.png" alt="containers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ご覧のとおり、エンジンインスタンスはPostgres dbと共に実行されています。&lt;/p&gt;

&lt;p&gt;これで&lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;からコンソールに行けます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--QT6Jm-wL--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A6-Qz7FD6O4winhcfGegKzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--QT6Jm-wL--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A6-Qz7FD6O4winhcfGegKzg.png" alt="Console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  既存のPostgresの上で走らせる
&lt;/h2&gt;

&lt;p&gt;Hasuraエンジンを既存のPostgresデータベースの上で実行することも可能です。そのために、以前のようにdocker-composeを取得する代わりに、&lt;a href="https://github.com/hasura/graphql-engine/tree/master/install-manifests" rel="noopener noreferrer"&gt;install-manifests&lt;/a&gt;リポジトリからdocker-run.shスクリプトを取得し、&lt;code&gt;HASURA_GRAPHQL_DATABASE_URL&lt;/code&gt;変数を編集します。&lt;a href="https://docs.hasura.io/1.0/graphql/manual/deployment/docker/index.html" rel="noopener noreferrer"&gt;ここから&lt;/a&gt;詳細を読むことができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  Postgresエクステンションについて
&lt;/h2&gt;

&lt;p&gt;完全に動作します。このようにHasuraでPostGIS（Postgres用の空間データベース拡張）を使用することについての&lt;a href="https://blog.hasura.io/graphql-and-geo-location-on-postgres-using-hasura-562e7bd47a2f/" rel="noopener noreferrer"&gt;素晴らしいブログ投稿&lt;/a&gt;がいくつかあります。&lt;/p&gt;

&lt;p&gt;または、&lt;a href="https://blog.hasura.io/using-timescaledb-with-hasura-graphql-d05f030c4b10/" rel="noopener noreferrer"&gt;このブログ記事&lt;/a&gt;で説明されているように、TimeScaleDB（完全なSQLサポートを備えたオープンソースの時系列データベース）でHasuraを使用できます。&lt;/p&gt;

&lt;h2&gt;
  
  
  Postgresを使わない場合
&lt;/h2&gt;

&lt;p&gt;Firebaseを使っていますか？ &lt;a href="https://github.com/hasura/graphql-engine/tree/master/community/tools/firebase2graphql" rel="noopener noreferrer"&gt;firebase2graphql&lt;/a&gt;というfirebaseからの移行ツールがあります。 mongoや他のNoSQLデータベースを使っていますか？JSONダンプをエクスポートして、Hasuraエンジンを通してPostgresデータベースにデータをインポートするための&lt;a href="https://github.com/hasura/graphql-engine/tree/master/community/tools/json2graphql" rel="noopener noreferrer"&gt;json2graphql&lt;/a&gt;ツールを使うことができます。 MySQLを使用している？問題ない。 &lt;a href="https://www.symmetricds.org/" rel="noopener noreferrer"&gt;https://www.symmetricds.org/&lt;/a&gt;を使用してMySQLからPostgresに移行することも、PostgresをMySQL内のデータのプロキシにするために&lt;a href="https://wiki.postgresql.org/wiki/Foreign_data_wrappers" rel="noopener noreferrer"&gt;Postgres FDW&lt;/a&gt;を使用することもできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  Hasuraエンジンコンソールの概要h
&lt;/h2&gt;

&lt;p&gt;これでPostgresデータベースだけでなく、PostGISなどのPostgres拡張機能やTimeScaleDBなどのオープンソースDB上でも、エンジンをローカルまたは任意のクラウドで実行できることがわかりました。しかし、エンジンの機能についてはまだ話していません。それでは、エンジンをローカルで実行したときに見たコンソールに戻りましょう。&lt;br&gt;
コンソールには4つのメインタブがあります&lt;/p&gt;
&lt;h3&gt;
  
  
  GraphiQL
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Endpointとヘッダー
&lt;/h4&gt;

&lt;p&gt;このページの一番上には、クライアントからGraphQL APIにアクセスしたい場合に付ける必要のあるRequest HeaderとAPIのEndpointがあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--UvkbDOJt--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A9bQps8vAjxbfixptH-jzcA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--UvkbDOJt--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A9bQps8vAjxbfixptH-jzcA.png" alt="headers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;新しく作成した例でわかるように、Content-Typeヘッダーしかありません。これは、誰もが私たちのAPIにアクセスできるため、実際には安全ではありません。あなたはそれについての通知をあなたのエンドポイントを保護する方法を説明するドキュメントにあなたを導くでしょう右上のコーナーにあなたのエンドポイントに導くでしょう。&lt;br&gt;
安全なアクセスを持つAPIの別の例を示します。&lt;/p&gt;

&lt;p&gt;新しく作成した例でわかるように、Content-Typeヘッダーしかありません&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UvkbDOJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A9bQps8vAjxbfixptH-jzcA.png%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81%E8%AA%B0%E3%82%82%E3%81%8C%E7%A7%81%E3%81%9F%E3%81%A1%E3%81%AEAPI%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%E5%AE%89%E5%85%A8%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E7%94%BB%E9%9D%A2%E3%81%AE%E5%8F%B3%E4%B8%8A%E3%81%AB%E3%81%82%E3%82%8B%E3%80%8CSecure" rel="noopener noreferrer"&gt;https://res.cloudinary.com/practicaldev/image/fetch/s--UvkbDOJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A9bQps8vAjxbfixptH-jzcA.png。これは、誰もが私たちのAPIにアクセスできるため、実際には安全ではありません。画面の右上にある「Secure&lt;/a&gt; your end point」から詳細を確認することがでいます。&lt;br&gt;
こちらがより安全なアクセスのAPIの別の例です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--8n2vGpkJ--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ApzOCoy5SnCiHTijXu4Migw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--8n2vGpkJ--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ApzOCoy5SnCiHTijXu4Migw.png" alt="xaccess"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ここでは、エンドポイントを保護するX-Hasura-Access-Keyヘッダーがあることがわかります。コンソールへのアクセスも保護されます。&lt;/p&gt;
&lt;h3&gt;
  
  
  GraphiQLのIDEエクステンション
&lt;/h3&gt;

&lt;p&gt;GraphiQLタブには &lt;a href="https://github.com/graphql/graphiql" rel="noopener noreferrer"&gt;GraphiQL&lt;/a&gt; IDEが組み込まれています。これによりブラウザからGraphQL APIをテストするためのquery, mutation, subscriptionを実行することができます。 GraphQLスキーマのドキュメントを調べて、データの形状、および実行できるquery, mutation, subscriptionを確認することもできます。 HasuraエンジンはGraphiQLの上に追加の機能を追加します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--KcoOqk5V--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A6VtgDlPsRre2f1U9gYqqZA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--KcoOqk5V--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A6VtgDlPsRre2f1U9gYqqZA.png" alt="graphiql"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prettify&lt;/strong&gt;  - 左側のパネルでGraphQLの構文を最適化します&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History&lt;/strong&gt; - 最後に実行されたquery, mutationを表示します&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze&lt;/strong&gt; - これは本当に素晴らしいツールです。 Hasuraエンジンはリゾルバーを実行してデータを取得するのではなく、実際にはGraphQLクエリをSQLクエリにコンパイルします。 [Analyze]ボタンをクリックすると、コンパイル方法がわかります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;以下のqueryを見てみましょう&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;author&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;name&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analyzeボタンをクリックすると以下の画面が表示されます&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--lsrqmSLR--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AkgUTU0XQARt-XZblRm0hPg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--lsrqmSLR--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AkgUTU0XQARt-XZblRm0hPg.png" alt="analyze"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ここでは、データベースに対してクエリがどのように実行されるのかを分析でき、あなたやDBAがデータベースの関係をより効率的にする検討することができるようになります。&lt;/p&gt;

&lt;h3&gt;
  
  
  Data
&lt;/h3&gt;

&lt;p&gt;このタブはあなたのPostgresデータベースの管理者のようなものです。ここであなたはあなたのスキーマ構造、テーブルリレーション、ロールとパーミッションの設定を定義でき、さらにカスタムSQLを実行することもできます。次のセクションでデータモデリングについて紹介します。&lt;/p&gt;

&lt;h3&gt;
  
  
  リモートスキーマ
&lt;/h3&gt;

&lt;p&gt;[Remote Schema]タブは、カスタムビジネスロジック用に&lt;strong&gt;カスタムGraphQLサーバー&lt;/strong&gt;のURLを指定できるタブです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--6N92PK8f--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AYXKM1scMRGbq21cvm3qm5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--6N92PK8f--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AYXKM1scMRGbq21cvm3qm5g.png" alt="remove schmeas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasuraエンジンはあなたのhasura GraphQL APIとあなたのカスタムGraphQLサーバーの間のスキーマステッチをするでしょう。たとえば、データベースに何かを追加する前にカスタムビジネスロジックを実行することを考えている場合は、独自のGraphQLサーバーに変換を記述し、サーバーURLを含むhasuraエンジンにセキュリティ用のヘッダーを追加します。&lt;/p&gt;

&lt;h3&gt;
  
  
  イベント
&lt;/h3&gt;

&lt;p&gt;Hasuraエンジンは強力なイベントシステムをもっています。データベースに何かが挿入、更新、削除されたときはいつでも、イベントを発生させることができます。イベントをサーバーレス機能に関連付けることをお勧めします。次のセクションで詳細を説明します。&lt;/p&gt;

&lt;h2&gt;
  
  
  テーブルの作成や更新
&lt;/h2&gt;

&lt;p&gt;[Data]タブにアクセスすると、テーブルを作成するオプションがあります。テーブルを作成するときには、その列と型を指定する必要があります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--1DNggI9H--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A873xA1dBG0gG3MUYWxhDLw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--1DNggI9H--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A873xA1dBG0gG3MUYWxhDLw.png" alt="modifying"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasuraはあなたにヘルパー機能も提供します。私たちの場合、post id主キーのためのユニークな識別子の自動生成のための&lt;code&gt;gen_random_uuid()&lt;/code&gt;です。ここでは、主キー列または複数の列を選択する必要があります。&lt;/p&gt;

&lt;p&gt;他のデータベース管理の様に、外部キーマッピングを異なるテーブルに設定することができます。次の例では、&lt;code&gt;posts&lt;/code&gt;テーブルの&lt;code&gt;authorId&lt;/code&gt;を&lt;code&gt;authors&lt;/code&gt;テーブルのidカラムにマッピングしています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--c3s6CHdB--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A9LFU3gBFWD9HUhhAITjX3A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--c3s6CHdB--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252A9LFU3gBFWD9HUhhAITjX3A.png" alt="foreign"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この例からもわかるように、すでにテーブルがある場合はいつでも、テーブルの変更、行の参照、行の挿入、または関係の追加を行うことができます。&lt;/p&gt;

&lt;h3&gt;
  
  
  クエリの自動生成
&lt;/h3&gt;

&lt;p&gt;Hasuraいいところは、テーブルを追加するたびに、テーブル上の次のqueryとsubscriptionにアクセスできることです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--KxEmz5xz--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AkSlc7sSqo8CqJfQ2u_73Wg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--KxEmz5xz--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AkSlc7sSqo8CqJfQ2u_73Wg.png" alt="query"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ご覧のとおり、それらはかなり強力なものです。データをqueryやsubscribeするだけでなく、フィルタ処理もできます。そしてもちろんquery, mutation, subscriptioが実行できます。&lt;/p&gt;

&lt;h3&gt;
  
  
  関係ビルダー
&lt;/h3&gt;

&lt;p&gt;[Relationship]タブにアクセスすることで、テーブル間に2種類の関係を構築できます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Object Relationship&lt;/li&gt;
&lt;li&gt;Array Relationship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;たとえば、ユースケースの&lt;code&gt;posts&lt;/code&gt;テーブルの&lt;code&gt;authorId&lt;/code&gt;列が&lt;code&gt;authors&lt;/code&gt;テーブルの&lt;code&gt;id&lt;/code&gt;を指す外部キーが設定されていると、&lt;code&gt;posts&lt;/code&gt;に対してクエリを実行できますが、&lt;code&gt;authors&lt;/code&gt;テーブルからGraphQLで入れ子のデータを取得することはできません。そのためには、Object Relationshipを設定する必要があります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--2j7L-EQI--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252Abe-XbotmHFwmE7GfmWEYAw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--2j7L-EQI--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252Abe-XbotmHFwmE7GfmWEYAw.png" alt="object rel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Object Relationshipを作ることをUIのさまざまな部分で提案されます。そのため、&lt;em&gt;提案されたオブジェクトの関係&lt;/em&gt;で[Add]をクリックするか、手動で関係を作成できます。&lt;br&gt;
そうするたびに、あなたはこのようなクエリを実行することができるでしょう：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;id&lt;/span&gt;
    &lt;span class="nx"&gt;author&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;bio&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  パーミッション
&lt;/h2&gt;

&lt;p&gt;Hasuraエンジンでは、ロールとパーミッションを定義し、非常に細かくパーミッションを設定することができます。たとえば、特定のルールが満たされている場合にのみ、特定の列へのアクセスを許可できます。また、カスタム認証Webフックから変数を渡し、それに基づいてカスタムアクセスを定義することもできます。コンソールでは次のようになります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--GY65gVsP--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AoRL24h62QYlByPRZi4Klag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--GY65gVsP--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AoRL24h62QYlByPRZi4Klag.png" alt="rel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この例では、提供されているかどうか&lt;code&gt;X-HASURA-USER-ID&lt;/code&gt;をチェックします。&lt;/p&gt;

&lt;h2&gt;
  
  
  認証
&lt;/h2&gt;

&lt;p&gt;Hasuraエンジンはさまざまな種類の認証をサポートしています。 JWTトークン、カスタムトークン、またはHasura-access-keyを使用できます。内部で起こることは次の通りです：認証層は秘密鍵トークン/ JWT設定またはwebhook設定をチェックします。&lt;/p&gt;

&lt;p&gt;Herokuの例を見てみましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--fatTNINR--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ATWWlRidIqSvqfHtXMAHnag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--fatTNINR--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ATWWlRidIqSvqfHtXMAHnag.png" alt="herokusample"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これで、Herokuダッシュボードに設定された環境変数がわかります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HASURA_GRAPHQL_ACCESS_KEY&lt;/code&gt;  - 秘密鍵トークン&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HASURA_GRAPHQL_AUTH_WEBHOOK&lt;/code&gt;  - カスタム認証プロバイダのURL&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HASURA_GRAPHQL_JWT_SECRET&lt;/code&gt;  -  JWTの設定&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;たとえば&lt;code&gt;HASURA_GRAPHQL_ACCESS_KEY&lt;/code&gt;を使用する場合は、APIまたはコンソールにアクセスできるように&lt;code&gt;X-Hasura-Access-Key&lt;/code&gt;を提供する必要があります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--GeFZJbZL--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ABpXF9lOs61yNhyHq12RCIA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--GeFZJbZL--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ABpXF9lOs61yNhyHq12RCIA.png" alt="auth"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;あなたはここで異なる認証オプションについてもっと読むことができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  リモートスキーマとも呼ばれるカスタム外部GraphQLサーバー
&lt;/h2&gt;

&lt;p&gt;それでは、リモートスキーマを何に使用しますか？次の例を考えましょう。いくつかのカスタムサーバー検証に基づいてデータベースに行を挿入したいとしますが、それでもデータベースの変更をサブスクライブしたいとします。その場合は、リモートスキーマを自分で作成するか、&lt;a href="https://github.com/hasura/graphql-engine/tree/master/community/boilerplates/remote-schemas" rel="noopener noreferrer"&gt;hasuraボイラープレート&lt;/a&gt;のいずれかを使用して作成し、カスタムサーバーのGraphqlエンドポイントURLを指定して接続します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--6N92PK8f--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AYXKM1scMRGbq21cvm3qm5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--6N92PK8f--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252AYXKM1scMRGbq21cvm3qm5g.png" alt="remote"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;あなたのサーバー上で、hasuraエンジンが接続されている同じデータベースに行を挿入する前に、リゾルバーがカスタムロジックを実行するように定義されたmutationがあるとしましょう。では、データが挿入されるとどうなるでしょう？ hasuraエンジンからのGraphQL subscriptionは期待通りに実行されます。&lt;/p&gt;

&lt;h2&gt;
  
  
  イベントトリガーによる非同期のサーバーレスビジネスロジック
&lt;/h2&gt;

&lt;p&gt;上記のように、hasuraはイベントの強力な概念を持っています。イベントは、テーブル操作だけでなく列の変更時にも発生する可能性があります。イベントがトリガーされるたびに、イベントデータはwebhook URLに渡されます。これらのWebフックはサーバーレス機能であることをお勧めします。サーバーレス機能を作成するためにこれらの&lt;a href="https://github.com/hasura/graphql-engine/tree/master/community/boilerplates/event-triggers" rel="noopener noreferrer"&gt;ボイラープレート&lt;/a&gt;をチェックできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--zvxn1VDF--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ArDAPtPK_PRfYdpmCc-RfcQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--zvxn1VDF--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%252ArDAPtPK_PRfYdpmCc-RfcQ.png" alt="serverless"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;この概要からわかるように、&lt;a href="https://hasura.io/" rel="noopener noreferrer"&gt;hasura.io&lt;/a&gt;プラットフォームは非常に柔軟で、ほとんどどこでも実行でき、GraphQL APIをあらゆるレベルの複雑さで簡単に作成するのに役立つ多くの機能を備えています。また、Hasuraは&lt;a href="https://github.com/hasura" rel="noopener noreferrer"&gt;オープンソース&lt;/a&gt;であり、HaskellとJavaScriptで書かれているので、すべての貢献は大歓迎です。また、&lt;a href="https://discordapp.com/invite/vBPpJkS" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;でHasuraに参加するか、&lt;a href="https://twitter.com/hasurahq" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;でフォローすることもできます。&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>serverless</category>
      <category>architecture</category>
      <category>japanese</category>
    </item>
  </channel>
</rss>
