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
レガシーなフロントエンドに立ち向かう
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mugi / Hajime Mugishima
December 08, 2018
Technology
690
1
Share
レガシーなフロントエンドに立ち向かう
2018/12/08 Toyama.rb #35 年末LT大会
mugi / Hajime Mugishima
December 08, 2018
More Decks by mugi / Hajime Mugishima
See All by mugi / Hajime Mugishima
サイボウズフロントエンドの活動から考える探究と発信
mugi_uno
0
97
フロントエンドエキスパートチームの解散は 「いい話」なのか?
mugi_uno
8
2.4k
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
4
2k
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
14
7.2k
New Order in Cascade Sorting Order
mugi_uno
3
4.2k
Deep Dive into React Stream/Serialize
mugi_uno
8
2.2k
Next.js App Router での MPA フロントエンド刷新
mugi_uno
40
25k
コロナ禍 Frontend おさらい
mugi_uno
1
480
Toyama.rb
mugi_uno
1
200
Other Decks in Technology
See All in Technology
【Oracle Cloud ウェビナー】データ主権はクラウドで守れるのか?NTTデータ様のOracle Alloyで実現するソブリン対応クラウドの最適解
oracle4engineer
PRO
3
130
Microsoft Fabricで考える非構造データのAI活用
ryomaru0825
0
590
Why we keep our community?
kawaguti
PRO
0
360
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
460
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
280
PostgreSQL 18のNOT ENFORCEDな制約とDEFERRABLEの関係
yahonda
1
190
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
170
Oracle Cloud Infrastructure:2026年3月度サービス・アップデート
oracle4engineer
PRO
0
290
Sansanの認証基盤を支えるアーキテクチャとその振り返り
sansantech
PRO
1
140
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
130
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
280
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
230
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
First, design no harm
axbom
PRO
2
1.2k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
190
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
The Limits of Empathy - UXLibs8
cassininazir
1
280
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
210
Visualization
eitanlees
150
17k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
WENDY [Excerpt]
tessaabrams
9
37k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
250
Transcript
レガシーなフロントエンドに立ち向かう 2018/12/08 Toyama.rb #35 年末LT大会
おおよそ1年半 フロントエンドで色々やった
1年半前の姿 ・ ほぼすべてCoffeeScript ・ browserifyでビルド(激遅) ・ テストコードなし ・ Lint系のツールなし ・
Vueのバージョンが0.12 ・ 重要な関数の中身が魔境 ・ jQueryどっぷりな箇所が多数
現在 ・ CoffeeScript廃止 → ESNext ・ webpackでのビルド ・ Mochaでテストを書けるように ・
ESLint導入 ・ Vueバージョン2.5に更新(最新) ・ 魔境関数を大幅リファクタリング ・ コアな機能はVue化
結構大変だった
さまざまな知見を得られた
ツールで出来ることはツールに任せる
人間は絶対にミスする
可能なものは機械に任せる
e.g. CoffeeScriptからの移行 decaffeinate https://github.com/decaffeinate/decaffeinate → ざっくりES6に変換できる
e.g. Vue0.14→2.4の更新 vue-migration-helper https://github.com/vuejs/vue-migration-helper → 影響を受ける箇所をサジェスト
完璧ではない 注意! decaffeinate → 理想のESコードにはならない vue-migration-helper → hamlは解析できない
負担を軽減するために使う
少しずつやる
一気にやりたくなるが、こらえる
e.g. webpack導入時 コードの変更は基本的にしない (import/exportの書き換えのみ)
e.g. ESLint導入時 何段階かに分けて導入 1. eslintのインストールのみ 2. auto x可能なものを有効化 3. さらに1つずつルールを有効化
段階を踏む
影響範囲を小さくする
広範囲に及ぶ変更は怖い
であれば範囲を狭くする
1画面ずつVue2.4にする e.g. Vue0.14→2.4の更新 1. Vue0.14でローカルパッケージを作る 2. 既存コードをローカルパッケージに向ける 3. Vue2.4を依存に追加 4.
置き換えたい箇所のみ参照をVue2.4にする
DOMのRead/Writeで集約 e.g. jQueryコードのリファクタリング 1. DOMのReadのみ行う部分を集約 2. DOMのWriteのみ行う部分を集約 3. DOMのRead/Write双方を行う部分を集約 4.
DOM操作を伴わない処理に切り出し
少しずつ or 影響を小さく進める理由 ・ トラブル発生時を考慮して - 迅速に原因特定できる - ロールバックが容易になる ・
レビュアーの負担を軽減できる
状況の可視化を怠らない
まずはちゃんと現状を理解する
データフローを可視化 e.g. jQueryコードのリファクタリング
必要な時間やリスクが見えてくる
テストを整える
e2eテストに命を救われる e.g. 全体的に.. ・ 「ユーザ体験」のデグレがないのを保証
ビジュアルテスト最高 e.g. 全体的に.. ・ 表示崩れなどを機械的に検知できる安心感
足りなければ書く e.g. 全体的に.. ・ jQueryリファクタ時は 事前に200exampleほどテストを追加
リファクタリング着手前に テスト整備を行う価値はある
レビュアーの負担を考慮する
リファクタPRはレビューがつらい
どうしても大きいPRになることもある
見る側もあんまり楽しくない
ちゃんと説明する レビュアーの負担軽減のために ・ なんのためにやるのか? ・ 影響範囲は? ・ 何を確認したのか? ・ 何を見てほしいのか?
テキストに頼りすぎない レビュアーの負担軽減のために ・ 時間をとって口頭で説明する ・ ペアプロ・モブプロで対応する
レビュアーの負担軽減のために 説明できないのであれば、 それはただの丸投げ
勢い・勇気が必要なこともある
粒度を小さくするコスト > 力技で対応するコスト というケースは確実に存在する 小さいほうがいいけど…
時には一気にやることも必要
時には一気にやることも必要 でも怖い…
最悪の事態を想定する
ユーザ影響を小さくする
たとえば、リリースでの工夫はできる ・ ピークタイムを避ける ・ ロールバック手順を事前に整理する
リファクタリング単体では ユーザに価値は与えられない
だからこそ「壊さない」ことが大事
まとめ ・ まずは小さく進めるのが大事 ・ 泥臭い準備はつらいけど効果がある ・ 時には力技も必要になる ・ 壊さない、あるいは 壊してもすぐ直せるようにする
やっていこう!