Node.jsはサーバーサイド/フロントエンジニアの必須スキル

コンピュータ・IT,モバイルスキル,プログラム

NODEってなんだろう?

普及が続くサーバサイドフレームワークNode.jsは、JavaScriptの一種でサーバーが構築できる言語。

聴きなれない人は、「JavaScripとはブラウザ側の言語では?」と思った方もいるのではないでしょうか。元々サーバサイドでJavaScriptは存在していたが、いくつかの問題点があり蚊帳の外に置かれていた。改めて注目されるようになった理由はいくつかあります。

Nodeが注目されるようになった理由

高負荷時のパフォーマンスが優れている

イベントループ・モデルで処理を直列化することで、メモリ利用量を抑えプロセス/スレッド間の競合を防ぐ。Apache(mod_php)比較した場合、同時接続ユーザー数が100未満だと処理に差がないが、500以上になると差が明らかになる。

リアルタイムWEB

一昔前のチャットでは、「誰か発言してないかな・・」とページをリロードして確認していました。なぜならサーバーに新しい情報が入ったときに「ページに新しい情報が来たよ」と教えてくれないからです。しかし、Nodeを使用すればリアルタイムに発言を受け取りが可能になります。

スマートフォン需要と技術者スキルアップ

スマートフォンの急速な普及によるJavaScriptの需要が高まり、それを仕事にするエンジニアの増加とスキルアップ。結果サーバーにあまり詳しくないエンジニアでも、「JavaScriptなら・・・」と参入障壁が下がった。

NODEの技術はWEBやモバイル、ソーシャル、ゲームなどで、今後活躍の幅を広げるのは間違いない技術になりそうです。

Node.jsに関する失敗談

CPU処理を突っ込んでサーバーが止まる Node.jsはシングルスレッド前提。画像変換、重い計算、PDF生成などをそのまま書くと、イベントループが詰まり全リクエストが停止する。初心者が最初に踏む地雷。 awaitの付け忘れで静かにバグる awaitを忘れてもエラーにならず、Promiseが返るだけ。処理が終わっていないのに次へ進み、たまにだけ壊れる「一番厄介な不具合」が生まれる。 例外が1つ飛んでプロセスごと落ちる try-catch漏れやunhandledRejectionで、Nodeプロセスが丸ごと落ちることがある。ログも残らず「突然死」するケースも珍しくない。 メモリリークに気づきにくい クロージャ、イベントリスナーの解除忘れ、キャッシュの積みっぱなしなどで、少しずつメモリが増え続ける。最初は平気で、数日後にOOMで死亡。 npmアップデートで地獄を見る 依存パッケージの更新で突然ビルド不能、実行不能になる。「昨日まで動いてた」が通用しない。lockファイルの重要性を痛感する瞬間。 node_modulesを消したら直る文化に頼りすぎる 一時的には直るが、根本原因を見ないまま本番へ持ち込むと再発する。結果「なぜ直ったか分からないシステム」が完成する。 本番とローカルのNodeバージョン違い ローカルは最新、本番は古いLTS。Optional chainingやESMで即死。nvmやvoltaを使っていないと必ず一度はやらかす。 Promise.allで全部巻き添え失敗 Promise.allは1つ失敗すると全部失敗。大量処理で部分成功が許されない設計だと、一部エラーで全体が吹き飛ぶ。 ログをconsole.logで済ませて後悔 最初は楽だが、本番障害時に時系列もリクエスト単位も追えない。構造化ログを入れなかったことを後悔する定番パターン。 「Node.jsは速い」という誤解 I/Oは速いがCPUは速くない。万能だと思って選定し、後から構成を作り直す羽目になるケースは非常に多い。

Node.jsに関するトリビア

Node.jsは「JavaScriptをサーバーで動かす」ために生まれたわけではない
もともとの目的は「高速なI/O処理」。Webサーバー用途よりも、同時接続を効率よくさばくための実験から始まった。

Node.jsはシングルスレッドなのに速い
1スレッドで動作するが、イベントループと非同期I/Oにより待ち時間を極力減らしている。CPUを酷使する処理には向かないが、通信処理は圧倒的に強い。

イベントループはNode.jsの発明ではない
イベントループ自体は昔からある概念。Node.jsが革新的だったのは、それをJavaScriptとV8と組み合わせ、実用レベルまで引き上げた点。

Node.jsの心臓部はGoogle Chrome
Node.jsはChromeと同じV8エンジンを使っている。そのためJavaScriptの実行速度が非常に速く、ブラウザの進化がNode.jsにも波及する。

npmは世界最大級のパッケージリポジトリ
npmのパッケージ数は他言語を圧倒。便利な反面、依存関係が深くなりやすく「node_modulesが異常に重い」問題を生んだ。

node_modules問題は文化として定着している
プロジェクトによっては数百MBになることも珍しくない。それでも「消して再インストールすれば直る」という独特の文化がある。

Node.jsはフロントエンドの覇権を裏で支えている
Webpack、Vite、ESLint、Prettierなど、主要フロントエンドツールの多くはNode.js上で動く。目立たないが不可欠な存在。

Node.jsは一度分裂している
2014年にコミュニティが「io.js」として分裂。その後、統合されて現在のNode.js Foundation(OpenJS Foundation)体制になった。

JavaScriptが“どこでも動く言語”になった決定打
Node.jsの登場により、JavaScriptはブラウザ専用言語から、サーバー・CLI・IoTまで動く汎用言語になった。

Node.jsは「作る人の幸福度」を重視している
高速化や機能追加だけでなく、DX(開発者体験)を重視した設計思想が強い。これが爆発的普及につながった。

Node.js入門!使い方〜インストールまで

サーバサイドフレームワークNode.jsの需要が急上昇中

インフォグラフィックから読み解く

インフォグラフィックはクリックすると拡大できます

インフォグラフィック:Node.jsはサーバーサイド/フロントエンジニアの必須スキル
NODEってなんだろう?

参照元:http://www.engineyard.co.jp/infographics/nodejs

2015年モバイルインターネット背景

  • 66%のアメリカ人がモバイル端末からインターネットに接続
  • 世界のトップ100のサイト中、34がHTML5
  • モバイルの成長+HTML5の一般性=リアルタイムWEBの飛躍
    リアルタイムWEBにはリアルタイムな技術が必要

入門NODE.JS

NODE.JS

  • イベントドリブンとノンブロッキングI/Oを採用したサーバサイドフレームワーク
  • フロントエンドとサーバサイドのアーキテクチャを統合するためにJavaScriptで構築
  • ハイパフォーマンス、高スケーラビリティ、分散リアルタイムWEBアプリケーションに最適
  • GitHubで2番目にウォッチされているリポジトリ
  • Ruby on Railsよりもウォッチされています
  • Nodeパッケージマネージャにはすでに12,000のパッケージが登場

NODE.JSの有名事例

LINKEDIN

Linkedlnはモバイル向けサーバサイドスタックをすべてNode.jsで構築

  • 以前は15台のサーバ上で15のインスタンスが物理マシン上で稼働
  • 以降は4つのインスタンスで2倍のトラフィックを処理

WALMART

WalmartはモバイルアプリをNode.jsを使って再構築

  • すべてのJavaScript処理をサーバサイドに移行
    →リッチでダイナミックな体験を顧客に提供

EBAY

eBayはNode.jsを実行環境にしたHTTP APIゲートウェイql.ioを公開

通常の開発者向けUbuntuのワークステーションを使って

  • 120,000Node.jsのプロセス毎のアクティブな接続数
  • それぞれの接続は2kのメモリを消費

PLUS

  • ネットワーク対応、マルチプレイヤーゲーム
  • インタラクティブなWebサイトとツール
  • アクセス解析
  • オンラインチャットシステム

開発者がNode.jsを好きな理由

  1. JavaScript製
  2. コードをブラウザ、サーバ、データベースなどで再利用可能
  3. 強力で情熱的なコミュニティ
  4. パフォーマンスとスケーラビリティ
  5. 開発者の幸福

Node.jsの道を行こう

コミュニティの成長が早いだけで大丈夫?

  1. Web
  2. モバイル
  3. ソーシャル
  4. ゲーム

全てのプラットフォーム環境でダイナミックな技術の成長はNode.jsの明るい未来を指示しています

Posted by webclim1109