Using react at Startup
by
8zca
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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