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
410
Hasuraってナンダ!?
Biz系のメンバー/Hasuraを使ったことのないメンバーへ向けた、Hasura社内勉強会の資料です。
ikuma-t
February 10, 2023
Tweet
Share
More Decks by ikuma-t
See All by ikuma-t
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
3
170
Panda CSS と Ark UI ではじめる個人開発
ikumatadokoro
1
390
見た目から始める生産性向上
ikumatadokoro
10
4.9k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
93
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
650
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
67
25k
たどころくん1号を支える技術
ikumatadokoro
0
180
なんだか うまくいっている を 自分たちの いつもどおり に 定着させるためのチーム戦略
ikumatadokoro
4
580
プロダクト開発を支えるペースメーカー
ikumatadokoro
1
240
Other Decks in Programming
See All in Programming
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
180
1人で挑むSwiftコンパイラ 〜型システム入門編〜
s_shimotori
0
310
マイグレーションコード自作して File-Based Routing に自動移行!! ~250 ページの歴史的経緯を添えて~
cut0
1
240
全力の跳躍を捉える計測アプリを作る
ogijun2018
0
1k
実践 Advanced CallKit 〜快適な通話の実現に向けて〜
mot_techtalk
3
110
iOSDC 2024
auramagi
3
590
マルチモジュールにおけるテスト最適化
fxwx23
0
110
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
370
ドメイン駆動設計を実践するために必要なもの
bikisuke
3
290
数値を文字列に整形する際の落とし穴とその解決策(iOSDC2024 ルーキーズLT) / iOSDC Japan 2024 Formatting Floating-Point Numbers
glassfiber
0
250
Regular Expressions, REXML, Automata Learning
makenowjust
0
180
BasicBasic認証
sadnessojisan
5
2.5k
Featured
See All Featured
Visualization
eitanlees
142
15k
A better future with KSS
kneath
235
17k
Become a Pro
speakerdeck
PRO
22
4.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Into the Great Unknown - MozCon
thekraken
28
1.4k
How To Stay Up To Date on Web Technology
chriscoyier
785
250k
Building Your Own Lightsaber
phodgson
101
5.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
400
65k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
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
ありがとうございました