Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React導入時の苦労話とこれからについて
Search
Hiroki Yamamoto
May 23, 2017
Programming
4
6.8k
React導入時の苦労話とこれからについて
2017/5/23 ヒカラボ 「大規模サービスがリスクをとってまでモダンな開発環境にリプレイスした理由~ここだけの苦労話や手法を交えお話します~ 」での発表資料です。
Hiroki Yamamoto
May 23, 2017
Tweet
Share
Other Decks in Programming
See All in Programming
Discover Metal 4
rei315
2
110
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
280
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
710
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
Benchmark
sysong
0
280
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
50
32k
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
330
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
720
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
630
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
250
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
Building Applications with DynamoDB
mza
95
6.5k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
YesSQL, Process and Tooling at Scale
rocio
173
14k
A better future with KSS
kneath
239
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
We Have a Design System, Now What?
morganepeng
53
7.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Designing Experiences People Love
moore
142
24k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Transcript
3FBDUಋೖ࣌ͷۤ࿑ ͱ͜Ε͔Βʹ͍ͭͯ גࣜձࣾΤχάϞ ࢁຊߒو ώΧˑϥϘ
BUYMA について ファッション系のCtoC ECサービス 海外の出品者と国内の購入者をつなぐ https://www.buyma.com/
• サービス開始から10年以上 • PHP & Rails (移行中) • コミットログ見るとすごい古いのがある
アジェンダ • React導入の経緯 • 導入時の辛み • 非SPAなReact • レガシーブラウザ対応 •
ビルド高速化 • これからの課題
3FBDUಋೖͷܦҢ
React導入の経緯 • お問い合わせ機能リプレース案件 • チームはエンジニア3人 + α • 超レガシーなPHP ⇢
Rails + React
技術スタック • React • Redux • Babel • Webpack •
Gulp • Rails(API)
ಋೖ࣌ͷਏΈ
• 大規模なサービスに部分的に取り入れる際の知見が少 ない • React領域と非React領域のデータ連携 • レガシーブラウザ対応がつらい • IE9 •
Androidの標準ブラウザ
非SPAなReact
非SPAなReact ϔομʔ α Π υ ό ʔ 3FBDUྖҬ
React領域と非React領域の連携 ϔομʔ α Π υ ό ʔ 3FBDUྖҬ ͬͪ͜Ͱ ͷมߋΛ
React領域と非React領域の連携 ϔομʔ α Π υ ό ʔ 3FBDUྖҬ ͑Δ ͑Δ
例えば… • 未読メッセージ数 • メッセージを読み終わったら未読数を減らしたい! • 既読にする、未読に戻す機能で増減させたい!
Redux Middleware + jQuery で解決
• データのフェッチや更新アクションで処理を挟み込む • APIの返り値で未読数を受け取る • ついでにStoreも更新する K2VFSZͰඇ 3FBDUྖҬΛߋ৽ 4UPSFΛߋ৽͢Δ ΞΫγϣϯΛൃߦ
• Middlewareに処理を隔離できた • jQueryはできれば使いたくなかった
レガシーブラウザ対応 • 基本はBabelでES5にトランスパイルしている • だがES5が動かないブラウザがある • というか Android4.0標準ブラウザ ← こいつ
のこと
対応しなければならない辛い理由 お問い合わせ以外の機能ではレガシーブラウザでも動く。 BUYMAでは商品購入⇢出品者と購入者の問い合わせ⇢ 取引完了というフローなので、問い合わせが出来ないと取 引完了までのフローが止まってしまう。
どう対応したか • 必要最低限の問い合わせ機能を揃えた非Reactページ (通称:普通ページ)を用意 • ブラウザを判定して普通ページにリダイレクト
ブラウザ判定部分 • ES5のAPIや関数が存在しない • API実行してエラーになる
反省点 • 予めどのブラウザをサポートするかビジネス側と合意を 取るべきだった • リリース後に発覚して急いで実装した • セキュリティ面でもレガシーすぎるブラウザはサービス 全体でシャットアウトすべき
ϏϧυߴԽ
エントリーポイントの増加 お問い合わせ機能以外にもWebpackが使用されることが 増え、エントリーポイントが増加している
エントリーポイントの増加
ビルド所要時間: 11秒
解決方法 • WebpackDllPlugin • HappyPack
WebpackDllPlugin
WebpackDllPlugin • 予め外部モジュールを別のBundleとして切り出す • メインのBundleはDllReferencePluginで参照 • https://github.com/webpack/docs/wiki/list-of- plugins#dllplugin
WebpackDllPlugin • 予めビルドしておくことで毎回ビルドしなくて済むためビ ルド時間が短縮できる! • サイズの大きいライブラリを共通ファイルとして切り出せ るのでトータルのファイルサイズが小さくなる! (CommonChunkPluginと同様の効果)
HappyPack
HappyPack • ビルド高速化用プラグイン • 複数のワーカースレッドでビルドする • 変更されたファイルのみビルドする • https://github.com/amireh/happypack
ビルド所要時間: 6秒 結果!
ࠓޙͷ՝
• エントリーポイント増加 • ライブラリのバージョン追従
エントリーポイントの増加 • 今後もエントリーポイントは増え続ける • ビルド高速化にも限度 • ドメインごとに分割してビルドする? • デプロイが複雑化しそう •
webpack.config.jsの管理が大変そう
ライブラリのバージョン追従 • 愚直に上げていくしか無い • 誰かやるだろうでは誰もやらない • 強い気持ちと仕組みが必要
ײ
• 古き良き片手間JavaScriptの時代は終 わった • フロントエンドの専門家が必要とされる時 代
We are hiring!