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
旅行プランAIエージェント開発の裏側
ippo012
2
860
私の後悔をAWS DMSで解決した話
hiramax
4
190
Jakarta EE Core Profile and Helidon - Speed, Simplicity, and AI Integration
ivargrimstad
0
360
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.5k
CSC305 Summer Lecture 12
javiergs
PRO
0
130
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
18
9.9k
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
300
The state patternの実践 個人開発で培ったpractice集
miyanokomiya
0
160
testingを眺める
matumoto
1
130
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
180
More Approvers for Greater OSS and Japan Community
tkikuc
1
110
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.3k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Scaling GitHub
holman
463
140k
Producing Creativity
orderedlist
PRO
347
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Why Our Code Smells
bkeepers
PRO
339
57k
How to train your dragon (web standard)
notwaldorf
96
6.2k
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!