Using react at Startup
by
8zca
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
スタートアップ×React ってどうなの? スタートアップ×React LT大会 Coral Developers Night 2019/12/19 1
Slide 2
Slide 2 text
〜2018 2019〜 名前 経歴 2 自己紹介 決済PFのバックエンド 加盟店管理システム プロダクトの開発全般 (以前から副業で手伝っていました) FEエンジニアの方が入ってきたので今はBE を主に開発しています /チームマネジメント もりわきかずや
Slide 3
Slide 3 text
3 MagicPrice ホテルの予約や市場データ 日々の推奨価格 予約サイトへ反映 ホテルの収益改善を促進するレベニューマネジメントツール
Slide 4
Slide 4 text
スタートアップにおいて Reactを採用するメリット はどこにあるのか 4
Slide 5
Slide 5 text
重要なのはPMFすること 5
Slide 6
Slide 6 text
空の場合 プロダクトが無いと 「非常に困る」40% 6
Slide 7
Slide 7 text
● しっかり作ってもPMFしなければ無駄になってしまう ● 素早く作りFBを得て改善していく ○ スクラップ&ビルド ○ プロダクトのクオリティ > コードのクオリティ 7 ジレンマ
Slide 8
Slide 8 text
● 初期であれば時間をかけずに作るべし ● 空の場合は既に2つプロダクトを出しておりMVPとしての機能 は備えていたがPMFはしていると言えない状況 ○ 料金設定にフォーカスしたプロダクト ○ 市場分析にフォーカスしたプロダクト 8 MVP
Slide 9
Slide 9 text
昨年12月に料金設定プロダ クトをリニューアル 9
Slide 10
Slide 10 text
● モノリシックなRailsアプリケーション ○ 肥大化するcontroller ● 性質上グラフが多くなる ○ 肥大化するJS, JQuery ○ JSファイル単位で管理・開発 ● 各種更新処理が多様化 ○ 従来どおりformでsubmitする ○ ajaxでpostする(APIを作る) 10 抱えていた課題
Slide 11
Slide 11 text
課題へのアプローチ ● SPA化 ○ モノリシックなプリケーションの保守運用は大変だという のはわかりきっていた ● BEはRailsのまま。APIを提供するだけ(BFF的) ○ Decorator, Presenter, ViewModel … みたいな概念はフ ロントで持つことでロジックに専念できる ○ 既存のモジュールを使い回せる ● じゃあFEは? 11
Slide 12
Slide 12 text
開発チーム 12 CPO バックエンド インフラ 業務委託Fさん(週4) バックエンド React少し わたし(週1) バックエンド Vue少し
Slide 13
Slide 13 text
Reactにした ● Vueはわかりやすい、開発立ち上がりもはやく、ドキュメントも 充実している ● 開発貢献では 「Fさん > 週1の自分」 ○ Reactにしたほうが速度出る 13 ユーザに届ける価値が変わらないならどちらでもよい(もちろん比較はします) 速度が遅くなる=プロダクトリリースが送れる=PMFが遠くなる
Slide 14
Slide 14 text
その他のメリット ● TypeScriptを一緒に導入した ○ 相性がよい ○ テストが無くてもビルドの時点でこけるので変更に強い (=影響範囲の特定が楽) ● Web Developer Roadmap ● コンポーネント指向、再利用性、パフォーマンス ○ HTMLは長くてもいいけどコードになると分割しなくちゃと いう気になる(という謎の思考) 14
Slide 15
Slide 15 text
TypeScript styled-components Redux UIフレームワークは自作 AtomicDesign 15 React Rails nginx MySQL S3 Redis Elastic Search 構成 よくある構成
Slide 16
Slide 16 text
16 src/ services/ state/ ducks/ state単位/ views/ components/ atoms/ molecules/ containers/ organisms/ pages/ ディレクトリ構成 定数クラス APIリクエストクラス actions, operations, reducersに分けて管理 organismsとpagesはコンテ ナになるだろうという予想の もと決めた
Slide 17
Slide 17 text
開発パフォーマンスを出すために ● 難しいことはしない ○ どこでAPIリクエスト投げればよいのか? ■ middlewareを入れてaction creatorからコールするの が正攻法 ■ よくわかんなかった… ○ componentからaxiosで取得しreduxに入れる ■ accessTokenなどの認証ヘッダはインターセプター ではさみこむ 17
Slide 18
Slide 18 text
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 }) })
Slide 19
Slide 19 text
開発パフォーマンスを出すために ● state管理はOSSから学ぶ ○ re-ducksパターンを採用 ● AtomicDesignの採用 ○ styled-componentsが便利すぎる ○ propsで渡さずにコンポーネントを継承して作れる 19 const RoundButton = styled(DefaultButton)` width: 40px; height: 40px; border-radius: 50%; `
Slide 20
Slide 20 text
失敗 ● organismsとpagesがもはやcomponentのレベルに ● AtomicDesignは後付け ○ 先にデザインがあがっていた ○ 開発効率化のために取り入れたが、同じようで微妙に異 なるパーツが多く無理やり合わせた ○ 設計段階から協業しましょう ● UIはすべて自作 ○ 時間かかった 20 ココ重要! 実際にユーザに使ってもらえるよう になったのは1月中旬
Slide 21
Slide 21 text
重要なのはPMFすること 21 コードの保守性は日々の努力で保つ
Slide 22
Slide 22 text
まとめ ● FE/BEが疎結合になり以前より開発しやすい環境をつくれた ● Reactを使うメリットはたしかにある ○ バリバリJS書いてる感もあるし成長実感もある ○ BEやってた人は合うと思う ● ユーザはReactがどうとか関係ない、プロダクトが全て ○ ステージにあった選択を 22