Node.jsはサーバーサイド/フロントエンジニアの必須スキル
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の需要が急上昇中
インフォグラフィックから読み解く
インフォグラフィックはクリックすると拡大できます
参照元: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の有名事例
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を好きな理由
- JavaScript製
- コードをブラウザ、サーバ、データベースなどで再利用可能
- 強力で情熱的なコミュニティ
- パフォーマンスとスケーラビリティ
- 開発者の幸福
Node.jsの道を行こう
コミュニティの成長が早いだけで大丈夫?
- Web
- モバイル
- ソーシャル
- ゲーム
全てのプラットフォーム環境でダイナミックな技術の成長はNode.jsの明るい未来を指示しています












































ディスカッション
コメント一覧
まだ、コメントがありません