ハンズオンNode.js

[cover photo]
  • 2020年11月 発行
  • 536ページ
  • ISBN978-4-87311-923-6
  • フォーマット 本 PDF EPUB

オライリー・ジャパンで書籍を購入:
定価4,070円

Ebook Storeで電子版を購入:
価格3,256円

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

関連書籍

JavaScript: The Good Parts
Node.jsデザインパターン 第2版
Real World HTTP 第2版
アイソモーフィックJavaScript
開眼! JavaScript
初めてのGraphQL
初めてのJavaScript 第3版
ハンズオンJavaScript
プログラミングTypeScript

まえがき

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を利用したコンパイル

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]