nobu blog

プログラミングやゲームの話など。

*



ハンズオンNode.js感想、入門者も中級者も読むべき本

      2021/02/26

概要

オライリージャパンから発売された、ハンズオンNode.jsを読了したので感想レビューを書こうと思います。

Node.jsの入門書。対象読者は、フロントエンド開発の知識はあってもサーバサイド開発は知らないエンジニアや、他言語の経験はあってもNode.jsは触ったことがないプログラマー。

スポンサーリンク

書籍概要

どんな本?

Node.jsの入門書。対象読者は、フロントエンド開発の知識はあってもサーバサイド開発は知らないエンジニアや、他言語の経験はあってもNode.jsは触ったことがないプログラマー。
本書ではターミナルのプロンプトにコマンドを入力してその反応を確認したり、簡単なスクリプトをNode.js環境で実行したりしながら、Node.jsプログラミングの基本からWebアプリケーションの開発、テスト、デプロイまでをハンズオン形式で学びます。また、コードの背景にある設計思想や、プログラムの挙動の仕組みについてもしっかり掘り下げます。
本書のゴールは、読者がNode.jsの全体像を掴み、業務レベルでのアプリケーション開発に対応可能な知識を身につけることです。

  • 今村謙士 著
  • 2020年11月17日 発行
  • 536ページ
  • 定価4,070円(税込)

スポンサーリンク

内容のまとめ

Node.jsに関して、誕生の背景から基本思想、非同期処理やイベントプログラミングなどの使い方、Webクライアントやサーバなどの具体的な実装を順に沿って説明した入門書です。パッケージマネージャやUnitTestなど開発に用いるツール群の説明もしっかりされています。

感想

ポイント

読みやすい

オライリー本は翻訳本が多く、書籍によっては文章に違和感があったりわかりにくかったりします。
しかしながら本書は日本人の著者が書いた書籍なのでそういった問題はなくて読みやすい文章となっています。

Node.jsに関して一通りまとまっている

Node.jsの生まれた背景から、JSの進化の歴史及び各種Node.jsの機能に関して一通り網羅されています。
DBの操作やUnitTestなども含めて細かく記載されています。

スポンサーリンク

各章ごとまとめ

第1章 イントロダクション

Node.jsとは何なのか?を説明している章です。
下記の内容が簡潔にまとめられています。

  • Node.jsの基本思想であるイベントループに関して
  • Web標準とEMCAScript標準とNode.js(CommonJS)の関係性
  • Javascript文法に関する基本的な文法説明
  • モジュールなどCommonJSに関する文法説明

第2章 非同期プログラミング

1章で説明のあったNode.jsの基本的な思想となっているイベントループに関しての説明とそれを実現するための非同期プログラミングの説明が行われています。
対比として従来のマルチスレッドプログラミングとイベントループによる非同期プログラミングの比較も行われ、
Webサーバーとしてマルチスレッドで作られたApacheと、イベントループで作られたnginxでスループットに圧倒的な差が生じている点に関しても説明たされています。

実際の非同期プログラミングの方法に関しても、コールバック→Promise→ジェネレータ→async/awaitとNode.js(Javascript)の進化の歴史に沿って具体的なコードを使って説明がされています。
コールバック地獄は少し前のJSではよく見るコードだったので、それらを解決するPromiseの存在を改めて認識する事ができます。

スポンサーリンク

第3章 EventEmitterとストリーム

リクエストと応答が1対1ではないような非同期処理の場合、Promiseでは対応できず、EventEmitterを使った実装を行う必要があります。本章ではそのEventEmitterに関する考えや実装方法に関しての説明が行われています。
また、巨大なファイルを読み込む際などに、まとめてデータを読み込むのではなく、一定のタイミングでイベントとして読み込んだデータを適宜通知していくストリームに関しても説明がなされています。

第4章 マルチプロセス、マルチスレッド

シングルスレッドによるイベントループを基本思想とするNode.jsにおいて、マルチスレッドの使い方などに関しての説明がされている章になります。
基本的にシングルスレッドが基本なので、CPUコアごとにプロセスやスレッドを立ち上げて個別に動かすといった方法が説明されています。
それぞれの実装方法や通信方法など、違いおよび特徴に関しても説明がされています。
これまであまり簡単なツールくらいしか作っていなかったので、この部分の話は個人的には初耳となるものが多くて参考になりました。

5章 HTTPサーバとHTTPクライアント、6章 リアルタイムWebアプリケーション

ToDo管理アプリケーションを事例として、HTTPクライアントとサーバーに関しての実装方法に関して説明を行っています。
フロントエンド側にはNext.js(React)を採用して、説明も少し行われています。

また、リアルタイムWebアプリケーションを実現するための技術としてポーリング、ロングポーリング、SSE、WebSocketといった一連の技術の仕組みが簡単に説明され、それらを実際に実装するためのコードが示されています。

第7章 データストレージ

引き続き、ToDo管理アプリケーションを事例としてデータストア側の実装に関して説明を行っています。
json、RDBMS、NoSQLといった各種データストアを使用する際のコードが示されています。
RDBMSはSQLite、NoSQLはLevelDBを使用したコードとなっているので、それらに興味が無ければここはサラッと読んでしまっても良いかもしれません。

第8章 ユニットテストとデバッグ

Node.jsにおけるユニットテスト手法に関して具体的なツールを使用したコード例が示されています。
ツール群を組み合わせる場合(Mocha+Chai+Sinon.JS+lstanbul)とフルスタックなJestを使用した場合の説明がされています。
昨今はJestを良く耳にしますが、ツール群を組み合わせ使用せずに済む敷居の低さが受けている事がわかりました。

スポンサーリンク

第9章 デプロイ

アプリケーションのデプロイ方法に関して書いている章です。
PM2といったツール(アプリランチャー)を使用した例が紹介されています。
PM2を使う事で、マルチコアやロギング、各種本番環境に必要な機能などが搭載して、Node.jsのアプリを実行できます。
その他には、 Dockerを用いたコンテナアプリケーションとして動かす方法やGoogleのクラウドサービスのGCPでコンテナアプリを動かす方法などが紹介されています。

第10章 パッケージ管理

Node.jsにおけるパッケージ管理ツールであるnpmに関しての説明が行われています。
npmを使ったパッケージ管理はもちろんのこと、自身がnpmパッケージを公開する場合の方法なども記載されています。
npmの代替として、昨今流行のYarnに関しても章の後半で説明されています。

第11章 Node.jsとJavaScript標準

CommonJSモジュールとESモジュールにおけるモジュールのロードの仕組みの違いや、両立させる方法などに関してまとめられています。
Node.jsではCommonJSモジュールによるモジュール管理が主流で、ESモジュールは長く実験段階のままとなっている理由として両者のロードの仕組みの違いなども書かれていてかなりマニアックです。
その他にはWebAssemblyに関しても記載されています。

スポンサーリンク

まとめ

Node.jsに関して一通り網羅した入門書として最適です。
入門者ではなくても、一通りの説明があったり知らない機能などに関して説明があるので読むことで得られる事があるのではないかと思います。
JSの文法等に関しても簡単に説明はありますが、流石にJSはまったく知りませんだと少し大変かもしれません。

Node.jsの入門書。対象読者は、フロントエンド開発の知識はあってもサーバサイド開発は知らないエンジニアや、他言語の経験はあってもNode.jsは触ったことがないプログラマー。

 - Javascript, 技術書