2025年にJavaScriptでやめるべきこと
JavaScriptは急速に進化しています。3年前にモダンだと感じられたコードパターンも、今では不要なバイト数を送信し、プラットフォームの改善を無視し、非推奨のAPIに依存しています。2025年にプロダクション環境のWebアプリを構築するなら、避けるべきJavaScriptのアンチパターンと、代わりに使用すべきものを紹介します。
重要なポイント
with文、__proto__、String.prototype.substrなどの非推奨機能は、モダンな代替手段に置き換えるべきです。- jQuery、Moment.js、Lodashなどのレガシーライブラリは、多くの場合、ネイティブブラウザAPIとES2023〜ES2025の機能で置き換えることができます。
- モダンなCSSは、コンテナクエリ、
:has()セレクタ、スクロール連動アニメーションなど、以前はJavaScriptが必要だった多くのタスクを処理できるようになりました。 - ネイティブESMとViteのような軽量バンドラーにより、新しいフロントエンドプロジェクトではCommonJSとRequireJSは時代遅れになりました。
非推奨の言語機能の使用をやめる
一部のJavaScript機能は何年も前から非推奨または置き換えられていますが、コピー&ペーストと習慣によってコードベースに残り続けています。
以下の使用をやめましょう:
with文 — ES5以降、strictモードで禁止されています。曖昧なスコープを作成し、最適化を妨げます。__proto__— 代わりにObject.getPrototypeOf()とObject.setPrototypeOf()を使用してください。String.prototype.substr— 非推奨です。slice()またはsubstring()を使用してください。RegExp.$1などのレガシーRegExp静的プロパティ — これらは非標準で、エンジン間で信頼性がありません。
これらはエッジケースではありません。Linterが警告を出すのには正当な理由があります。モダンなJavaScriptパターンは、あなたがすでに移行したことを前提としています。
デフォルトでレガシーライブラリに頼るのをやめる
jQuery、Moment.js、Lodash、RequireJSは実際の問題を解決しました—2015年には。今日では、プラットフォームがそれらのユースケースのほとんどをネイティブでカバーしています。
代わりにすべきこと:
- DOM操作 —
querySelector、querySelectorAll、モダンなDOM APIがjQueryがかつて行っていたことを処理します。 - 日付処理 — Temporal APIが登場予定です。完全なサポートが実現するまでは、date-fnsまたはネイティブの
Intl.DateTimeFormatを使用してください。 - ユーティリティ関数 — ES2023〜ES2025の機能、例えば
Object.groupBy()、新しいSetメソッド(.union()、.intersection())、イテレータヘルパー(イテレータ上の.map()、.filter())が、ほとんどのLodashのインポートを置き換えます。 - モジュールローディング — ネイティブESMと
import()により、RequireJSとAMDは時代遅れになりました。
ブラウザが無料で提供する機能のために30KBのライブラリを配信することは、2025年にやめるべきフロントエンドの間違いです。
ES2023〜ES2025の機能を無視するのをやめる
言語は大幅に進化しました。以下の機能は安定しているか、ほぼ安定しています:
Object.groupBy()とMap.groupBy()— 外部ライブラリなしで配列をグループ化できます。- イテレータヘルパー — イテレータ上で直接
.map()、.filter()、.take()をチェーンできます。 - 新しいSetメソッド —
.union()、.intersection()、.difference()、.isSubsetOf()。 RegExp.escape()— 正規表現パターン用に文字列を安全にエスケープします。- インポート属性とJSONモジュール —
import data from './config.json' with { type: 'json' }。 - トップレベル
await— 非同期IIFEですべてをラップすることなく、モジュール内で使用できます。
caniuse.comとターゲットブラウザを確認してください。ただし、2年前に実装された機能に対してデフォルトでポリフィルを使用しないでください。
Discover how at OpenReplay.com.
CSSが処理できることにJavaScriptを使用するのをやめる
モダンなCSSは、かつてJavaScriptが必要だった機能を吸収しました。これらにJSを使用すると、不要な複雑さが生じ、パフォーマンスが低下します。
CSSに任せるべきもの:
- コンテナクエリ —
ResizeObserverのハックなしでレスポンシブコンポーネントを実現。 :has()セレクタ — DOMトラバーサルなしで親要素を選択。- スクロール連動アニメーション —
animation-timeline: scroll()がスクロールイベントリスナーを置き換えます。 - ビュートランジション — ネイティブなページ遷移エフェクト。
削除するスクロールリスナーごとに、メインスレッドの負荷が軽減されます。
Mutation Eventsとサードパーティクッキーの前提の使用をやめる
Mutation Events(DOMSubtreeModified、DOMNodeInserted)は非推奨で、パフォーマンスが悪いです。代わりにMutationObserverを使用してください—10年以上前から安定しています。
サードパーティクッキーは、トラッキングやクロスサイト認証フローにおいて事実上終わっています。Chromeの非推奨化タイムラインは変更されましたが、SafariとFirefoxは何年も前にブロックしています。ファーストパーティクッキー、トークン、またはフェデレーテッドアイデンティティで認証フローを構築してください。ユーザーの半数のブラウザで機能しない前提に基づいてアーキテクチャを設計しないでください。
CommonJSで新しいプロジェクトを始めるのをやめる
2025年にブラウザコードを書いていて、require()や重いwebpack設定に手を伸ばしているなら、一度立ち止まってください。ネイティブESMは重要なすべての環境で動作します。Viteやesbuildのような軽量バンドラーが、最小限の設定で残りのエッジケースを処理します。
CommonJSは、古い環境をターゲットとするNode.jsライブラリではまだ存在意義があります。新しいフロントエンドコードでは、レガシーな負債です。
まとめ
2025年のJavaScriptベストプラクティスは、トレンドを追いかけることではありません—プラットフォームが依存関係に追いついたことを認識することです。削除する非推奨機能、削除する不要なライブラリ、採用するCSSネイティブソリューションのすべてが、コードをより小さく、より速く、より保守しやすくします。
現在のプロジェクトを監査してください。インポートを確認してください。そのユーティリティ関数にライブラリが必要なのか、それともまだ学んでいないネイティブメソッドで十分なのかを問いかけてください。モダンなJavaScriptパターンはすでにここにあります—使用するだけです。
よくある質問
はい、ただし慎重に進めてください。モダンなブラウザはquerySelectorやfetchなど、jQueryのコア機能を置き換えるAPIをサポートしています。既存のプロジェクトでは、まずjQueryの使用状況を監査し、呼び出しを段階的に置き換えてください。新しいプロジェクトでは、ネイティブの代替手段が十分にサポートされ、よりパフォーマンスが高いため、jQueryを完全に避けるべきです。
Temporal APIはTC39プロセスのステージ3にあり、一部のブラウザではフラグの下で利用可能です。完全なクロスブラウザサポートは間もなく期待されますが、今日のプロダクションコードでは、date-fnsまたはネイティブのIntl.DateTimeFormatを使用してください。ポリフィルなしでTemporalを採用する前に、caniuse.comで更新情報を確認してください。
ほとんどのユースケースでは、いいえ。ネイティブJavaScriptには、一般的なLodash関数をカバーするObject.groupBy、新しいSetメソッド、イテレータヘルパーが含まれています。ただし、Lodashはディープクローン、複雑なオブジェクト操作、または古い環境をターゲットとする場合には依然として有用です。ライブラリ全体ではなく、必要な特定の関数のみをインポートしてください。
まず、package.jsonを更新してtypeをmoduleに設定します。require文をimport構文に、module.exportsをexportに置き換えます。必要に応じてファイル拡張子を.mjsに更新するか、バンドラーを適切に設定してください。Viteやesbuildなどのツールは、フロントエンドプロジェクトのこの移行を大幅に簡素化します。
Complete picture for complete understanding
Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Check our GitHub repo and join the thousands of developers in our community.