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
なぜHono×GraphQLを選んだのか?
Search
福嶋淳一
May 13, 2025
Programming
1
2.7k
なぜHono×GraphQLを選んだのか?
【技術選定を突き詰める】Online Conference 2025
https://findy.connpass.com/event/349580/
福嶋淳一
May 13, 2025
Tweet
Share
More Decks by 福嶋淳一
See All by 福嶋淳一
システムリプレイスのタイミングでPlaywrightを入れた話
junichi_fukushima
0
44
Other Decks in Programming
See All in Programming
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
270
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
100
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
140
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
370
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
170
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
1.1k
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
100
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.2k
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
130
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
200
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
270
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Balancing Empowerment & Direction
lara
5
1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
110
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
160
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Transcript
株式会社Schoo / 基盤開発ユニット / バックエンドエンジニア(PL) 福嶋 淳一 なぜHono×GraphQLを選ん だのか? レガシーシステムの再構築に挑んだ技術選定の裏側
今日伝えたいメッセージ
今日伝えたいメッセージ 弊社では2024年12月から、レガシーシステムのリプレイスに着手 し、「次世代プラットフォームの構築 」に取り組んでいます。 このプロジェクトでは、これまで社内に知見やノウハウがなかった 技術をあえて採用しました。その結果、技術面・組織面の両方で失 敗を経験しました。 しかし、だからこそ得られた大きな学びがあります。 それは—— 「受け入れられるリスクと受け入れられないリスクを明確に言語
化し、あとは迷わず進むこと 」。 リスクの地図を書け 後はやるだけ
CONTENTS 01. プロジェクトの概要 02. BFF・Hono × GraphQLの技術選定の理由 03. 成功事例・失敗事例 04.
結論 Agenda
プロジェクトの概要
プロジェクトの概要〜なぜリプレイスするのか〜 システム老朽化 メンテナンスが困難であること サイト応答性の悪化 →「次世代プラットフォームの構築」を目指すと いう目標のもとリプレイスを行うことを決断。 →一度に全ページをリリースするのではなく、 ページ単位でリプレイスする。 ×
BACKEND BFF プロジェクトの概要〜システム構成〜 FRONTEND gRPC / Modular Monolith 高速・軽量なWEBフレーム ワーク
欲しいデータを、1回で、柔軟に 取得できる マイクロサービスの前段階
BFF プロジェクトの概要〜システム連携〜 FRONTEND query { articles { title summary author
{ name } } } 画面に必要な情報だけ 、無駄 なくリクエスト 画面特化しすぎると、処理の重 複しかねない。サービス単位ご とにAPIを整理して提供
BACKEND BFF プロジェクトの概要〜システム連携〜 gRPC / Modular Monolith ArticleService.GetArticles ArticleService.GetAuthors ドメインごとに分かれた
APIか らデータを集めて、フロントに 必要な情報だけを効率よく届 ける橋渡し役 ・モジュールごとに明確な境界 があり依存は最小限 ・APIを画面ではなくドメイン起 点で作る
BFF・Hono × GraphQLの 技術選定の理由
BFFの導入理由 BFF バックエンドは、ドメインごとのシンプルなAPIだけ を提供している。 なので、コンテキストがまたがる場合があります。そこ で、BFFがそのつなぎ役を担い、フロントエンドが扱い やすい形に整えたいため。 過去に、フロントエンドに処理の負担が多すぎる問 題があった。
その経験から、たとえば以下のような処理は、今後は BFFで担当するようにしたいと考えた: ① gRPCの取り扱いなど、複雑な通信処理 ② サーバーとやり取りするためのデータ形式(DTO)の 整形 ③ 認証や認可のロジック
WEBフレームワークでの比較〜軽量代表 vs 多機能代表〜 ▪Hono (軽量でシンプルなフレームワークの代表) • メリット ◦ とても軽くて動作が速い ◦
シンプルでわかりやすく、学ぶのが簡単 • デメリット ◦ 利用者(コミュニティ)がまだ少なく、情報やドキュメントが少ない ◦ GraphQLは標準で対応しておらず、別のライブラリを使う必要がある(特に、Apollo serverに対応してい ないのが難点) ▪Nest.js (機能が一通り揃った、多機能フレームワーク) • メリット ◦ 依存注入(DI)や責任分担のルールがフレームワークで整っており、設計がブレにくい • デメリット ◦ 最初に覚えることが多く、慣れるまでが大変 ◦ @Controller('users')のような独自の書き方(デコレーター)が直感的ではなく、NestJSに強く依存する コードになりやすい
Hono×GraphQLの導入理由 BFF ▪Hono Honoはとても軽量でシンプルなフレームワーク。そ のため、JavaScriptのように変化の激しい技術でも、将 来不要になったときに捨てたり他の技術に切り替えや すいという利点がある 直感的でわかりやすく、学びやすい 非常に高速であること ▪GraphQL
フロントエンドが扱いやすいように、必要なデータを 1回のリクエストで柔軟にまとめて取得できるようにする
成功事例・失敗事例
成功事例 「技術の比較 ⇨ PoCの実施 ⇨ 社内勉強会の実施 ⇨ 1個目の機能作成時はモ ブワークを実施する 」という流れによりチーム全体で納得のいく技術選定を行え
た。 良かったこと① 少しずつ知見を共有していくことで、「 知らない技術への不安 」 をチーム全体で和らげることができた。 良かったこと② 理想的な設計についてチーム全体で議論できたことで、全員 が納得できる構成に仕上げることができた。
失敗事例 知見がないからこそ、デメリットに目が行きがちで、意思決定に少し時間がか かってしまった。(※慎重になって、良かったことももちろんある) 要因① 「技術選定に 100%の正解はない」と頭では分かっていても、実際に行 動に移すのは難しかった。 要因② 「どんな条件が整えば GOサインを出せるのか」が曖昧だった。
<振り返り> 「受け入れられるリスクと受け入れられないリスクを明確に言語化し、あとは迷 わず進むこと (=最後のひと押し! )」ができなかった。目的が明確で、後戻りで きる状態を作って、力強く進むことが必要だった。 このことに途中で気づき、Honoの使用で捨てやすい状態にし、最悪の場合API Gatewayでルーティングして切り替えられば良いと判断し前に進むことを決断。
結論
開発道半ば。 改善することも多々あり、、
リスクの地図をかけ 後はやるだけ
そうしないと、前へ進むことはでき ない。
ご清聴ありがとうございまし た🙏