Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Using react at Startup
Search
8zca
December 19, 2019
Technology
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Using react at Startup
スタートアップ×React LT大会 Coral Developers Nightで発表したスライドです。
8zca
December 19, 2019
More Decks by 8zca
See All by 8zca
DBはそのままで、 ドメインモデルを分けた話
8zca
0
39
APIの意義と向き合い チームで成長した軌跡
8zca
0
94
recoil
8zca
0
140
10min_elixir
8zca
0
48
質問サイトからみる Rubyに関する質問傾向 を調べてみたよ
8zca
0
58
Other Decks in Technology
See All in Technology
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
Local CI × GitHub Actions
gogutan
2
190
Running Kotlin + Quarkus with Lambda
nealle
1
3.7k
How to Design Configuration for Rails Applications
willnet
1
770
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
150
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
Classmethod Company Deck
satoshi7
1
680
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
200
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Git: the NoSQL Database
bkeepers
PRO
433
67k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Building Applications with DynamoDB
mza
96
7.2k
Product Roadmaps are Hard
iamctodd
55
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
How to make the Groovebox
asonas
2
2.5k
Deep Space Network (abreviated)
tonyrice
0
370
The Language of Interfaces
destraynor
162
27k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
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