RSSリーダー
冬休みにRSSリーダーを書いた。楽しかった。
feedlyへの不満
feedlyを使っていたが不満が溜まっていた。
- ネットワークエラーが頻発する。これは日本に一時帰国中で、サーバーから距離があるせいかもしれない。
- 画像が縮小表示されるため、画像主体のRSSフィードが読みづらい。
とはいえ、自作するほどの不満ではない。冬休みで魔が差した。
Ultraladder
インストール不要で複数デバイスからアクセスしたかったので、Webアプリとして作った。これまで使ったRSSリーダーの中ではFastladderが一番気に入っていたので、各所で影響を受けている。jkキーバインドも実装した。
RailsでAPIサーバーとジョブサーバーを、Next.jsでフロントエンドを書いた。AWSにデプロイしようと思ったら思ったより高くなりそうだったので、fly.ioにAPIサーバーを、Vercelにフロントエンドを配備した。
Webサービスとして一般公開するつもりはないので、認証機能などは簡易なものしか付けていない。スケールしそうにない機能もいくつか付けた。
モダンブラウザAPI
最近*1のブラウザの機能は追っていなかったが、改めてみたら便利なAPIがいくつか追加されていた。
scroll-snap-typeでエントリの先頭でスクロールを簡単に止めれるようになった。
未読から既読への切り替えのためのエントリ表示判定が必要だったが、これもIntersectionObserver APIで簡単に実現できた。
画像用デザイン
画像主体のフィード用のデザインも用意した。
スケールしない機能
同じエントリを複数回見るのが嫌だったので、同じURLはまとめて既読扱いとした。
def mark_as_read item = current_user.items.find(params[:item_id]) read_at = Time.current item.update!(read_at:) # mark same url items as read current_user.items .unread .where(url: item.url) .update(read_at:)
このあたりは購読数に対してスケールしそうにないが、個人用なので遠慮なく実装した。
楽しかった
とても楽しかった。
ほどほどにしてのんびり正月を過ごすつもりだったが、止まらなくなってしまった。 ジョブの実行頻度を間違えてることに気がついて、初詣の帰りにデプロイをやり直したこともある。
YouTubeで音楽をランダム再生しながら深夜までコードを書くのはエキサイティングだった。終盤、メドレーに投入したため、めまぐるしく変わる曲の中でHTMLをいじるのが最高に楽しかった。
思い通りのものが目の前にだんだんと現れてくるの、他に変え難い喜びがある。こういうことがやりたいからプログラミング覚えたのが出発点だったのを思い出した。
*1:2019年