【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集


※ 当ページには【広告/PR】を含む場合があります。
2021/12/06
2024/04/23

弊社では技術開発活動の中で活用しているナレッジを日々様々なリソースから得て、継続的に勉強を重ねています。

ソフトウェア産業の分野では、常に新しい情報を得るために多方面にアンテナを張って、貪欲に知識をビジネスに取り入れるという姿勢が必要になります。

この記事では、ブログの個人的に気になった&試してみたいnodejsの良質で旬な学習素材をまとめていく内容になっています。

気になる学習教材があれば、リンク先のサイトで是非ともチェックしてみてください。


nodejs選びのコツ

nodejsはサーバー・バックエンドを支えるJavascript製の実行環境である、というのが一般的な説明ですが、サーバーサイドに留まることなく、応用的なアプリケーション開発など、もはや「nodejsは何でもできる」と言っても過言ではありません。

Javascriptに翼を授け、アプリケーションの可能性を何処までも高くしてくれるのが、nodejsという魔法のツールのように思います。

それ故に、「nodejsを完璧に身につける」ということは、意気込みは買いますが、あまり賢い行為ではありません。

ただ動機もなく、nodejsをやってみようと思うと、カバーする知識の裾の広さに圧倒されて、学習途中で挫折してしまうパターンが多いでしょう。

nodejsの学習教材を選ぶコツは、
目的ありきです。

Javascriptを十分身につけてたJSプログラマーが、どんなプログラムを作りたいのかをしっかりと意識すれば、現在置かれた課題において最適な書籍や教材をチョイスすることができるはずです。


nodejsをしっかり学べる書籍ピックアップ

nodejsはサーバーサイドでの実行を前提にしたバックエンド色の強いどちらかと言えば「縁の下の力持ち」・「裏方」の役割で利用されることが多いJavascript製インフラとも言えます。

またnodejsをしっかりとモノにしたいのであれば、Javascript/Typescriptもある程度のレベルまで習得しておかなければいけません。

JSの基礎やコツを掴んでからの方がnodejsの学習効果は高いです。

今日日、
JSベースのサーバーインフラとして認識されているnodejsですが、出来ることが有りすぎて、割とベテランのエンジニアでもnodejsとは何か?を簡単には答えられないかも知れません。

個人的には「nodejsで何が出来るか」を悩ましく考えるより、「nodejsを覚えてから何をやるか考えよう」というようなスタンスで取り組んだ方が楽しく勉強できるような気がします。

ということで、ここではnodejsを学ぶ上で、読んでおきたい書籍をとりあえず著書の独断でピックアップしていきます。

入門Node.jsプログラミング

入門Node.jsプログラミング
』はnodejsの入門書籍の代表的な一冊です。

まずはこの書籍のカバーするnodejs関連の学習項目を目次から読み解いてみましょう。

以下は目次の内容を一部抜粋した一覧図です。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

見ての通りで、圧倒的なボリュームと丁寧な解説が充実した内容で、nodejsの基礎から応用までがまるまると一冊にまとまった著書です。

この書籍では、Webアプリケーションの構築方法で、nodejsをサーバーサイド上で利用する一通りの方法をじっくり細かく解説されていきます。

この一冊を読み込んだ後は、Express.js/MongoDBベースのWebサイトが丸ごと自作できるだけの実力が身に付くことでしょう。

また各章末に演習問題と解答などを配置し、読者の理解を深めながら読み進めるよう工夫されています。

個人的には、応用編として
Socket.ioを使った簡単なチャット機能の実装パートが載っているのが他の著書との違いあるアクセントとなっているように感じます。

なお出版からおおよそ2年ほど経った内容ですが、nodejsとしては古くなって参考にならないというようなことはありません。

Express.js等のnodejsベースのライブラリはバージョンアップが進んで、割と新しい用法や非推奨となった関数が多くなってきていますが、まださほど心配するほどでもないでしょう。

古くなって警告が出るようになったらそこだけ置き換えてあげるだけで良いとう話です。

Node.js超入門

定番の入門向けnodejs本・『
Node.js超入門 第3版
』です。

レベルは入門者向け書籍とされていますが、主な読者のターゲットはWebアプリケーションを一から構築したい方向けです。

webアプリケーションの基礎をじっくりと解説されており、後半では主にデータベースの扱いの説明に重きが置かれている構成のようです。

nodejsのO/RM(Object-relational mapping;オブジェクト関係マッピング)の代表格である
「Sequelize」を使ったデータベースとJS間の操作を詳しく知りたい方には良い書籍です。

書籍ではSequelizeでSQlite3を例に、シンプルなCRUDアプリケーションを作成までを取り上げているようです。

Sequelizeは他にPostgreSQL・MySQL・Microsoft SQL Serverなどの主要なRDBに対応しています。

詳しい章の構成は以下の一部抜粋した目次から参照ください。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

ハンズオンNode.js

ハンズオンNode.js
』はnodejsのベースとなる技術をディープに解説しているオライリー本の邦書です。

nodejsの入門書レベルとされていますが、この本を理解する場合、フロントエンド開発をある程度齧った経験があるなど中級〜のJavascriptの知識がないと読み進めるには厳しい内容かも知れません。

本書では、ターミナルのコマンドの標準出力を確認したり、簡単なスクリプトをnodejs環境で実行したりしながら、nodejsプログラミングの基本、Webアプリケーション開発、テスト、デプロイまでをハンズオン形式で学ぶ、という内容が売りになっています。

章の前半では、非同期・Observerパターン・処理ストリーム・マルチスレッディングのJavascriptのディープな解説パートでnodejsを使いこなす準備に内容を割いて、後半でアプリケーション開発の手法を論じています。

本書のゴールは、読者がnodejsの全体像を掴み、業務レベルでのアプリケーション開発に対応可能な知識を身につけることに主眼が置かれています。

各章の解説内容としては、目次を抜粋した内容から以下の通りで構成されています。

            
            1章 イントロダクション
    1.1 Node.jsの特徴
        1.1.1 イベントループによる並行処理
        1.1.2 スモールコアとnpm
        1.1.3 モジュールシステム
        1.1.4 ユニバーサルJavaScript、ユニバーサルWebアプリケーション
    1.2 Node.jsとECMAScript標準、Web標準
        1.2.1 ECMAScript標準
        1.2.2 Web標準
    1.3 ハンズオンの進め方
    1.4 JavaScriptの基本
        1.4.1 変数の宣言
        1.4.2 関数
        1.4.3 オブジェクト
        1.4.4 配列
        1.4.5 クラス
        1.4.6 等価性
        1.4.7 CommonJSモジュール

2章 非同期プログラミング
    2.1 イベントループと非同期プログラミング
        2.1.1 マルチスレッドによる並行処理とその問題点
        2.1.2 イベントループによる並行処理と非同期プログラミング
    2.2 コールバック
        2.2.1 コールバックを利用した非同期APIを実行する
        2.2.2 エラーハンドリング
        2.2.3 混ぜるな危険、同期と非同期
        2.2.4 コールバックヘル
    2.3 Promise
        2.3.1 Promiseインスタンスの生成と状態遷移
        2.3.2 then()、catch()、finally()
        2.3.3 Promiseのスタティックメソッドを使った非同期処理の並行実行
        2.3.4 Promiseのメリット
        2.3.5 Promiseの利用が適さないケース
        2.3.6 Node.jsにおけるPromiseのこれまでとこれから
    2.4 ジェネレータ
        2.4.1 ジェネレータの生成
        2.4.2 イテレータとイテラブル
        2.4.3 引数を渡したnext()の実行、およびthrow()
        2.4.4 ジェネレータを利用した非同期プログラミング
        2.4.5 非同期プログラミング以外のジェネレータの利用例
    2.5 async/await
        2.5.1 async/await構文の使い方
        2.5.2 async/await構文のメリット
        2.5.3 async/await構文と非同期処理の並行実行
        2.5.4 トップレベルawait
        2.5.5 for await...of

3章 EventEmitterとストリーム
    3.1 ObserverパターンとEventEmitter
        3.1.1 EventEmitterの利用
        3.1.2 EventEmitterとメモリリーク
        3.1.3 エラーハンドリング
        3.1.4 EventEmitterの継承
        3.1.5 コールバックパターン形式でイベントリスナを登録する
        3.1.6 EventEmitterからのasyncイテラブルの生成
        3.1.7 EventEmitterのPromise化
    3.2 ストリーム
        3.2.1 ストリームの基本
        3.2.2 読み込みストリーム
        3.2.3 書き込みストリーム
        3.2.4 二重ストリームと変換ストリーム
        3.2.5 pipe()によるストリームの連結
        3.2.6 エラーハンドリングとstream.pipeline()
        3.2.7 ストリームの異常終了とstream.finished()
        3.2.8 読み込みストリームとasyncイテラブルの互換性

4章 マルチプロセス、マルチスレッド
    4.1 プロセスとスレッド
    4.2 clusterモジュールによるマルチプロセス化
        4.2.1 Webアプリケーションのマルチプロセス化
        4.2.2 IPC(プロセス間通信)
    4.3 worker_threadsモジュールによるマルチスレッド化
        4.3.1 worker_threadsモジュールの使い方
        4.3.2 スレッドプールの実装
        4.3.3 スレッド間通信とIPCの違い
        4.3.4 スレッド間での値の転送
        4.3.5 スレッド間での値の共有

5章 HTTPサーバとHTTPクライアント
    5.1 ToDo管理アプリケーション
    5.2 httpモジュールの利用
    5.3 WebアプリケーションフレームワークとExpress
        5.3.1 ルーティング
        5.3.2 ミドルウェア
        5.3.3 プロキシを介したHTTPリクエストの処理
    5.4 ExpressによるToDo管理アプリケーションの開発
        5.4.1 GETリクエストのハンドリング
        5.4.2 POSTリクエストのハンドリング
    5.5 ユニバーサルWebアプリケーション
        5.5.1 Next.jsによるユニバーサルWebアプリケーションの実装

6章 リアルタイムWebアプリケーション
    6.1 ポーリング
    6.2 ロングポーリング
    6.3 SSE(Server Sent Events)
        6.3.1 SSEの実装
    6.4 WebSocket
        6.4.1 WebSocket実装のためのライブラリ
        6.4.2 Socket.IOを利用したToDo管理アプリケーションの実装

7章 データストレージ
    7.1 データストレージに対する操作の抽象化
    7.2 ファイルシステム
        7.2.1 ファイル操作の基本
        7.2.2 ToDo管理アプリケーションのデータストレージの実装
    7.3 リレーショナルデータベース
        7.3.1 sqlite3パッケージを使ったSQLiteの操作
        7.3.2 ToDo管理アプリケーションでのSQLiteの利用
    7.4 NoSQL
        7.4.1 NoSQLの分類
        7.4.2 levelパッケージによるLevelDBの操作
        7.4.3 ToDo管理アプリケーションでのLevelDBの利用

8章 ユニットテストとデバッグ
    8.1 ユニットテストツールの分類
    8.2 Mocha+Chai+Sinon.JS+Istanbul
        8.2.1 Mochaによるテストコードの構造
        8.2.2 非同期処理のテスト
        8.2.3 Chaiによるアサーション
        8.2.4 設定の記述
        8.2.5 データストレージに対するユニットテスト
        8.2.6 テストダブルとSinon.JS
        8.2.7 Web APIに対するユニットテスト
        8.2.8 カバレッジの計測
        8.2.9 ウォッチモードでのテストの実行
    8.3 Jest
        8.3.1 Jestによるテストコードの構造
        8.3.2 非同期処理のテスト
        8.3.3 アサーション
        8.3.4 設定の記述
        8.3.5 データストレージに対するユニットテスト
        8.3.6 テストダブル
        8.3.7 Web APIに対するユニットテスト
        8.3.8 カバレッジの計測
        8.3.9 ウォッチモードでのテストの実行
    8.4 デバッグ
        8.4.1 インスペクタの有効化
        8.4.2 インスペクタクライアントによるデバッグの実施

9章 デプロイ
    9.1 デプロイ用アプリケーションの作成
    9.2 PM2
        9.2.1 PM2のインストール
        9.2.2 PM2のシンプルな使い方
        9.2.3 エコシステムファイルを利用したアプリケーションの詳細な設定とデプロイ
    9.3 Docker
        9.3.1 Dokcerのインストール
        9.3.2 Dockerfileとイメージ、コンテナ、レジストリ
        9.3.3 Dockerfileの記述
        9.3.4 .dockerignoreファイル
        9.3.5 イメージのビルドとコンテナの実行、停止、削除
        9.3.6 ローカルPCでの開発におけるDockerの利用
    9.4 クラウドサービスの利用
        9.4.1 GAE利用のための準備
        9.4.2 GAEアプリケーションのデプロイ
        9.4.3 静的ファイルの配信
        9.4.4 管理コンソール
        9.4.5 GCPプロジェクトの削除

10章 パッケージ管理
    10.1 パッケージ管理ツール
    10.2 npm
        10.2.1 npmを構成するレジストリ、CLI、Webサイト
        10.2.2 package.json
        10.2.3 npmパッケージに含まれるファイル、含まれないファイル
        10.2.4 npmパッケージのグローバルインストールとnpx
        10.2.5 npmのワークスペース
        10.2.6 npmレジストリへのパッケージの公開
    10.3 Yarn
        10.3.1 Yarnの特徴
        10.3.2 Yarnのバージョン
        10.3.3 Yarnのインストール
        10.3.4 Yarnの使い方
        10.3.5 Yarnのワークスペース
        10.3.6 Yarn 2

11章 Node.jsとJavaScript標準
    11.1 ESモジュール
        11.1.1 ESモジュールの構文
        11.1.2 CommonJSモジュールとESモジュールの識別
        11.1.3 CommonJSモジュールとESモジュールの性質の違い
        11.1.4 CommonJSモジュールとESモジュールの相互依存
        11.1.5 二重パッケージとpackage.jsonのexportsフィールド
    11.2 WebAssembly
        11.2.1 WebAssemblyテキスト形式
        11.2.2 WebAssemblyオブジェクト
        11.2.3 Wasmモジュール
        11.2.4 WebAssemblyシステムインタフェース(WASI)

付録A Node.jsのインストール
    A.1 Windows
    A.2 macOS
    A.3 Linux
        A.3.1 Ubuntu、Debian
        A.3.2 RHEL、CentOS
    A.4 バージョンマネージャの利用
        A.4.1 nvm
        A.4.2 nvm-windows

付録B JavaScriptとコンパイル
    B.1 コンパイルの仕組み
    B.2 Babel
        B.2.1 プロジェクトの初期化と依存パッケージのインストール
        B.2.2 設定ファイルの記述
        B.2.3 コンパイルの実行
    B.3 TypeScript
        B.3.1 プロジェクトの初期化と依存パッケージのインストール
        B.3.2 設定ファイルの記述
        B.3.3 コンパイルの実行

コラム目次
    ミュータブルとイミュータブル
    --experimental-repl-awaitフラグ
    ストリームの基底クラスをそのまま使う方法
    読み込みストリームの一時停止モードとフローイングモード
    child_processモジュール
    HTTPメソッドとその意味
    Node.jsプロジェクト開発のためのnpmコマンドとファイル
    Function.prototype.bind()とthis
    ORMとデータベースマイグレーション
    TDDとBDD
    ブラウザ環境で動作するJavaScriptのコードのユニットテスト
    npm CLIの設定
    Node.jsのリリースサイクル
    BabelのAPIを利用したコンパイル
        

この書籍の他の本にはない特色として、後半のパートで、nodejsの
ユニットテスト・デプロイ・Dockerを使った開発環境構築などに説明をじっくり割り当てているところです。

このことから見ても、バックエンド開発を初めたいフロントエンドエンジニアの読者をターゲットに意識して書かれています。

Node.jsデザインパターン

もう一つオライリー本・『
Node.jsデザインパターン 第2版
』はNode.jsを極めたい開発者向けに書かれた高度な専門書になっています。

JavaScript/nodejsの設計技法を、実際に手を動かしながら学ぶハンズオン形式の解説書になっています。

こちらの書籍も、前半を基礎にかなりのパートを使って、読者にjavascriptの基礎をじっくり、という構成になっており、先程の書籍を被る内容が多いです。

後半の内容が充実している印象で、webpack/react.jsや、socket.ioなどのwebsocketなど、興味深い応用例に言及されているのが他との大きな違いかと思います。

特に、『非同期処理とイベントループ』のパートはどの書籍よりも詳しく説明がなされ、Node.jsの仕組みの深い部分にも言及がなされており、なかなか考えさせる内容になっています。

以下は関連する記事です。

合同会社タコスキングダム|蛸壺の技術ブログ
【nodejs基礎講座】Node.jsを組込みアプリケーションに使う前に知っておきたい「イベントループ」の仕組み

Node.jsの非同期処理の重要な仕組みである『イベントループ』を理解する

この書籍も、Javascriptを中級ウェブ開発者以上のレベルで扱える読者を対象としています。

本の目次を一部抜粋したものを以下のまとめます。

            
            1章 Node.jsの世界へようこそ
    1.1 Node.jsの「哲学」
        1.1.1 小さなコア
        1.1.2 小さなモジュール
        1.1.3 露出部分最小化
        1.1.4 単純さと実用主義
    1.2 リアクタパターン
        1.2.1 入出力は遅い
        1.2.2 入出力のブロック
        1.2.3 ノンブロッキングI/O
        1.2.4 イベント多重分離
        1.2.5 リアクタパターン
        1.2.6 libuv
        1.2.7 Node.jsのアーキテクチャ

2章 Node.jsの基本パターン
    2.1 コールバックパターン
        2.1.1 継続渡しスタイル(continuation-passing style:CPS)
        2.1.2 同期処理か非同期処理か
        2.1.3 Node.jsのコールバック
    2.2 モジュールシステムとパターン
        2.2.1 公開モジュールパターン
        2.2.2 Node.jsモジュールシステムの詳細
        2.2.3 モジュール定義におけるパターン
    2.3 オブザーバパターン
        2.3.1 EventEmitterクラス
        2.3.2 EventEmitterの使用例
        2.3.3 エラーの伝播
        2.3.4 EventEmitterクラスの拡張
        2.3.5 同期イベントと非同期イベント
        2.3.6 コールバックとの使い分け
        2.3.7 コールバックとEventEmitterの組み合わせ

3章 コールバックを用いた非同期パターン
    3.1 非同期プログラミングの難しさ
        3.1.1 ウェブスパイダーを作って学ぶ非同期プログラミング
        3.1.2 コールバック地獄
    3.2 非同期パターン(素のJavaScript編)
        3.2.1 基本原則
        3.2.2 基本原則の適用
        3.2.3 逐次処理
        3.2.4 並行処理
        3.2.5 同時実行数を制限した並行処理パターン
    3.3 非同期パターン(asyncライブラリ編)
        3.3.1 逐次処理
        3.3.2 並行処理
        3.3.3 同時実行数を制限した並行処理パターン

4章 ES2015以降の機能を使った非同期パターン
    4.1 プロミス
        4.1.1 プロミスの基礎
        4.1.2 プロミスの実装
        4.1.3 Node.jsのAPIをプロミス化する
        4.1.4 逐次処理
        4.1.5 並行処理
        4.1.6 同時実行数を制限した並行処理パターン
        4.1.7 コールバックとプロミスの両方をサポートするAPI
    4.2 ジェネレータ
        4.2.1 ジェネレータの基礎
        4.2.2 ジェネレータを使った非同期制御フロー
        4.2.3 逐次処理
        4.2.4 並行処理
        4.2.5 同時実行数を制限した並行処理パターン
    4.3 async/await
    4.4 非同期プログラミングの手法の比較

5章 ストリーム
    5.1 ストリームの重要性
        5.1.1 バッファvs.ストリーム
        5.1.2 領域的な効率
        5.1.3 時間的な効率
        5.1.4 コンポーザビリティ
    5.2 ストリームの基本的な使い方
        5.2.1 ストリームの詳細
        5.2.2 Readableストリーム
        5.2.3 Writableストリーム
        5.2.4 Duplexストリーム
        5.2.5 Transformストリーム
        5.2.6 パイプを使ったストリームの接続
    5.3 非同期プログラミングにおけるストリームの活用
        5.3.1 逐次実行
        5.3.2 順序なしの並行実行
        5.3.3 順序なしの制限付き並行実行
    5.4 パイプ処理パターン
        5.4.1 Combinedストリーム
        5.4.2 ストリームのフォーク
        5.4.3 ストリームのマージ
        5.4.4 マルチプレクシングとデマルチプレクシング

6章 オブジェクト指向デザインパターンのNode.jsへの適用
    6.1 ファクトリ
        6.1.1 オブジェクト生成の一般的インタフェース
        6.1.2 カプセル化強化の仕組み
        6.1.3 単純なコードプロファイラの作成
        6.1.4 合成可能ファクトリ関数
        6.1.5 実践での利用
    6.2 公開コンストラクタ
        6.2.1 読み出し専用イベントエミッタ
        6.2.2 実践での利用

    6.3 プロキシ
        6.3.1 プロキシ実装の手法
        6.3.2 異なる技法の比較
        6.3.3 ログ付きの出力ストリームの作成
        6.3.4 現場でのプロキシ.関数フッキングとAOP
        6.3.5 ES2015のプロキシ
        6.3.6 実践での利用
    6.4 デコレータ
        6.4.1 デコレータの実装
        6.4.2 データベースLevelUPへのデコレータ使用
        6.4.3 実践での利用
    6.5 アダプタ
        6.5.1 ファイルシステムAPIによるLevelUPの利用
        6.5.2 実践での利用
    6.6 ストラテジー
        6.6.1 マルチフォーマットの設定用オブジェクト
        6.6.2 実践での利用
    6.7 ステート
        6.7.1 基本的なフェイルセーフソケットの実装
    6.8 テンプレート
        6.8.1 設定管理用テンプレート
        6.8.2 実践での利用
    6.9 ミドルウェア
        6.9.1 Expressにおけるミドルウェア
        6.9.2 パターンとしてのミドルウェア
        6.9.3 OMQ用のミドルウェアフレームワークの作成
        6.9.4 Koaのジェネレータを使用したミドルウェア
    6.10 コマンド
        6.10.1 柔軟なパターン

7章 モジュールの接続
    7.1 モジュールと依存関係
        7.1.1 Node.jsにおけるもっとも一般的な依存関係
        7.1.2 凝集度と結合度
        7.1.3 ステートをもつモジュール
    7.2 モジュール接続のためのパターン
        7.2.1 依存関係のハードコーディング
        7.2.2 依存性注入
        7.2.3 サービスロケータ
        7.2.4 DIコンテナ
    7.3 プラグインの接続
        7.3.1 パッケージとしてのプラグイン
        7.3.2 拡張ポイント
        7.3.3 拡張機能のプラグイン側制御とアプリケーション側制御
        7.3.4 ログアウトプラグインの実装

8章 ユニバーサルJavaScript
    8.1 ブラウザとのコード共有
        8.1.1 モジュールの共有
    8.2 Webpackの導入
        8.2.1 Webpackの魔法を探る
        8.2.2 Webpackを使う利点
        8.2.3 ES2015をWebpackとともに使用
    8.3 クロスプラットフォーム開発の基礎
        8.3.1 実行時のコード分岐
        8.3.2 ビルド時のコード分岐
        8.3.3 モジュールの置換
        8.3.4 クロスプラットフォーム開発向けのデザインパターン
    8.4 Reactの紹介
        8.4.1 最初のReactコンポーネント
        8.4.2 JSXとは
        8.4.3 JSXトランスパイルを実行させるWebpack設定
        8.4.4 ブラウザでの描画
        8.4.5 ライブラリReact Router
    8.5 ユニバーサルJavaScriptアプリケーションの作成
        8.5.1 再利用可能なコンポーネントの作成
        8.5.2 サーバ側でのレンダリング
        8.5.3 ユニバーサルレンダリングとルーティング
        8.5.4 ユニバーサルなデータ取得

9章 特殊な問題を解決するためのパターン
    9.1 非同期に初期化されるモジュールのrequire
        9.1.1 標準的なソリューション
        9.1.2 初期化前キュー
        9.1.3 実践での利用
    9.2 非同期のバッチ処理とキャッシュの利用
        9.2.1 キャッシュ処理もバッチ処理もないサーバの実装
        9.2.2 非同期リクエストのバッチ処理
        9.2.3 非同期リクエストのキャッシュ処理
        9.2.4 プロミスを使ったバッチ処理とキャッシュ処理
    9.3 CPUバウンドなタスクの実行
        9.3.1 部分和問題の解法
        9.3.2 setImmediateによるインタリーブ
        9.3.3 マルチプロセス

10章 スケーラビリティとアーキテクチャ
    10.1 アプリケーションスケーリング入門
        10.1.1 Node.jsアプリケーションのスケーリング
        10.1.2 スケーラビリティの3つの次元
    10.2 クローニングと負荷分散
        10.2.1 モジュールcluster
        10.2.2 ステートのある接続の処理
        10.2.3 リバースプロキシによるスケーリング
        10.2.4 サービスレジストリの利用
        10.2.5 ピアツーピア負荷分散
    10.3 複雑なアプリケーションの分解
        10.3.1 モノリシックなアーキテクチャ
        10.3.2 マイクロサービスのアーキテクチャ
        10.3.3 マイクロサービスアーキテクチャにおける統合パターン

11章 メッセージ通信と統合
    11.1 メッセージ通信システムの基礎
        11.1.1 一方向パターンとリクエスト/リプライ・パターン
        11.1.2 メッセージの種類
        11.1.3 非同期メッセージ送信とキュー
        11.1.4 ピアツーピアメッセージ通信とブローカを使ったメッセージ通信
    11.2 パブリッシュ/サブスクライブ(pub/sub)パターン
        11.2.1 機能最小限のリアルタイムチャットアプリケーションの作成
        11.2.2 メッセージブローカとしてのRedisの使用
        11.2.3 OMQを使ったピアツーピア型パブリッシュ/サブスクライブ
        11.2.4 永続サブスクライバ
    11.3 パイプラインとタスク分散パターン
        11.3.1 OMQのファンアウト/ファンイン・パターン
        11.3.2 パイプラインとAMQPの競合コンシューマ
    11.4 リクエスト/リプライ・パターン
        11.4.1 相関識別子
        11.4.2 返信先アドレス

付録A ES2015以降のJavaScriptの主要機能
    A.1 letとconst
    A.2 アロー関数
    A.3 class構文
    A.4 オブジェクトリテラルの改善
    A.5 MapとSet
    A.6 WeakMapとWeakSet
    A.7 テンプレートリテラル
    A.8 その他のES2015の機能
        
見てのように、各章の内容がかなり濃いので、他の書籍では噛みごたえの足りなかった読者向けの本になっています。

nodejsの専門書を探されている方にはおすすめの一冊です。


nodejsをしっかり学べる学習サービスピックアップ

今の時代、nodejsを学ぶのは本から独習するだけのスタイルにとどまりません。

先程まで紹介していた書籍は、Javascript初学者からするとnodejsの特性上、一人で勉強すると理解するまで時間のかかるし、気づけばスッとクリアできるポイントもなかなか気づかないままでスムーズに学習が進まないことにもなりかねません。

ここではより効率的にnodejsを学ぶためにオンライン型のいくつかの学習手法をご紹介していきましょう。

Udemyのオンライン教材を使う

合同会社タコスキングダム|蛸壺の技術ブログ

上記で紹介した書籍は、「初心者向け」とはされていても、
nodejs初心者はJavascript中級者という暗黙的な含みがあるようです。

JSを取得してnodejsを覚える、という段階的なシチュエーションであれば問題ないのですが、世の中、nodejsを使ってみたいけどJavascriptも並行して覚えたい、というニーズの方が圧倒的に多いとは思います。

Udemyのオンライン教材を使えば、おおよそ自分のレベルに見合ったnodejs関連のオンライン講座を見つけながらステップアップで学習することもできます。

Udemyではnodejsの教材(『
Udemy | nodejs関連講座一覧
』)だけでも種類が豊富にラインナップされています。

ここでは幾つかピックアップして紹介してみます。

これからnodejsをこれから学ぼうとしている人には、以下のようなnodejsの導入を一から学べる『
Node.js 入門 ー演習しながら学ぶ基本クラスの使い方ー
』などが適しています。

この講座ではnodejsを使った開発を行うための環境準備から簡単な実装を行っていきます。

知識の詰め込みだけでなく、演習を通してハンズオン形式で講義内容が進みますので、「nodejsを使えるようになる」までを学ぶことができます。

発展編としてのテーマとして、『
【初心者向け】初めてのNode.js入門。Expressフレームワークを用いた本格Webサーバー構築やJSONを学ぼう!
』という課題を一つこなしておかれると大分自信が付くはずです。

nodejsの最重要ライブラリであるExpress.jsを良く理解することで、Webアプリケーション開発のノウハウを効率良く習得してみてはどうかと思います。

ちなみに、最初のうちはWebアプリケーションがどのようなものか想像はつき難いものですが、例えば今ご覧いただいているこのブログもExpress.jsで弊社が独自実装したサーバサイドプログラムで動いているWebアプリケーションです。

Webアプリケーションより発展的なテーマとして、いろいろなOS上で動作するネイティブアプリをnodejsでも作成することができます。

代表的なネイティブアプリビルド環境のElectronやNW.jsなども講座などで取り扱われています。

個人的には、ElectronよりNW.jsでサクッとネイティブアプリを作るのが好きなのですが、UdemyでNW.jsを学習するための教材を探すと以下のものがあります。

nodejsでネイティブアプリを作るとっかかりとして、『
実例でわかる JavaScript ローカルアプリ開発講座 Windows版 node.js NW.js
』からNW.jsの使い方を一から学ぶことも可能です。

とにかくnodejsで出来ることの裾野はかなり広いので、気になっている課題をUdemyで教材検索してみてはいかがかと思います。

TechAcademyのオンラインスクールを使う

合同会社タコスキングダム|蛸壺の技術ブログ

色々と自分から情報を仕入れながら勉強することは、やはり時間がかかりますし、日々のスケジュールに追われて少し間が空いてしまうと持続性が失われ、長続きしません。

TechAcademyでは、他のプログラミングスクールには珍しく、一から十までnodejsを教えてもらえる全ておまかせ学習サービスの『
【TechAcademy】エンジニア転職保証コース
』を提供しています。

オンラインプログラミングスクール形式ですので、決まった時間に決められたカリキュラムをメンターに教わりながら自分のペースで進められますので、確実に学習効果が得られることは間違いありません。

最終的に挫折することなく、確実に成果としてnodejsでWebアプリケーションを構築してみたい方におすすめです。