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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

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

Q&A

2回答

1090閲覧

Node.jsの理解これで合っていますか?

mmmmmuse

総合スコア4

Node.js

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

0グッド

0クリップ

投稿2020/09/19 07:58

自分の理解

javascriptという言語があるが、これはフロントエンドの言語。
バックエンドでも同じ言語を使えたらいいのに!ということで、サーバー側でもjavascriptを実行できるように作られたツールがNode.js。

ちょっと脱線しますがjavaの仕組みは、
javaのプログラムは、コマンドラインで
javac test.javaでコンパイルして
java test.javaで起動する
この[javac]や[java]のコマンドが利用できるのは、java開発キット(JDK)がインストールされているから。
JDKで細かくコマンドの挙動などなど定義されている。(と理解してます)

Node.jsはこのJDKと同じ立ち位置だと理解しているのですが間違っていますか?

調べたサイト

https://nodejs.org/ja/about/
→「javascript環境」の意味がわかりません
非同期型でデッドロックかからないなどNode.jsで実現できることについては理解できましたが、じゃあ結局Node.jsってなんなの?となります。
ツールじゃないのですか?

https://eng-entrance.com/what-is-nodejs
→イメージとしてわかりやすかったのですが、
「Node.jsはサーバサイドでJavaScriptを実行できるようにしてくれるものだ。プラットフォームという表現が正しい。
PHPに対するWebサーバのApache的な存在のようにも思えるが、Node.jsはサーバも構築できるし、アプリケーションプログラムも動かせる。」
サーバを構築できてアプリも動かせるプラットフォームって、もうそれはOSだと思うのですが、一体このNode.jsは何者なのでしょうか。
同義らしいApacheも、何者か理解できていないので、Apacheを例に挙げられても理解できません。

基本的なことなのかもしれないですが、調べても調べても調べてもわからなくてどうしようもないので、よろしくお願いします。

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

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

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

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

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

hentaiman

2020/09/19 08:50

素人(?)のサイト見るより公式とwikiでも見てみましょう。 > https://eng-entrance.com/what-is-nodejs このサイトをさっと見てみましたが、微妙です。他のサイトを見ましょう。 「(意味がわからなくても構わない。雰囲気だけ掴もう)」と書いてあるけど多分この記事書いてる本人も分かってません。仕様を把握してないが為に曖昧な表現で記事書いてるだけに見えます。 まあ、ガチで初心者向けにわざと誤魔化した言葉で記事書いてるだけの可能性もありますが。
guest

回答2

0

Node.jsは何者なのでしょうか。

私が最初に触ったときには、「OS上のコマンドラインプログラムに過ぎない」と感じました。
「OS上で動くので、ファイルシステム上の(モジュールとして記述した)JavaScriptファイルが使える!便利だね!」とも。

要は、OS に JavaScriptインタプリタ(JITコンパイラ V8)機能を追加するバイナリコマンドです。

「javascript環境」の意味

「JITコンパイラ+実行環境」とまとめて表現しているのかもしれません。
NodeJSのコマンドが実行されているOSの「プロセス」と考えて差し支えないでしょう。


元々、JavaScriptはブラウザ(クライアント用ソフトウェア)の中でしか使えませんでした。
サーバー側JavaScriptとか言われますが、これは「Apacheのようなサーバーソフトウェアを稼働させるOS上に実現したJavaScriptの実行環境」と解釈できると思います(モジュールのインストールにはリポジトリへのアクセスが伴う等、快適な利用にはインターネット接続されている必要がありますが、スタンドアローンで稼働するOS上でも動きます)。

JavaScript実行環境を有効にするには、普通にコマンドラインを弾く
(あるいは何かしらのランチャー機能を使う)。
無効にする場合はプロセスを終了させる。

コマンド構文:

node [options(ファイル指定含む) [arguments]]

基本

  • REPL(対話モードの実行環境)でJavaScriptコードを試せる
  • コマンドラインアプリケーションを書ける(main.js のみのシンプルなもの/競技用コードなど)

モジュール機能(外部ファイル)

  • 複雑なコマンドラインアプリケーションを書ける(タスクランナーなど実行終了するとプロセスも終了するアプリケーション)。
  • ネットワーク関連のモジュール(組み込まれたもの/外部ファイルで作成されたもの)を利用しサーバーとして機能することもできる。(listenされた状態でプロセスが継続するタイプのサーバーアプリケーション/公式 はじめての Web サーバー )。

発展(ざっくりした話になります)

  • 今では、GUIアプリケーションの実行にJavaScriptエンジンを組み込もうというプロジェクト(Electronなど)や製品(VSCodeなど)があり、NodeJSが組み込み利用されています。

Node.jsはこのJDKと同じ立ち位置?

コマンドラインアプリケーション(バイナリコマンド)に過ぎないという点は同じです。
(脱線と述べられているように)コンパイラや実行方式は Java とでは大きく異なります
実行目的が異なるわけですね(Webが生活インフラとして浸透した時代に、カジュアルな開発言語をサーバーOS上で動かすのが目的と思っています)。


フロントエンド/バックエンドは、単に開発用に区分される言葉です。

区分例

  • フロントエンド...プレゼンテーション開発の区分で主にブラウザの表示部
  • バックエンド...サーバーアプリケーション上で動くCGIなど
  • インフラ ... ネットワーク

※マネージドサービスが登場し、ブラウザからポチポチする時代ですので、固定した区分を語るのも難しいと感じます。

サーバを構築できてアプリも動かせるプラットフォームって、もうそれはOSだと思うのです

プラットフォームという言葉は、確かにOSを想像しがちですが、現在では広義で曖昧な言葉になっていると思っています。gitHubが流行る以前からあるSourceForge のようなリポジトリサービス では、WebServer+Browser のような環境を指して「Webプラットフォーム」と示される例もあります。

投稿2020/09/19 09:30

編集2020/09/21 21:03
AkitoshiManabe

総合スコア5432

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

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

0

→「javascript環境」の意味がわかりません

公式がそう書いてるんだから、そうなんだ~と思ってればいいような。

後者のサイトについては質問者の誤解の原因だと思うので読まない方が良いと思いますが、一応誤りを正しておきます

Node.jsはサーバも構築できるし、アプリケーションプログラムも動かせる。

phpも出来ます。httpの処理に適しているかどうかはおいておき、httpの仕様に沿った処理は組めます。

PHPに対するWebサーバのApache的な

同じ構成にするなら当然nodejsに対するapache的なものが来ます。

同義らしいApacheも、何者か理解できていないので、Apacheを例に挙げられても理解できません。

httpの仕様に沿って通信を良い感じに処理してくれるものです。apacheなどのwebサーバーを使わない場合、各言語で用意されているライブラリを使って作るか、ライブラリが無い場合は自分で全部作る必要があります。

サーバを構築できてアプリも動かせるプラットフォームって、もうそれはOSだと思うのですが、一体このNode.jsは何者なのでしょうか。

文脈的にwebサーバーを構築出来ると言いたいのでしょう。ただ、技術情報を読む時には文脈気にせず文面通り受け取る事が重要だと思うので、誤解してしまった自体は正しいかと。

プラットフォームという表現が正しい。

定義が分からないので何を言いたいのか分からない。プラットフォームという単語を使いたいだけかと。
技術者がプラットフォームという単語の定義を明確にせずに使っていたとしても、大抵は前後の文脈や内容から推測出来ます。しかしこのサイトは他の技術に関する説明や理解も正しくないようなので、何を以てプラットフォームと言いたいのかサッパリ分かりません。

投稿2020/09/19 09:10

hentaiman

総合スコア6421

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問