Node.jsの入門書。対象読者は、フロントエンド開発の知識はあってもサーバサイド開発は知らないエンジニアや、他言語の経験はあってもNode.jsは触ったことがないプログラマー。本書ではターミナルのプロンプトにコマンドを入力してその反応を確認したり、簡単なスクリプトをNode.js環境で実行したりしながら、Node.jsプログラミングの基本からWebアプリケーションの開発、テスト、デプロイまでをハンズオン形式で学びます。また、コードの背景にある設計思想や、プログラムの挙動の仕組みについてもしっかり掘り下げます。本書のゴールは、読者がNode.jsの全体像を掴み、業務レベルでのアプリケーション開発に対応可能な知識を身につけることです。
ハンズオンNode.js
今村 謙士 著
- TOPICS
- Programming , Web , JavaScript
- 発行年月日
- 2020年11月
- PRINT LENGTH
- 536
- ISBN
- 978-4-87311-923-6
- FORMAT
- Print PDF EPUB
関連ファイル
正誤表
ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。
正誤表
目次
まえがき 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モジュール 1.5 まとめ 1.6 練習問題 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 2.6 まとめ 2.7 練習問題 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イテラブルの互換性 3.3 まとめ 3.4 練習問題 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 スレッド間での値の共有 4.4 まとめ 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アプリケーションの実装 5.6 まとめ 5.7 練習問題 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管理アプリケーションの実装 6.5 まとめ 6.6 練習問題 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の利用 7.5 まとめ 7.6 練習問題 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 インスペクタクライアントによるデバッグの実施 8.5 まとめ 8.6 練習問題 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プロジェクトの削除 9.5 まとめ 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 10.4 まとめ 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) 11.3 まとめ 11.4 練習問題 付録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 コンパイルの実行 B.4 まとめ 付録C 練習問題の解答 C.1 1章 イントロダクション C.2 2章 非同期プログラミング C.3 3章 EventEmitterとストリーム C.4 5章 HTTPサーバとHTTPクライアント C.5 6章 リアルタイムWebアプリケーション C.6 7章 データストレージ C.7 8章 ユニットテストとデバッグ C.8 11章 Node.jsとJavaScript標準 索引 コラム目次 ミュータブルとイミュータブル --experimental-repl-awaitフラグ ストリームの基底クラスをそのまま使う方法 読み込みストリームの一時停止モードとフローイングモード child_processモジュール HTTPメソッドとその意味 Node.jsプロジェクト開発のためのnpmコマンドとファイル Function.prototype.bind()とthis ORMとデータベースマイグレーション TDDとBDD ブラウザ環境で動作するJavaScriptのコードのユニットテスト npm CLIの設定 Node.jsのリリースサイクル BabelのAPIを利用したコンパイル