SlideShare a Scribd company logo
React
Redux
Storybook
Swagger
でフロント爆速開発
自己紹介
- 名前:小田翔太
- 経歴:
- 上智大学卒業
- 旅行パッケージを扱うベンチャー企業でアルバイト
- ビズリーチ新卒入社 (4月で2年目)
- 〜10月、新卒事業部
- 〜現在、キャリアトレック事業部
- 職業:サーバーサイドエンジニア
- C#(.Net), VB, SqlServer(1年)
- Java, MySql(1年)
- 自作WebAppFW作成中
- Carbon(https://github.com/ShotaOd/carbon)
- 趣味
- サッカー
- スノボ
今日話すこと
- 導入結果
- 実績
- 全体像
- 技術スタック
- 開発フロー
- 開発フロー
- プレゼンテーション開発(React x Storybook)
- Flux開発(Redux x Swagger)
- 今後の課題
導入結果
実績(途中経過)
- プロジェクト
- CareerTrekサービスの求職者側トップページのSPA化
- 開発期間
- 約1ヶ月(2月末開始 〜 3月23日リリース)
- エンジニア
- 新卒×5名
- ベテラン1名
全体像
開発フロー(before)
要件
画面仕様
機能仕様
マークアップ実装
サーバーサイド実装
htmlテンプレート(thymeleaf ...)
非同期リクエスト(js) バリデーション(java, js)
javascript実装
(アニメーションetc)
グレーゾーン
開発フロー(before)
要件
画面仕様
機能仕様
マークアップ実装
サーバーサイド実装
htmlテンプレート(thymeleaf ...)
非同期リクエスト(js) バリデーション(java, js)
javascript実装
(アニメーションetc)
グレーゾーン
Htmlが不十分で
サーバーサイド
エンジニアが書き直す
開発フロー(before)
要件
画面仕様
機能仕様
マークアップ実装
サーバーサイド実装
htmlテンプレート(thymeleaf ...)
非同期リクエスト(js) バリデーション(java, js)
javascript実装
(アニメーションetc)
グレーゾーン
Htmlが不十分で
サーバーサイド
エンジニアが書き直す
そもそも
javascript誰が書くんだっ
け。。。
開発フロー(before)
要件
画面仕様
機能仕様
マークアップ実装
サーバーサイド実装
htmlテンプレート(thymeleaf ...)
非同期リクエスト(js) バリデーション(java, js)
javascript実装
(アニメーションetc)
グレーゾーン
Htmlが不十分で
サーバーサイド
エンジニアが書き直す
そもそも
javascript誰が書くんだっ
け。。。
APIの仕様が変わったから
Javascriptでundefined...
開発フロー(before)
要件
画面仕様
機能仕様
マークアップ実装
サーバーサイド実装
htmlテンプレート(thymeleaf ...)
非同期リクエスト(js) バリデーション(java, js)
javascript実装
(アニメーションetc)
グレーゾーン
Htmlが不十分で
サーバーサイド
エンジニアが書き直す
そもそも
javascript誰が書くんだっ
け。。。
APIの仕様が変わったから
Javascriptでundefined...
フロントとバックエンドで
納品物のキャッチボール
終わらない。。。
開発フロー(after)
要件
画面仕様
機能仕様
UIパーツ実装
APIドキュメント作成
Redux実装
サーバーサイド実装
フロント実装
ReactとReduxで実装すると。。。
開発フロー(after)
要件
画面仕様
機能仕様
APIドキュメント作成
Redux実装
表示確認
With Storybook
サーバーサイド実装
動作確認
With Swagger
フロント実装
UIパーツ実装
StorybookとSwaggerを足してあげると。。。
フロントの構成
React
Storybook
フロントエンド主要技術スタック
WebPack
Redux
react-css-module
Swagger redux-thunk redux-actions
プレゼンテーション
Flux
Redux構成
Presentation
Action
Redux
connect
Prev
State
Reducer
Next
State
Redux
thunk
Props
Store
Middleware
プレゼンテーション構成
プレゼンテーション開発
React with Storybook
プレゼンテーション開発トピック
- jsが自由すぎて辛い
- プレゼンテーションがどこでデータを受け取るか
- 状態管理の意思統一
- ReactとStorybook で高速デバッグ
jsの品質保証、苦労してわかったおすすめLint設定
- ベースはairbnb
- CIに入れてエンジニアのソースコードへの意識向上
- MAX厳しく but カスタマイズは必要(後述)
- 例えば
- comma-dangle
- jsx-a11y/img-has-alt
- ES6、Reactの勉強にもなる
- react/jsx-boolean-value
- object-shorthand
※ 人柱が必要
やりすぎLintルール
- consistent-return
- react/prefer-stateless-function
- class-methods-use-this
- arrow-body-style
consistent-return
- メソッドのreturnが統一されていない場合にエラー
- ある条件のときだけは返り値があって、
- ない場合に、undefinedとしたときに、冗長になる
react/prefer-stateless-function
- Component拡張クラスで、this・propsを一度も使用しない場
合に、Classで定義すると警告
class-methods-use-this
- Class定義内で、this参照がない場合に警告
arrow-body-style
NG OK
プレゼンテーションがどこでデータを受け取るか
参考:http://andrewhfarmer.com/react-ajax-best-practices/
1. Root Component
2. Container Componets
3. Redux Async Actions
4. Relay
プレゼンテーションがどこでデータを受け取るか
参考:http://andrewhfarmer.com/react-ajax-best-practices/
1. Root Component
2. Container Componets
3. Redux Async Actions
4. Relay
React 登場人物
Container Component
● データソースを知っている(stateからデータを取得する)
● 子(Component)をたばねる
● 何をしたいかを知っている
Presentational Component
● viewのパーツに相当
● ‘具体的に何を’表示するかとかには関心がない
概念図(再掲)
プレゼンテーションがどこでデータを受け取るか
状態管理の意思統一
- 状態は原則持たない
- Reactはあくまでピュアな関数
- 例外:表示関連の状態
- サイドバーの表示状態とかまでRedux管理してられない
Redux Three Principles
● Single source of truth
● State is read-only
● Mutations are written as pure functions
Storybookって
- UI開発環境 兼 UIカタログ
- iframeでReactのコンポーネントをうごかす
- 静的なアウトプット(カタログ)の生成ができる
準備①
- npm install -g @kadira/storybook
- package.json
準備②
./.storybook/config.js
準備③
./.storybook/webpack.config.js
Storybook 実演
React × Storybook まとめ
- アプリケーションに組み込まずに開発
- Lintをあえて入れない
- レスポンシブ対応チェック
- データパターン分パーツを用意
- 静的ファイル生成でPM・デザイナーに確認
Flux開発
Redux with Swagger
Flux開発トピック
- Redux構成
- state管理が自由すぎてundefined… ← redux-actions
- 一方通行は良いけど、非同期処理もしたい... ←
redux-thunk
- Swaggerで高速開発
Fluxフロー(再掲)
Presentation
Action
Redux
connect
Prev
State
Reducer
Next
State
Redux
thunk
Props
Store
Middleware
ロジック実装 - Redux ActionCreator①
使用ライブラリ:redux-actions
● Flux-Standard-Actionsというactionオブジェクトの規約通りに
action creatorを定義してくれるライブラリ
ロジック実装 - Redux ActionCreator②
コードサンプル
ロジック実装 - Redux Async Action①
使用したライブラリ:redux-thunk
● 非同期Actionを発火できるようにするためのライブラリ
APIリクエスト レスポンス取得
thunk がないと...
ブロック
ロジック実装 - Redux Async Action②
redux-thunkがあると...
request
Action
API
Request
API
Response
finish
Action
presentation middleware network
show
loader
show data
Flux開発フロー
- apiドキュメント作成
- 静的apiドキュメント生成
- api通信部分実装(モックサーバー)
- サーバーサイド完成後、結合確認
Swagger
- API周りをサポートするとっても大きいツール群
- OpenAPI Specification(Swagger Specification)という規約
- JSON or YAMLで記述
今回使用するツール
- ドキュメント作成
- swagger-editor
- ドキュメント生成(静的)
- bootprint-openapi
- モックサーバー
- swagger-tools
APIドキュメント作成
Swagger Editor
- OpenSpecificationを解釈してくれる公式のエディタ
- リアルタイムでプレビューを反映してくれる
- Docker Container、node、webページとかいろいろな環境で
動くのがある
- 今回は、Docker Containerを使用
(https://hub.docker.com/r/swaggerapi/swagger-editor/)
静的apiドキュメント生成①
bootprint-openapi
- npm
- npm install --save-dev bootprint bootprint-openapi
- package.json
静的apiドキュメント生成②
API通信部分実装
モックサーバー:swagger-tools
準備
- 認証処理は自前で実装する
- CORS(Preflightリクエスト)対応する
モックサーバーサンプルソース
認証処理を追加
CORS対応
今後の課題
- Storybookのテスト機能を導入できていない
- Redux Dev Toolsを使い切れていない
- ボイラープレートコードが量産されてる
- 学習コスト
- 関数型のデータフローへのマインドチェンジ
- API仕様起点のテスト(サーバーサイド)

More Related Content

PPTX
Dart programming language
PDF
Advantages of Cloud Computing for Business
PPTX
Development of Mobile Application -PPT
PPT
Google Maps in Android
PPTX
Raskar 2012, Idea Hexagon
PPTX
Android application development ppt
PDF
2013 426 Lecture 1: Introduction to Augmented Reality
PDF
Flutter vs React Native | Edureka
Dart programming language
Advantages of Cloud Computing for Business
Development of Mobile Application -PPT
Google Maps in Android
Raskar 2012, Idea Hexagon
Android application development ppt
2013 426 Lecture 1: Introduction to Augmented Reality
Flutter vs React Native | Edureka

What's hot (20)

PDF
Mobile App Development
PDF
The Data Distribution Service
PDF
Citrix Netscaler Deployment Guide
PDF
AR-VR Workshop
PDF
Flutter 踩雷心得
PPT
Android ppt
PDF
XR (Extended reality) Current and future trends
PPTX
What Is Mixed Reality & Its Applications?
PDF
Introduction to Flutter - truly crossplatform, amazingly fast
PPTX
Android OS & SDK - Getting Started
PPTX
Day: 1 Introduction to Mobile Application Development (in Android)
PDF
Introduction to mago3D, an Open Source Based Digital Twin Platform
PPTX
Flutter workshop
PDF
Revolutionize DevOps with ML capabilities. Introduction to Amazon CodeGuru an...
PDF
Comp4010 2021 Lecture2-Perception
PDF
Designing Usable Interface
PPTX
Introduction to flutter's basic concepts
PDF
introduction and abstract on Google Glass Major report
PPT
Java multi threading
PPTX
OOPs in Java
Mobile App Development
The Data Distribution Service
Citrix Netscaler Deployment Guide
AR-VR Workshop
Flutter 踩雷心得
Android ppt
XR (Extended reality) Current and future trends
What Is Mixed Reality & Its Applications?
Introduction to Flutter - truly crossplatform, amazingly fast
Android OS & SDK - Getting Started
Day: 1 Introduction to Mobile Application Development (in Android)
Introduction to mago3D, an Open Source Based Digital Twin Platform
Flutter workshop
Revolutionize DevOps with ML capabilities. Introduction to Amazon CodeGuru an...
Comp4010 2021 Lecture2-Perception
Designing Usable Interface
Introduction to flutter's basic concepts
introduction and abstract on Google Glass Major report
Java multi threading
OOPs in Java
Ad

Similar to React Redux Storybook Swagger でフロント爆速開発 (20)

PPTX
Web開発初心者がReactをチームに導入して半年経った
PDF
Reactを使ったVR環境
PDF
The History of Reactive Extensions
PPTX
フロントエンド技術の変遷
PPTX
React.js・ReactNative・Redux入門
PDF
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
PDF
Swaggerを利用した新規サービス開発
PPTX
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
PDF
2014年を振り返る 今年の技術トレンドとDockerについて
PDF
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
PDF
Introducing microsoft learn
PDF
The Fastest Possible Way to Develop an Interactive App
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
PPTX
CloudSQL v2は デキる子なのか?
PPTX
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
PDF
React.jsでサービスを作ってみた話
PDF
Reactive programming
PPTX
いま考えられる限り最も速く対話型アプリを開発する方法
PDF
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
PPTX
WEBサービス開発もくもく会@北千住
Web開発初心者がReactをチームに導入して半年経った
Reactを使ったVR環境
The History of Reactive Extensions
フロントエンド技術の変遷
React.js・ReactNative・Redux入門
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
Swaggerを利用した新規サービス開発
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
2014年を振り返る 今年の技術トレンドとDockerについて
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
Introducing microsoft learn
The Fastest Possible Way to Develop an Interactive App
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
CloudSQL v2は デキる子なのか?
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
React.jsでサービスを作ってみた話
Reactive programming
いま考えられる限り最も速く対話型アプリを開発する方法
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
WEBサービス開発もくもく会@北千住
Ad

React Redux Storybook Swagger でフロント爆速開発