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
550
Hasuraってナンダ!?
Biz系のメンバー/Hasuraを使ったことのないメンバーへ向けた、Hasura社内勉強会の資料です。
ikuma-t
February 10, 2023
Tweet
Share
More Decks by ikuma-t
See All by ikuma-t
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.3k
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
970
いまさらのStorybook
ikumatadokoro
0
820
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
6
2k
Panda CSS と Ark UI ではじめる個人開発
ikumatadokoro
4
2.7k
見た目から始める生産性向上
ikumatadokoro
12
5.9k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
290
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
1.2k
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
81
32k
Other Decks in Programming
See All in Programming
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
0
550
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.2k
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
210
Implementation Patterns
denyspoltorak
0
140
Graviton と Nitro と私
maroon1st
0
160
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
440
ThorVG Viewer In VS Code
nors
0
530
CSC307 Lecture 02
javiergs
PRO
1
740
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.5k
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
210
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
HDC tutorial
michielstock
1
290
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
180
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
110
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
220
Speed Design
sergeychernyshev
33
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
34
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
The Limits of Empathy - UXLibs8
cassininazir
1
200
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
ありがとうございました