Node.jsのウェブアプリケーションフレームワークであるExpress.JSのバージョン4.0がリリースされた。ルーターが改善され、バンドルされていたミドルウエアが排除された。
4.0で追加されたのはエクスプレスルーターの公開APIだ。ルーターは小さなエクスプレスアプリのようなもので、ビューや設定は含んでいないが、通常のルーティングAPI(.use, .get, .param, .route)を含んでいる。
開発者であるTJ HolowaychukのGitHub上のリリースノートによれば、新しいバージョンは“ルーターとルートAPIが改善され、重複したルート名のインスタンスを抑制するようになりました”。またルーターを簡単にファイルに分割できるようにもなった。
InfoQはコントリビューターのRoman Shtylman氏に話を聞いた。氏によれば、“多くのユーザがモジュール化されたルートとアプリという考え方に触れてほしいと思っています。Expressのルーターに触れば、開発者がルーティングのロジックをファイルや再利用可能なルートに簡単に分割できることがわかると思います。新しいアプリをインスタンス化する必要はありません。”
ルーターは基底となるアプリの利用設定とビューエンジンを継承する。これによってよりメンテナンスしやすいアプリケーションになるのがExpressの狙いだ。
また、新しいルートAPIが追加され、複数のHTTPの動詞を処理する同じ名前のルートの問題に対処した。Shtylman氏によれば、これはタイプミスを避けるためのアイディアだ。
また、バンドルされたミドルウエアにも変更があった。新しいバージョンはConnectに依存していない。以前まで含まれていたミドルウエアはすべて別のリポジトリに移動した。
以前までは、関係する多数のミドルウエアの小さな修正が発生した場合、その度に新しいバージョンのExpressをリリースしなければならなかった。その結果、アップグレードは大変になり、大きな変更でもマイナーなアップグレードに埋もれてしまった。
“すべてのモジュールをミドルウエアに分割することで、メンテナンスできる人を増やし、影響のあるモジュールだけをリリースしてアップグレードできるようになります。これによってアップグレードは楽になります。”、とStylman氏は言う。
ミドルウエアの完全なリストはここで確認できる。これによって、バンドルされているミドルウエアはexpress.static()だけになった。
Hacker Newsのリリース発表に対するコメントで、jacquedというユーザが次のように書いている。“以前よりもきれいになりましたね。新しいルーティングシステムを使えば、異なる動詞をチェーン化した関数で処理できます。これはいいですね。”
“また、デフォルトのミドルウエアの依存性を下げ、すべて一緒にするのではなくて、モジュール化したのは正しいと思います。”
Irakli Janiashvili氏はjani.ioの開発者であり、次のように, 同意している。“新しい機能は気に入りました。Expressの上に優れたアーキテクチャのアプリを配置できるようになりそうです。”
また、app.use(app.router)を順序付きのルーティングメソッドに置き換えることで、Expressで最もよく見られた課題を解消した。
さらに、 app.get(), app.post()を使う代わりに、新しいroute()メソッドが使えるようになった。これはルートのインスタンスを返す。ユーザはすべてのこのインスタンスのすべてのHTTP動詞を呼び出せる。また、このルート用のミドルウエアを追加することも可能だ。
今後のロードマップについては、Shtylman氏によれば“大きなリリースの計画はまだない”という。既存のExpressユーザのサポートやバグ修正は行っていく予定だ。
“"メジャー"バージョンの番号にこだわりすぎないようにしてほしいのです。むしろ、Expressのコア部分をきれいにしておいてもらったほうが、素早く変更できます。ほかのプロジェクトでは頻繁に起こっている"破壊的"なリリースを避けるのが目的です。多くのモジュールを素早くリリースしたいです。”とShtylman氏は言う。