15 min/d

ぼうずやのにっき

Cycle.js のドキュメントをよんだ

Cycle.js のドキュメント

Cycle.js のドキュメントを読んだ。前からざっと。

分かりやすい。ぼくは英語が苦手なのだけれど 1 ステップずつコードが書かれているので分かる。逆に言うとコードのほとんどない概要の部分や Observable の部分はふわっとしか分からない。

Cycle.js は FRP (Functional Reactive Programming) で Unidirectional Dataflow なJavaScript framework だ。まだ使えていないのでうまく説明できないけど。

Cycle.js Application は main と drivers とでできている。main は副作用のない純粋な関数で、drivers は副作用のある関数でできている。

drivers が DOM や HTTP などとの入出力を行う。drivers が外界の汚れを覆い隠して RxJS の Rx.Observable を返し、受け取る関数にしてくれる。これは Human-Computer Interaction のうちの Human にあたるのだと思う (間接的に、だけど) 。

main は RxJS の Rx.Observable を受け取り、返す。drivers から受け取る Observable とは drivers による入出力の結果をイベントとして観測できるものだ。

drivers -(responses)-> main -(requests)-> drivers -(responses)-> main ...

というサイクルになる。これは Cycle.js のドキュメントの Drivers にある図を見ると分かりやすい。

何を言っているかわからないかもしれないけれど、ぼくも何を言っているか分からない。まだうまく説明できないし、日本語だとうまく説明できないけど、これによってもたらされるメリットは明らかだ。

既に書いたとおり「main は副作用のない純粋な関数になる」ってことだ。もっと言うと Observable を扱っているので同期とか非同期とか気にしなくていい (厳密に言えば、同期的に、非同期を想定した形で振る舞いを組み立てておく。処理はそれに従って流れていくだけだ。Promise に callback を設定するみたいなものだ。Observable は Node.js Stream のように複数のデータに対応できる) 。これはテスタビリティを上げるし、より柔軟な単位でのモジュール分割が可能だ。

ぼくはまだ試せていないし、理解もできていないけれど、このドキュメントを読んでわくわくしている。