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

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

ただいまの
回答率

88.80%

Nodeの必要性について

解決済

回答 3

投稿

  • 評価
  • クリップ 5
  • VIEW 1,622

mN6gZkd8fr

score 14

今までは,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が必要になってくる理由について教えていただければと思います.

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

本当は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 16:47

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

    キャンセル

  • 2019/04/23 16:51

    https://qiita.com/DQNEO/items/d166e25449124a3f2b4d
    まぁ無理やりGitHubから取ってくる方法もあるんですけどね。
    GitHubはブランチとタグで運営している為、
    npmのもう一つの重要な情報である「バージョン」に関してはかなり扱いが雑になります。

    npmはライブラリに登録されているコードを変更する時、
    「バージョン番号」をあげないと更新させません。
    …という設計になっており、各メンバーが同じバージョン番号のライブラリを揃えやすいというメリットがあります。

    キャンセル

+3

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/23 16:34

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

    キャンセル

+2

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/23 16:43

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

    キャンセル

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

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る