Nodeクックブック

[cover photo]
  • 2013年02月 発行
  • 380ページ
  • ISBN978-4-87311-606-8
  • フォーマット Print PDF
  • 原書: Node Cookbook

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

Ebook Storeで電子版を購入:
価格2,938円

本書は、Node.jsを使っての簡単なWebサーバの構築にはじまり、Webアプリケーションやコマンドラインアプリケーションの構築、そして自作Nodeモジュールの開発までをスムーズに学習できるように構成しています。MySQLやMongoDB、CouchDB、Redisといった各種データベースとのインタフェイスや、WebSocketの組み込み方、SMTPなどのプロトコルとのインタフェイスといった基本的な事項を学びます。さらにデータストリームの処理方法やセキュリティを考慮した実装、そして開発したアプリケーションを本番環境で動作させるまでのさまざまなレシピを掲載しています。 Nodeの主要なコアモジュールはもちろん、さまざまなシーンで利用するサードパーティモジュールを広く紹介しており、Express 3に対応した本書は、Nodeを深く知りたいエンジニア必携の一冊です。

翻訳者によるサポートページ

関連書籍

JavaScript 第6版
JavaScript: The Good Parts
JavaScriptパターン
JavaScriptリファレンス 第6版
ハイパフォーマンスJavaScript

目次

訳者まえがき
はじめに

1章 Webサーバを立てる
    レシピ1.1 URLルーティングを設定する
        ミニレシピ1.1.1 複数階層コンテンツのルーティング
        ミニレシピ1.1.2 クエリストリングを解析する
    レシピ1.2 スタティックファイルを配信する
        ミニレシピ1.2.1 予期しないFaviconリクエストに対応する
    レシピ1.3 コンテンツキャッシュによる高速配信
        ミニレシピ1.3.1 コンテンツの変更を反映する
    レシピ1.4 ストリーミングによりパフォーマンスを最適化する
        ミニレシピ1.4.1 システムをバッファオーバーフローから守る
    レシピ1.5 ファイルシステムをハッキングから守る
        ミニレシピ1.5.1 ホワイトリスト
        ミニレシピ1.5.2 node-static

2章 HTTPオブジェクトをより深く
    レシピ2.1 POSTデータを処理する
        ミニレシピ2.1.1 connect.bodyParserを使ってPOSTデータを扱う
    レシピ2.2 アップロードファイルを受信する
        ミニレシピ2.2.1 formidableを使ってPOSTデータの内容をすべて受信する
        ミニレシピ2.2.2 formidableでファイル名を保存する
        ミニレシピ2.2.3 PUTでアップロードする
    レシピ2.3 NodeをHTTPクライアントとして使用する
        ミニレシピ2.3.1 POSTリクエストを送る
        ミニレシピ2.3.2 multipartファイルアップロードを行う
    レシピ2.4 帯域制限を実装する
        ミニレシピ2.4.1 中断されたダウンロードを再開する

3章 データのシリアル化
    レシピ3.1 オブジェクトをJSONに変換する
        ミニレシピ3.1.1 JSONPレスポンスを返す
    レシピ3.2 オブジェクトをXMLに変換する
        ミニレシピ3.2.1 配列や関数を含んだオブジェクトをXMLに変換する
        ミニレシピ3.2.2 XMLの属性値を生成する
        ミニレシピ3.2.3 属性値宣言とテキスト
    レシピ3.3 Ajaxによるブラウザ・サーバ間のデータ転送
        ミニレシピ3.3.1 シリアル化したデータをクライアントからサーバに送信する
    レシピ3.4 リアルデータの処理:トレンドツイートを取得する
        ミニレシピ3.4.1 Google Hot TrendsとTwitterを組み合わせる

4章 データベース接続
    レシピ4.1 CSVファイルを出力する
        ミニレシピ4.1.1 CSV要素をカスタマイズする
        ミニレシピ4.1.2 CSVファイルを読み込む
        ミニレシピ4.1.3 CSVをストリームとして処理する
    レシピ4.2 MySQLサーバと接続し、SQL文を実行する
        ミニレシピ4.2.1 ユーザ入力をクリーニングしてSQLインジェクション攻撃を防ぐ
        ミニレシピ4.2.2 MySQLサーバからSQL文の実行結果を受け取る
    レシピ4.3 MongoDBとデータをやりとりする
        ミニレシピ4.3.1 インデックスとアグリゲーション
        ミニレシピ4.3.2 ソートとリミット、モディファイアでアップデート
    レシピ4.4 Mongoskinを使ってMongoDBに接続する
        ミニレシピ4.4.1 コレクションバインディング
    レシピ4.5 Cradleを使ってCouchDBにデータを格納する
    レシピ4.6 Cradleを使ってCouchDBからデータを取得する
        ミニレシピ4.6.1 CouchDBの管理者ユーザを作成する
        ミニレシピ4.6.2 CouchDBの管理者ユーザのみがデータ変更を行う
    レシピ4.7 CouchDB Changes StreamにCradleで接続する
    レシピ4.8 Redisとデータをやりとりする
        ミニレシピ4.8.1 hiredisでredisモジュールをスピードアップする
        ミニレシピ4.8.2 パイプラインコマンドでネットワークレイテンシを克服する
    レシピ4.9 RedisでPubSubを実装する
        ミニレシピ4.9.1 Redisへのアクセス認証
        ミニレシピ4.9.2 外部からの不正な接続からRedisを守る

5章 Websocketを使ってAjaxを超える
    レシピ5.1 WebSocketサーバを生成する
        ミニレシピ5.1.1 WebSocketクライアントを生成する
    レシピ5.2 socket.ioを使ったシームレスなフォールバック
        ミニレシピ5.2.1 カスタムイベント
        ミニレシピ5.2.2 ネームスペース
    レシピ5.3 socket.io越しにコールバック関数を実行する
        ミニレシピ5.3.1 nowjsを使ってクライアントとサーバで関数をシェアする
    レシピ5.4 socket.ioでリアルタイムウィジェットを作成する
        ミニレシピ5.4.1 Redisと組み合わせてスケールアウトに備える
        ミニレシピ5.4.2 開発ツールとしてのWebSocket

6章 Expressで開発をスピードアップ
    レシピ6.1 Expressプロジェクトを作成する
        ミニレシピ6.1.1 app.jsの内容を読む
        ミニレシピ6.1.2 routes/index.jsの内容を読む
    レシピ6.2 環境の定義と設定
        ミニレシピ6.2.1 新たな環境を設定する
        ミニレシピ6.2.2 NODE_ENVを永続的に変更する
    レシピ6.3 ダイナミックURLルーティング
        ミニレシピ6.3.1 ルートのバリデーション
        ミニレシピ6.3.2 オプションルート
        ミニレシピ6.3.3 ワイルドカード
    レシピ6.4 テンプレート(Jade)
        ミニレシピ6.4.1 他のテンプレートエンジンを使用する
        ミニレシピ6.4.2 EJSテンプレートエンジン
        ミニレシピ6.4.3 JadeにJavaScriptを挿入する
    レシピ6.5 CSSプリプロセッサを使う(Stylus)
        ミニレシピ6.5.1 Stylus:mixinのネストとrestパラメータ
        ミニレシピ6.5.2 Stylus:色を操作する
        ミニレシピ6.5.3 LESSを使う
    レシピ6.6 Expressによるセッション管理[応用]
        ミニレシピ6.6.1 サイト全体のセッション管理を行うミドルウェアを作成する
        ミニレシピ6.6.2 フラッシュメッセージ
    レシピ6.7 ExpressでWebアプリケーションを構築する[応用]
        ミニレシピ6.7.1 abを使ってベンチマークをとる
        ミニレシピ6.7.2 loggerをカスタマイズする

7章 セキュリティ、暗号化、認証
    レシピ7.1 ベーシック認証を実装する
        ミニレシピ7.1.1 Express/Connectでベーシック認証を実装する
    レシピ7.2 cryptoモジュールでパスワードをハッシュ化する
        ミニレシピ7.2.1 HMACでユニークなハッシュ値を生成する
        ミニレシピ7.2.2 PBKDF2で強固なハッシュ値を生成する
    レシピ7.3 ダイジェスト認証を実装する
        ミニレシピ7.3.1 認証領域からのログアウト
    レシピ7.4 HTTPSサーバを立てる
        ミニレシピ7.4.1 ExpressでHTTPSを使う
        ミニレシピ7.4.2 SSL/TLSでベーシック認証を安全に運用する
    レシピ7.5 クロスサイトリクエストフォージェリを予防する
        ミニレシピ7.5.1 Jadeカスタムコンパイラでフォームを自動的に保護する
        ミニレシピ7.5.2 クロスサイトスクリプティング(XSS)脆弱性を取り除く

8章 ネットワークサービスの実装
    レシピ8.1 メールを送信する
        ミニレシピ8.1.1 HTMLメールを送信する
        ミニレシピ8.1.2 添付ファイルを送る
    レシピ8.2 SMSを送信する
        ミニレシピ8.2.1 processedイベントリスナを利用する
        ミニレシピ8.2.2 自動で電話をかける
    レシピ8.3 TCP通信を行う
        ミニレシピ8.3.1 ポートフォワーディング
        ミニレシピ8.3.2 pcapを使いTCPトラフィックを監視する
    レシピ8.4 SMTPサーバを立てる
        ミニレシピ8.4.1 外部のSMTPサーバからメールを受信する
    レシピ8.5 名前ベースバーチャルホストを実装する
        ミニレシピ8.5.1 Expressでバーチャルホスティング
        ミニレシピ8.5.2 Server Name Indication(SNI)

9章 自分のNodeモジュールを作成する
    レシピ9.1 モジュールAPIを決定し、テストスクリプトを作成する
        ミニレシピ9.1.1 should.jsでユニットテストを行う
    レシピ9.2 モジュールのモックアップを作成する
        ミニレシピ9.2.1 モジュールのサンプルコードを記述する
    レシピ9.3 モジュールをリファクタリングする
        ミニレシピ9.3.1 stat関数をmp3datオブジェクトに追加する
        ミニレシピ9.3.2 複数のモジュールインスタンスの生成を許可する
    レシピ9.4 モジュールAPIを拡張する
        ミニレシピ9.4.1 サンプルコード:STDINストリーム
        ミニレシピ9.4.2 サンプルコード:PUTアップロードストリーム
        ミニレシピ9.4.3 statメソッドとstatStreamメソッドを統合する
        ミニレシピ9.4.4 EventEmitterを統合する
    レシピ9.5 モジュールをnpmレジストリにアップロードする
        ミニレシピ9.5.1 npm linkを使ってレジストリに登録せずにモジュールを使用する
        ミニレシピ9.5.2 .npmignore、モジュールのバージョン変更

10章 本番環境に展開するために
    レシピ10.1 アプリケーションを80番ポートで待機させる
        ミニレシピ10.1.1 nohupの代わりにscreenで起動する
        ミニレシピ10.1.2 authbindを使って80番ポートにバインドする
        ミニレシピ10.1.3 http-proxyを使って80番ポートで複数のプロセスをホストする
    レシピ10.2 Upstartで自動的に再起動する
        ミニレシピ10.2.1 Upstartのrespawn制限違反を検出する
        ミニレシピ10.2.2 foreverモジュールで自動的に再起動する
    レシピ10.3 Gitを使った継続的デプロイ
        ミニレシピ10.3.1 アップデート時に依存モジュールをサーバ側で構築する
        ミニレシピ10.3.2 GitフックスクリプトをNodeで記述する
    レシピ10.4 PaaSプロバイダでホスティングする
        ミニレシピ10.4.1 自分のドメイン名でアプリケーションにアクセスする
        ミニレシピ10.4.2 データベースを準備する

索引

Feedback

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