はじめに
皆さんは、Hasuraを使ったことはありますか?
端的に表現すると
「GraphQLのAPIサーバーをDB(Heroku)と連携した状態で、立ててくれる」
というものです。
CLIでいじれたりもするのですが、
僕はブラウザで動かすGUIをいじっております。
ただ、このHasura、かなり厄介な点もあります。
それは、「日本語での学習コンテンツが充実していない」というものです。
そもそもGraphQL自体がかなり新しめのものであるから、仕方ないっちゃ仕方ないですけども。
そんなわけで、個人的にいじったりしていたんですけど、かなり序盤でつまづきました。
どこでつまづいたかというと、「Next.js+Auth0+Hasura」のセットアップチュートリアルです。
まさかの超序盤で申し訳なくなりました。
チュートリアルの通りにやっても、エラーを吐き、そのエラーを調べても解決策が見つからず。。。と言った感じでした。
ただおそらくAuth0側のエラーであり、Auth0自体の経験が少ない自分は、他の認証サービス・パッケージを使えばよいのではないかと考え、
「そういやNext.jsに認証パッケージあったな」と思って調べたら、該当するdocsがあったので、それを参考にエントリしました。
そもそもHasuraって?
Hasuraに関しては先程端的に、
「GraphQLのAPIサーバーをDB(Heroku)と連携した状態で、立ててくれる」
としましたが、もう少し掘り下げてみましょう。
1.QueryやMutationを勝手に作ってくれる
テーブルを作成・定義するだけで、CRUDに関するクエリやミューテーションを扱えるAPIを作ってくれます。
ページネーションとかも実装できるらしいですね、すごい、、、
また、subsciptionも作ることができるので、リアルタイム処理が必要なときも助かります。
ちなみにsubscription?ってなった同志の方はこちらをどうぞ。
2.サーバレスなサービスとつなげることができる
AWS lambdaなどのサーバレスFaaSで独自でDB扱うビジネスロジックを書いて、
それをHasuraを通して実行!なんてこともできるそうです。
3.認証サービスや既存のデータベースとも連携可能
Auth0,firebaseなどのIDaaSと互換性もあります。
また、既存のPostgresDBなら接続ができるそうです。
いずれの特徴も自分はまだ十分に使えるわけではないので、
今後触れる機会を作っていけるように精進します。
nextauth.jsって?
名前の通り、Next.jsを用いて認証機能を実現するためのライブラリです。
sessionやJWT認証を用いた機能の実装や、
GithubやGCPなど、様々なログイン機能に対応しています。
個人的にはdocsがかなり充実していると感じるので、結構好きです。
どうやって実現していくの?
本当にチュートリアルをガン見でできました。
なんならAuth0のdocsより楽だったんじゃ、、、
@skillrecordings/next-auth-hasura-adapter
というライブラリが、
Hasuraとnextauth.jsをつなげてくれるんですね。
コードをQiitaに書き起こそうかとも思ったのですが、
下手に書く必要性も感じなかったので、こちらを参考にしてください。
余談ですが、開発初心者の自分は、
docsのCreate User Table
内が、いきなり説明もなく出てきて困惑しました。
そんなときは、nextauth.jsのdocsを参考にしましょう。
nextauth.jsに準拠したテーブルを作る+Hasura Adapter
でエンドポイントを呼び出し操作することで、
Userテーブルなどの操作を実現するんですね。
おわりに
読んでいただきありがとうございました。
認証で使うライブラリや、JWT認証が個人的に理解が乏しいと感じました。
ただ、これだけははっきりしました。
Hasura めっちゃ便利。