SlideShare a Scribd company logo
SPAを選択した理由と
その結果
~Reactを添えて~
株式会社日本プロテック
疋田直樹
2 0 1 9 年 1 2 月 1 0 日
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
会社紹介
社名 株式会社日本プロテック
設立 1982年12月
代表取締役 早川 誠
所在地 東京都千代田区鍛冶町
■経営理念
【真摯】Integrity
【相乗効果】Synergy
【継続】Continue
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
会社紹介
Bot
RPA
IoT
AI
ERP/SCM
Mobile
Database
EC
Logistics
Cloud
HR
見える化
営業強化
グローバル展開
MRP
技術課題 経営課題
Sales
CRM 情報共有
生産管理
Migration
会計
企画から運用まで、システムライフサイクルをトータルサポート
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
自己紹介
• 疋田 直樹(ひきた なおき)
• 株式会社日本プロテック所属
– 業務システムの受託開発がメイン
– Java、C#のWeb開発案件が多い
– その他、LINEチャットボットやWatsonなどなど...
たぶん皆さんと同じようなバックグラウンドを持っています
SPAを選択した理由と背景
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
2年くらい前までの主な技術スタック
Web デスクトップ
Razor
Windows
Forms
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
ここ2年くらいの主な技術スタック
Web デスクトップ
Razor
Windows
Forms
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
ここ2年くらいの主な技術スタック
TypeScript
React
Vue.js
Angular
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
ここ2年くらいの主な技術スタック
TypeScript
React
Vue.js
Angular
Single
Page
Application
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Why SPA?
レガシー 複雑 生産性
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAを採用した理由(1):レガシーシステム移行
• RIA(Silverlight、Flash、Flex)からの移行案件が増加
• SPAへの移行はメリットが多い
✓ UX(操作性など)の維持
✓ データグリッドなどリッチなUI部品を使える、使いやすい
✓ 既存のコンポーネント構成やバックエンドをそのまま活かせる
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAを採用した理由(2):複雑な状態管理の限界
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
本日の裏テーマ
クライアントサイドは
状態との戦いである
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAを採用した理由(3):単純に生産性が高い
• 共通化に関係なく、細かくコンポーネントに分けて開発
– コンポーネントは自らの責務にだけ関心を持つ
• 分業しやすい
– 人をたくさんぶち込めますよ!
• JavaScript(Node.js)のエコシステムが強い
– CSSのモジュール化からコーディング規約のチェックまで何でもある
• TypeScriptが最高
開発事例
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React開発事例:アサイン管理アプリ
• プロジェクトへの人のアサインを管理するアプリ
• 元はExcel
• 約3人月かけて開発(今も追加機能を実装中)
• まだ一画面しかないが、けっこう複雑
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React開発事例:アサイン管理アプリ
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React開発事例:アサイン管理アプリ
• 状態の例
– 未保存データ一覧
– 行挿入
• 必ず一番下に追加する
– 行削除
• 必ず1行空白行を残す
– 独自のフィルター、ソート、グルーピング
– 導出項目
• フィルター毎の件数、選択されたプロジェクトの情報(金額や工数など)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React開発事例:アサイン管理アプリ
• その他機能
– Service Workerによるオフライン対応(PWA)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React開発事例:アサイン管理アプリ
カテゴリ ライブラリ
クライアント側
言語 TypeScript
フレームワーク React
CSSフレームワーク Office UI Fabric React
UIコンポーネント Wijmo
サーバー側
言語 Scala
フレームワーク Scalatra
DB PostgreSQL
技術スタック
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
その他の事例
• React
– 製品のキャンペーン設定システム
– 製品の構成管理システム
• Vue.js
– 機器の定期検査管理システム
– 被服管理システム
• Angular
– クラウド会計システム
– 倉庫管理システム
意外といける
Reactを選択した理由
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactを選択した理由
状態を一番うまく扱えそうだったから
Reactの基礎
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎
✓ ただの関数の組み合わせである
✓ 状態を局所化する
ポイント
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactを選択した理由
ただの関数の組み合わせ
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:ただの関数の組み合わせ
html = component(props)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:ただの関数の組み合わせ
html = component(props)
計算結果 関数 引数
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:ただの関数の組み合わせ
※あくまでイメージです。実際のReactのコードとは異なります。
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:ただの関数の組み合わせ
Card()
Avatar(p) Profile(p)
https://1.semantic-ui.com/views/card.html
ツリー構造
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:ただの関数の組み合わせ
• おさらい
– Reactは関数の組み合わせでコンポーネントを構築する
– 関数呼び出しの結果としてHTMLが返るようなイメージ
• 補足
– クラスを使った書き方もあるが、非推奨という流れになっている
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎
状態の局所化
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化 何回呼び出しても
結果は同じ
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
• 副作用がない純粋な関数
• いつ何回実行しても結果は同じ
• 状態を持たない(DBアクセス、
ファイル読みこみも無し)
• 引数(props)が同じであれば必
ず同じ結果が返る
関数型プログラミングからの影響
考えることが減りバグも減る
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
純粋ではない例
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
Card(p)
Avatar(p) Profile(p)
props props
props
親のpropsが同じなら
子も同じ結果になる
状態を持たない
コンポーネント
propsが変わると
再描画される
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
Form
TextBox
Radio
Button
props props
props
state
コンポーネントに状態を
持たせることもできる
状態を持つ
コンポーネント
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
App
XXX XXX XXX
XXX XXX XXX XXX
props props props
props props props props
props
状態を最小限に抑える
state state
Reactアプリの
基本的な構成
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
• おさらい
– Reactは状態を極力持たない・扱わないような思想と仕組みを持っている
• 補足
– 親に値を渡すときはコールバックを使う
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎:状態の局所化
Form
TextBox
Radio
Button
props props
props
props = {
text,
onTextChanged
}
onTextChanged(“疋田”)
コールバックによる
値の引き渡し
state
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎
• ここまでのおさらい
– Reactは主に純粋な関数の組み合わせでアプリ、コンポーネントを構築する
– コンポーネントに状態(state)を持たせることもできる
• ただし、できる限り避けるように
– 値の受け渡し
• 上から下はprops(引数)
• 下から上はコールバック
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの基礎
Reactの問題とFlux&Redux
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
App
XXX XXX XXX
XXX XXX XXX XXX
props props props
props props props props
props
状態を最小限に抑える
...が規模が大きくなると?
state state
Reactアプリの
基本的な構成
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
App
XXX XXX XXX
XXX XXX XXX XXX
props props props
props props props props
state
大元のstateの値に
よってアプリの状態が
一意に定まる
状態局所化を徹底
したパターン
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
入力フォームA
入力フォームB
ボタン
ボタン
アイテム詳細
状態
状態
状態
状態
状態
※過度に悪いイメージを植え付けています
React以前
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
React
state(データ) アプリ全体を表す関数
(コンポーネント)
HTML(アプリ)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
html = component(props)
計算結果 関数 引数
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
App
XXX XXX XXX
props props props
state
このくらいの規模
ならよいが...
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
App
XXX XXX XXX
XXX XXX XXX XXX
props props props
props props props
大規模になるとpropsと
コールバックの
バケツリレーがつらい
props
state
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
• Flux
– Facebookが提唱したアーキテクチャ
• Redux
– Fluxに独自解釈を加えて実装したライブラリ
– Reactの状態管理ライブラリでデファクトスタンダードの位置にある
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
Fluxのイメージ(処理が単方向であることに注意)
https://facebook.github.io/flux/docs/in-depth-overview/
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
App
XXX XXX XXX
XXX XXX XXX XXX
props
props props propsprops
state
(store)
Redux
適用後
stateとコンポーネント
が直接やり取りできる
ようになる
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
Before After
Action
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
• データと処理が1方向にしか流れないためシンプルになる
✓ 処理を追いやすい、デバッグしやすい
✓ 書き方が統一される、悩まずに済む
✓ バグを仕込みにくい
✓ 影響範囲が予測しやすい
業務システム開発、チーム開発に最適
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
Reactの問題とFlux&Redux
• おさらい
– React単体ではスケールしない
– 業務システム開発ではReduxを使うべし
SPAとReactを採用した結果
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAとReactを採用した結果
うまくいった
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAとReactを採用した結果
• 予想通り、機能、データ、開発者が増えても破綻しなかった
この流れが本当に偉大
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAとReactを採用した結果:開発フロー
サーバー側とインターフェース決める
Reactコンポーネントを書く
Redux関連のコードを書く
テスト
(サーバー側未完成ならダミーデータで)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAとReactを採用した結果
• 学習コスト
– 最初は意味がわからん!のは仕方ない
「state?」「Redux??」「Action???」
– 書き方がカッチリ決まってるので、書くだけなら思ったより簡単
– 最初から思想や意義を理解してもらうのは難しい
とりあえず書いてもらおう
– Angularよりは学習コストが低い印象
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
SPAとReactを採用した結果
• サードパーティーのコンポーネント最高!
– Wijmo
– Office UI Fabric React
• Reduxのミドルウェア最高!!
種類が豊富なうえ使い方が似ている
React採用時の注意点
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:共通化
• 必要がないのに共通化しない
– 実際のところ共通化できるようなコンポーネントは多くない
• 共通化に関係なく、ある程度細かくコンポーネントを切っていく
– 各コンポーネントが自分の責務に集中することで見通しがよくなる
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ライブラリ
• ライブラリ選定
– ReactはただのUIライブラリなので色々組み合わせる必要があって大変
...と言われるが、実績があるライブラリの数はそこまで多くない
少し調べればカタイ組み合わせはすぐにわかる
– npm trendsとGitHubを参考にすると○
– 後はAPIの使いやすさやファイルサイズで決めればOK
(TypeScriptを採用したのであれば型定義の有無もチェック)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ライブラリ
npm trends GitHub
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ライブラリ
• 今回採用したライブラリ
– redux-saga(Redux非同期処理)
– redux-persist(stateのローカル保存)
– Emotion(CSS in JS)
– Wijmo(UIコンポーネント)
– Office UI Fabric React(UIフレームワーク)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ライブラリ
• Redux非同期処理ライブラリ
– redux-thunk(薄すぎる)
– redux-saga(意外とシンプル!だけど機能豊富で伸びしろもアリ)
– redux-observable(Rx経験者ならよいかも)
– 自作(やめておいたほうが...)
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ライブラリ
• WijmoとReact
– 相性:おおむねOK(2018) -> バッチリOK!(2019)
– 特にデータグリッドを使うのであればマスト
– FlexGridはReduxとの組み合わせ方に気をつける必要アリ
DataGrid
状態
OR DataGrid
状態
Redux
状態
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:ボイラープレート
• Reduxを採用すると書くコードの量が激増する
– しかも同じようなコードばかり...
– ヒイヒイ言いながら書いていた
ReactとReduxの改善で最近解決した
React:Hooks(Reactの新機能)
Redux:Redux Toolkit(公式のラッパー、ヘルパー)
絶対にこれらを
駆使すべき
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:パフォーマンス
• ほとんど完成してからパフォーマンス問題が発覚
– 開発者が使うマシンはスペックが高いので気づかなかった
– Reactに限らずSPA超あるある(辛い...)
Chromeで低スペックマシンをシミュレートしながら
地道に改善していった
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:パフォーマンス
Chrome開発者ツールの
Performanceタブで低スペック
CPUをシミュレートできる
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:パフォーマンス
• 大規模システムで初期表示時のパフォーマンスが問題になる場合は
コード分割(Code-Splitting)を検討しよう
Before After
Login Page A
Page B Page C
Page A
Page B Page C
Login
すべての画面のスクリ
プトがダウンロードさ
れる
実際に表示される画面
のスクリプトしかダウ
ンロードされない
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:認証
• 認証は今まで通りのCookie-Sessionベースでも十分
– JWTなどのトークンは扱いが難しい
• ログイン画面だけ別にするのもアリ
Login SPA
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
React採用時の注意点:Reactの動向
• Reactは基本的にFacebookが自分たちのために作っている
• 我々はFacebookではないので、それいる!?みたいな機能も
• ただ、不要な機能は使わなければいいだけではある
(Reactは後方互換性をとても大事にする)
Concurrent ModeとSuspenseは追っておいた方がよいかも
さいごに
Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved.
さいごに
• 業務システム開発全般でReact + Reduxはむしろオススメ
• 最低一人はReactの思想を理解してから導入しよう!
ご清聴ありがとうございました

More Related Content

What's hot

マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
ota42y
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
Recruit Lifestyle Co., Ltd.
 
はじめてのPRD
はじめてのPRDはじめてのPRD
はじめてのPRD
Takuya Oikawa
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
豊明 尾古
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
nasa9084
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
Koichiro Matsuoka
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
pospome
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
NTT DATA Technology & Innovation
 
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
プロダクトの強い軸を作るプロダクトマネジメントフレームワークプロダクトの強い軸を作るプロダクトマネジメントフレームワーク
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
kumiko koshiro
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
 
Coherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceCoherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceToshiaki Maki
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 

What's hot (20)

マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
はじめてのPRD
はじめてのPRDはじめてのPRD
はじめてのPRD
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
 
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
プロダクトの強い軸を作るプロダクトマネジメントフレームワークプロダクトの強い軸を作るプロダクトマネジメントフレームワーク
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
 
Coherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherenceCoherenceを利用するときに気をつけること #OracleCoherence
Coherenceを利用するときに気をつけること #OracleCoherence
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 

Similar to SPAを選択した理由とその結果 ~Reactを添えて~

現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋
Yahoo!デベロッパーネットワーク
 
Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ
Yahoo!デベロッパーネットワーク
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629
Shigeki Morizane
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発
Namito Satoyama
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Kazuya Sugimoto
 
20200428 React Nativeで家計簿アプリを作って得たもの
20200428 React Nativeで家計簿アプリを作って得たもの20200428 React Nativeで家計簿アプリを作って得たもの
20200428 React Nativeで家計簿アプリを作って得たもの
Kota Nishinaka
 
デジタル化への第一歩 「エンタープライズデータレイク構築事例のご紹介」
デジタル化への第一歩  「エンタープライズデータレイク構築事例のご紹介」デジタル化への第一歩  「エンタープライズデータレイク構築事例のご紹介」
デジタル化への第一歩 「エンタープライズデータレイク構築事例のご紹介」
BeeX.inc
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
HajimeSasanuma
 
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCDataSendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
CData Software Japan
 
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
Kazuya Sugimoto
 
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Kazuya Sugimoto
 
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
典子 松本
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
Yahoo!デベロッパーネットワーク
 
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
Masanori Kaneko
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
Yahoo!デベロッパーネットワーク
 
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxiデブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
Masatoshi Ida
 
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアルリクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
Recruit Technologies
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介
Recruit Technologies
 
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
Recruit Technologies
 
ヤフーにおけるデータの可視化
ヤフーにおけるデータの可視化ヤフーにおけるデータの可視化
ヤフーにおけるデータの可視化
Sho Maekawa
 

Similar to SPAを選択した理由とその結果 ~Reactを添えて~ (20)

現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋
 
Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
 
20200428 React Nativeで家計簿アプリを作って得たもの
20200428 React Nativeで家計簿アプリを作って得たもの20200428 React Nativeで家計簿アプリを作って得たもの
20200428 React Nativeで家計簿アプリを作って得たもの
 
デジタル化への第一歩 「エンタープライズデータレイク構築事例のご紹介」
デジタル化への第一歩  「エンタープライズデータレイク構築事例のご紹介」デジタル化への第一歩  「エンタープライズデータレイク構築事例のご紹介」
デジタル化への第一歩 「エンタープライズデータレイク構築事例のご紹介」
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
 
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCDataSendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
 
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
解明! Dynamics 365 Web API 全体像! 第7回JDUC勉強会
 
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
 
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
 
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
 
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxiデブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
デブサミ2020 事業グロースを加速させる「分析基盤」の作り方 japantaxi
 
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアルリクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
リクルートテクノロジーズが語る 企業における、「AI/ディープラーニング」活用のリアル
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介
 
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
 
ヤフーにおけるデータの可視化
ヤフーにおけるデータの可視化ヤフーにおけるデータの可視化
ヤフーにおけるデータの可視化
 

More from Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)

Angularを利用したシステム開発事例
Angularを利用したシステム開発事例Angularを利用したシステム開発事例
グレープシティ製品からみるSPA開発のトレンドと動向
グレープシティ製品からみるSPA開発のトレンドと動向グレープシティ製品からみるSPA開発のトレンドと動向
グレープシティ製品からみるSPA開発のトレンドと動向
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
日常使っているツールを調べる ー Visual Studio Code について ー
日常使っているツールを調べる ー Visual Studio Code について ー日常使っているツールを調べる ー Visual Studio Code について ー
日常使っているツールを調べる ー Visual Studio Code について ー
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
グレープシティと業務システム開発のモダナイゼーション
グレープシティと業務システム開発のモダナイゼーショングレープシティと業務システム開発のモダナイゼーション
グレープシティと業務システム開発のモダナイゼーション
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
.NET CoreアプリでWindowsの外に出発
.NET CoreアプリでWindowsの外に出発.NET CoreアプリでWindowsの外に出発
Webアプリの向こうに見えるPWAアプリ開発
Webアプリの向こうに見えるPWAアプリ開発Webアプリの向こうに見えるPWAアプリ開発
クロスプラットフォームの夢をみる
クロスプラットフォームの夢をみるクロスプラットフォームの夢をみる
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
Toolsの杜 - マーベリック - 「IT×デザイン」のススメ
Toolsの杜 - マーベリック - 「IT×デザイン」のススメToolsの杜 - マーベリック - 「IT×デザイン」のススメ
Toolsの杜 - マーベリック - 「IT×デザイン」のススメ
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
グレープシティのMicrosoft Azure対応への取り組み
グレープシティのMicrosoft Azure対応への取り組みグレープシティのMicrosoft Azure対応への取り組み
グレープシティのMicrosoft Azure対応への取り組み
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 
ActiveReports、20年の歩みとその魅力
ActiveReports、20年の歩みとその魅力ActiveReports、20年の歩みとその魅力
グレープシティのJavaScriptライブラリ
グレープシティのJavaScriptライブラリグレープシティのJavaScriptライブラリ
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
 

More from Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社) (20)

Angularを利用したシステム開発事例
Angularを利用したシステム開発事例Angularを利用したシステム開発事例
Angularを利用したシステム開発事例
 
グレープシティ製品からみるSPA開発のトレンドと動向
グレープシティ製品からみるSPA開発のトレンドと動向グレープシティ製品からみるSPA開発のトレンドと動向
グレープシティ製品からみるSPA開発のトレンドと動向
 
日常使っているツールを調べる ー Visual Studio Code について ー
日常使っているツールを調べる ー Visual Studio Code について ー日常使っているツールを調べる ー Visual Studio Code について ー
日常使っているツールを調べる ー Visual Studio Code について ー
 
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
 
グレープシティと業務システム開発のモダナイゼーション
グレープシティと業務システム開発のモダナイゼーショングレープシティと業務システム開発のモダナイゼーション
グレープシティと業務システム開発のモダナイゼーション
 
.NET CoreアプリでWindowsの外に出発
.NET CoreアプリでWindowsの外に出発.NET CoreアプリでWindowsの外に出発
.NET CoreアプリでWindowsの外に出発
 
Webアプリの向こうに見えるPWAアプリ開発
Webアプリの向こうに見えるPWAアプリ開発Webアプリの向こうに見えるPWAアプリ開発
Webアプリの向こうに見えるPWAアプリ開発
 
クロスプラットフォームの夢をみる
クロスプラットフォームの夢をみるクロスプラットフォームの夢をみる
クロスプラットフォームの夢をみる
 
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
Toolsの杜 - 富士通九州システムズ&グレープシティ -「これまでの業務アプリケーションはどうなる?」
 
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
Toolsの杜 - ランチセッションB - HTML5時代の業務アプリケーション開発にマッチ!グレープシティ JavaScript製品のご紹介
 
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
Toolsの杜- 弥生株式会社の自動仕訳エンジンを支えるフロントエンド ~ 「ダサいは、バグだ!」を標榜してUXを徹底的に追求する ~
 
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
Toolsの杜 - ランチセッションA - Microsoftの開発環境の変遷とグレープシティの.NET開発支援コンポーネントの最新動向
 
Toolsの杜 - マーベリック - 「IT×デザイン」のススメ
Toolsの杜 - マーベリック - 「IT×デザイン」のススメToolsの杜 - マーベリック - 「IT×デザイン」のススメ
Toolsの杜 - マーベリック - 「IT×デザイン」のススメ
 
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
Excel業務をWebアプリに!コンポーネントベンダーが眺めたフロントエンド開発
 
グレープシティのMicrosoft Azure対応への取り組み
グレープシティのMicrosoft Azure対応への取り組みグレープシティのMicrosoft Azure対応への取り組み
グレープシティのMicrosoft Azure対応への取り組み
 
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
進化する帳票開発ツール「ActiveReports」の最新機能のご紹介
 
ActiveReports、20年の歩みとその魅力
ActiveReports、20年の歩みとその魅力ActiveReports、20年の歩みとその魅力
ActiveReports、20年の歩みとその魅力
 
グレープシティのJavaScriptライブラリ
グレープシティのJavaScriptライブラリグレープシティのJavaScriptライブラリ
グレープシティのJavaScriptライブラリ
 
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
 

Recently uploaded

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 

Recently uploaded (8)

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 

SPAを選択した理由とその結果 ~Reactを添えて~

  • 2. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. 会社紹介 社名 株式会社日本プロテック 設立 1982年12月 代表取締役 早川 誠 所在地 東京都千代田区鍛冶町 ■経営理念 【真摯】Integrity 【相乗効果】Synergy 【継続】Continue
  • 3. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. 会社紹介 Bot RPA IoT AI ERP/SCM Mobile Database EC Logistics Cloud HR 見える化 営業強化 グローバル展開 MRP 技術課題 経営課題 Sales CRM 情報共有 生産管理 Migration 会計 企画から運用まで、システムライフサイクルをトータルサポート
  • 4. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. 自己紹介 • 疋田 直樹(ひきた なおき) • 株式会社日本プロテック所属 – 業務システムの受託開発がメイン – Java、C#のWeb開発案件が多い – その他、LINEチャットボットやWatsonなどなど... たぶん皆さんと同じようなバックグラウンドを持っています
  • 6. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. 2年くらい前までの主な技術スタック Web デスクトップ Razor Windows Forms
  • 7. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. ここ2年くらいの主な技術スタック Web デスクトップ Razor Windows Forms
  • 8. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. ここ2年くらいの主な技術スタック TypeScript React Vue.js Angular
  • 9. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. ここ2年くらいの主な技術スタック TypeScript React Vue.js Angular Single Page Application
  • 10. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Why SPA? レガシー 複雑 生産性
  • 11. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAを採用した理由(1):レガシーシステム移行 • RIA(Silverlight、Flash、Flex)からの移行案件が増加 • SPAへの移行はメリットが多い ✓ UX(操作性など)の維持 ✓ データグリッドなどリッチなUI部品を使える、使いやすい ✓ 既存のコンポーネント構成やバックエンドをそのまま活かせる
  • 12. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAを採用した理由(2):複雑な状態管理の限界
  • 13. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. 本日の裏テーマ クライアントサイドは 状態との戦いである
  • 14. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAを採用した理由(3):単純に生産性が高い • 共通化に関係なく、細かくコンポーネントに分けて開発 – コンポーネントは自らの責務にだけ関心を持つ • 分業しやすい – 人をたくさんぶち込めますよ! • JavaScript(Node.js)のエコシステムが強い – CSSのモジュール化からコーディング規約のチェックまで何でもある • TypeScriptが最高
  • 16. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React開発事例:アサイン管理アプリ • プロジェクトへの人のアサインを管理するアプリ • 元はExcel • 約3人月かけて開発(今も追加機能を実装中) • まだ一画面しかないが、けっこう複雑
  • 17. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React開発事例:アサイン管理アプリ
  • 18. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React開発事例:アサイン管理アプリ • 状態の例 – 未保存データ一覧 – 行挿入 • 必ず一番下に追加する – 行削除 • 必ず1行空白行を残す – 独自のフィルター、ソート、グルーピング – 導出項目 • フィルター毎の件数、選択されたプロジェクトの情報(金額や工数など)
  • 19. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React開発事例:アサイン管理アプリ • その他機能 – Service Workerによるオフライン対応(PWA)
  • 20. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React開発事例:アサイン管理アプリ カテゴリ ライブラリ クライアント側 言語 TypeScript フレームワーク React CSSフレームワーク Office UI Fabric React UIコンポーネント Wijmo サーバー側 言語 Scala フレームワーク Scalatra DB PostgreSQL 技術スタック
  • 21. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. その他の事例 • React – 製品のキャンペーン設定システム – 製品の構成管理システム • Vue.js – 機器の定期検査管理システム – 被服管理システム • Angular – クラウド会計システム – 倉庫管理システム 意外といける
  • 23. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactを選択した理由 状態を一番うまく扱えそうだったから
  • 25. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎 ✓ ただの関数の組み合わせである ✓ 状態を局所化する ポイント
  • 26. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactを選択した理由 ただの関数の組み合わせ
  • 27. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:ただの関数の組み合わせ html = component(props)
  • 28. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:ただの関数の組み合わせ html = component(props) 計算結果 関数 引数
  • 29. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:ただの関数の組み合わせ ※あくまでイメージです。実際のReactのコードとは異なります。
  • 30. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:ただの関数の組み合わせ Card() Avatar(p) Profile(p) https://1.semantic-ui.com/views/card.html ツリー構造
  • 31. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:ただの関数の組み合わせ • おさらい – Reactは関数の組み合わせでコンポーネントを構築する – 関数呼び出しの結果としてHTMLが返るようなイメージ • 補足 – クラスを使った書き方もあるが、非推奨という流れになっている
  • 32. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎 状態の局所化
  • 33. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 何回呼び出しても 結果は同じ
  • 34. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 • 副作用がない純粋な関数 • いつ何回実行しても結果は同じ • 状態を持たない(DBアクセス、 ファイル読みこみも無し) • 引数(props)が同じであれば必 ず同じ結果が返る 関数型プログラミングからの影響 考えることが減りバグも減る
  • 35. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 純粋ではない例
  • 36. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 Card(p) Avatar(p) Profile(p) props props props 親のpropsが同じなら 子も同じ結果になる 状態を持たない コンポーネント propsが変わると 再描画される
  • 37. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 Form TextBox Radio Button props props props state コンポーネントに状態を 持たせることもできる 状態を持つ コンポーネント
  • 38. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 App XXX XXX XXX XXX XXX XXX XXX props props props props props props props props 状態を最小限に抑える state state Reactアプリの 基本的な構成
  • 39. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 • おさらい – Reactは状態を極力持たない・扱わないような思想と仕組みを持っている • 補足 – 親に値を渡すときはコールバックを使う
  • 40. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎:状態の局所化 Form TextBox Radio Button props props props props = { text, onTextChanged } onTextChanged(“疋田”) コールバックによる 値の引き渡し state
  • 41. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎 • ここまでのおさらい – Reactは主に純粋な関数の組み合わせでアプリ、コンポーネントを構築する – コンポーネントに状態(state)を持たせることもできる • ただし、できる限り避けるように – 値の受け渡し • 上から下はprops(引数) • 下から上はコールバック
  • 42. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの基礎 Reactの問題とFlux&Redux
  • 43. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux App XXX XXX XXX XXX XXX XXX XXX props props props props props props props props 状態を最小限に抑える ...が規模が大きくなると? state state Reactアプリの 基本的な構成
  • 44. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux App XXX XXX XXX XXX XXX XXX XXX props props props props props props props state 大元のstateの値に よってアプリの状態が 一意に定まる 状態局所化を徹底 したパターン
  • 45. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux 入力フォームA 入力フォームB ボタン ボタン アイテム詳細 状態 状態 状態 状態 状態 ※過度に悪いイメージを植え付けています React以前
  • 46. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux React state(データ) アプリ全体を表す関数 (コンポーネント) HTML(アプリ)
  • 47. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux html = component(props) 計算結果 関数 引数
  • 48. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux App XXX XXX XXX props props props state このくらいの規模 ならよいが...
  • 49. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux App XXX XXX XXX XXX XXX XXX XXX props props props props props props 大規模になるとpropsと コールバックの バケツリレーがつらい props state
  • 50. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux • Flux – Facebookが提唱したアーキテクチャ • Redux – Fluxに独自解釈を加えて実装したライブラリ – Reactの状態管理ライブラリでデファクトスタンダードの位置にある
  • 51. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux Fluxのイメージ(処理が単方向であることに注意) https://facebook.github.io/flux/docs/in-depth-overview/
  • 52. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux App XXX XXX XXX XXX XXX XXX XXX props props props propsprops state (store) Redux 適用後 stateとコンポーネント が直接やり取りできる ようになる
  • 53. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux Before After Action
  • 54. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux • データと処理が1方向にしか流れないためシンプルになる ✓ 処理を追いやすい、デバッグしやすい ✓ 書き方が統一される、悩まずに済む ✓ バグを仕込みにくい ✓ 影響範囲が予測しやすい 業務システム開発、チーム開発に最適
  • 55. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. Reactの問題とFlux&Redux • おさらい – React単体ではスケールしない – 業務システム開発ではReduxを使うべし
  • 57. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAとReactを採用した結果 うまくいった
  • 58. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAとReactを採用した結果 • 予想通り、機能、データ、開発者が増えても破綻しなかった この流れが本当に偉大
  • 59. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAとReactを採用した結果:開発フロー サーバー側とインターフェース決める Reactコンポーネントを書く Redux関連のコードを書く テスト (サーバー側未完成ならダミーデータで)
  • 60. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAとReactを採用した結果 • 学習コスト – 最初は意味がわからん!のは仕方ない 「state?」「Redux??」「Action???」 – 書き方がカッチリ決まってるので、書くだけなら思ったより簡単 – 最初から思想や意義を理解してもらうのは難しい とりあえず書いてもらおう – Angularよりは学習コストが低い印象
  • 61. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. SPAとReactを採用した結果 • サードパーティーのコンポーネント最高! – Wijmo – Office UI Fabric React • Reduxのミドルウェア最高!! 種類が豊富なうえ使い方が似ている
  • 63. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:共通化 • 必要がないのに共通化しない – 実際のところ共通化できるようなコンポーネントは多くない • 共通化に関係なく、ある程度細かくコンポーネントを切っていく – 各コンポーネントが自分の責務に集中することで見通しがよくなる
  • 64. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ライブラリ • ライブラリ選定 – ReactはただのUIライブラリなので色々組み合わせる必要があって大変 ...と言われるが、実績があるライブラリの数はそこまで多くない 少し調べればカタイ組み合わせはすぐにわかる – npm trendsとGitHubを参考にすると○ – 後はAPIの使いやすさやファイルサイズで決めればOK (TypeScriptを採用したのであれば型定義の有無もチェック)
  • 65. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ライブラリ npm trends GitHub
  • 66. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ライブラリ • 今回採用したライブラリ – redux-saga(Redux非同期処理) – redux-persist(stateのローカル保存) – Emotion(CSS in JS) – Wijmo(UIコンポーネント) – Office UI Fabric React(UIフレームワーク)
  • 67. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ライブラリ • Redux非同期処理ライブラリ – redux-thunk(薄すぎる) – redux-saga(意外とシンプル!だけど機能豊富で伸びしろもアリ) – redux-observable(Rx経験者ならよいかも) – 自作(やめておいたほうが...)
  • 68. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ライブラリ • WijmoとReact – 相性:おおむねOK(2018) -> バッチリOK!(2019) – 特にデータグリッドを使うのであればマスト – FlexGridはReduxとの組み合わせ方に気をつける必要アリ DataGrid 状態 OR DataGrid 状態 Redux 状態
  • 69. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:ボイラープレート • Reduxを採用すると書くコードの量が激増する – しかも同じようなコードばかり... – ヒイヒイ言いながら書いていた ReactとReduxの改善で最近解決した React:Hooks(Reactの新機能) Redux:Redux Toolkit(公式のラッパー、ヘルパー) 絶対にこれらを 駆使すべき
  • 70. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:パフォーマンス • ほとんど完成してからパフォーマンス問題が発覚 – 開発者が使うマシンはスペックが高いので気づかなかった – Reactに限らずSPA超あるある(辛い...) Chromeで低スペックマシンをシミュレートしながら 地道に改善していった
  • 71. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:パフォーマンス Chrome開発者ツールの Performanceタブで低スペック CPUをシミュレートできる
  • 72. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:パフォーマンス • 大規模システムで初期表示時のパフォーマンスが問題になる場合は コード分割(Code-Splitting)を検討しよう Before After Login Page A Page B Page C Page A Page B Page C Login すべての画面のスクリ プトがダウンロードさ れる 実際に表示される画面 のスクリプトしかダウ ンロードされない
  • 73. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:認証 • 認証は今まで通りのCookie-Sessionベースでも十分 – JWTなどのトークンは扱いが難しい • ログイン画面だけ別にするのもアリ Login SPA
  • 74. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. React採用時の注意点:Reactの動向 • Reactは基本的にFacebookが自分たちのために作っている • 我々はFacebookではないので、それいる!?みたいな機能も • ただ、不要な機能は使わなければいいだけではある (Reactは後方互換性をとても大事にする) Concurrent ModeとSuspenseは追っておいた方がよいかも
  • 76. Copyright (C) 2019 NIHON-Protec Co., Ltd. All Rights Reserved. さいごに • 業務システム開発全般でReact + Reduxはむしろオススメ • 最低一人はReactの思想を理解してから導入しよう!