SlideShare a Scribd company logo
1 of 77
Download to read offline
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

TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」Recruit Technologies
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
React + Amplifyで アプリ開発
React + Amplifyで アプリ開発React + Amplifyで アプリ開発
React + Amplifyで アプリ開発虎の穴 開発室
 
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]DeNA
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxTakayuki Shimizukawa
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術dena_study
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングLINE Corporation
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」Recruit Technologies
 

What's hot (20)

Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
React + Amplifyで アプリ開発
React + Amplifyで アプリ開発React + Amplifyで アプリ開発
React + Amplifyで アプリ開発
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]
次世代タクシー配車サービス「MOV」を支える車載ハードウェアとソフトウェアの話 [DeNA TechCon 2019]
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
 
Maven基礎
Maven基礎Maven基礎
Maven基礎
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
 

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

Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Shigeki 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.jsHajimeSasanuma
 
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCDataSendai it commune 03 スポーツジムとダンベルと連携ソリューションとCData
Sendai it commune 03 スポーツジムとダンベルと連携ソリューションとCDataCData 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年) #accfesYahoo!デベロッパーネットワーク
 
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 事業グロースを加速させる「分析基盤」の作り方 japantaxiMasatoshi 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事業部 メシウス株式会社 (旧グレープシティ株式会社)

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

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

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の思想を理解してから導入しよう!