Promise本の取り組み

JavaScript Promiseの本の開発で取り組んだ事と取り組んでおくべき(考慮しておくべき)だったことについてのメモ書き

技術書のディレクトリ構成とか参考になるものがあんまりなくて適当に作ったので、その辺を整理をしたい目的で書いてます。

はじめに

ここで書いたPromise本のディレクトリ構成やCI、テスト手法、使ったツールなどについては以下に大体書いてあります。

なので、結構省いて書いてるのでちゃんと見たい人は付録とかの方を見て下さい。

後、書籍の文章のフォーマットはAsciidocというOreillyが使っているものを使っていて、それのRuby実装であるAsciidoctorを使って書かれています。

多言語対応を考える

章毎に文章とソースコードとテストとリソースをディレクトリでまとめていた。

それをルート直下に配置していたため、多言語対応が取りにくい構成になってた。(実際、ディレクトリ浅くするためにこうしてたので、考えてなかった)

├── Appendix-Reference
│   └── readme.adoc
├── Ch0_Introduction
│   └── readme.adoc
├── Ch1_WhatsPromises
│   ├── embed
│   ├── img
│   ├── promise-overview.adoc
│   ├── readme.adoc
│   ├── src
│   ├── test
│   ├── what-is-promise.adoc
│   └── writing-promises.adoc
├── Ch2_HowToWrite
├── Ch3_Testing
├── Ch4_AdvancedPromises

書いた後に中国語の翻訳や韓国語の翻訳などもでてきたので、多言語対応を考えるまではいかないでも、以下みたいに一段ディレクトリを落としたほうが対応しやすいと思った。

docs/
├── Appendix-Reference
├── Ch0_Introduction
├── Ch1_WhatsPromises
├── Ch2_HowToWrite
├── Ch3_Testing
├── Ch4_AdvancedPromises

この辺は一般的な多言語に対応してるサイトの構成を参考にするのがいいのかと思った。

文章とソースコードとテストとリソースを章毎にディレクトリでまとめるという戦略自体は実際書きやすくなるので悪くないとは思ってるけど、他言語化すると重複するので分離するべきかは考える必要がありそう。

そもそもなんで章毎に全部リソースをまとめたかというと、プレビューのし易さを考えた時にそうなった。

Markedというプレビューするアプリを使っていて、以下のようなシェルスクリプトを作ってMarkedのCustom Markdown Processorのパスに指定して使っていた。

#!/bin/sh

~/.rbenv/shims/asciidoctor -a icons=font -a source-highlighter=coderay \
 --backend html5 --base-dir "`dirname $MARKED_PATH`/" -


[Mac] Asciidoc | Web Scratch

MarkedreStructuredText - F13


base directory(?)




Asciidoc(Asciidoctor) // <1> CodeBlock(<1> )

使
[source,javascript]
.Promiseを使った非同期処理の一例
----
// CodeBlock
var promise = getAsyncPromise("fileA.txt"); // <1>
promise.then(function(result){
    // <2> 
}).catch(function(error){
    // <3>
});
----
<1> promiseオブジェクトを返す
<2> 取得成功の処理
<3> 取得失敗時の処理

使

()


[source,javascript]
.Promiseを使った非同期処理の一例
----
var promise = getAsyncPromise("fileA.txt"); // <1>
promise.then(function(result){
    // 取得成功の処理
}).catch(function(error){
    // 取得失敗時の処理
});
----
<1> promiseオブジェクトを返す

できたこと

JavaScript Promiseの本のサンプルコードはテストするために外部ファイルにしていて、Asciidocにファイルを読み込んで展開する機能があるのでそれを利用した。

----
include::embed/embed-promise-all-xhr.js[]
----



使

(src)(embed)

使()

Asciidoc

Asciidoc


Promise4










HTML





Asciidoc

Asciidoc



Asciidoctor

AsciidoctorCI









promises-book/CONTRIBUTING.md at master · azu/promises-book

 · Issue #41 · azu/promises-book






OSS @ 2014 | Web Scratch(AsciidocMarkdown)


WEB+DB PRESS使LintCodeMirror | Web Scratch

WEB+DB PRESS(WZEditor) | Web Scratch

JavaScript/Markdown textlint  | Web Scratch


RedPen()

Google IME使typoATOK使

Asciidoc


Asciidoc(Asciidoctor使)使

TODOMarkdown + Leanpub


Promises · Issue #7 · azu/azu


MarkdownMarkdown


pandocMarkdownfilter | Web Scratch


AsciidoctorHTMLreStructuredText(Markdown)

HTMLPDF調


[PDF/Epub]  · Issue #2 · azu/promises-book


Asciidoctor


Asciidoctor User Manual


Markdown LeanpubMarkdownMarkua

MarkdownAST/

Asciidocpull request使


Contributors to azu/promises-book

Issue




PromiseGitHub Issue使

GitHub Issue

Pull Request


使Github Issue




Pull Request

Pull Requestpreview-htmlpushrawgithub.comHTML

Pull RequestHeroku(masterGitHub pages)


GitHub Integration | Heroku Dev Center


OSS @ 2014 | Web Scratch


 JavaScript Promise | Web Scratch





CI




GitHub

GitHub

typoIssue

Issue (Issue)

その他