JavaScript Promiseの本

JavaScript Promiseの本という無料で読める電子書籍を書きました。

タイトルそのままで、JavaScriptのPromiseについて書いた書籍です。

書籍の目的

この書籍を読むことで学べる事として、次の3つを目標にして書きました。

  • Promiseについて学び、パターンやテストを扱えるようになる事
  • Promiseの向き不向きについて学び、何でもPromiseで解決するべきではないと知る事
  • ECMAScript6 Promiseの基本をよく学び、発展した形を自分で形成できるようになる事

Promiseは、次のECMAScriptの言語仕様として策定が進められていて既に多くのブラウザに実装されています。

Promiseについて扱う書籍ですが、この機能はjQuery.Deferred()AngularJSの$qBluebird等の類似の機能が既にあるため扱ったことがあるかもしれません。

ECMAScript6 Promiseの機能自体は新しいものではなく、既にあるものを標準化しただけです。
そのためライブラリ等を使えば今すぐ使えますし、既に使っています。

また、今後ブラウザに実装されるAPIとしてService WorkersStreams API等、Promiseをベースしたものも出てきています。
JavaScriptの非同期処理の一つのパラダイムであるため、この機会に学んでおくと他のAPIを学ぶときにも役立つかもしれません。

書籍の閲覧方法

この書籍は、スマートフォンも含めブラウザで見られるHTML版PDF版を公開しています。

HTML版には、表示されているサンプルコードをそのまま実行して試せる機能があるため、Promiseをサポートしてるブラウザで見るのをオススメします。
ブラウザがPromiseをサポートしてなくてもPolyfillが使われるので大抵の環境で実行出来ます。

JavaScript Promiseの本 2014 06 23 00 46 57 2014 06 23 00 47 03

FirefoxとChrome、Operaの安定版は既にPromiseをサポートしてるので、その環境で見るのがオススメです(CORSやWeb Notificationを使うサンプルが出てくるのでデスクトップブラウザだと全てを試せます)

この書籍のソースコードは全てGithubで公開されていて、ライセンスはCreative Commons Attribution-NonCommercialです。(コードはMIT)

そのため、何か問題や意見などがあったらIssues · azu/promises-bookにIssueを立てたり、azu/promises-book – Gitterのチャットに書き込んだりしてくれると嬉しいです。

書籍のハッシュタグは#Promise本となっています。

こういう形態で書籍を公開したのは、常に書籍が更新出来るようにしたいからでもあります。
そのため、今後の更新内容を受け取りたい場合は、Release notes from promises-bookをRSSリーダーで購読するといいかと思います。

もっと細かく知りたい人はazu/promises-bookをWatchするといいでしょう。

書籍の作り方

書籍はAsciidoc形式で書いてAsciidoctorでビルドしています。

また、Promiseには興味ないけど、こういう電子書籍の作りに興味があるという人は、JavaScript Promiseの本 付録というおまけを公開しています。

おまけ.pdfには、この書籍を書き始めた理由や、どのように書いていったか、書籍自体の自動テストやワークフローについて書かれています。
Github IssueやPull Requestの活用方法について自分なりに感じた事を長々書いてた気がします。

Gumroadから無料 または 好きな値段でダウンロードすることが出来ます。(寄付したい人は寄付の代わりに使って下さい)

ダウンロードする際に作者へのメッセージも書けるので、 メッセージを残すついでにダウンロードしていってね!

最後に書籍の目次を貼っておきます。

書籍の目次

1. Chapter.1 - Promiseとは何か

    1.1. What Is Promise
    1.2. Promise Overview
    1.3. Promiseの書き方

2. Chapter.2 - Promiseの書き方

    2.1. Promise.resolve
    2.2. Promise.reject
    2.3. コラム: Promiseは常に非同期?
    2.4. Promise#then
    2.5. Promise#catch
    2.6. コラム: thenは常に新しいpromiseオブジェクトを返す
    2.7. Promiseと配列
    2.8. Promise.all
    2.9. Promise.race
    2.10. then or catch?

3. Chapter.3 - Promiseのテスト

    3.1. 基本的なテスト
    3.2. MochaのPromiseサポート
    3.3. 意図したテストを書くには

4. Chapter.4 - Advanced

    4.1. Promiseのライブラリ
    4.2. Promise.resolveとThenable
    4.3. throwしないで、rejectしよう
    4.4. DeferredとPromise
    4.5. Promise.raceとdelayによるXHRのキャンセル
    4.6. Promise.prototype.done とは何か?
    4.7. Promiseとメソッドチェーン
    4.8. Promiseによる逐次処理

5. Promises API Reference

    5.1. Promise#then
    5.2. Promise#catch
    5.3. Promise.resolve
    5.4. Promise.reject
    5.5. Promise.all
    5.6. Promise.race

6. 用語集

書籍へのリンク

おまけに書いてたような書籍を作るにあたってやったことはまた別の記事で書くと思います。