47396


「サーバサイドでjavascriptを実行させる」というのはどういうことなのでしょうか？

Rhino、Nashorn、Node.js などを使っているときは、  
サーバサイドでのjavascriptというのも  
全然理解できるのですが、

それらの基盤を使用していなくても、  
サーバサイドの処理に、javascriptを使うことができるのでしょうか？

jspやhtmlで、scriptタグで使用するjavascriptのパスを書き、  
「サーバ上にあるjavascript」が  
クライアントサイドで動くと捉えており、  
そういう意味では、基本、javascriptはクライアントサイドで動くと捉えているのですが違うのでしょうか？

※java＋jspで実装しています。


CC BY-SA 4.0
2018-08-09T17:34:49.147
47391
2018-08-09T23:56:57.707
2018-08-09T21:12:42.493
2808
29668
question
javascript java
サーバサイドでjavascriptを実行させる


(文脈にもよると思いますが、一般的に)Webブラウザ組み込みのJavaScript実行環境(≒[Document](https://developer.mozilla.org/ja/docs/Web/API/document)が利用可能な実行環境)向けに書かれたものがクライアントサイドJavaScript、そうでないものがサーバサイドJavaScriptと呼ばれます。

また、Javaが一般的にはJava実行環境(JVM)を要求するのと同様、JavaScript実行にはNode.jsなりWebブラウザなりJavaScript実行環境が必要です。  
(※Java/JavaScriptともネイティブバイナリにコンパイルする手段はあるようですが一般的ではない。)

* * *

上記を踏まえて質問文に回答すると、

> 「サーバサイドでjavascriptを実行させる」というのはどういうことなのでしょうか？

Webブラウザ組み込み環境以外の実行環境でJavaScriptを実行させることです。

> それらの基盤を使用していなくても、  
>  サーバサイドの処理に、javascriptを使うことができるのでしょうか？

(サーバサイドに限らず、クライアントサイドでも)「基盤」は必要です。

> jspやhtmlで、scriptタグで使用するjavascriptのパスを書き、  
>  「サーバ上にあるjavascript」が  
>  クライアントサイドで動くと捉えており、  
>  そういう意味では、基本、javascriptはクライアントサイドで動くと捉えているのですが違うのでしょうか？

記載されている通り、jsp/htmlからリンクされるJavaScriptはWebブラウザで実行されるためのものであり、(当然ながら)Webブラウザで実行されます。  
この状況では、Webサーバは単にJavaScriptファイルをクライアントへ送信しているだけで、JavaScript実行自体には関わりの無い存在です。

* * *

参考になるかわかりませんが、昔次のような質問を書きました:

  * [JavaScriptで標準出力に文字列を出力したい](https://ja.stackoverflow.com/q/28392/2808)


CC BY-SA 4.0
2018-08-09T21:06:11.243
47393
2018-08-09T21:45:09.900
2018-08-09T21:45:09.900
2808
2808
47391
answer


[CommonJS](http://www.commonjs.org/)という仕様があって、以下のように使えることを目標に策定されています。  
このうちの最初の「Server-side JavaScript applications」に該当するでしょう。

  * Server-side JavaScript applications
  * Command line tools
  * Desktop GUI-based applications
  * Hybrid applications (Titanium, Adobe AIR)

Node.jsはServer自身をJavaScriptで実装しているので、単体で両方を実現できますが、  
「サーバサイドでjavascriptを実行させる」という言葉から素直に連想すると、  
「Apache等のWebサーバーからCGIでJavaScriptを実行させる」ということになります。

これについては昔に議論があって、「可能だけれど意味が無い」ということらしいです。  
[NodeをApache上でCGIとして動かすというのはナンセンスなんでしょうか？](https://groups.google.com/forum/#!topic/nodejs_jp/-BytMnNPshM)  
[Node.js 版 JavaScript を CGI
として実行する](http://blog.netandfield.com/shar/2017/03/nodejs-javascript-cgi.html)  
[CommonJSの話](https://www.slideshare.net/terurou/common-js)

[WikipediaのCommonJS](https://ja.wikipedia.org/wiki/CommonJS)によると、2009年1月にServerJSとして開始されたが同年9月にCommonJSに改名されたとのこと。  
直接の関連は無いが、ECMAScript検討メンバーの一部も参加していたようです。  
Node.js関係者も参加していたようですが、2013年5月頃には「CommonJSはNode.jsにとって時代遅れになりつつあり、Node.js主要開発者はCommonJSから離れている」という状況だそうです。

まあModuleとかPromiseの仕様がECMAScript6に取り込まれて、結構寄与している感じですね。


CC BY-SA 4.0
2018-08-09T23:56:57.707
47396
2018-08-09T23:56:57.707
26370
47391
answer