LoginSignup
13
10

More than 5 years have passed since last update.

はじめてのNode.js

Last updated at Posted at 2018-05-10

Node.js

どんなもの

JavaScriptの実行環境

  • JSの仕様書(ECMScript)に従い、書かれたソースコードを動かす環境
  • 大量のリクエストを高速にさばくためのプラットフォーム
  • サーバーサイド言語

具体的には、以下のようなもの

  • Chrome : V8
  • IE : JScript
  • などなど・・・

主な特徴

  • シングルスレッド
  • ノンブロッキングI/O × イベントループ

シングルスレッド・マルチスレッド

とは

  • シングルスレッドでは、カーネルに対する処理(I/O)の場合など、読み込みが完了するまでスレッドが固まってしまう
  • マルチスレッドはこれに対し、スレッドをコピーして次のスレッドを動かすことができる

Node.jsではどうなっているか

  • シングルスレッドを利用している
  • が、「ファイルI/Oの非同期」と「イベントループ」によって効率よく処理を行うことを可能にしている
  • ※ ファイルI/Oの非同期だけならば、Ruby等でも効率化は可能なことに注意

ファイルI/Oの非同期化 = ノンブロッキングI/O

  • ブロッキングI/O(通常のシングルスレッド)では、カーネルに対しI/Oを行うと同期処理のため固まってしまう。
  • ノンブロッキングI/O(Node.jsでシングルスレッド)では、I/Oに対し非同期処理を行うことで並行処理を実現している。
  • ノンブロッキングを実現(非同期処理を活用)をするために、JSが選ばれたという背景もあるらしい

イベントループ

  • イベント待機のループを持つ、仕組みのこと
  • コールバック関数で記述されたイベントが動作(処理)した後、この仕組みが働き、イベントの監視・処理を継続的に行うことができる

非同期処理の例

例えばsetTimeout等、コールバック関数を使うような書き方。
※ 以下を実行すると、1番->2番の順番で出力される。

hoge.js
setTimeout(function() {
    console.log("2番");
}, 1000);
console.log("1番");

Node.jsはどこで利用されているか

  • サーバサイドアプリケーション
  • クライアントサイドアプリケーション
  • IOTとか
  • VSCodeも

Node.js + npm のインストール方法

※npm = パッケージ管理ツール

  1. 公式ページからダウンロード or 「$ brew install node.js」
  2. node -v
  3. npm -v

ターミナルでHello World

hello.js
console.log("hello world");

$ node hello.js
で実行。ターミナルに出力される。

webサーバーでHello World

server.js
// httpモジュールの用意
var http = require('http');
var server = http.createServer();
// コールバック関数を用いたイベントの設定
server.on('request', function(req, res) {
    var data = "hello world";
    // http.ServerResponseオブジェクト
    // ヘッダー書き込み
    res.writeHead(200, {
        "Content-Length": Buffer.byteLength(data),
        'content-type': 'text/plain'
    });
    // ボディー書き込み
    res.write(data, "utf8");
    // 完了
    res.end();
});
// ポート番号とipアドレスを設定, 接続受付の開始
server.listen(3000);
console.log("server listening...");

http://localhost:3000/
にアクセス。ブラウザ上に出力される。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10