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
Using react at Startup
Search
8zca
December 19, 2019
Technology
0
350
Using react at Startup
スタートアップ×React LT大会 Coral Developers Nightで発表したスライドです。
8zca
December 19, 2019
Tweet
Share
More Decks by 8zca
See All by 8zca
APIの意義と向き合い チームで成長した軌跡
8zca
0
60
recoil
8zca
0
130
10min_elixir
8zca
0
39
質問サイトからみる Rubyに関する質問傾向 を調べてみたよ
8zca
0
47
Other Decks in Technology
See All in Technology
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
3
140
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
320
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
290
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
550
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
1.7k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
140
あたらしい上流工程の形。 0日導入からはじめるAI駆動PM
kumaiu
5
760
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
210
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.3k
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
180
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
WENDY [Excerpt]
tessaabrams
9
36k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
120
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Statistics for Hackers
jakevdp
799
230k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
Un-Boring Meetings
codingconduct
0
200
Tell your own story through comics
letsgokoyo
1
800
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
230
Transcript
スタートアップ×React ってどうなの? スタートアップ×React LT大会 Coral Developers Night 2019/12/19 1
〜2018 2019〜 名前 経歴 2 自己紹介 決済PFのバックエンド
加盟店管理システム プロダクトの開発全般 (以前から副業で手伝っていました) FEエンジニアの方が入ってきたので今はBE を主に開発しています /チームマネジメント もりわきかずや
3 MagicPrice ホテルの予約や市場データ 日々の推奨価格 予約サイトへ反映 ホテルの収益改善を促進するレベニューマネジメントツール
スタートアップにおいて Reactを採用するメリット はどこにあるのか 4
重要なのはPMFすること 5
空の場合 プロダクトが無いと 「非常に困る」40% 6
• しっかり作ってもPMFしなければ無駄になってしまう • 素早く作りFBを得て改善していく ◦ スクラップ&ビルド ◦ プロダクトのクオリティ > コードのクオリティ 7 ジレンマ
• 初期であれば時間をかけずに作るべし • 空の場合は既に2つプロダクトを出しておりMVPとしての機能 は備えていたがPMFはしていると言えない状況 ◦ 料金設定にフォーカスしたプロダクト ◦ 市場分析にフォーカスしたプロダクト 8
MVP
昨年12月に料金設定プロダ クトをリニューアル 9
• モノリシックなRailsアプリケーション ◦ 肥大化するcontroller • 性質上グラフが多くなる ◦ 肥大化するJS, JQuery
◦ JSファイル単位で管理・開発 • 各種更新処理が多様化 ◦ 従来どおりformでsubmitする ◦ ajaxでpostする(APIを作る) 10 抱えていた課題
課題へのアプローチ • SPA化 ◦ モノリシックなプリケーションの保守運用は大変だという のはわかりきっていた • BEはRailsのまま。APIを提供するだけ(BFF的) ◦ Decorator,
Presenter, ViewModel … みたいな概念はフ ロントで持つことでロジックに専念できる ◦ 既存のモジュールを使い回せる • じゃあFEは? 11
開発チーム 12 CPO バックエンド インフラ 業務委託Fさん(週4) バックエンド React少し わたし(週1) バックエンド
Vue少し
Reactにした • Vueはわかりやすい、開発立ち上がりもはやく、ドキュメントも 充実している • 開発貢献では 「Fさん > 週1の自分」 ◦
Reactにしたほうが速度出る 13 ユーザに届ける価値が変わらないならどちらでもよい(もちろん比較はします) 速度が遅くなる=プロダクトリリースが送れる=PMFが遠くなる
その他のメリット • TypeScriptを一緒に導入した ◦ 相性がよい ◦ テストが無くてもビルドの時点でこけるので変更に強い (=影響範囲の特定が楽) • Web
Developer Roadmap • コンポーネント指向、再利用性、パフォーマンス ◦ HTMLは長くてもいいけどコードになると分割しなくちゃと いう気になる(という謎の思考) 14
TypeScript styled-components Redux UIフレームワークは自作 AtomicDesign 15 React Rails nginx MySQL
S3 Redis Elastic Search 構成 よくある構成
16 src/ services/ state/ ducks/ state単位/ views/ components/ atoms/ molecules/
containers/ organisms/ pages/ ディレクトリ構成 定数クラス APIリクエストクラス actions, operations, reducersに分けて管理 organismsとpagesはコンテ ナになるだろうという予想の もと決めた
開発パフォーマンスを出すために • 難しいことはしない ◦ どこでAPIリクエスト投げればよいのか? ▪ middlewareを入れてaction creatorからコールするの が正攻法 ▪
よくわかんなかった… ◦ componentからaxiosで取得しreduxに入れる ▪ accessTokenなどの認証ヘッダはインターセプター ではさみこむ 17
constructor(props: Props) { // … something Api.fetchCompetitor List(year, month) .then(res
=> { if (res) { const list = res.data this.props.competitorListAction (list) } }) .catch(() => { this.setState({ errorStatus: true }) })
開発パフォーマンスを出すために • state管理はOSSから学ぶ ◦ re-ducksパターンを採用 • AtomicDesignの採用 ◦ styled-componentsが便利すぎる ◦
propsで渡さずにコンポーネントを継承して作れる 19 const RoundButton = styled(DefaultButton)` width: 40px; height: 40px; border-radius: 50%; `
失敗 • organismsとpagesがもはやcomponentのレベルに • AtomicDesignは後付け ◦ 先にデザインがあがっていた ◦ 開発効率化のために取り入れたが、同じようで微妙に異 なるパーツが多く無理やり合わせた
◦ 設計段階から協業しましょう • UIはすべて自作 ◦ 時間かかった 20 ココ重要! 実際にユーザに使ってもらえるよう になったのは1月中旬
重要なのはPMFすること 21 コードの保守性は日々の努力で保つ
まとめ • FE/BEが疎結合になり以前より開発しやすい環境をつくれた • Reactを使うメリットはたしかにある ◦ バリバリJS書いてる感もあるし成長実感もある ◦ BEやってた人は合うと思う •
ユーザはReactがどうとか関係ない、プロダクトが全て ◦ ステージにあった選択を 22