MENU

Express.js — Node.jsを定番にした最小主義のWeb基盤

Express.js アイキャッチ
Express.js

Express.jsは、2010年11月にTJ Holowaychuk(ティージェイ・ホロウェイチック)が公開した、Node.js向けのミニマルなWebアプリケーションフレームワークです。Sinatra(Ruby)に強い影響を受けた小さなルーター層と、ミドルウェアと呼ばれる関数を数珠つなぎに合成する設計を採用し、Node.jsそのものよりも先にサーバーサイドJavaScriptの代名詞として広まりました。現在もnpmで週数千万ダウンロードを記録し、後発のフレームワークの多くがExpress互換のAPIを掲げています。

目次

この記事の目次

  1. ミドルウェアで組み立てる設計
  2. TJ Holowaychukとnpmの黎明期
  3. 実プロダクトでの使われ方
  4. 後続フレームワークとの位置関係
  5. まとめ

ミドルウェアで組み立てる設計

ミドルウェアで組み立てる設計

Expressのコードは、app.get('/users', handler)のように HTTPメソッドとパスをハンドラ関数に結びつけるところから始まります。ハンドラは(req, res, next)の3引数を受け取り、next()を呼ぶと処理が次のミドルウェアへ渡る、というシンプルな約束ごとで構成されています。この仕組みのおかげで、ロギング・認証・ボディ解析・CORS処理・例外整形といった横断的な関心事を独立した小さな関数として書き、app.use(...)で連結するだけで一連の処理パイプラインが完成します。

Expressそのものはルーティングとミドルウェア合成しか提供せず、ORM・テンプレートエンジン・バリデーションといった重い機能はあえて同梱していません。MorganでHTTPログを残す、Helmetでセキュリティヘッダを付与する、Passportで認証を担う、というように周辺ライブラリをユーザーが選んで組み合わせる文化が根付いており、これがNode.jsエコシステム全体のモジュール思想を方向づけました。

TJ Holowaychukとnpmの黎明期

TJ Holowaychukとnpmの黎明期

Node.jsはRyan Dahlが2009年に公開した直後の頃で、HTTPサーバーを書く標準的な作法すら定まっていませんでした。そこへ登場したのが、TJ HolowaychukによるExpressです。彼はConnectというミドルウェアフレームワークを先に作っており、その上にルーティングとビュー機能を載せたものがExpressでした。Sinatra譲りのRESTライクな書き方が分かりやすく、Node.jsをサーバー開発で採用する企業が一気に増えるきっかけとなります。

2014年、Node.js界の主要企業だったStrongLoopがExpress開発を引き取り、安定運用のための体制を整備しました。翌2015年にStrongLoopはIBMに買収され、2016年にはExpress自体がNode.js Foundation(現OpenJS Foundation)に寄贈されています。TJ本人はその後Goやクラウド領域へ軸足を移しましたが、Express自体は外部メンテナの手で4.x系を長く保守し、2024年には待望のv5系が安定版に到達するなど、息の長いプロジェクトとして続いています。

実プロダクトでの使われ方

実プロダクトでの使われ方

Expressは「とにかくHTTPを受けてJSONを返す」用途で広く使われています。モバイルアプリやSPAから叩かれるREST APIサーバー、StripeやGitHub等のWebhookを受信して内部処理を起動するエンドポイント、マイクロサービス間の薄い橋渡し役、社内向けダッシュボードのAPI層など、軽量さが重視される場面でほぼ第一候補に挙がります。PaaSのテンプレートやチュートリアル教材も、Node.jsならまずExpressから始めるのが定番です。

フロントエンド側がReact/Next.jsへ移行した後も、Next.jsのpages/apiapp/apiの前段にExpressを置く構成、あるいはモバイル/SPAのバックエンドとしてGraphQL(Apollo Server)の土台にする構成は健在です。近年はサーバーレスへの追従も進み、serverless-httpを介してAWS Lambdaへ載せたり、Cloudflare Workers向けの互換実装が登場するなど、実行基盤の変化にしぶとく対応しています。

後続フレームワークとの位置関係

後続フレームワークとの位置関係

Express以後、Node.jsには多くの後継フレームワークが登場しています。Fastifyはスキーマベースのバリデーションとシリアライズで毎秒のリクエスト数を稼ぐ路線、NestJSはAngular風のデコレータとDIで大規模アプリ向けの構造を持ち込み、Koaは同じTJが「次世代Express」として設計したasync/await前提の薄いコアです。それぞれ思想は異なりますが、Expressをベンチマークの対抗馬として意識している点は共通しています。

とはいえ既存資産の量と分かりやすさで、Expressは依然として「迷ったらこれ」のポジションを維持しています。新規プロジェクトでNestJSやFastifyを選ぶ判断は妥当ですが、社内ツール・プロトタイプ・小規模APIならExpressで十分というケースが大半です。v5系ではPromise対応のエラーハンドリングが標準化され、現代的な書き方とも素直に噛み合うようになりました。

まとめ

Express.jsはNode.jsの普及そのものを牽引した小さく強いフレームワークで、ミドルウェアの合成という発想は後続のあらゆるJS製サーバーに影響を残しました。派手な機能こそ持ちませんが、軽さと素直さは唯一無二で、Webバックエンドの基礎を学ぶ題材としても最適です。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次