Hasuraをもう少し簡単に試す

####更新情報
無料で利用できたUnuboのサービスですが、残念ながら2020/05/29をもってサービスが終了してしまいました。

We’re shutting down our cloud deployment platform
Hello xxxxx,

We’ve made a tough call to shut down our cloud deployment platform. In the end we couldn’t make the unit economics work for this kind of business, and the product we wanted to offer. We’ll be deleting all customer records and associated data in 10 days: 29 May 2020


##サマリ
GraphQLを試したいと思ったので、他の投稿者の方の情報から、私なりに簡単に構築可能な検証環境の作り方をメモしてみた。

**認証、アクセス制限に関して、緩和した設定なので、そこは留意していただきたい
( 認証についてはこちらの[Hasura GraphQLとAuth0で認証をする](https://qiita.com/shirakiyo/items/72866f19484129d0f100)が大変役に立ちます )**

##Unuboのサインアップ
[Unubo](https://unubo.com/)は無料でも利用できるホスティングサービスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/333fbd4d-2bcc-5593-95c1-35bc6c817835.png)
（こちらの記事[Unuboを使ってみた話](https://qiita.com/tesstesstex/items/d81b323be241a4af8027) を参照しました)

サインアップの流れは参照元の記事、[Node.js,Python,RubyなどのWebアプリを完全無料でホスティング可能な「Unubo」を使ってみた！](https://paiza.hatenablog.com/entry/2019/09/11/Node_js%2CPython%2CRuby%E3%81%AA%E3%81%A9%E3%81%AEWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E5%AE%8C%E5%85%A8%E7%84%A1%E6%96%99%E3%81%A7%E3%83%9B%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%8F%AF)でご確認いただき、アカウントを作成します。

##Deployの作成
アカウント作成後に、プロジェクトを作成するところで、アプリケーションサーバーのコンテナではなく、DBやサービスというのも作成可能なので

Choose what you want to deploy

と聞かれる画面で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/29beb760-2385-9748-8f19-ef15dbc6a26b.png)
PostgreSQLとHasuraの2つを作成します。

- PostgreSQL
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/7b7948fb-6b43-0f95-f3b6-1624a67c32ab.png)
APP NAMEを任意に決めて、REGIONを選択するのですが、ここでREGIONは**”United States”**を選択します。**（このインスタンスと次に作るHASURAのインスタンスを接続させたいのですが、REGIONをASIAにしましたら、接続できませんでした。）**
作成終わると（10秒もかからないかと思います）作成済みのインスタンス情報が表示されますので、ここのDATABASE URLをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/b1e92ed0-01cd-b6ec-318d-26cf56c26d95.png)

- HASURA
PostgreSQL同様にAPP NAMEを決めてREGIONを**"United States"**で作成します。
インスタンス作成後、ダッシュボードが表示されるので、Secretsのところを展開して、設定を入力します。
HASURA_GRAPHQL_ADMIN_SECRET：管理コンソールにログインするときのパスワード値。デフォルト値がUnuboにて設定ずみなので、必要に応じて変更
HASURA_GRAPHQL_DATABASE_URL：先ほど作成したPostgreSQLのDatabase URLをそのまま入力
New Secretのところに
NAME＝＞HASURA_GRAPHQL_UNAUTHORIZED_ROLE
Value＝＞anonymous
としてSAVEボタンで項目追加を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/b4c8aca9-f8ba-2b39-42da-ad95308ff3e3.png)
それでは、画面一番下にある DEPLOY ボタンを押してインスタンス作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/7bc96ace-1549-5633-8ab9-935d7b4f787a.png)
完了したら、VIEW APPボタンを押すと、ログインページが開きます。ここで入力するのは、HASURA_GRAPHQL_ADMIN_SECRETの値ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/02124d3c-c581-e231-e805-7a4ba0ea8e47.png)

##Hasuraでの操作
ログインしました。先ほど初期状態のPostgreSQLを作成したところなので、DATAタブを選択して、HASURAからテーブルを作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/b2b1c43e-8fd1-09e2-9922-004174ac1955.png)
Create Tableをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/50cc8c1b-9d6e-797c-1629-f788acc60d5d.png)
todoを下記のように入力して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/0c513175-1e61-81b7-b63c-774a20bf5269.png)
Add Tableします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/0ef33fe6-f060-15ba-c34f-9b839836dd06.png)
作成済みテーブルの編集画面へ変わります。Permissionsへ切り替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/0ad47148-6aeb-f023-81e0-2bbb553e49b0.png)
Roleとしてanonymousを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/53431f7a-e784-29ad-f5c3-fbeba0aca43e.png)
selectだけ権限を追加してみます。selectのカラムにマウスを移動するとEdit permissionsが表示されるので、クリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/404b0f81-c42f-c04c-d698-0c520c412c2a.png)
Row select permissionsを Without any checks、Column select permissionsでToggle Allで全列有効にして、Save Permissionsをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/e48158bb-7d56-f633-170b-c7dfd46ed8c0.png)
ADD NEW MUTATIONで追加を行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/1d0647a1-0785-cec9-3a4b-6adcded7b650.png)
insert_todoのツリーが左Explorerに現れるので下記のようにcontent、isCompletedを設定、returingの全項目をチェックしてください。右のGraphiQLのところにgraphqlの書式が生成反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/bb96ea05-e65b-8420-7a41-f77defcfde69.png)
GraphiQLの右の三角ボタンで実行します。正しくinsertされれば、右側にinsertの結果がJSONで戻ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/dafe78d9-73d3-9ffd-6bb7-0f7b9db558d0.png)

Insertしましたので、今度はGraphiQLの下にmutation Mymutation {.......となっている入力領域を一度消去し、Exploreの九会ryMyQueryのtodo ツリーを下記の通り設定して、再度実行ボタンを押します。select相当の処理が実施されて右にJSONの取得結果が表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530472/d3aad7b2-6672-20e8-25fe-9b607c972444.png)

##外部からのアクセス
Windows10の最近のコマンドに標準でcurlがインストールされていると初めて知りました。
curlで先ほどのQueryを発行してみます。

```
curl https://[あなたのAPPNAME].unubo.app/v1/graphql -k \
　-H "Content-Type:application/json" \
　-d "{\"query\": \"query {todo { id content isCompleted}}\"}"
```

成功していれば下記の通り結果が返ります。
（**Windows10プリインストールのcurlではシングルクォート　'　が使えないらしく、はまりました**)

```
{"data":{"todo":[{"id":1,"content":"todo of 2019/12/1","isCompleted":false}]}}
```

あとはさらにNode.jsやPythonなどのアプリケーションインスタンスを生成してサーバーを作成しGrpahQLでアクセスしたり、Unuboの提供しているServerlessのインスタンスで同様のことをしたり、といった応用ができるかと思います。

##最後に
NetlifyやFirebaseといった、クラウド上でサービス化されて、１つ上のレイヤーを提供するものがだんだんと充実してきているなと、実感しています。