28396


JavaScriptで標準出力に文字列"Hello, world!"を出力するプログラムを書きたいのですが、どのようにすれば良いでしょうか。  
Node.jsを用いるのは妥当なのでしょうか。より一般的な方法は他に有るでしょうか。

* * *

検索してみたところ、下のリンクのような解説が見つかり、これらは私がやりたいことと一致しています。

  * [Node.js入門（開発環境セットアップ〜Hello Worldまで） - Qiita](http://qiita.com/wakaba260/items/759c24451ddda1f1d2a6)
  * [君はもうJavaScriptの標準入出力を体験したか！？ - コンパイラかく語りき](http://chuckwebtips.hatenablog.com/entry/2015/11/11/000000)
  * [Node.jsを使ってCommand line ツールことはじめ - ぶるーすくりーん](http://mid0111.hatenablog.com/entry/2014/06/08/153613)

上記も含め私が探した範囲では標準入出力やファイルを扱うものはNode.jsを使用しているものばかりだったのですが、次に示す理由から、今回の用途でNode.jsを使うのは妥当なのか、他にJavaScriptとして正当な(一般的な)やり方があるのでは無いかという疑問が払拭出来ていません。

  * Node.jsはよく " _サーバサイドJavaScript環境_ " というような呼称で説明されているが([参考:Wikipedia](https://ja.wikipedia.org/wiki/Node.js))私が行いたいのはサーバサイドでなくクライアントサイドプログラミングである。(そもそも何を以ってサーバ/クライアントとするのかも不明ですが…) 
    * 少なくとも[WikipediaのNode.jsのページ](https://ja.wikipedia.org/wiki/Node.js) からリンクされている "[サーバーサイド・スクリプト](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%83%BB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)" に書かれていることは今回私が行いたいこととは異なる。Webサービスを作りたいわけではない。
  * サーバサイド、という単語を無視したとしても、[公式サイトにある説明](https://nodejs.org/en/about/)もやはり私が行いたいこととずれているように感じる。 
    * 標準出力に出すのは当たり前の処理過ぎてNode.jsの特徴としてイントロダクションに記載するまでもない、ということはあり得そう。(が、JavaScriptで標準入出力を扱うことはそんなに当然の事のようには感じられなかった)


CC BY-SA 3.0
2016-08-20T09:27:02.233
28392
2016-08-26T14:07:14.203
2808
question
javascript
JavaScriptで標準出力に文字列を出力したい


JavaScriptは言語であって環境と呼べるようなものは持っていません。Web
Browser上でAJAXに使われていると思われがちですが、JavaScript自身にはネットワーク機能も標準入出力もありません。JavaScript単体では数値・文字列・配列・オブジェクトなどを扱えるだけで、他の機能はすべてWeb
Browserから提供されたものです。

node.jsはJavaScriptにライブラリを加えたものであり、標準入出力やネットワーク処理もnode.jsが提供するライブラリを使って初めて使用可能になるものです。  
node.jsを選択することは妥当と思いますが、その他には例えばWindows Scripting
Hostも標準入出力を提供します。Windowsをお持ちでしたら`hello.js`に

[code]

    function hello() {
        WScript.Echo("Hello, world!");
    }
    
    hello();
    
[/code]

と記述するとコマンドプロンプト上で

[code]

    > cscript //nologo hello.js
    Hello, world!
    
    >
    
[/code]

という結果を得られます。


CC BY-SA 3.0
2016-08-20T13:47:16.523
28396
2016-08-20T13:47:16.523
4236
28392
answer


自分の疑問点について、頂いた回答/コメントやその後自分で調べた内容をまとめてみました。

* * *

**Q.JavaScriptで標準出力に文字列を出力したい。**  
**A.コアJavaScript言語にはそのような機能は含まれておらず、ホスト環境の機能を利用しなければならない。**

オライリー・ジャパン刊 JavaScript 第6版 p.2:

>
> コアJavaScript言語には[中略]入出力機能は含まれていません。[中略]入出力機能は、JavaScriptが埋め込まれる「ホスト環境」側で提供する機能だからです。

名の知れたホスト環境では次のように書く:

**[Node.js](http://nodejs.jp/nodejs.org_ja/api/console.html#console_console_log_data):**

[code]

    console.log("Hello, world!)
    
[/code]

**[Windows Scripting Host](https://msdn.microsoft.com/ja-
jp/library/cc364402.aspx):**

[code]

    WScript.Echo("Hello, world!")
    
[/code]

**[Rhino
Shell](https://developer.mozilla.org/ja/docs/Rhino_Shell#print.28.5Bexpr_....5D.29):**

[code]

    print("Hello, world!")
    
[/code]

あるいは

[code]

    java.lang.System.out.println("Hello, world!")
    
[/code]

**Webブラウザ:**  
無し

* * *

**Q.クライアントサイドプログラムを行うのにサーバサイドJavaScriptと呼ばれているものを用いるのに違和感がある。**  
**A.問題ない。あなたの考えている「クライアント」や「サーバ」とは意味が異なる。**

まず、クライアントサイドJavaScriptとは、Webブラウザをホスト環境として実行する場合の呼称である。  
対して、サーバサイドJavaScriptとは、クライアントサイドJavaScript以外のものを指す呼称で(も)ある。  
したがって、Webブラウザ外で実行したいのであればサーバサイドJavaScript環境を用いるのは当然、ということになる。

同 第5版 p.3:

> JavaScriptインタプリタをWebブラウザに組み込んだものを、クライアントサイドJavaScriptと呼びます。

同 第6版 p. 313:

>
> [前略]ただし、「サーバサイド」という言葉は、「Webブラウザ以外のすべてのもの」という意味にも取れます。例えば、Rhino上のプログラムは、JavaのSwingフレームワークを使ってGUIを作成できます。また、Nodeでは、シェルスクリプトと同じようにファイルを操作するJavaScriptプログラムを実行できます。

* * *

**Q.Node.jsを用いるのは妥当か。**  
**A.要件による。**

今回の質問にある標準入出力機能であればどのサーバサイドJavaScriptも備えている(前述WSH,Rhinoの例を見よ)のでNode.jsでなければならない、ということはなく、サーバサイドJavaScriptであれば何でも良い。Node.jsにしか存在しない機能を用いるのであればもちろんNode.jsを使う必要がある。

要するに、どのサーバサイドJavaScriptを採用するかの選定方法は、他の分野のプロダクト選定と同様である。


CC BY-SA 3.0
2016-08-21T11:47:10.977
28415
2016-08-21T23:48:13.053
2016-08-21T23:48:13.053
2808
2808
28392
answer


そういうのは普通Node.jsを使うものかと思います。  
ですので私の回答も「妥当である」です。  
むしろNode.jsを使う事に何の疑問を持つ必要があるのか、よくわかりません。  
何かを勘違いされていらっしゃるのではと思います。


CC BY-SA 3.0
2016-08-26T14:07:14.203
28515
2016-08-26T14:07:14.203
15603
28392
answer