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

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

ただいまの
回答率

90.01%

Node.jsはCGIになれますか?

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 472

xjjojo

score 23

前提・実現したいこと

Node.jsがやりたいと思い調べているとCGIというワードをはっけんしました

発生している問題

Node.jsをCGIとして動作させるにはNode,jsとはべつにプログラムを用意して、それを動かさないといけない、ということでしょうか?
それとも、Node.js自体がサーバーと外部プログラムの役割をいんぺいしていて、CGIとしての機能をもつのでしょうか?

試したこと

WikipediaによるとCGIはこう説明されているます
https://ja.wikipedia.org/wiki/Common_Gateway_Interface

ウェブサーバ上でユーザプログラムを動作させるための仕組み

そこでサーバプログラムから他のプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案された。それを実現するためのサーバプログラムと外部プログラムとの連携法の取り決めが CGI である。 

Node.jsはそれ自体がサーバーになると理解しています
https://ja.wikipedia.org/wiki/Node.js

Node.js は、イベント化された入出力を扱うUnix系プラットフォーム上のサーバーサイドJavaScript環境である。Webサーバなどのスケーラブルなネットワークプログラムの記述を意図している[4]。

つまり、Node.jsをCGIとして動作させるにはNode,jsとはべつにプログラムを用意して、それを動かさないといけない、ということでしょうか?
それとも、Node.js自体がサーバーと外部プログラムの役割をもっていて、CGIとしての機能をもつのでしょうか?

もしくは、CGIはサーバーと外部プログラムが別々になっていないといけないのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+2

CGIとして稼働するためには、
・標準入力から読み込める(POSTの場合)
・標準出力に書き出せる
・環境変数が取得できる
が必要ですが、Node.jsプログラムはこれが可能ですので、Apache等、他のウェブサーバーからCGIとして呼び出すことは可能です。

すでに、Node以外でウェブサーバーが稼働していて、それにCGIで機能を追加したいが、追加するCGIをどうしてもJavaScriptで書きたいというケースがもしあれば、意味があるでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/29 19:59

    ・Node.jsをプログラムとして利用すると他サーバーとのCGIとして使える
    ・Node.jsをサーバーとして利用して、かつプログラムをJavaScript(Node.js)で書けばNode.jsをCGIとしてもウェブサーバーとしても利用できる
    ということですね!

    つまり、CGIにすることもできるしサーバーとしても動作する、そしてそのどちらも両立できるのですね

    キャンセル

  • 2019/04/29 20:03

    > ・Node.jsをサーバーとして利用して、かつプログラムをJavaScript(Node.js)で書けばNode.jsをCGIとしてもウェブサーバーとしても利用できる

    そんなことは書いてませんが。どこから出てきた話ですか?

    キャンセル

  • 2019/04/29 20:10

    すみません、「Node以外でウェブサーバーが稼働していて、」の部分を「Node.jsでウェブサーバーが稼動している」と読み違えていました

    ・Node.jsをプログラムとして利用すると他サーバーとのCGIとして使える
    ・Node.js以外をサーバーとして利用して、かつプログラムをJavaScript(Node.js)で書けばNode.jsをCGIとしても利用できる
    ということですね!教えていただきありがとうございます

    キャンセル

+1

Node.jsをCGIとして動作させるには

なぜそのようなことが必要なのでしょうか。

Node.jsをサーバサイドで使う場合、通常はNode.jsをHTTPサーバとして動作させて、その上でコードを実行する形を取ります。わざわざ別プロセスを介するCGIの形態を取ることは、ほぼありません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/29 19:37

    Node.jsはCGIとしての機能を持っているか、という興味があったので・・・
    回答から察するに、
    > Node.js自体がサーバーと外部プログラムの役割をもっていて、CGIとしての機能をもつ
    というわけではないということででししょうか?

    キャンセル

  • 2019/04/29 20:06

    otnさんの回答にありますが、CGIはあくまで「サーバとプログラムを結ぶやり取りの方法」なので、標準入出力や環境変数を使えるNode.jsでCGI用のプログラムを作ることも、できないわけではありません(ただし、それをやってなにか有意義なのかは、また別問題です)。


    現実問題として、毎回プロセスを作成するCGIでは実用性能に劣るので、他言語でもCGIを使わない方法が主流となっています。

    キャンセル

  • 2019/04/29 20:13

    >Node.jsでCGI用のプログラムを作ることも、できないわけではありません
    なるほど、質問に挙げたことは可能でも、実際はCGI自体を使わないのがベター、ということですね

    色々な回答を頂けたので、少し考えてみます

    キャンセル

  • 2019/04/29 20:15

    Node.jsは、多数のクライアントからのアクセスに対応できる(C10K問題)ことを主眼に作られていますので、アクセスのたびにプロセスを立てるCGIとして使うのでは、その良さを無にしてしまうことになります。

    キャンセル

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

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

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