Node.jsってなに?クライアントとサーバーの関係
目次
今回はNode.jsについて解説してみたいと思います。
jsという事でJavaScriptの何かという推察は出来るのですが、Node.jsの本質的な部分とは何でしょうか。
それにはWebアプリケーションの根本的な仕組みついて考えてみる事で明らかになるでしょう。そして様々なサービスがある中でNode.jsを使用するメリットとデメリットについても気になりますね。
学習コストやこれからの需要も含めてどんな技術か理解しましょう。
サーバーとクライアント
私たちがWebにアクセスするのに使用しているのはブラウザです。
google chromeやFireFoxなどはブラウザと呼ばれるソフトウェアで、HTMLを読み込んで画面に表示してくれたりします。
htmlやcss,JavaScriptはフロント側のプログラミング言語で、クライアントと呼ばれます。
一方でWebアプリケーションのバック側では、消費者やユーザーのデータを扱うためにクライアントとは違う言語が動いています。
PHPやRuby,JavaやGoなどはサーバーサイド言語で、複雑そうにないものでも、実は見えないところでプログラムが動いています。
ではNode.jsはどちらでしょうか。
クライアント側とサーバー側のどちらのものかというと、サーバー側のフレームワークになります。
フレームワークの利点
-
- 開発の大変な部分を肩代わりしてくれる
- サイトへの攻撃に対応してくれる
- サーバー側のプログラム開発を少しでも楽にしてくれる
</0l>
1.開発の大変な部分を肩代わりしてくれる
フレームワークの最大の利点とは仕組みそのものを提供してくれていることではないでしょうか。
webで動くプログラムであれば、webブラウザから送られたリクエストはデーターベースやアドレスのチェックなど、結果を返すまでにいくつものロジックが組み立てられています。
それらをゼロから作り上げるよりも、使用したい固有の部分を作成したり、カスタマイズすることの方が開発はずっと早く進めることが出来ますし、簡単になります。
2.サイトへの攻撃に対応してくれる
webに公開されているサイトが度々ハッキングやフィッシングなどの被害が出ることがあります。世界中からアクセス可能なサイトであるからこそ、セキュリティの重要性は高まり、サイト攻撃の対応を考えなければなりません。広く使われているフレームワークの多くにはコミュニティが存在しています。セキュリティの穴が見つかればすぐに対応する。そのようにオープンソースだからこそ情報が蓄積するという利点もあるのです。
3.サーバー側のプログラム開発を少しでも楽にしてくれる
動的に処理されるプログラムのロジックやアルゴリズムは簡単ではありません。商品を選択し、買い物かごで購入するといったよくある事例でも、在庫データの状況を確認するプログラムや、商品の購入者と商品を注文したということを紐ずけて処理をするなどサーバ側で行われるプログラムは多数あり、それらの開発を手助けしてくれるのがフレームワークです。
Node.jsのソフトウェアとしての側面
これまでフレームワークのメリットや特徴に触れてきましたが、Node.jsのもつ強力な魅力にnpmがあります。Node Package Managerの略で様々な機能を持ったソフトウェアを管理しています。
httpリクエスト機能であるhttpモジュールやファイルを扱うFileSystemはNode.jsがもつ機能ではありますが、ログイン認証を実現するpassportや外部のデータを取得するのに使われるaxios(アクシオス)などはインストールして使うことができます。Node.jsをインストールすることで、このように必要な時に必要なモジュールをインストールしてアプリケーションに実装することができます。
下記の例ではindex.htmlを読み込んで表示させるプログラムです。
サーバー側でJavaScriptが使われるようになったのはなぜ?
webブラウザ上でしか動かなかったJavaScriptをサーバー側で実行できたらどんなに効率的だろうか。こう思った開発者は多かったのではないでしょうか。なぜならアプリケーションの制作過程の効率化やフロントエンドとバックエンドの技術をどちらサイドでも発揮することが可能になるからです。このような同型の意味で使われだしたワードがIsomorphic(アイソモーフィック)です。
アイソーモーフィックの利点
-
-
- webページの初期ロード時間
- クロールされやすい
- メンテナンス性
- 開発の効率化
-
アイソーモーフィックによって初期表示が早くなった
webブラウザに読み込まれてからHTMLを表示させるより、サーバー側で実行しておいてHTMLを生成する方がパフォーマンスが上がったと言われています。これをサーバーサイドレンダリングと言います。初期表示の際に、ユーザーが待たされることになれば、アプリケーションからの離脱率が上がるとされた結果もあり、スマートフォンの普及によって初期表示の重要性は上がっているのでしょう。
Node.jsを使用するメリットとデメリット
これまでの内容でNode.jsの特徴を掴めたでしょうか。一つのアプリケーションを作り上げるまでに必要な技術や知識はフレームワークだけには止まりません。データーベースやサーバーの環境構築の知識やリリース前の単体テストや結合テストなど,アプリケーションの制作にはいろんなスキルが必要になります。そんなワークフローの一つである言語やフレームワークの選定はとても重要なものになりますよね。Node.jsならアプリケーション制作に必要なモジュールを読み込み、実装させ、サーバー構築やデータベースからのデータの取得もフロントの実装も同じ言語のJavaScriptの構文で作業することができるのは大きなメリットになることでしょう。しかしメリットだけではありません。アプリケーションにとって注意するべきは堅牢性でしょう。サーバーサイドの一部をフロントエンドが担当することになると、フロントエンドのカバー領域が広くなります。パスワードやデータの取り扱い、特にユーザーの情報の取り扱いは重要なセキュリティですから、実装するときは適切に処理しなければなりません。