カテゴリー
【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集
※ 当ページには【広告/PR】を含む場合があります。
2021/12/06
2024/04/23
nodejs選びのコツ
nodejsをしっかり学べる書籍ピックアップ
入門Node.jsプログラミング
Node.js超入門
ハンズオンNode.js
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を利用したコンパイル
Node.jsデザインパターン
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をしっかり学べる学習サービスピックアップ
Udemyのオンライン教材を使う
TechAcademyのオンラインスクールを使う
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー