Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hasuraってナンダ!?
Search
ikuma-t
February 10, 2023
Programming
1
470
Hasuraってナンダ!?
Biz系のメンバー/Hasuraを使ったことのないメンバーへ向けた、Hasura社内勉強会の資料です。
ikuma-t
February 10, 2023
Tweet
Share
More Decks by ikuma-t
See All by ikuma-t
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
480
いまさらのStorybook
ikumatadokoro
0
310
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
4
720
Panda CSS と Ark UI ではじめる個人開発
ikumatadokoro
3
1.2k
見た目から始める生産性向上
ikumatadokoro
10
5.4k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
170
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
880
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
79
28k
たどころくん1号を支える技術
ikumatadokoro
1
230
Other Decks in Programming
See All in Programming
Kaigi on Railsに初参加したら、その日にLT登壇が決定した件について
tama50505
0
120
testcontainers のススメ
sgash708
1
130
php-conference-japan-2024
tasuku43
0
370
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
1.1k
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
340
テストコード書いてみませんか?
onopon
2
240
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
190
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1k
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
270
為你自己學 Python
eddie
0
180
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
320
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
130
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Raft: Consensus for Rubyists
vanstee
137
6.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Done Done
chrislema
182
16k
Faster Mobile Websites
deanohume
305
30k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Transcript
社内勉強会 Hasuraってナンダ!? 〜なんとなくを脱却するためのHasura勉強会〜 2023/02/10 14:30~15:00 @ google meet
よくある光景 よくある光景 そうっすね、 Hasuraはフロントエンド とデータベースの中継役 みたいなやつなので、関係あります この機能ってHasura関係 あるんだっけ? PM エンジニア
よくある光景
空想上の生き物みたいなHasura 毎回同じようなやり取りしている... ここを共通認識にして コミュニケーションコストを下げたい
この勉強会のゴール Hasuraが何をしているのか理解する! 作業にHasuraが影響するのか 判断できるようになる!
目次 A8 Hasuraの役0 &8 Hasuraのニガテなこ! 8 Hasura ConsoleとDB管 48 サービスとしてのHasur"
É8 まとめ
1 Hasuraの役割
このChapterのゴール アプリケーションにおいて Hasuraがどういう役割を 担っているのか理解しよう!
そもそもWebアプリってどうやって作るんだっけ? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL いろいろあるけど、だいたいこんな感じ APIはお仕事を依頼するための窓口 SQLはデータを取得するための言語
実際にこの構成で作ってみると...? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する (だいたい) バックエンドの人 はあっ!
実際にこの構成で作ってみると...? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く できたわ バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 OK はあっ!
実際にこの構成で作ってみると...? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く 3 APIとしてフロントエンドに 公開する できたわ バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 OK
実際にこの構成で作ってみると...? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く 3 APIとしてフロントエンドに 公開する 4 APIを利用してデータを取得 ・更新する画面を実装 できたわ バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 OK は あ っ !
実際にこの構成で作ってみると...? サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を実行する ために必要 ・サービス運営側の管轄になる データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が
必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く 3 APIとしてフロントエンドに 公開する 4 APIを利用してデータを取得 ・更新する画面を実装 できたわ バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 OK は あ っ ! テーブル変更のた び に 毎回 これやる必要が あ る APIができる ま で 、 フロントエンドは 待ち が 発生 する
最近はフロントエンドはPC・モバイルとかいろいろあったりするので、 待ちが発生すると、それら全部の開発に影響出るね yb テーブルの変更のたびに、APIを実装する必要があるV Sb APIが実装できるまで、フロントエンドに待ちが発生する。 APIをバックエンド側で実装する場合の課題
やっと登場 この課題を解消するのが 『Hasura』
Hasuraで作ってみると...? Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 はあっ!
Hasuraで作ってみると...? Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く 3 APIとしてフロントエンドに 公開する バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 はあっ! Hasuraが自動でやってくれる!
Hasuraで作ってみると...? Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない API SQL 1 データベースのテーブルを 追加・変更する 2 ロジックとデータベースへの 接続処理を書く 3 APIとしてフロントエンドに 公開する 4 APIを利用してデータを取得 ・更新する画面を実装 バックエンドの人 フロントエンドの人 (だいたい) バックエンドの人 はあっ! Hasuraが自動でやってくれる!
Hasuraを使うと... データベースからAPIを自動生成するので アプリがめちゃ速く作れる!
HasuraはGraphQL形式のAPIを提供する Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない GraphQL SQL お願いします〜! かしこま! 変換 問い合わせ
GraphQLとSQL GraphQL SQL 参照( EAD) R 更新( PDATE) U 削除(
ELETE) D 登録( REATE) C Mutation INSERT SELECT UPDATE DELETE Mutation Mutation Query ・GraphQLはHasura独自の仕組みではなく、一般的なAPIの様式の1つ ・HasuraはGraphQLでリクエストを受け付けて、リクエストに合わせた形式のSQLに 変換してDBへアクセスしてくれている
2 Hasuraのニガテなこと
よくある光景 ...退職? 全部やっといたるわ! Hasura バックエンド バトンタッチ?
このChapterのゴール バックエンドはどこへ行った? Hasuraがニガテなことを理解して、 説明できるようになろう!
Hasuraのニガテなこと Hasuraは複雑なロジックに 対応できない
単純なケース Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない バックエンドの人 フロントエンドの人 はあっ! データ このデータ使って、 ユーザー情報登録頼む! テーブル OK! ...
複雑なケース Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成する ・真ん中のアイコンはなぜか「Lambda」 データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時には翻訳が 必要
画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や重たい処理には 向いていない バックエンドの人 フロントエンドの人 はあっ! データ このデータ使って、 ユーザー情報登録頼む! もし名前が空欄だったらエラーで、 あとフラグが立ってたら、追加で 別のテーブルへも登録して!! テーブル む〜り〜 ... ...!
詰んだ...?
...!
バックエンド エンジニア 注:画面以外にもたくさんやることがあるので、 バックエンドエンジニアが暇していることはないです。 進行上の都合でこういう演技をしてもらっています。 またせたなッ!
Hasura Actionsとは 複雑な処理を「Hasura Actions」 として定義しておくことで、 別の人に処理を移譲できる仕組み
これが だ! Hasura Actions Hasura ・フロントエンドとデータベースの仲介役 ・データベースの情報から自動でAPIを生成 する データベース
・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時 には翻訳が必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や 重たい処理には向いていない バックエンドの人 フロントエンドの人 はあっ! データ このデータ使って、 ユーザー情報登録頼む! もし名前が空欄だったらエラーで、 あとフラグが立ってたら、追加で 別のテーブルへも登録して!! サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を 行するために必要 ・サービス運営側の管轄になる まかせた!! (Hasura Actions) 登録処理等々
Hasuraが対応できる操作 Hasura GraphQL GraphQL SQL 参照( EAD) R 更新( PDATE)
U 削除( ELETE) D 複雑な処理 登録( REATE) C Mutation GraphQL Mutation GraphQL Mutation INSERT SELECT UPDATE DELETE - Hasura Actions Query
3 Hasura ConsoleとDB管理
このChapterのゴール Hasuraで行うことができるDB操作と その仕組みを理解しよう!
Hasura Console Console コア部分 API生成とかの処理を行う データ管理やGraphQL操作のための画面を提供する ・GraphiQL (GraphQLの試し打ち) ・テーブルの追加・変更 ・データ修正
・SQL実行 ・Hasura Actions定義
Hasura ConsoleによるDB定義変更(1) デモあり Hasura Consoleでぽちぽちやると、 データベースの定義を変更できる。
Hasura ConsoleによるDB定義変更(2) Hasura ConsoleからのDB定義変更も、 最終的にはただのSQL Hasura コア部分 DB定義変更 Hasura Console
データベース DB定義変更のSQL実行
Hasura ConsoleによるDB定義変更(2) 自分の開発環境 他の開発者のDB 適用されない 本番環境のDB 適用されない Hasura Consoleで修正できるのは 接続先のDBのみ
他の環境のDBにも 同じ修正を適用するには?
メタデータとマイグレーションファイル Hasura コア部分 DB定義変更 Hasura Console データベース DB定義変更のSQL実行 メタデータ マイグレーション
変更後のDBの状態 を表したもの 変更差分のSQL を記載したもの メタデータ マイグレーション 変更後のDBの状態 を表したもの 変更差分のSQL を記載したもの 出力 Hasura Consoleで操作をすると、 ・DBの現在の状態: メタデータファイル ・変更差分: マイグレーションファイルとして出力する。 これを適用することで、他の環境のDBも同じ状況にすることができる。
注意 なので、Hasura Console以外から DB定義を変更する場合は、メタデータの 整合性を壊さないように注意
4 サービスとしてのHasura
このChapterのゴール Hasuraはサービス そのサービス体系を理解しよう!
Hasuraはサンフランシスコのスタートアップ 引用元:https://hasura.io/about/ 引用元:https://hasura.io/about/
Hasuraのサービス体系 引用元:https://hasura.io/pricing/ Hasura Cloud Self-hosted Hasura社が持っているサーバ上で、 Hasuraを動かす。プランが上がると、 セキュリティとかパフォーマンスとか の面倒を見てくれる。 自分たちが管理してるサーバ上で
Hasuraを動かす。 自分たちで管理する必要はあるけど、 機能的にはほとんど同じ。
5 まとめ
メタデータ マイグレーション 変更後のDBの状態 を表したもの 変更差分のSQL を記載したもの データベース ・ユーザーのデータを保存するために必要 ・SQLしかしゃべれないので、アクセス時
には翻訳が必要 画面(フロントエンド) ・ユーザーが操作するために必要 ・ユーザー側で動くので危ない処理や 重たい処理には向いていない バックエンドの人 サーバサイド(バックエンド) ・複雑な処理や外部に見せたくない処理を 行するために必要 ・サービス運営側の管轄になる 登録処理等々 Hasura コア部分 DB定義変更 Hasura Console 定義変更時に出力 SQL Hasura Actions (複雑な処理) GraphQL 他環境のDB 反映 Hasura社が提供するサービス Hasura World
ありがとうございました