薄氷をぴしぴし踏んで老詩人 ―― 中村苑子
すでに立春も過ぎましたが、まだまだ寒い日も多く春が待ち遠しい日々です。朝がた家の外に出ると、道ばたの水たまりに薄く氷が張っており、前の晩の寒さが思いやられつつ、ひび割れた様子を見ては、すでに登校している生徒たちがここを通ったことにも気づきます。
そんな気持ちを体験できるページを作りました。その名もウェブ薄氷(うすらい)。
早朝に氷が張り、最初の一人だけがこれを割れます。残念ながら昼になると溶けてしまいますが。
実装はドメインからも分かるとおり Cloudflare Workers。氷を割った時刻を KV に保存している。
最初はただひとつの状態だけを持つ実装にしていたけど、やっていたら request.cf
という特別なオブジェクトから クライアントのアクセス元の情報も 国・地域・都市のレベルでそれぞれ取れるようだったので、その粒度で状態を共有するようにした。名前をキーにしているから変なバッティングもあるけどそれも味ということで。エッジごとに独立したキャッシュを持ってたら面白いと思ったけど、Workers ではそういうキャッシュは使えなそう? だったので見送り。
Cloudflare Workers は初めて使ってみたけど wrangler の体験がよくて大変やりやすかった。ふつうの JavaScript における開発体験と地続きにちょっとしたものが書けるのはいい。テストのことを考えると miniflare を最初から入れておいたほうがよいと思うが、このへんは現在開発中の wrangler 2 で統合されるらしい。あらかた開発してから気づいた。あとコールドスタートがないのもいいね。こういうちょっとしたものでいちいち待たされるのはよくないだろうから。
そして一番大変だったのは JavaScript でタイムゾーンを気にした時刻の取り扱いをすることだった……。