サーバサイドJavaScript Node.js入門
3,344円 (3,040円+税)
サポートサイト
出版社による関連ページが公開されています。
- サーバサイドJavaScript Node.js入門 (KADOKAWA/アスキー・メディアワークス)
書誌情報
- 著者: 清水俊博, 大津繁樹, Jxck, 小林秀和, 佐々木庸平, 篠崎祐輔, 高木敦也, 西山雄也
- 発行日: 2012-10-29
- 最終更新日: 2012-10-29
- バージョン: 1.0.0
- ページ数: 585ページ(A4PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: KADOKAWA/アスキー・メディアワークス
対象読者
著者について
清水俊博
株式会社ドワンゴ所属。
中学時代からプログラミングを始め、自作ゲームがマイコンBASICマガジンに掲載されたのを機にプログラミングの世界で食べていくことを決意しました。社会人になってからはJavaをメインに扱ってきましたが、言語としてのJavaScriptに興味を持ちだしたタイミングでNodeと出会い、その可能性に魅入られて日本ユーザグループを設立するに至りました。Nodeはとても刺激的なプラットフォームです。本書が一人でも多くの方にNodeを使う切っ掛けを与える存在になることを期待しています。本書を執筆するにあたって、多くの方々にご協力をいただきました。この場をお借りして心より御礼申し上げます。本当にありがとうございました。
大津繁樹
株式会社インターネットイニシアティブに所属。Node、HTML5、Kinect等のアプリケーションの新技術検証・評価を行っています。
Nodeは当初マニュアルを読んでもさっぱり内容が理解できず、socket.ioを使って少し遊んでいるぐらいでした。しかしこれではいけないと心機一転Nodeのソースを読み始め、積極的に本家へプルリクエストを送るように心がけました。しだいにNodeコアの開発にどっぷりはまってしまい、最近では毎朝githubでNodeのコミットログを確認することが日課になっています。Nodeの開発に参加して、初めてソーシャルコーディングのすばらしさを知りました。本書の執筆にはかなり後になって参加しましたが、Nodeがわからなかった頃の気持ちを思い出し、当時こんなことを知っていればよかったなと思う内容を書くように心がけました。この本が皆さんのNodeに対する理解を少しでも深める手助けになることを願っています。
Jxck
WebSocketで遊ぶためSocket.IOを使ったのをきっかけに、趣味でNode.jsを触り始めました。その後もSocket.IOを中心にLTやブログなどを通じてアウトプットをするうちに、気がついたらコミュニティ運営や、本書の執筆に関わらせていただくことになりました。進化のまっただ中にあるNode.jsを書籍にまとめるのは、非常に骨の折れる作業でしたが、たくさんの方にご協力いただき、こうして形にすることができました。私達の執筆を暖かく見守ってくださった皆様に、この場を借りてお礼を申し上げます。本当にありがとうございました。それではNode.jsの世界をご堪能ください。
小林秀和
本書の執筆中に中学生から高校生になりました。
友人から譲り受けた古いマシンを修理して作った自宅サーバをどのように活用しようかと悩んでいるときにNode.jsに出会いました。Node.jsはメモリの少ないマシンでもたくさんのコネクションを処理することができ、それはとても魅力的に感じました。そのころ、TwitterでのNode.jsについての投稿を清水さんに拾われ、日本ユーザグループ、また本書の執筆へとお誘いいただきました。未熟な自分はいつも足手まといでしたが、編集の鈴木さん、共に執筆をさせていただいた方々、また応援してくださった多くの方々の協力によって本書を執筆することができました。本当に感謝しています。
佐々木庸平
楽天株式会社所属。好きなモジュールはasync。
マルチスレッドで多重APIコールをするPythonアプリケーションに限界を感じて、Node.jsでのリプレースの可能性を見いだしていました。気がつけば、Node.jsのインフラを手に入れるために、PaaSを開発するという大きな寄り道をさせられる中、現在ではインフラエンジニアとして、Node.jsを使ったアプリケーション開発の支援も生業としています。本書によって多くのアプリケーション開発者がNode.jsに入門し、新しい時代のアプリケーション開発の一助となれば幸いです。また、本書の執筆に際し、共著の皆様を初め、ご支援いただいた多くの皆様に、この場を借りてお礼を申し上げます。
篠崎祐輔
株式会社ディー・エヌ・エー所属。
クローラを書いていたときに、短時間に効率よくさばく方法がないのか探していたのがきっかけでNodeと出会いました。ブラウザとは違い、NodeではJavaScriptを利用してファイルやDBを自由に扱えること、非同期処理により効率よくリクエストをさばけることを知って喜々としていたことを覚えています。その後、Nodeが縁でいろいろな人と出会うことができたことも鮮烈な経験でした。1つのプラットフォームが私の世界を大きく拡げたのです。今こうして著者紹介を書いているのもNodeあればこそ。いまだ成長過程にあるこのプラットフォームに関わることで、きっとみなさんも各々の世界を拡げることができると信じています。この本がその一助になれば幸いです。また執筆、出版に直接関わった方々をはじめ、その他応援くださった多くの方々に深く敬意と感謝を捧げます。ありがとうございました。
高木敦也
OptimisCorp にSenior Software Engineer として所属。
2010年のnode.js knockoutに参加し、同じく参加されていた清水さんと知り合うこととなり、それがきっかけで本書に誘っていただけることになりました。このような機会を与えてくださった鈴木さん、共に執筆できた方々、レビューにご協力いただいた方々、そして本書を手にとってくださった皆さん、本当に感謝しています。最後に、多くの時間を執筆に割くことを許してくれた妻ゆきぽん、安らぎや邪魔を与えてくれた猫さん達、本当にありがとう。
西山雄也
有限会社オープンクローズを経て、現在はフリーランスのプログラマとして活動。
もともと新しく、そしてちょっとマイノリティを感じる技術動向を追いかけることを日課としている中で2年前に出会ったのがNode.js。その可能性に惹きつけられていくうちにあれよあれよという間に世間の話題とされる重要なキーワードとなり、現在では幾多の企業のWebサービスを支えるコア技術となるまで普及、コミュニティも世界中で広がりました。私個人もNodeを通じてさまざまな出会いや経験に恵まれ、本書の執筆にまで参加することになりました。執筆に際しては多大なご迷惑をかける中でも多くの方々に暖かく支えていただきました。この場をかりて心より感謝を申し上げます。本書がより一層のNodeコミュニティの発展に寄与することになれば幸いです。
目次
序文
はじめに
- 本書の対象読者
- 本書の内容
- 本書の読み進め方
- 注意点
- 用語
- ソースコードについて
- 執筆陣からのメッセージ
- 謝辞
第1部 導入編
第1章 Node とは何か
- 1.1 非同期プログラミング
- 1.2 なぜ従来から非同期プログラミングが行われてこなかったのか
- 1.3 Node の誕生と既存の言語
- 1.4 JavaScript である理由
- 1.5 シングルスレッドの強み
- 1.6 Node とリアルタイムアプリケーション
第2章 インストール
- 2.1 OS ごとのインストール方法
- 2.1.1 Windows
- 2.1.2 Mac
- 2.1.3 Linux
- 2.2 環境構築ツールを使う
- 2.2.1 nvm
- 2.2.2 nave
- 2.3 npm を使ったパッケージのインストール
- 2.3.1 モジュールを探す
- 2.3.2 パッケージをインストールする
第3章 開発環境
- 3.1 エディタ
- 3.1.1 Vim
- 3.1.2 Emacs
- 3.2 IDE
- 3.2.1 WebStorm
- 3.2.2 Eclipse
- 3.2.3 Cloud9
第2部 基本編
第4章 Node入門
- 4.1 Node コマンド
- 4.1.1 REPL
- 4.1.2 スクリプトファイルを実行する
- 4.2 イベントループ
- 4.3 HTTP サーバ
- 4.4 イベントループの落とし穴
- 4.5 まとめ
第5章 モジュール
- 5.1 モジュールの作り方
- 5.1.1 module.exports によるモジュールの定義
- 5.1.2 サンプル:hello モジュールの定義
- 5.2 モジュールの使い方
- 5.2.1 require() によるモジュールのロード
- 5.2.2 hello モジュールの利用
- 5.3 モジュール活用
- 5.3.1 相対パスを解決する
- 5.3.2 メインモジュールを判定する
- 5.3.3 モジュールがどこから読み込まれたかを確認する
- 5.3.4 モジュールを配布する
第6章 イベント
- 6.1 Node とイベント駆動プログラミング
- 6.2 イベントの作成と利用
- 6.3 リスナ配列
- 6.4 特殊なイベント
- 6.5 シグナルとイベント
- 6.6 まとめ
第7章 イベントループとprocess.nextTick()
- 7.1 Node のイベントループの仕組み
- 7.2 非同期イベントの生成
- 7.3 非同期コールバックの呼び出し
第8章 ストリーム、バッファ、ファイルシステム
- 8.1 ストリーム
- 8.1.1 入力ストリーム(Readable Stream)
- 8.1.2 出力ストリーム(Writable Stream)
- 8.1.3 ストリームの接続
- 8.1.4 ストリームのまとめ
- 8.2 Buffer
- 8.2.1 使い方
- 8.2.2 Buffer の利用方法
- 8.3 ファイルシステム
- 8.3.1 ファイル入出力
- 8.3.2 ストリームを使ったファイルの入出力
- 8.3.3 ファイル記述子を使った入出力
- 8.3.4 ファイルやディレクトリの操作
第9章 ソケット(TCP/UDP)
- 9.1 net モジュール
- 9.1.1 net モジュールの概要
- 9.2 TCP サーバの概要
- 9.2.1 TCP サーバを生成する
- 9.2.2 TCP サーバをリッスンする
- 9.2.3 TCP クライアントから接続を受ける
- 9.2.4 TCP クライアントからデータを受信する
- 9.2.5 TCP クライアントにデータを送信する
- 9.2.6 TCP クライアントへのデータ送信が溜まる
- 9.2.7 TCP クライアントへのデータ送信の溜まりが解消する
- 9.2.8 TCP クライアントから接続終了を受ける
- 9.2.9 TCP クライアントとの接続を終了する
- 9.2.10 TCP サーバを終了する
- 9.3 TCP クライアントの概要
- 9.4 TCP エコーサーバ・クライアントの実装
- 9.4.1 TCP サーバの作成
- 9.4.2 TCP クライアントの作成
- 9.5 TCP と同期プロトコル
- 9.6 drain イベントを利用したデータ送信制御
- 9.7 TLS 通信の利用
- 9.7.1 tls モジュールの概要
- 9.7.2 tls モジュールの利用の準備
- 9.7.3 TLS エコーサーバ・クライアントの実装
- 9.7.4 tls.SecurePair を用いたSTARTTLS 対応のエコーサーバ・クライアントの実装
- 9.8 OS のTCP 機能と直接関わるAPI
- 9.8.1 KeepAlive パケットの利用
- 9.8.2 Nagle アルゴリズムの無効化
- 9.8.3 TCP socket 情報取得
- 9.9 dgram モジュール
- 9.9.1 dgram モジュールの概要
- 9.9.2 UDP エコーサーバ・クライアントの作り方(ユニキャスト通信)
- 9.9.3 UDP エコーサーバ・クライアントの作り方(マルチキャスト通信)
第10章 HTTP/HTTPS
- 10.1 http モジュール
- 10.1.1 http モジュールの概要
- 10.1.2 http.Server クラス
- 10.1.3 http.ServerRequest、http.ClientResponse クラス(IncomingMessage)
- 10.1.4 http.ServerResponse、http.ClientRequest クラス(OutgoingMessage)
- 10.2 http.Server のエコーサーバの実装
- 10.3 HTTP RESTful サーバの実装
- 10.4 HTTP クライアントの概要
- 10.4.1 http.Server のエコーサーバにPOST するHTTP クライアントの実装
- 10.4.2 ベーシック認証を使ってHello World サーバに接続する
- 10.4.3 globalAgent による同時接続制限機能を見る
- 10.4.4 カスタムエージェントによる同時接続制限のカスタマイズ
- 10.5 https モジュール
- 10.5.1 https モジュールの概要
- 10.5.2 SNI(Server Name Indication)を用いたSSL バーチャルサーバの作成
- 10.5.3 HTTPS クライアントでのCA 設定の有効化
- 10.6 url モジュール
- 10.7 querystring モジュール
第11章 Domain
- 11.1 domain モジュールの概要
- 11.2 domain モジュールのクラス
- 11.3 ドメインへのオブジェクトと関数の結びつけ
- 11.4 Implicit Binding
- 11.5 Explicit Binding
- 11.6 ドメインを利用したエラーページの表示
第12章 ユニットテスト
- 12.1 はじめに
- 12.1.1 バージョン
- 12.1.2 アサーションモジュール
- 12.1.3 テスティングフレームワーク
- 12.2 assert
- 12.2.1 assert を用いたテスト
- 12.2.2 assert のアサーションメソッド
- 12.3 should
- 12.3.1 should を用いたテスト
- 12.3.2 BDD スタイルの表明
- 12.4 chai
- 12.4.1 chai を用いたテスト
- 12.4.2 chai のアサーションメソッド
- 12.5 mocha
- 12.5.1 mocha を用いたテスト
- 12.5.2 mocha のテスティングスタイル
- 12.5.3 ブラウザでの実行
- 12.5.4 その他の機能
- 12.6 vows
- 12.6.1 vows のインストール
- 12.6.2 vows を用いたテスト
- 12.6.3 非同期のテスト
第13章 デバッグ
- 13.1 デバッガの基本機能
- 13.1.1 デバッガの実行イメージ
- 13.2 組み込みデバッガを利用したCUI でのデバッグ
- 13.2.1 プログラムの実行制御
- 13.2.2 ブレークポイントの設定
- 13.2.3 状態の確認
- 13.2.4 ステップ実行
- 13.2.5 デーモンプロセスのデバッグ
- 13.2.6 コマンド一覧
- 13.3 Node Inspector を利用したGUI でのデバッグ
- 13.3.1 インストール
- 13.3.2 Node Inspector の起動
- 13.3.3 ブレークポイントの設定
- 13.3.4 ステップ実行
- 13.3.5 状態の確認
- 13.4 組み込みデバッガとNode Inspector の使い分け
- 13.5 IDE でのデバッグ
- 13.5.1 WebStorm
- 13.5.2 Eclipse + Chrome Developer Tools
- 13.6 その他のサードパーティのデバッグモジュール
- 13.6.1 デバッグユーティリティ
- 13.6.2 スタックトレースの分析
第3部 実践編
第14章 実践編導入
- 14.1 実践編で扱う技術について
- 14.1.1 WebSocket
- 14.1.2 NoSQL
- 14.2 共通して扱うモジュール
- 14.2.1 Express
- 14.2.2 Connect
- 14.2.3 Socket.IO
第15章 Express入門
- 15.1 はじめに
- 15.2 Express の導入
- 15.2.1 インストール
- 15.2.2 express コマンド
- 15.2.3 スケルトンの解説
- 15.3 Connect のアーキテクチャ
- 15.3.1 Connect とは
- 15.3.2 インストール
- 15.3.3 Connect アプリケーション
- 15.3.4 next とレイヤ構造
- 15.3.5 Connect のミドルウェア
- 15.4 Express のアーキテクチャ
- 15.4.1 Express のミドルウェア
- 15.4.2 EJS
第16章 Express を用いたフォーラムアプリケーションの作成
- 16.1 はじめに
- 16.1.1 作成するアプリケーション
- 16.1.2 本章で扱う内容
- 16.1.3 注意
- 16.1.4 環境
- 16.1.5 準備
- 16.2 ルーティング
- 16.2.1 静的ファイルの配信
- 16.2.2 favicon の配信
- 16.2.3 ルーティングの定義
- 16.2.4 フォームの使用
- 16.3 データの永続化
- 16.3.1 MongoDB の使用
- 16.4 その他のリクエストメソッド
- 16.4.1 使用可能なリクエストメソッド
- 16.5 ビューの改善
- 16.5.1 静的ビューヘルパ
- 16.5.2 部分テンプレート
- 16.5.3 個別ページへのリンク
- 16.6 エラー処理
- 16.6.1 エラーハンドラの使用
- 16.6.2 エラーハンドリングの実装
- 16.6.3 カスタムエラーの追加
- 16.7 ミドルウェア
- 16.7.1 Connect のミドルウェア
- 16.7.2 ミドルウェアの実装
- 16.8 ユーザー登録とログインの実装
- 16.8.1 登録フォームの作成
- 16.8.2 認証処理の実装
- 16.9 セッション
- 16.9.1 動的ビューヘルパ
- 16.9.2 flash 機能
- 16.10 ルートミドルウェア
- 16.10.1 ログインの状態の確認
- 16.11 remember me の実装
- 16.11.1 Cookie
- 16.11.2 自動ログインの実装
- 16.11.3 セッションのカスタマイズ
- 16.11.4 ユーザー名の表示
- 16.12 Tips
- 16.12.1 Connect-Redis の使用
- 16.12.2 アクセスログの出力
- 16.12.3 非同期とnext()
- 16.12.4 ディレクトリ構成の整理
- 16.13 終わりに
第17章 Socket.IO を使ったファイル共有アプリケーションの作成
- 17.1 はじめに
- 17.1.1 作成するアプリケーション
- 17.1.2 開発環境
- 17.2 準備
- 17.2.1 Apache CouchDB のインストール
- 17.2.2 スケルトンの作成
- 17.2.3 Web ブラウザ関連のライブラリのインストール
- 17.2.4 設定ファイル
- 17.3 ユーザー名の指定
- 17.4 チャンネルの実装
- 17.5 ファイルの送信
- 17.6 ファイルの受信
- 17.7 ファイルの永続化
- 17.7.1 Cradle の使い方
- 17.7.2 ファイルの添付方法
- 17.7.3 ファイルの永続化
- 17.8 ファイルの配信
- 17.8.1 Socket.IO の初期化
- 17.8.2 チャンネルに属しているユーザーの管理
- 17.8.3 CouchDB に永続化されているファイルの配信
- 17.8.4 フォームから送信されたファイルの配信
- 17.9 終わりに
第18章 外部API との連携
- 18.1 ハッシュタグストリーミング
- 18.1.1 概要
- 18.1.2 環境
- 18.1.3 準備
- 18.1.4 Public Timeline をコンソールに流す
- 18.1.5 Public Timeline をブラウザに流す
- 18.1.6 人気のハッシュタグを表示
- 18.1.7 ハッシュタグごとのストリーミング
- 18.2 今一緒にいる人を一括フォロー
- 18.2.1 概要
- 18.2.2 環境
- 18.2.3 準備
- 18.2.4 Twitter のOAuth 認証とは
- 18.2.5 今一緒にいる人を表示する
- 18.2.6 表示された人を一括でフォローする
- 18.3 終わりに
第4部 応用編
第19章 Node はどう作られているか
- 19.1 JavaScript とNode
- 19.1.1 JavaScript の言語としての特徴
- 19.1.2 JavaScript のとらえどころのなさ
- 19.1.3 JavaScript の標準化
- 19.1.4 サーバサイドJavaScript の盛り上がり
- 19.1.5 V8 とは何か
- 19.2 C10K とNode
- 19.2.1 C10K 問題
- 19.2.2 Node のI/O 戦略
- 19.2.3 libev
- 19.2.4 libeio
- 19.2.5 libuv
- 19.3 Web アプリケーションアーキテクチャとしてのNode
- 19.3.1 CGI
- 19.3.2 Fast CGI
- 19.3.3 Apache モジュール
- 19.3.4 Node
第20章 非同期プログラミングの改善
- 20.1 はじめに
- 20.1.1 非同期プログラミングとは?
- 20.1.2 イベントリスナとコールバック関数
- 20.2 コールバック関数の問題
- 20.2.1 順番通りに処理したい
- 20.2.2 処理が完了するまで待ちたい
- 20.3 コールバック関数の改善
- 20.3.1 async
- 20.3.2 順番通りに処理したい
- 20.3.3 処理が完了するまで待ちたい
- 20.3.4 その他
- 20.4 まとめ
第21章 アドオンの作成
- 21.1 概要
- 21.2 シンプルなHelloWorld のサンプル(オブジェクトの作成)
- 21.3 メソッドを持つアドオンのサンプル
第22章 npm パッケージ
- 22.1 チュートリアル
- 22.1.1 はじめの一歩
- 22.1.2 main エントリポイントの指定
- 22.1.3 モジュールの変更の反映
- 22.2 パッケージの公開
- 22.2.1 ユーザー登録
- 22.2.2 .npmrc のパーミッション変更
- 22.2.3 パッケージの登録
- 22.2.4 パッケージの削除
- 22.3 パッケージの詳細
- 22.3.1 複数のモジュールを追加する
- 22.3.2 コマンドを提供する
- 22.3.3 パッケージのインストールを制御する
- 22.3.4 パッケージの依存関係を記述する
- 22.3.5 node.js の特定のバージョン依存を記述する
- 22.3.6 その他のメンバ
- 22.4 まとめ
第23章 スケーラビリティ
- 23.1 複数プロセスの起動
- 23.1.1 child_process
- 23.1.2 Cluster
- 23.2 複数サーバでのスケールアウト
- 23.2.1 Node HTTP Proxy
- 23.2.2 セッションの共有
- 23.2.3 WebSocket の共有
- 23.3 終わりに
第24章 運用
- 24.1 Apache やNginx との連携
- 24.1.1 単純なリバースプロキシ
- 24.1.2 アクセス元のIP アドレスを取得する
- 24.1.3 プロキシサーバを用いるときの注意点
- 24.2 環境
- 24.2.1 VPS でNode アプリケーションを動かす
- 24.2.2 forever を用いたプロセスの管理
- 24.2.3 Node に対応したPaaS を利用する
付録A 開発ガイド
- A.1 ドキュメント
- A.2 モジュールの探し方
- A.3 Node の記事
- A.4 JavaScript 全般を扱うサイト
- A.5 コミュニティ
- A.5.1 公式コミュニティ
- A.5.2 日本ユーザーグループ
- A.6 オープンソース活動への貢献
- A.6.1 Node への貢献
- A.6.2 開発者向けの注意事項