Save RSS feed to pocket in Thunderbird

Thunderbirdで取得したRSS feedをpocketに保存する拡張機能を書いた。

以下のスレッドでも議論されているが、同じMozillaグループでもThunderbirdとpocketを連携するアドオンはない

https://connect.mozilla.org/t5/ideas/rss-feature-in-thunderbird-adds-pocket-button/idi-p/16200

ThunderbirdRSS管理機能はほかの端末と同期できないことを除いてかなり満足している。Webアプリだと追跡可能なフィード数など結構すぐに到達できてしまうリミットがあり、セルフホストのツールだとサーバー管理が発生して二の足を踏んでしまう。ただインストールだけすれば自由に操作できるThunderbirdはいいバランスのツールで今更ながら結構感動している。ただ、"後で読む"サービスへの転送はRSS管理ツールだと必須だと思っていて、これが欠けているので拡張機能を書いた。 前置きはここまでで、どのように動作するかをざっくり説明する

動作

  • xpiファイルをThunderbirdのアドオンマネージャーから選択する
  • アドオンマネージャーのオプションからpocketのcousumer_keyとapi_tokenを入力し保存する
    • 内部的にbrowser.storage.localで保存している

こんな感じで有効になる オプションはこんな感じ

正しく設定すると、開いているメッセージにボタンが増える。

Pocket!を押すと記事のURLを取得し、pocketに保存される。実行後に記事はアーカイブに移動する。

もともとの仕様

いくつか調査&実力不足で実装できない機能があったので供養する。

  • pocket保存時のタグ付け
    • メッセージの情報をupdateするAPIがあったが、引数が違うと言われ続けて断念。アーカイブへの移動に変更
  • いらんポップアップの削除
    • Thunderbirdのbookmark機能を見てもわかるが、保存済みかどうかを星マークで示すことができる
    • webextensions-examples/bookmark-it at main · mdn/webextensions-examples · GitHub
    • pocketも保存の状態をもとにボタンの色をグレーアウトさせたりすればいいんじゃないかと思った
    • bookmarkの星の機能は実装が公開されているので、がんばればできると思ったがそのためだけに毎度pocket側に負荷をかけるわけにもいかないのでやめた
  • そもそもポップアップを出す必要がない
    • 出さずに実装する方法が分からなかった

背伸びできた仕様

  • storage.localによるクレデンシャル管理

自分用だからプレーンテキストでもいいかと思っていたが、何かの拍子で公開することになった場合、 クレデンシャル管理が致命的になるので取り組んだ。便利なAPIがありとても簡単に実装ができてよい。

言い訳

正直、JavaScriptなんてほとんど書かないので本当にわからなかった。何度も読んでいるうちにメソッドのチェーンや返り値の記法などが分かってきたが、はじめのうちはエントリーポイントになる関数がどこなのかさえわからなかった(経験的にわかった風になっているだけで今もわかっていない)。

良かったと思う点は、この手法はFirefoxchrome系の拡張機能の作成にも応用が利きそうで次に何か作るときのハードルがかなり下がったことと、JavaScriptのいい練習になったことだ。

実際のところ、人生で一番よくつかうアプリケーションはブラウザだと思っているので、自分で拡張を書けるようになるのはかなり満足感がある。目的がはっきりしていて環境構築やサーバー代の必要がないのがとてもいい。

Release

https://github.com/byeron/thunderbird-to-pocket/releases