Open3

opening_hours.jsが動かないことがある

なかやばしなかやばし

きっかけ

手前味噌で恐縮だが、私はATMマップというwebサイトを開発している。

https://atm-map.pages.dev/

このWebサイトでは、ATMの営業時間をOSMから取得しており、OSMのopening_hours形式の文字列をパースして現在営業しているのかを表示する機能を持っている。

https://wiki.openstreetmap.org/wiki/JA:Key:opening_hours

そして、内部的にはopening_hours.jsというライブラリを使っている。

https://github.com/opening-hours/opening_hours.js

本来であれば、店の名前と営業しているか否かを表示してくれるはずであるが、

一部のATMをクリックしても反応がないことに開発していて気づいた。そこで、consoleを開いたところ、以下のようなエラーが出ていた(ローカルで開発していないと出現しなかった。バンドル関連でこのよな差異が起こっていそう)。

しかし、リポジトリを見ていても、日本の休日を定義したファイルは存在している。

https://github.com/opening-hours/opening_hours.js/blob/master/src/holidays/jp.yaml

なぜ、このようなエラーが出ているのだろうか?

なかやばしなかやばし

v3.8.0の配布ファイルがどうなっているのかを実際に確認してみる。

しかし、yamlのデータがどのようにjsに読めるかたちに変換されているのかが不明なので、先にこちらを調べてみることにした。

まず、どのようにjsがbuildされているのかをpackage.jsonを確認してみる。

https://github.com/opening-hours/opening_hours.js/blob/0d2e2f701eabfa3cd4d94337020432c73dedb718/package.json#L36

Makefileがあるらしい。Makefileを見てみる。

https://github.com/opening-hours/opening_hours.js/blob/0d2e2f701eabfa3cd4d94337020432c73dedb718/Makefile#L68-L70

https://github.com/opening-hours/opening_hours.js/blob/0d2e2f701eabfa3cd4d94337020432c73dedb718/Makefile#L485-L497

rollupを使っているらしい。rollup.config.jsを見てみる。

https://github.com/opening-hours/opening_hours.js/blob/master/rollup.config.js

@rollup/plugin-yamlというパッケージがあやしい。npmを見ても説明文からしてこのパッケージでyamlからJSに変換してバンドルしていることがわかる。
https://www.npmjs.com/package/@rollup/plugin-yaml

つまり、配布ファイルのjsにyaml由来のデータがあることになる。