ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Node.js・React:Node.js とは

初めに

 本記事では、Node.js がどのような特徴を持ち、なにができるのか、まとめます。

Node.js とは

 Node.js は、クロスプラットフォームに対応した JavaScript 実行環境であり、サーバーサイドのプログラムを実行するために使用されるオープンソースのプラットフォームです。通常、ブラウザ内で実行される JavaScript はクライアントサイドでのみ動作しますが、Node.jsを使用することで、サーバーサイドで JavaScript を実行できるようになります。

 要するに、クライアントサイドとサーバーサイドの両方の処理を JavaScript で書くための実行環境だという認識でよいでしょう。

Node.js の特徴

非同期の I/O 処理

 Node.js は非同期の I/O 処理に対応しています。I/Oとは、Input/Outputの略で「入出力」を意味しています。タスクが終わっていない状態でも、次のタスクを進められるため情報の処理がスムーズになります。

シングルスレッドによるメモリ消費の効率化

 通常のWebサーバーは、マルチスレッドであり、リクエストごとに新しいスレッドを作成して処理します。しかし、スレッドの作成や管理にはコストがかかり、大量の同時接続を処理するには限界があります。

 「C10K問題」がよく言われます。C10K とは、Client 10k(10 * 10^3 = 10000)すなわちクライアント10000台のことです。Apache HTTP Server などの Web サーバソフトウェアとクライアントの通信において、クライアントが約1万台に達すると、Web サーバーのハードウェア性能に余裕があるにもかかわらず、レスポンス性能が大きく下がることが問題になりました。

 Node.js はシングルスレッドモデルを採用していますが、このスレッドは非同期 I/O 処理を得意とします。つまり、1つのスレッドが大量のリクエストを非同期に処理できるため、従来のマルチスレッドモデルよりも高い性能を発揮でき、C10K問題を回避することができます。

高速

Google V8 JavaScript エンジンを使用しています。従来の実行エンジンと違い、JavaScriptを即座にコンピュータが理解できる機械語に変換して処理を行うため非常に高速です。

npm(Node Package Manager)

 npm(Node Package Manager)を通じてパッケージのインストールや管理を行います。npm は世界中の開発者が作成した数多くのパッケージを提供し、開発効率を向上させます。

Node.js ができること

 Node.js はフレームワークが多く、様々なことができます。例えば、下記のようなことが可能です。

Webアプリケーション開発

 Express のような Web アプリケーション・フレームワークを使って Web アプリケーションを作ることが最も定番の使い方です。

expressjs.com

 Socket.IO というリアルタイムでの双方向通信を可能にするライブラリを併用して、チャットアプリやゲームアプリを作成することが可能です。
socket.io

デスクトップアプリ開発

 Electron というフレームワークを使って、デスクトップアプリケーションを作ることができます。JavaScript、HTML、CSS を使って WindowsmacOSLinux で動作するクロスプラットフォームアプリを作成できます。

www.electronjs.org

スマホアプリ開発

 Ionic Framework はオープンソースの UI ツールキットで、HTML、CSSJavaScript などのウェブ技術を使って、 Angular, React, and Vue といった人気フレームワークと併用することで高性能で高品質なモバイルアプリやデスクトップアプリを作ることができます。

ionicframework.com

Node.js の苦手なこと

高負荷、長時間の処理

 Node.js はシングルスレッドであり、CPUバウンドなタスク(例: 高負荷の数値計算、画像処理)には向いていません。また、長時間の処理を行う際には適していません。シングルスレッドであるため、処理が完了するまで他のリクエストの処理ができなくなります。