クロコさん(Claude Code)にはいつも細かくメンテナンスをしてもらっています。ありがとう。
以下の文章は Claude Code が作成したものです。
rssmail.private: 継続的メンテナンスと機能拡張 by Claude Code
2025年11月3日
はじめに
rssmail.privateは、結城浩さんが使用するRSSフィード監視システムです。CSVファイルに記録された101サイトのRSSフィードを定期的に巡回し、更新があればメールで通知します。また、RSSフィードのないWebページの更新も監視できます。2025年9月から10月にかけて、エラー対応、メール形式の改善、新機能の追加など、継続的なメンテナンスを行いました。
今回の成果
エラー処理の改善(2025年9月)
不正なXMLフィードへの対応として、RSSパーサーを非strictモードに変更しました。また、1つのサイトでエラーが発生しても全サイトの処理が継続されるようにエラー処理を改善しました。エラーメールは個別送信から、最後にまとめて1通で報告する方式に変更しました。
cronで実行した際にSMTP認証エラーが発生する問題を調査し、環境変数設定のバグを発見して修正しました。
メール形式の大幅な改善(2025年10月)
従来はサイトごとに1通ずつメールを送信していたため、大量のメールが届く問題がありました。全サイトの更新を1通のメールにまとめる方式に変更し、HTMLメールのデザインを全面的に刷新しました。
カード形式のレイアウトを採用し、ヘッダーカードの直後に「全エントリ(時刻順)」カードを追加しました。全サイトの全記事を更新時刻順に一覧表示し、その後、サイトごとのカードをランダムな順序で表示するようにしました。
視覚的識別の向上(2025年10月)
sites.csvに絵文字フィールドを追加し、全101サイトにサイト内容に応じた絵文字を割り当てました。各エントリの先頭にサイトの絵文字を表示することで、視覚的に識別しやすくなりました。
また、全エントリ一覧の時刻表示を日付なしの「HH:MM」形式に変更し、縦方向に圧縮して見やすくしました。全ての時刻をJST(日本時間)に統一して表示するようにも改善しました。
Webページ更新監視機能の追加(2025年10月)
RSSフィードを持たないWebページの更新を監視する新機能を追加しました。pagemail.rbを新規作成し、ページ内容のSHA256ハッシュ値を計算して前回と比較することで更新を検知します。CSSセレクタで監視範囲を指定でき、初回チェック、更新あり、更新なしの3つの状態を判定します。
大きなフィードへの対応(2025年10月)
メルカリエンジニアリングブログのような大きなフィード(1.7MB以上)でパース結果がnilになる問題が発生しました。RSSフィードのパース方法を変更し、ストリームを直接パースするのではなく、内容を読み込んでからパースする方式に改善しました。
また、エラーが発生した際の詳細情報(レスポンスサイズ、エンコーディング、内容の一部)をエラーメッセージに含めるようにし、デバッグ情報を充実させました。
Blueskyフィードへの対応(2025年10月)
Blueskyの画像のみの投稿では、titleとdescriptionの両方がnilになることが判明しました。両方がnilの場合に「(無題)」を使用するように修正し、画像のみの投稿でもエラーにならないようにしました。
エラーサマリーメールにバックトレース情報を追加し、今後のエラー調査が容易になるようにしました。
セッションの流れ
結城さんからのエラー報告や改善要望をいただき、原因を調査して修正するという流れで進みました。特にメール形式の改善では、「大量のメールが届く」という問題に対して、1通にまとめる、時刻順一覧を追加する、ランダム表示にする、絵文字で識別しやすくするといった複数の改善を段階的に実施しました。
Blueskyのエラーでは、結城さんから「確かに先ほど画像のみのエントリを投稿しました」という情報をいただき、原因が明確になりました。このような具体的なフィードバックが、迅速な問題解決につながりました。
次のステップ
継続的なメンテナンスを続けながら、新しいフィードの追加やエラー対応を行っていきます。ページ更新監視機能については、監視対象のページを増やしていくことができます。
おわりに
結城さん、今回は9月から10月にかけての継続的なメンテナンス作業をまとめました。rssmailは毎日動作するシステムなので、こうした細かな改善の積み重ねが重要ですね。これからも安定した動作を維持できるよう、サポートしていきます。
(2025年11月3日)