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

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

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

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

Q&A

解決済

3回答

387閲覧

Nodeの必要性について

mN6gZkd8fr

総合スコア14

Node.js

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

1グッド

5クリップ

投稿2019/04/22 12:24

今までは,Androidアプリ開発をしてきたのですが,Webアプリを開発したいと思い勉強を始めたところです.HTMLを勉強して,いちいちタグを書くのが面倒だと感じPugを知りました.
Node.jsは一般的にサーバーサイドで用いられると聞き,ドットインストールで学習した際も,httpサーバを立ち上げたり,.ejsに値を差し込んだりとNode.jsがサーバーサイドで用いられることを体験しました.

しかし,PugはAltHTMLということでサーバーサイドというかフロントエンドの認識であり,npmでインストールしなければならない点に疑問を持ちます.Pugに限らず,ElectronについてもGUIを作成するのに何故npmでインストールするのか分かりません.他にも,GitHubでリポジトリを色々見ていると,READMEでnpmを使ってインストールする旨がよく書かれています.それらは,本当にサーバーサイドで用いるように開発されているのでしょうか?

以上の疑問から,本当はNode.jsはサーバーサイドというよりCLIで実行できるプログラムを作るためのJavaScript環境という説明が正しいのではないかと思ってきました.私の解釈が間違っているのは重々承知していますが,PugやElectronのようなフロントよりのプログラムのインストールにNodeが必要になってくる理由について教えていただければと思います.

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

本当はNode.jsはサーバーサイドというよりCLIで実行できるプログラムを作るためのJavaScript環境という説明が正しいのではないか

これは質問者さんが感じてる方がその通りです。
じゃあ何処からNode.jsがサーバーサイド用という話が出てきたか?
これに関してはNode.js開発者の動機が関係しています。

その理由が「何も気にする必要なくC10k問題を解決出来るWebサーバがほしかったから」だったと記憶しています。
その為、型やメモリ管理のコアな部分だけV8エンジンを拝借して、C++でファイル操作や自由なネットワーク通信のモジュールをくっつけてNode.jsが完成しています。

npmでインストールしなければならない点に疑問を持ちます

パッケージ管理ソフトと言うものは利用した経験はありますか?
MacならHomebrew、CentOSならyum、Debianならaptと言うふうにOSのコマンドラインツールや開発ツールを導入する為のツールが存在し、
また言語に付くパッケージ管理ソフトもあります。
Rubyならgem、Pythonならpipといった具合です。

Node.jsはnpmというパッケージ管理ソフトと二人三脚みたいな所があります。
プロジェクトルートだと決めた所でnpm initでpackage.jsonファイルを生成し、npmがもつ膨大なオープンソースライブラリから好きなモジュールをDLして自分のプログラムに差し込むことができます。
その経緯は全てpackage.jsonに書き足されていくので、もし新しい開発者がプロジェクトに参画してもpackage.jsonを用意してnpm installコマンド一撃で既存の開発環境が出来上がりです。

そういう経緯でnpmというOSS共有サービスに寄付すれば誰でもインストールできるようになります。
無断で勝手に貴方の極秘ファイルを吸い上げるわけではなく、GitHubのようにアカウントを取得して、GitHubと同じくパッケージの開発者か、許可を出した人以外はnpmのパッケージを更新出来ないようになります。

この辺の整備があるので、各個人がこっそりGitHubで公開するような感じてはなく、
npmを介してライブラリやモジュールを入れるのが一般的です。

ElectronについてもGUIを作成するのに何故npmでインストールするのか分かりません

ネットにはChroniumというオープンソースのブラウザが転がっています。
HTMLとCSSさえあればページを表示してあちこちクリックしてブラウザとして使えそうですよね?
しかしJavaScriptはファイル読み書きやネットワーク通信という機能が貧弱で好き勝手なデスクトップアプリを作る面で評価すれば論外です。

もしブラウザで動くスクリプトでファイルを読み書き出来るなら、
「Cドライブのデータを全て消去して」という命令を書き込んだJavaScriptを私のサイトに記述しておけば、私のサイトを閲覧したユーザーのハードディスクは全滅です。
そういうセキュリティ的な都合で、情報を閲覧するブラウザではJavaScript越しにファイル操作の権限は一生与えませんよみたいな仕組みになっています。

そこでJavaScriptの代わりにNode.jsを突っ込んで、documentやwindowのグローバル変数を紐付けしたのがそれです。 
まぁ、ちゃんと触った事無いので細部に関してはドキュメント等をしっかり読んでください。

投稿2019/04/23 03:49

miyabi-sun

総合スコア21158

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

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

mN6gZkd8fr

2019/04/23 07:47

回答ありがとうございます. GitHubのREADMEでたまに見かけるインストール手順で使われるnpmに疑問がありましたが納得できました.READMEにインストール手順を書くだけでは意味がなく,npmで公開しなければならないという事実は知りませんでした. Node.jsというよりnpmの仕組みを理解することができ,Webアプリの開発が行えそうです.ありがとうございました!
miyabi-sun

2019/04/23 07:51

https://qiita.com/DQNEO/items/d166e25449124a3f2b4d まぁ無理やりGitHubから取ってくる方法もあるんですけどね。 GitHubはブランチとタグで運営している為、 npmのもう一つの重要な情報である「バージョン」に関してはかなり扱いが雑になります。 npmはライブラリに登録されているコードを変更する時、 「バージョン番号」をあげないと更新させません。 …という設計になっており、各メンバーが同じバージョン番号のライブラリを揃えやすいというメリットがあります。
guest

0

最初に用語についてですが、「サーバーサイドクライアントサイド」「バックエンドフロントエンド」が対になる用語ですので、ごちゃ混ぜにならないようにお気をつけください。

しかし,PugはAltHTMLということでサーバーサイドというかフロントエンドの認識であり

Pug も含めたテンプレートエンジンはフロントエンドではなくバックエンドです。
バックエンドで Pug ファイルから HTML ファイルに変換して、それをフロントエンドに渡しています。

Pugに限らず,ElectronについてもGUIを作成するのに何故npmでインストールするのか分かりません.他にも,GitHubでリポジトリを色々見ていると,READMEでnpmを使ってインストールする旨がよく書かれています.それらは,本当にサーバーサイドで用いるように開発されているのでしょうか?

npm は Node.js のパッケージ管理ツールです。
サーバーサイド なのか クライアントサイド なのか」「バックエンド なのか フロントエンド なのか」は関係ありません。
現在では、JavaScript はサーバーサイドとクライアントサイドの両方で使われます。

また、Node.js は本来サーバーサイドの開発に使用されるものでしたが、その技術をデスクトップアプリ(クライアントサイド)に使えるようにしたツールが Electron です。
Electron は扱いがやや特殊なので、もしそれが理解を難しくしているのであれば、一旦忘れてしまっても良いと思います。

投稿2019/04/22 23:29

nskydiving

総合スコア6500

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

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

mN6gZkd8fr

2019/04/23 07:34

回答ありがとうございます. サーバーサイドとフロントサイドを混合させてしまい,申し訳ございませんでした. npmがパッケージ管理ツールであることはわかっていたのですが,node package managerに"node"が含まれているので,クライアントサイドに関係するパッケージをインストールできる点に疑問がありました.他の回答者様に「CLIで実行できるプログラムを作るためのJavaScript環境」という認識で間違っていないことが確認できたので安心しました. 現在はサーバーサイドとクライアントサイドの両方で使えることを知ることができて助かりました.ありがとうございました.
guest

0

以上の疑問から,本当はNode.jsはサーバーサイドというよりCLIで実行できるプログラムを作るためのJavaScript環境という説明が正しいのではないかと思ってきました.

その解釈であっています。
実質、Nodeはjavascriptのインタプリタであり、かつ最近の流行り通りライブラリ・モジュール管理などのエコシステムを提供しています。

npmは、rubyでいうgemや、pythonでいうpipに相当します。

私の解釈が間違っているのは重々承知していますが,PugやElectronのようなフロントよりのプログラムのインストールにNodeが必要になってくる理由について教えていただければと思います.

Nodeにサーバのイメージがついているのは当初の目的がソレだったからにほかなりません。

フロントのバンドルツール(webpackなど)は、Nodeのパッケージの管理機能を純粋なライブラリ管理機構として利用しており、このときNodeはバンドルツールのCLIを実行するためのインタプリタとしてのみ使われます。

投稿2019/04/23 02:36

otolab

総合スコア765

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

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

mN6gZkd8fr

2019/04/23 07:43

回答ありがとうございます. 私の解釈が正しいということが確認できてほっとしました. 当初の理由であったのが何となくはわかっていましたが,いくらNode.jsについて検索をかけても,「サーバーサイド」で用いられるという記述なので疑問に思っていました. Node.jsについて理解を深めることができました.ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問