目次
本書の構成
- 1章 Node.jsの世界へようこそ
- Node.jsのアプリケーション設計の入り口となるこの章では、Nodeのコアモジュールに見られる、文字どおり核となるパターンを紹介します。また、Nodeのエコシステムや、基礎となる「哲学」も紹介します。
- 2章 Node.jsの基本パターン
- Nodeの非同期プログラミングの土台となる3つのパターン、すなわちコールバック、モジュール、そして
EventEmitter
(Observerパターン)について説明します。
- 3章 コールバックを用いた非同期パターン
- 非同期処理を効率的に記述するためのパターンをいくつか紹介します。いわゆる「コールバック地獄」を回避するための方法を、素のJavaScriptの場合(ライブラリをいっさい使用しない場合)と
async
というライブラリを使用した場合との両方の例をあげて解説します。
- 4章 ES2015以降の機能を使った非同期パターン
- 3章で紹介したパターンを、ES2015やそれ以降の標準で導入された非同期処理のための機構であるプロミスやジェネレータ、そしてasync/awaitを使って書き直したものを説明します。
- 5章 ストリーム
- Nodeの重要な概念としてストリームがあげられます。この章ではストリームを使ったデータ処理と、複数のストリームを組み合わせる方法を紹介します。
- 6章 オブジェクト指向デザインパターンのNode.jsへの適用
- 従来からあるデザインパターンがNodeに適用可能かどうかを検討するため、オブジェクト指向プログラミングの世界でよく知られているデザインパターンを、Nodeでの再現を試みます◆→変。OK?←◆。また、JavaScriptとNodeに固有のパターンについても紹介します。
- 7章 モジュールの接続
- アプリケーションを構成するモジュール間の依存関係をどう解決するかというのは開発者を悩ませる問題です。この章ではそういった問題に取り組むべく、依存性注入(DI)やサービスロケータといったいくつかのパターンについて学びます。
- 8章 ユニバーサルJavaScript
- Nodeを使ったウェブアプリケーション開発においてもっとも興味深いトピックが「ユニバーサルJavaScript」すなわちクライアントとサーバ間で同じコードを共有する手法です。この章では、React、WebpackおよびBabelを使って簡単なウェブアプリケーションを開発することで、ユニバーサルJavaScriptの基本原則について学びます。
- 9章 特殊な問題を解決するためのパターン
- これまでに見てきたパターンは一般的な問題を解決するためのものでしたが、この章ではより特殊な問題を解決するためのパターンをいくつか紹介します。
- 10章 スケーラビリティとアーキテクチャ
- Nodeアプリケーションをスケーラブルにする手法について、いくつかのパターンを紹介します。
- 11章 メッセージ通信と統合
- ZMQ(ØMQ)やAMQPといったメッセージングミドルウェアを使って分散システムを構築する際に、適用可能なパターンを紹介します。
- 付録A ES2015以降のJavaScriptの新機能
- この本のサンプルコードの全体を通じて使用されているECMAScript 2015(ES2015)の主要な機能を説明します。
目次(詳細)
まえがき
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のアーキテクチャ
1.3 まとめ
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の組み合わせ
2.4 まとめ
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 同時実行数を制限した並行処理パターン
3.4 まとめ
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 非同期プログラミングの手法の比較
4.5 まとめ
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 マルチプレクシングとデマルチプレクシング
5.5 まとめ
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 柔軟なパターン
6.11 まとめ
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 ログアウトプラグインの実装
7.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 ユニバーサルなデータ取得
8.6 まとめ
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 マルチプロセス
9.4 まとめ
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 マイクロサービスアーキテクチャにおける統合パターン
10.4 まとめ
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 返信先アドレス
11.5 まとめ
付録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の機能
索引
↑ Topへ戻る
会社概要
ご連絡
Copyright © 1993-2024 Marlin Arms Corporation
当サイトでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。この処理の詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらのページをご覧ください