0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Node.js】Node.jsとは何か&脆弱性発覚から学んだこと

0
Last updated at Posted at 2026-10-31

結論

  • Node.jsとはJavaScriptを実行する環境などを提供するプログラム
  • Node.jsを利用することで、npmによるライブラリ管理やTypeScriptの変換、Angularの開発用サーバーの起動などブラウザだけではできないことも実行できるため開発環境では活躍してくれる

詳細

JavaScriptってどこでどう動く?

  • JavaScriptプログラムを実行できる専用プログラム(=JavaScriptエンジン)が実行してくれる
  • JavaScriptエンジンはChromeなどのブラウザに搭載されている
  • JavaScriptプログラムが渡されると、その環境に搭載されたJavaScriptエンジンがプログラムを実行する
  • 例:
<script>
  const message = "こんにちは";
  console.log(message);
</script>

ChromeでこのHTMLを開くと、以下のような流れになる:

  1. ChromeがHTMLを読み込む
  2. JavaScriptのコードを見つける
  3. 自身のJavaScriptエンジン(V8)に処理を渡す
  4. V8がJavaScriptを実行する
  5. console.log() によってコンソールに「こんにちは」と表示される

Node.jsが必要になるとき

Chromeなどのブラウザは、基本的にWebページを読み込んで表示し、そのページ上のJavaScriptを実行するためのもの
→開発にあたり、できないこともけっこうある

image.png

例えば、Angularで以下のようなTodoアプリを作るとする:

TodoApp/
├── src/
│   ├── app/
│   │   ├── todo.component.ts
│   │   ├── todo.component.html
│   │   └── todo.component.css
│   └── main.ts
├── package.json
└── angular.json

→これらの開発用ファイルは、ChromeでそのままAngularアプリとして動かせるわけではない
→ブラウザがそのまま理解できないものも含まれているから

例① Angularのライブラリを利用する

  • Angularの機能を使うにはAngularのライブラリをダウンロードして、使えるように準備する必要がある
  • 例:import { Component } from '@angular/core';
  • この準備にnpmなどNode.jsのもつプログラムの一種が必要になる

例② TypeScriptをJavaScriptに変換する

AngularではTypeScriptを使うことが多い

const age: number = 20;
  • しかし、ブラウザが通常実行するのはJavaScript
    →TypeScriptを実行できないし、TypeScriptに変換もできない
  • この変換処理にNode.jsがもつTypeScriptコンパイラなどのツールが必要になる

例③ 開発中の画面をローカルで配信する

  • 変換・ビルドしたファイルをブラウザから見たい
    →開発用サーバーを起動する(http://localhost:4200)
  • ブラウザでこのURLにアクセスするとAngularプログラムファイルで作られた画面を表示させることができ
  • また、ファイルの変更を監視して、自動で再ビルドしたり、ブラウザに変更を反映したりしたい
    →これにもNode.jsが必要

Node.js上で動くツール

※「〇〇上で動く」とは、基本的に「〇〇という実行環境を利用して、そのプログラムが動く」
image.png

npm

image.png

主に次の2つの機能を提供するツール

  • ライブラリ(他の人が作ったプログラム)をインストールする
  • プロジェクトに登録されたコマンドを実行する

例:npm start

  • start に登録された処理を実行するコマンド
  • プロジェクトの package.json:
{
  "scripts": {
    "start": "ng serve"
  }
}

この場合、ターミナルでnpm startと入力すると、npm が package.json の scripts にある start を探し、設定された ng serve を実行してくれる

脆弱性発覚

2026/10/21、世間を騒がせたPHP・Node.jsの脆弱性は簡単にまとめるとこんな感じ:
image.png

  • Node.jsは単にJavaScriptを実行するだけではなく、サーバーを起動したり、ファイルを操作したりできる実行環境
  • つまり、Node.jsが動いているサーバーで攻撃者に遠隔で任意のコードを実行されると、そのサーバーが持っている権限の範囲で、ファイルやデータなどにアクセスされる危険がある
  • こういう攻撃者が遠隔地から、攻撃対象のコンピューター上で任意のプログラムを実行できてしまう脆弱性のことをリモートコード(RCE)という
  • また、Node.jsは開発者のPCでAngularを動かすためだけではなく、本番環境のWebサーバーとしても利用できる
    →Node.js自体に脆弱性が見つかれば、本番環境にも影響する可能性がある

脆弱性発覚後のエンジニアのTodoフロー

image.png

エンジニアが普段からやっている対策

image.png

→先輩や上司から「バージョンアップして」「アップデートして」と言われた場合、それは単に新機能を使いたいという理由だけではなく、セキュリティ上の問題を解消する目的かもしれないため軽く捉えずちゃんとやるべし!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?