Skip to content

MS_JavaScriptServices

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

JavaScript Services

概要

「JavaScript Services ワンセットは意味不明だけど、
Node Servicesダケなら使うシーンはあるかもしれない。」

的な事を色々と調査しながら考えたが、Obsoleting(廃止)らしい。

補足(廃止は完了している/最新化): 原文が「廃止らしい」と
記録している時点から先の経緯を補っておく。

時期 状況
2017 Microsoft.AspNetCore.SpaServices / NodeServices 登場
2019-08 廃止(Obsolete)が正式に告知(原文が参照する Issue #12890)
.NET Core 3.0 [Obsolete] 属性が付与され、警告が出るように
.NET 5 パッケージの提供終了
現在 後継として Microsoft.AspNetCore.SpaServices.Extensions が\
一部機能のみ提供(これも .NET 8 以降は縮小方向

つまり、本ページの技術は現在は使えない
「なぜ廃止されたのか」を理解しておくことに意義がある。

詳細

目的

以下を実現すると言われてる。

  • Invoking arbitrary NPM packages at runtime from .NET code
    .NET コードからランタイムに任意の NPM パッケージを呼び出す

  • Server-side prerendering of SPA components
    SPA コンポーネントのサーバーサイドプリレンダリング

  • Webpack dev middleware
    Webpack 開発ミドルウェア

  • Hot module replacement (HMR)
    ホットモジュールリプレースメント(HMR)

  • Server-side and client-side routing integration
    サーバーサイドおよびクライアントサイドのルーティングの統合

  • Server-side and client-side validation integration
    サーバーサイドとクライアントサイドの検証の統合

  • "Lazy loading" for Knockout apps
    Knockout アプリのレイジーローディング

補足(廃止の理由): 一覧を眺めると、
**「.NET プロセスから Node.js プロセスを起動して面倒を見る」**という
構造に無理があったことが見えてくる。

【JavaScript Services の構造】
   ASP.NET Core プロセス
     └─ Node.js プロセスを子として起動
          └─ webpack-dev-server / SSR レンダラーを実行
     ← プロセス間通信で結果を受け取る

【問題】
   ・Node.js のバージョン管理が .NET 側の関心事になる
   ・フロントエンドのツールチェーンの進化が速すぎて追随できない
     (webpack → Rollup / Vite / esbuild / SWC …)
   ・デバッグが困難(どちら側で落ちたか分かりにくい)
   ・本番で Node.js プロセスを抱えることになる(SSR)
   ・そもそもフロントエンド側に、より良い専用ツールがある

各機能の現在の代替:

当時の機能 現在の代替
Webpack dev middleware / HMR Vite / webpack-dev-server を別プロセスで(プロキシで繋ぐ)
サーバーサイド プリレンダリング(SSR) Next.js / Nuxt / Angular Universal(Node.js 側で完結)
ルーティング統合 MapFallbackToFile("index.html")
検証の統合 各々で実装(共有するなら OpenAPI からコード生成)
.NET から npm パッケージを呼ぶ やらない(必要なら別サービスに切り出す)
Knockout の遅延読み込み Knockout 自体が現役ではない

**結論は ASP.NET Core SPAテンプレート
原文の主張と同じで、「フロントとバックを分離する」**である。
Microsoft も同じ結論に至って本機能を畳んだ、と読める。

コンポーネント

以下の2つのコンポーネントから構成されているもよう。

.NET から Node.js コードを呼び出す。

  • SPA を構築する場合に一般的に
    便利なインフラストラクチャを提供する。

  • 内部的に、Node Servicesを使用している模様。

補足(「Node Services だけなら使えるかも」への回答): 原文の
この見立ては、当時としては妥当だったが、現在は
NodeServices も廃止済みである。

「.NET から JavaScript を実行したい」という要求に対する
現在の選択肢を挙げておく。

手段 内容
別サービスに切り出す Node.js の Web API を立て、HTTP で呼ぶ(最も素直
Jint 純 C# 製の JavaScript インタープリター。Node.js 不要
ClearScript V8 / ChakraCore を埋め込む(ネイティブ依存あり)
Microsoft.JSInterop Blazor 内で JS を呼ぶ(用途が異なる)
自前で Process 起動 node script.js を叩く(NodeServices が内部でやっていたこと)

サーバ側で JavaScript を実行する必要が本当にあるか
先に検討するのが妥当である。
多くの場合、その処理はフロント側かバッチ側に置ける

参考

Microsoft Learn


Tags: 移行, プログラミング, .NET開発, .NET Core, ASP.NET, ASP.NET MVC

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally