しんのきです。 久しぶりに個人ブログです。
自社サービスに Hasura を採用している こともあって最近 Hasura のことばかり考えているのですが、国内の情報交換の場が少ないので貴重な交流の場を求めて @bettter_than_i_w さん主催の Hasura Japan User Group 2 #20AW に参加しました。
LT
Hasura を用いたフルスタックアプリケーションのアーキテクトについて
Hasura を実践的に利用するために必要な認証、パーミッション、カスタムロジック(Remote Schema、Actions)について一通りザーッと解説してくださいました。
結局 Remote Schema を書いていったほうが早い、 Actions はあまり使い所が分からないとおっしゃっていたのですが、自分は Hasura v1.2.0 以降では Actions にがっつり寄せていっていたので、質問させていただきました。
HasuraのActionsとRemote Schemasの使い分けはベストプラクティス決まって無さそう。自分はActions派だけどネストした配列とかオブジェクトがまだ対応してない。https://t.co/4fgmDvMmG4 #hasurajapan
— しんのき (@konoki_nannoki) 2020年7月25日
個人的な考察として Remote Schema はリモートの GraphQL サーバ に接続しにいって初めてスキーマが確定するので外部サービスが主導権を握っているのに対し Actions はマイグレーション上に Input と Output が定義できるので Hasura が主導権を握っているという違いがありそうです。
外部サービスが REST か GraphQL かの違いですのでやろうと思えばどちらでも同じことができるのですが、改めて Remote Schema についても考えてみたいなと思いました。
Hasuraを使ったフルスタックアプリケーション開発のための基盤構築
yarn workspace
を使った monorepo 構成プロジェクトでの開発と開発環境、ステージング環境、本番環境の設定などの概観について発表してくださいました。
GraphQL Code Generator を使う場合 monorepo は非常に相性がいいです。特に Hasura は GraphQL 的には Schema First なアプローチというよりは Code First のアプローチに近い思想なので、事前に Schema だけ定義しておいてプロジェクト間で共有しておくということがやりづらく monorepo にしておいたほうがメリットが多いです。
面白かったのは yarn workspace
のトップレベルの package.json
に
"script": { "web": "yarn workspace web", ... }
とか書いておくと yarn web ...
でできるよというのがなるほどといった感じでした。
雑談
Hasura Cloud について
自分はちょっと触ってみた感じ、 Event Trigger とか Actions を設定するための環境変数が設定できなくてまだ実用はできないなと思っていました。
しかしここの環境変数は Key に任意の文字列を入力して自分で定義できるようです。なんと...!
$99/mo というのは他にコンテナ環境をセットアップすることを考えるとそこまで高くなく、 Hasura Pro の機能が使えますので beta が取れたらぜひ使いたいです。
Nhost について
初耳だったのですが Hasura + PostgreSQL + 認証 + ストレージ をまるっとホスティングしてくれる Nhost というサービスも存在するようです。
Hasura は認証などの機能は Pluggable になるように設計されていますが、そこをサービス内で一緒に提供してしまうことで Firebase や AWS Amplify と同じようなことを実現しようというものですね。 正直まだ荒削りですし現段階で触る必要はなさそうです。 (これもビジネスロジック書きたくなったらどうするんだろう?)
ただ一点いいなと思うところがあり、 Hasura の認証機能を設定する際にどの IDaaS を使っていても JWT Claim の設定がどうしても必要になってきますが、もしここがスキップできるのであれば初学者のハードルは更に下がりそうです。 どちらにしろ後々仕組みを理解する必要はありますが、まずはとりあえず動くというところまでたどり着けるのは良いことですね。
感想
Hasura を使っている人たちとわいわいできてできてよかったです。
日本語で Hasura について情報交換できるのは、今回参加したコミュニティの他に自分が観測している限り
- Hasura Community Discord #general-japanese
- GraphQLを使っている人たちの集まり #user_hasura
があるのですがいまいち交流できていないので、もっと盛り上がっていくといいですね。