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
スタディサプリ/Quipper オンラインミートアップ #1(Webエンジニア) / 新規サー...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yoshihide TANIGUCHI
July 14, 2021
Programming
3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スタディサプリ/Quipper オンラインミートアップ #1(Webエンジニア) / 新規サービス開発チームの紹介 / Studysapuri online meetup #1
Yoshihide TANIGUCHI
July 14, 2021
More Decks by Yoshihide TANIGUCHI
See All by Yoshihide TANIGUCHI
Raspberry Pi と Netatmo と少しの ruby で作る二酸化炭素濃度モニター君
ravelll
0
110
Ruby の静的型チェックの話
ravelll
0
96
Quipperian and VimConf2019
ravelll
1
5.8k
さくらのフロントエンド さくらの Vue.js // vue.js in SAKURA
ravelll
3
4.5k
PHP7.2で始める型宣言 // Type declaration with PHP 7.2
ravelll
0
290
ISUCONのすゝめ // Shall we ISUCON ?
ravelll
0
120
オブジェクト指向設計とデザインパターンの基礎 / Basics of object oriented design and design pattern
ravelll
0
750
1人から始める大規模Webアプリケーションの言語バージョンアップ / Upgrade PHP in a large application
ravelll
0
160
PHP 5.4 ~ 5.6 での追加機能のおさらいとバージョンアップへの誘い / Re-introduce PHP5.4~5.6 and invitation for upgrading
ravelll
0
110
Other Decks in Programming
See All in Programming
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
120
Oxlintのカスタムルールの現況
syumai
6
1.2k
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
640
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
130
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
170
さぁV100、メモリをお食べ・・・
nilpe
0
160
act1-costs.pdf
sumedhbala
0
130
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
240
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
310
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
260
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
150
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
260
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Docker and Python
trallard
47
3.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Test your architecture with Archunit
thirion
1
2.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Deep Space Network (abreviated)
tonyrice
0
210
How to train your dragon (web standard)
notwaldorf
97
6.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
Transcript
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 新規サービス開発チームの紹介 TANIGUCHI Yoshihide @ravelll スタディサプリ/Quipper オンラインミートアップ
#1(Webエンジニア)
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 Agenda | 01 02 03 新規サービス開発チームについて
開発しているサービスについて 見えている技術的な課題
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 < Hi 👋 • @ravelll (TANIGUCHI
Yoshihide) ◦ バックエンドエンジニア@GMOペパボ ◦ フロントエンドエンジニア@さくらインターネット ◦ Web Engineer@Quipper (2019-06~) • 現チームではバックエンド API の開発とサービスの稼働環境の整備を担当 ときどき Web フロントエンドの開発も
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 新規サービス開発チームについて 01
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 開発チーム ➔ Web 13 人, iOS
6 人, Android 4 人, QA 1 人, PdM 1 人 ◆ Web は 3 つのサブチームに分割 ➔ 2週間1スプリントのスクラム ◆ スクラムセレモニーは Web のサブチームごとと職能ごとに実施中 ◆ 職能横断チーム(feature チーム)の構成も検討中
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 開発の進め方 ➔ PdM が機能の叩き台をメンバーに展開 ➔ みんなで仕様を固めてドキュメント化・Issue
化 ➔ Sprint Backlog に追加、Sprint Planning でメンバーにアサイン ➔ 実装 ◆ 1 人をリードとしてアサイン、必要に応じてペアプロ・モブプロも ➔ 確認
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 利用ツール ➔ コミュニケーション: Slack, Google Meet,
SpetialChat ➔ プロジェクト管理: ZenHub ➔ ドキュメンテーション: GitHub Wiki, GitHub Issue, Google Docs, Google Slides, Miro ➔ デザイン共有: Figma ➔ 有用そうなツールを見つけたら気軽に試せる環境
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 Web Engineer の担当範囲 ➔ 開発する機能の提案・設計 ➔
フロントエンド・バックエンドアプリケーションの設計・実装・運用保守 ➔ アプリケーションの稼働環境の整備 ◆ CI/CD の整備 ◆ アプリケーションの K8s 上への展開(K8s manifest の記述) ◆ Datadog 等を利用した稼働状況の監視や SLI / SLO の設定
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 開発しているサービスについて 02
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 ➔ 学習系のサービス ◆ 目下開発中のサービスなので詳細は🤐 ◆ ドメイン知識がある程度溜まっている状態から開発スタート
◆ ゼロからアプリケーションを書く 開発しているサービスについて
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 アーキテクチャ
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 これまでの意思決定から 3 つをピックアップ ➔ サービス間は基本的に GraphQL
で会話 ➔ 初手 Microservices ➔ バックエンドサービスに複数言語
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 基本的に GraphQL で会話 ➔ API 開発時のクライアント・サーバーの両開発者の協調を促進させたかった
◆ 既存プロジェクトの開発でクライアント(mobile app)側の開発が API の後追いで行われてしまう課題があった ➔ 既存の REST API で起きていた Over-fetching とそれを軽減するための 様々な構造を持つエンティティの量産(i.e. User, UserLite, UserWithABC, ...)を防ぎたかった ➔ 現チームでは主にクライアント側が GraphQL Schema を提案し、 サーバー側の開発者と議論して実装している
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 初手 Microservices ➔ 社内の古くから存在するあるサービスが大きな Monolith になっている
◆ 一部を Microservices に移行中 ➔ 今回作るサービスについては既にドメイン知識が多くあり、分けるべきと思し きドメイン境界が見えていた ◆ 安全に最初から Service を分割することでそれぞれの Service の 開発効率を高く保てそう ◆ 社内に Microservices 運用の知見を増やせそう
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 バックエンドサービスに複数言語 ➔ RoR と Node.js (TypeScript)
◆ Content は責務的に型によるサポートが欲しい → TS Usage は既存の資源・知見を活かして素早く開発したい → RoR ◆ Node.js は社内に運用の知見はほぼ無かったが、それを加味しても恩 恵が勝ると判断 ➔ 社の First language は Ruby だが、目的に応じて柔軟に言語を選んでいる チームが多い ◆ 社内に Go, Elixir のアプリケーションも
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 余談: より良い意思決定のための取り組み ➔ 毎週1時間、リードアーキテクト含む社内の開発者たちが技術トピックを持ち 寄り会話する場(random tech
talk)がある ◆ 開発者全員が参加必須の会ではなく、意思決定を行う上で必須のフ ローというわけでもない ◆ 技術的な意思決定について広く意見が欲しいときはここで会話をすると 大変便利
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 random tech talk の雰囲気
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 見えている技術的な課題 03
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 課題 ➔ Partial Outage への対応 ➔
GraphQL API の運用 ➔ 高頻度で安定したデリバリー
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 Partial Outage への対応 ➔ バックエンドアプリケーション群の一部に問題が発生してもユーザーのサー ビス利用を止めないようにしたい
◆ 例:ユーザーの学習履歴の取得失敗が学習に影響を与えないようにす る ➔ 取り組みたいが現状は具体的な対応に着手できていない状況
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 GraphQL API の運用 ➔ GraphQL のクエリの種別(Operation)の粒度での
SLI / SLO の設定がで きていない ◆ サービスの中で特に体験を劣化させたくない機能を SLI に据えて、機能 が必要とするクエリについての SLO を監視したい ◆ Apollo の data platform サービスである Apollo Studio と Datadog の Apollo 連携を使って解決できるか検証中 ➔ キャッシュ活用、Directive の活用、セキュリティ、…
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 高頻度で安定したデリバリー ➔ スタディサプリの Production リリースは週に1回 ◆
手動 QA test(1 ~ 2日) → リリース ➔ 新規サービスは週1回よりも高頻度にリリースできるようにしたい ◆ QA test の自動化 ◆ Canary Release, Feature Flags など Production リリース時のリスク を削減
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 Quipper では人々の学びを支える 仲間を絶賛募集中です!!!
#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #1 「quipper web engineer」で検索!!!