Express 5.0.0:新しい機能と更新
Grace Collins
Solutions Engineer · Leapcell

Express.js 5.0.0 リリース:安定性とセキュリティの強化
Express.jsは、Node.jsアプリケーション開発のための非常に人気のあるWebアプリケーションフレームワークであり、常に開発者の注目を集めてきました。最近、Express.jsチームは公式にバージョン5.0.0をリリースしました。2014年の最初のメジャーバージョンのリリースから、丸10年が経過しました。この長い期間に、Express.jsは数多くの反復と最適化を経ており、バージョン5.0.0には新しい機能と改善が加えられ、開発者に異なるエクスペリエンスをもたらします。
I. バージョンリリースの概要
Express.js 5.0.0のリリースは、安定性とセキュリティという2つのコア目標に焦点を当てています。開発者がより堅牢なNode.jsアプリケーションを構築するのを支援し、最新のWeb開発のためのより強固な基盤を提供することを目指しています。今日の急速に進化する技術環境において、アプリケーションの安定性とセキュリティは、ユーザーエクスペリエンスとデータセキュリティに直接関係しています。したがって、Express.jsチームのこの動きは特に重要です。
II. Node.jsのバージョンサポートの変更
Express 5は、古いバージョンのNode.jsのサポートを断固として打ち切りました。リリースノートによると、このバージョンはv18より前のNode.jsバージョンをサポートしなくなりました。この変更は単純に見えるかもしれませんが、広範囲に影響を及ぼします。古いバージョンのNode.jsをサポートすることは、ある程度、Express.jsのパフォーマンスと保守性における大幅な改善を制限してきました。たとえば、古いバージョンのNode.jsにはいくつかのパフォーマンスのボトルネックがあり、新しいハードウェア機能や最適化アルゴリズムを十分に活用できず、高並行シナリオでのExpressアプリケーションのパフォーマンスが低下する可能性があります。古いバージョンのサポートを放棄することで、継続的インテグレーション(CI)がより安定し、保守が容易になるだけでなく、Express.jsは新しい言語と新しいランタイムの機能をより有効に活用できるようになります。同時に、不要な依存関係を取り除くことで、負荷を軽減し、全体的なパフォーマンスを向上させることができます。
III. セキュリティ関連の改善
(I) パスルーティングマッチングの変更
包括的なセキュリティ監査の後、Express.jsチームはパスルーティングマッチングの動作方法に重要な変更を加えました。正規表現サービス拒否(ReDoS)攻撃を効果的に防御するために、Express 5は正規表現のサブ式(/app.get('/:id(\d+)', (req, res) => res.send(\
ID: ${req.params.id}`));のようなコードを使用して、特定の形式のパスパラメータをマッチングできました。ただし、Express 5では、このアプローチは許可されなくなりました。 Express.JS Technical CommitteeのメンバーであるBlake Embreyは、正規表現の例(
/^/flights/([^/]+?)-([^/]+?)/?$/iなど)を提供しました。これを
/flights/+
'-'.repeat (16_000)+
/x`とマッチングすると、実際には300ミリ秒かかりましたが、通常の状態では1ミリ秒未満であるはずです。このような巨大な時間の差は、特定の状況における正規表現の潜在的なパフォーマンスリスクを十分に示しており、これもExpress 5の改善の重要な理由です。アプリケーションのセキュリティを確保するために、Expressチームは、開発者が強力な入力検証ライブラリ(joiなど)を使用して、入力データを厳密に検証し、悪意のある攻撃をソースから防ぐことを推奨しています。
(II) 正規表現のワイルドカードの要件
Express 5は、正規表現のワイルドカードについても明確な要件を提示しています。ワイルドカードは明示的に名前を付けるか、(.)**で置き換える必要があります。これにより、ルートマッチングの明確さと予測可能性が向上します。たとえば、Express 5の/foo
のようなパスは、/foo (.)
に更新する必要があります。このようにして、ルートマッチングを実行するときに、開発者はマッチングルールをより明確に理解し、不明確なルールによって引き起こされる可能性のある問題を回避できます。
(III) ルートのオプションパラメータの構文の変更
ルートでは、オプションパラメータの構文も大幅に変更されました。Express 4では、:name?
を使用してオプションパラメータを表します(app.get('/user/:id?', (req, res) => res.send(req.params.id || 'No ID'));
など)。Express 5では、構文は{/:name}
になり、対応するコード例はapp.get('/user{/:id}', (req, res) => res.send(req.params.id || 'No ID'));
です。この構文の変更により、開発者はいくつかのコード調整を行う必要が生じますが、ルートルールがより直感的で理解しやすくなります。
(IV) 正規キャプチャグループパラメータへのアクセスの変更
正規キャプチャグループでは、名前のないパラメータはインデックスでアクセスできなくなりました。現在、パラメータには名前を付ける必要があります。Express 4では、app.get('/user(s?)', (req, res) => res.send(req.params[0]));
のようなコードを使用して、キャプチャグループのパラメータを取得でき、ここでは's'
が返されます。しかし、Express 5では、app.get('/user:plural?', (req, res) => res.send(req.params.plural));
のように、名前付きパラメータが必要です。このアプローチは、インデックスの混乱によって引き起こされるエラーを回避し、コードの可読性と保守性を向上させることができます。
(V) HTTPステータスコードの有効性チェック
Express 5は、HTTPステータスコードの有効性チェックを強制します。これは、サイレントな失敗を防ぎ、開発者が困難なデバッグプロセスに陥るのを防ぐための重要な防御メカニズムです。Express 4では、res.status(978).send('Invalid status');
のようなコードを使用すると、無効なステータスコード978が設定されても、エラーは報告されませんが、サイレントに失敗し、開発者が問題をトラブルシューティングするのに大きな困難をもたらします。Express 5では、同じコードは直接エラーをスローし、開発者に問題をタイムリーに発見して修正するように促し、開発効率とアプリケーションの安定性を大幅に向上させます。
IV. 非同期ミドルウェアおよびルートでのエラー処理の改善
Express.js 5は、非同期ミドルウェアおよびルートでのエラー処理をより簡潔かつ効率的にします。非同期ミドルウェアおよびルートのエラー処理メカニズムが改善され、拒否されたプロミスはエラー処理ミドルウェアに自動的に渡されるようになりました。開発者は、try/catchブロックを手動で使用する必要がなくなりました。Express 4では、非同期リクエストを処理するとき、コードは次のようになる可能性があります。
app.get('/data', async (req, res, next) => { try { const result = await fetchData(); res.send(result); } catch (err) { next(err); } });
Express 5では、コードは次のように簡略化できます。
app.get('/data', async (req, res) => { const result = await fetchData(); res.send(result); });
この改善により、コードの量が減るだけでなく、コード構造がより明確になり、エラーの可能性が減ります。
V. アップグレードの推奨事項
Expressチームは、破壊的な変更を最小限に抑えるためにあらゆる努力を払ってきましたが、Expressコードを新しいバージョンにアップグレードしたい開発者は、依然として非常に注意する必要があります。アップグレードプロセス中には、上記の構文の変更やNode.jsのバージョン要件など、さまざまな互換性の問題が発生する可能性があります。したがって、開発者はオンラインの移行ガイドを注意深く確認し、ガイドの手順に従って段階的にアップグレードして、アプリケーションの円滑な移行を確保する必要があります。
OpenJS Foundation(At - Largeカテゴリ)の重要なプロジェクトとして、Express.jsは常にNode.js開発者に強力なサポートを提供してきました。開発者は完全なリリースノートを読んで、より多くの技術的な詳細と例を深く理解し、Express.js 5.0.0の新機能をより有効に活用し、より優れたNode.jsアプリケーションを構築することができます。Express.js 5.0.0の助けを借りて、Node.jsアプリケーション開発は新たなレベルに達すると信じています。
Leapcell:Webホスティングに最適なサーバーレスプラットフォーム
最後に、Expressアプリのデプロイに最適なプラットフォームをご紹介します:Leapcell
1. 多言語サポート
- JavaScript、Python、Go、またはRustで開発。
2. 無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ支払い - リクエストなし、料金なし。
3. 比類のないコスト効率
- アイドル料金なしで従量課金。
- 例:25ドルで、平均応答時間60ミリ秒で694万件のリクエストをサポート。
4. 合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリクスとロギング。
5. 簡単なスケーラビリティと高性能
- 容易に高並行を処理するための自動スケーリング。
- 運用オーバーヘッドゼロ - 構築に集中するだけ。
Leapcell Twitter: https://x.com/LeapcellHQ