読者です 読者をやめる 読者になる 読者になる

15 min/d

ぼうずやのにっき

bouzuya/cyclejs-history-driver をつくった

bouzuya/cyclejs-history-driver をつくった。Cycle.js 7.0.0 の Driver づくりをためした。

cyclejs-history-driver は Cycle.js 7.0.0 (@cycle/base 4.x) 用の Driver だ。History API を利用できるようにしてある。

きっかけは bouzuya/bbn-cycle で History API 向けの driver が必要になったからだ。公式にも history driver はあるが、いくつかの嫌な点を避けるために自分でつくった。

公式の driver は cyclejs/history だ。こちらは mjackson/history を扱っている。API がきれいに history を wrap しておらず、 history の併用が前提になる点が嫌だ。今回の bouzuya/bbn-cycle の要求に対して機能が過剰なのも嫌だ。また、ためしたところ TypeScript まわりで Error が出る。

cyclejs-history-driver は browser の History API のみ。hash などへの fallback はなし。ほとんど直接的に window.history.* を呼び出しているかのような API にした。このあたりに対応するなら History.js などの既存 npm module を wrap すべきだし、使いやすさを考えるなら口を狭めて、もうすこし simple な形にしても良い。今回はとりあえず……というところだ。

Cycle.js 7.0.0 の driver だけど、StreamAdapter を取るようになっている。これは stream library が RxJS に限定されなくなったからだ。ただ、これもきれいに wrap されている気がしない。たとえば subject.stream 以降に手を出せない。結局 xstream を前提として書いてしまった。これでいいのだろうか……。