2020年度の富士市5374アプリの更新を行いました


富士市(非公式な)ごみ分別カレンダーアプリのfuji.5374.jpですが、2020年の更新をやりました。

本来だと4月ごろ目標でしたが、今年はやっぱりいろいろあって7月にやりました。実はもうやらないと自分の部屋のゴミが片づけられなくなってまして、結構自分で用意したサービスに依存してます。

当初は、もう手入力が嫌だったのでOCRを使って半自動を目論みましたが、COVID19方面でお手伝いしていたプロジェクトが忙しくなってしまったので、手動で力押ししました。考えずにやる時は単純な方法がやっぱり良いです。

あと今年はお問合せフォームを作りました。何かあればこちらからどうぞ~

5374 for 富士市 問い合わせフォーム

更新自体はそれで終わりになりましたが、それだと学びもなかったので、もう少し突っ込んでicalファイルの生成をするPythonスクリプトも書きました。

icalファイルは試験的な対応で、パターン名の意味がわかるエリアにリンクを貼ってあります。DLしてカレンダーアプリに読み込ませてもよし、GoogleカレンダーなどにicalファイルのURLを指定することで、最新のカレンダー情報へアクセスできます。

ちょうどPythonのコードを書く時間を増やしたくて、練習がてら自分も地域に対応したパターンのicalファイルをGoogleカレンダーに登録していて、とても便利に扱ってます。もう今年一番ためになるものを作った気がします。おかげで先週の資源ごみはちゃんと出せました。

ということで、富士市の5374はical対応にしてとても便利に使えるようになります。富士市在住の方々で、ごみ忘れてしまうなーとお困りの方は是非ともお試しください!


以降は技術的な話になります。(といってもメモレベル

5374とical

実は5374の情報をもとにicalファイルの生成するCal5374というサービスはあるのですが、車輪の再開発だったり、プロジェクトの中に入れておいた方がよいとも思ってつくりました。

ただ富士市版では生成できなかったので、いつかは自前で対応しようと思っていました。

Pythonとicalenderでical対応

icalファイルの生成はPythonスクリプトでやっています。もう作ってしまったので放置ですが、GitHub Actionsのワークフローを書いておけばCSVファイルの更新と同時にicalファイルの生成もできるようになるはずで、暇になったらワークフローも設定しておきます。

fuji-5374.github.io/convert_ical.py at master · fuji-5374/fuji-5374.github.io

5374.jpのゴミカテゴリに記載する日付のフォーマットにすべて対応しているわけではないので、どの5374でもすぐに使えるわけではないのですが、もし利用されたい方がいたらissueなど立てていただければ、可能な限り頑張ります。

まずicalファイルの生成するライブラリですが、これはライブラリの使い方より、icalファイルのフォーマットの理解に悩みました。マークアップ言語と言われていますが、カレンダーアプリの機能とフォーマットの対応がわかっていなかったので、RFCや日本語訳を見ながらやってました。

最終的にはGoogleカレンダーからicalファイルの生成をしたり、日本語で解説されているブログ記事に助けられました。

ライブラリ自体はオブジェクトの操作がしやすいと思います。昔からあるライブラリなので安定もしてると思います。

型アノテーションとかテストツールとか

型アノテーション、関数へのアノテーションや、typingライブラリをちゃんと使ったことがなかったので今回使いました。型を考えるのは久々だったりして明文化するときの手段に悩んでいたと思います。

typing --- 型ヒントのサポート — Python 3.8.4 ドキュメント

ジェネリクス型は使わなかったのですが、その辺全然分からなくなっていたのでなるほどーと思いながら書いてました。

あとdataclassも考えましたが、使うほどのものを書かないだろと踏んでいたので使わず。

@iwatobipenさんにpydanticというバリデーションライブラリも教えてもらいましたが、それもそこまではなあと思ってしまって諦めました。でも使った方が身になったなとちょっと後悔。

ドキュメント見た感じだとAPIとかデータモデリングに使うなーと思ってたら、FastAPIで利用されているそうです。興味しかない👀