質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

3回答

3472閲覧

Node.jsの、「JavaScript実行環境」の意味がわからない

Masaking427

総合スコア5

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

4クリップ

投稿2021/04/05 05:55

わからないこと

Node.jsの、「JavaScript実行環境」、特に、「環境」の意味がわからないです。

例えばJavaを実行するためには、それを乗っけるアプリケーションサーバー環境が必要です。
それに加えて、webサーバーも必要。
アプリケーションサーバー環境は、ミドルウェア(tomcat)、OS(Linux)、ハードウェア

だとすると、Node.jsは、コンピュータの階層構造の、どの層に該当するのでしょうか?
ハードウェアでもOSでもないので、あえていうならミドルウェアに相当するのかな、と考えていますが、そのようなものがヒットしなくてよくわからなくなっています。
「環境」ならwindowsだって立派な環境ですけど、node.jsはもちろんOSではないので。

そしてミドルウェアだとした場合、webサーバーを作っているのかアプリケーションサーバーを作っているのかがよくわからないです。
apacheの競合なのか、tomcatのJS版なのか、はたまた全然違う何者なのか(その場合はシステムアーキテクチャのどこに該当する技術なのか知りたい)、を伺いたいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/04/05 06:08

「Node.jsがどこにインストール可能か、どうやって稼働してるか」という意味なら調べて出てくる範囲では。 何を確認して「分からない」と言ってますか?
Masaking427

2021/04/05 06:19

何を確認して「分からない」と言ってますか? https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/Introduction#node_%E3%81%AE%E7%B4%B9%E4%BB%8B ここを確認して、実行環境との記載がありましたが、「実行環境」の意味がふわふわしていてわからないです。 Node.jsがどこにインストール可能か インストールしても、macのアプリケーション一覧に乗らないところから、アプリケーションではなくミドルウェアかと考えています。 https://techacademy.jp/magazine/16113#:~:text=Windows10%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%EF%BC%88Mac%E3%81%A7%E3%81%AF%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%EF%BC%89%E3%81%A7%E7%A2%BA%E8%AA%8D&text=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7npm%20bin%20%2Dg,%E7%9A%84%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82 これを見るに、pathを通さないといけないことから、mySQLのように、ミドルウェアに該当すると考えています。 どうやって稼働してるか については、知識不足でググったものの理解を得られませんでした。
hentaiman

2021/04/05 06:21

ミドルウェア=ウェブサーバーまたはアプリケーションサーバーの二つしかないという前提で考えているからおかしいのかと
Masaking427

2021/04/05 06:24

ありがとうございます。 なるほど。 他にもDBサーバーやメールサーバーなど色々あると思いますが、そうすると、Node.jsは、何サーバーを作るためのミドルウェアなんでしょうか?
hentaiman

2021/04/05 06:31

javascripを実行する為のものですね
miyabi_takatsuk

2021/04/05 06:37

macOSにおいても、インストールの仕方によっては、アプリケーション一覧に載ります。 (公式サイトから、イメージファイルをダウンロードし、Aplicationファインダーに格納した場合) 調べた限り、ミドルウェアが、該当しそうな気もしますが、 アプリケーションとも言えるような気がします。 https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2 https://ja.wikipedia.org/wiki/Node.js https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2
Masaking427

2021/04/05 06:38

??? プログラミング言語を実行するためのミドルウェアが、アプリケーションミドルウェア(tomcat)とかで、それを入れるとアプリケーションサーバーだと思っています。 サーバサイドを想定しないような、単なるJavaプログラムであれば、JREさえあれば実行できます。 と他の方からお答えいた抱いてますが、Node.jsはサーバーサイドでのjavascript実行環境なところから、サーバーサイドを想定していると思います。 よって、javascripを実行する為のものですね = アプリケーションミドルウェアだと思うのですが、違うのでしょうか?
miyabi_takatsuk

2021/04/05 07:05 編集

そして、プログラム言語と、ハードウェア、OSの関係や立ち位置などの理解と、位置付けの理解を先にすべきかと。 でないと、本質問の回答を得ても理解は難しそうです。 > Node.jsはサーバーサイドでのjavascript実行環境 Node.jsはサーバーでとは限りません。 (もちろん、Webサーバーを中心に動くような設計思想であるのは否めない) サーバーに関して勘違いされているように思えます。 サーバーとはいっても、我々が普段使用しているPCと、基本は変わりません。 アプリケーションなどを、サーバー用のものを入れ、サーバーとして使用している、に過ぎません。 よって、Node.jsといえど、サーバーに入れるものとは限りません。 また、JavaScript自体が、以前は確かに、Webで動くプログラミング言語でしたが、 現在は、様々な実行環境で可動できるよう、各々のアプリケーションなどが発展しています。 Node.jsはコンピュータ自体に、JavaScriptが可動可能な環境を設ける、というものと思われます。 よって、サーバーであろうが、ローカルのコマンドラインであろうが、JSによっての処理をかけることができる、そして、Webサーバーとしての動きをさせやすいよう、ライブラリが用意されている、 ということでしょう。 それらを総合して、「実行環境」と呼称しているのではないでしょうか。
m.ts10806

2021/04/05 06:47

質問は編集できますので適宜調整してください。
hentaiman

2021/04/05 07:01

> Node.jsはサーバーサイドでのjavascript実行環境なところから、サーバーサイドを想定していると思います。 サーバーサイドの実行環境という認識が間違ってますね 強いて言うならブラウザではない実行環境ですね 手元のパソコンがwinかりんごか知りませんが、どちらにもnodejsは入れられますよ
hoshi-takanori

2021/04/06 01:31

別に Java でも単体で動く Web サーバーは書けますよ。(実用性はありませんが。) node.js ができることは ruby や python などの他のスクリプト言語で「処理系」と呼ばれるものと大差ないと思いますが、node.js だけ「実行環境」と呼ばれるのは、やはりブラウザと区別するためでしょうね。(むしろ「処理系」は言語そのものを処理する部分だけを指すべきで、他のスクリプト言語で「処理系」が指す範囲が広すぎるのかも。)
guest

回答3

0

展開環境 - Wikipedia
環境(開発環境、テスト環境、本番環境など)の「環境」ってところだけ切り出しても
あまり意味がないんじゃないかと。Environmentの訳ではあるのだけど。
動かすための条件が整って仕組みがあり機能すること、が環境なんじゃないかと。
javascriptという言語および言語仕様、それに則って書かれたコードがjavascriptコードとかスクリプトとか。
それをサーバー上で「動かす仕組み」→「環境」かと。
(サーバーとみなすコンピューター上で、の意味だけど、別にサーバー専用ってわけではないことにも注意。)

Node 開発環境の設定 - ウェブ開発を学ぶ | MDN
の通り、Node.js実行環境を整えれば、
ネットワークからのリクエストを受信して、定義に従ってスクリプトを実行し、結果を応答する
という意味ではwebサーバーをNode.js実行環境が受け持っているということになりそうな。

Web開発の選択肢の1つ、Node.jsはいかが?『入門Node.jsプログラミング』で始めよう:CodeZine(コードジン)
こちらだと環境とは言わずにプラットフォームと言ってますけれども。

webサーバーとアプリケーションの境目みたいなところを気にしているようですけれども、
古くはwebブラウザ(webクライアント)からのリクエストごとに
処理するプログラムやランタイムを呼び出して実行させるCGIよりも、
webサーバープロセス内に永続的に存在して
プログラム起動までのタイムラグをなくしつつメモリ利用効率を高めたりするもの(例:PHPのモジュール型実装)や、
webサーバーとは別のプロセスで永続的に存在する仕組みもあり、
(例えばFastCGI(というプロトコルに則って作られたサーバーやプログラム)とか)
Node.jsもApache httpdやnginxなどのwebサーバープログラムと連携して動かすこともできますし、
Node.jsだけでwebサーバーとして必要なwebクライアントとのインターフェースを取り持つこともできます
単にjavascriptのコードが動くだけじゃなく、ネットワークのインターフェースを備え、
それがたまたまTCP:80番ポートでLISTENしていればwebサーバーにみえるっていうだけかと。

FastCGI - Wikipedia

Node.js登場の背景としては、
モダンなwebアプリケーション(やサービスやコンテンツ)において
大量のwebリクエストを効率的に捌いて処理して応答する上で
従来と違った概念でひねり出した工夫の結晶なんじゃないかと。
どういう工夫なのかって話は本筋とズレるから例えばこちらの記事を参照:
Node.jsについて調べてみた - Qiitaの「軽量で効率的に多くの処理を捌ける」あたり。

投稿2021/04/05 06:29

編集2021/04/05 08:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masaking427

2021/04/05 06:46

お返事とリンクありがとうございます。 サーバー上で「動かす仕組み」→「環境」 ここが僕が本質的に理解できていない部分だと思います。 なぜなら、サーバー上でプログラムを動かすためには、実行環境、ミドルウェア、OS、ハードウェア、ネットワーク全てひっくるめた環境が必要でだからです。 ただそれだとアバウトなので、システムを構築する上で全体のどの部分を担当しているのかな、というのが知りたいのです、
maisumakun

2021/04/05 06:50 編集

> サーバー上でプログラムを動かすためには、実行環境、ミドルウェア、OS、ハードウェア、ネットワーク全てひっくるめた環境が必要でだからです。 それが誤解です。スタンドアローンのプログラムでも、「HTTPからのアクセスを受け付け」「それに応答する」ものであれば、それがWebサーバです。
退会済みユーザー

退会済みユーザー

2021/04/05 07:30

Adobe Creative Cloud環境を入れると、自分のPC上でNode.jsで動いていたりしますよね。 だから「サーバーの」にこだわりすぎると本質を見失うよね。
guest

0

例えばJavaを実行するためには、それを乗っけるアプリケーションサーバー環境が必要です。

それに加えて、webサーバーも必要。

この前提がおかしいです。サーバサイドを想定しないような、単なるJavaプログラムであれば、JREさえあれば実行できます。

投稿2021/04/05 06:17

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/04/05 06:19

> 特に、「環境」の意味がわからないです。 Java Runtime 「Environment」と同じです。
Masaking427

2021/04/05 06:28

なるほどーーー JRE + Java + Spring + ライブラリ を、tomcatの上に乗っけるように、 Node.js + Javascript + Express +ライブラリ を、デプロイする、ということですね! そうすると、省略されているだけで、Node.jsで動かしているサーバーも、下にはtomcatとかアプリケーションサーバー用ミドルウェアが入っている、ということですね。 ありがとうございます。
maisumakun

2021/04/05 06:35

> Node.jsで動かしているサーバーも、下にはtomcatとかアプリケーションサーバー用ミドルウェアが入っている、ということですね。 いえ、Node.jsには簡単にHTTPサーバを作れるライブラリが含まれていて、Node.js上で動かすJavaScriptコード自体がWebサーバとして動作します(とはいえ、実用する場合にはリバースプロキシを入れるなどをすることはあります)。
Masaking427

2021/04/05 06:41

ということは、 Node.jsは、WEBサーバー用ミドルウェア + アプリケーションサーバー用ミドルウェア + javascript実行環境、の全てのプログラムが入っている、ということでしょうか? apacheとtomcatとJRE全部入り、みたいな。
maisumakun

2021/04/05 06:45

無理に既存のものになぞらえようとして、逆に行き詰まっているようにも見受けられます。 Node.jsは、「JavaScript実行環境」+「標準添付のライブラリ」といった構成です。
guest

0

自己解決

皆様ご回答ありがとうございます。

回答では、わかる部分と分からない部分があり、全てが理解できているわけではないです。

しかし、Node.jsは

  1. (研修で習った、)WEBサーバー=>アプリサーバー=>DBサーバー の3層構造の概念自体が古い。Node.jsは、その枠に当てはまらない新しいアーキテクチャ
  2. ミドルウェアの上にプログラム乗っければ動くわけではなく、ミドルウェアとプログラムの間に、コンパイラとかruntime enviormentとか、まだ噛ませないといけないソフトがある。その意味で、JREのjavascript版。しかし、それ以外にも色々な機能が付属している(webサーバーっぽく振る舞える機能とか)

の理解で一旦前に進んで、折を見て振り返ろうと思います。

たくさん教えていただけて嬉しいです。
またよろしくお願いいたします。

投稿2021/04/06 03:07

Masaking427

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問