CubeRSS Reader 0.2.0β

CubeRSS Reader 0.2.0β をリリースしました。修正点は下記の通りです。

  • データフォルダを変更できるように修正しました。
  • メイン画面の各カラム幅を保持するように修正しました。
  • CubeRSS Reader 起動直後の読み込み時間(ロード時間)を改善しました。
  • RSS フィード情報のキャッシュファイルへの退避、および復帰機能を改善しました。
  • RSS フィード削除時、特定の条件でキャッシュファイルが削除されない不都合を修正しました。
  • 設定画面で複数項目を同時に変更した場合に変更が反映されない不都合を修正しました。
  • 同一端末 (PC) において複数のアカウントで CubeRSS Reader を起動した場合、後続のアカウントで起動に失敗する不都合を修正しました。

データフォルダの変更機能

データフォルダの変更機能

今回のバージョンアップでは当初、データファイルの Load/Save 周りに関する改善のみを実施する予定でしたが、開発環境でテスト用データに切り替えるのが面倒になり、前倒しでデータフォルダの変更機能を実装する事にしました。この機能を利用する事で、間接的ではありますが、複数端末で同期すると言う需要を満たせるようになるのではと期待しています。

CubeRSS Reader では通常、AppData/Local/CubeSoft 下に CubeRssReader と言うデータフォルダを生成します。ユーザが、この初期設定を敢えて変更しようと考える場合、その多くは DropboxOneDrive のような同期型オンラインストレージの監視下にあるフォルダを指定する事が予想されます。この時、大きな問題となるのが「複数の端末が、同じデータフォルダに対して同時にアクセス(変更)する」と言う状況が起こり得る事でした。複数の端末から同時にアクセスされている状態で、同期しながら整合性を保つ事は当初より想定していませんでしたが、何かしら排他制御を行う事の必要性は感じていました。しかし、データフォルダ下に配置される各種ファイルの排他制御をどうするかについては考えがまとまっていなかったため、最初のリリースでは該当機能の導入を見送っていました。

0.2.0β では最終的に、データフォルダ直下に .lockfile と言うファイルを生成し、このファイルにアクセスしている端末の情報を保存すると言う方法を採用しました。CubeRSS Reader は、データフォルダへの初回アクセス時に .lockfile の存在を検知すると、「読み取り専用モード」で起動します。

尚、何らかの原因で CubeRSS Reader の終了処理が失敗し、.lockfile の情報が残ってしまう事が考えられます。他の端末で CubeRSS Reader を起動していないはずなのに読み取り専用モードとなる場合、データフォルダにある .lockfile を削除して CubeRSS Reader を再起動してみて下さい。また、同期型オンラインストレージの性質上、ある端末の .lockfile の内容が別の端末に反映されるまでには若干のタイムラグが存在します。そのため、現状では複数の端末で CubeRSS Reader を同時(あるいは非常に短い時間)に起動した場合の挙動は保証できませんので、その辺りは注意してご利用下さい。

データファイルの Load/Save 周りに関する改善

今回のバージョンアップで主眼としていたのは、データファイルの Load/Save 周りに関する改善でした。修正内容は大きく分けて 3 点です。

起動直後における Load 時間の改善

1 点目は、CubeRSS Reader 起動直後における Load 時間の改善となります。テスト環境では、大体 RSS フィードが 200 件位、新着記事(未読記事)が 4,000 件位の状態で動作確認をしていますが、メイン画面が表示された後、全項目が表示されるまでに結構なタイムラグが存在する事が当初からの懸念事項でした。

動作を解析した結果、この問題は(起動直後においては)不要なファイルが大量に読み込まれるために発生していたようです。該当部分を修正する事で、前述した条件下で、起動直後の Load 時間が 2 秒程度(0.1.1β)から 80 ミリ秒程度(0.2.0β)まで改善しました。

キャッシュファイルの扱いに関する修正

2 点目は、キャッシュファイルの扱いに関する修正です。RSS リーダは性質上、どれだけの RSS フィードが監視対象となるのかを予想できないため、全てのデータをメモリ上のみで処理すると問題になる事があります。そのため、CubeRSS Reader ではフィード毎にキャッシュファイルを生成し、タイミングに応じて Load/Save を実行する事で対応する予定でしたが、最初のリリースではいくつかのバグが残っており挙動が不安定でした。

0.2.0β では該当部分の修正を行い、確認した限りでは意図通りに動作するようになりました。尚、この修正に伴い、GUI 上ではまだ設定項目を用意していませんが、データフォルダにある Settings.json の Capacity と言う項目を変更する事でメモリ消費量をある程度管理できるようになりました。例えば、RSS フィードが 200 件位、未読記事が 4,000 件程度の条件で Capacity の値を変更した時のメモリ消費量の変化は下記のようになります(未読記事がゼロの RSS フィードを選択している場合)。

Capacity メモリ消費量
10 53.6MB
20 54.2MB
50 68.8MB
100 78.7MB
1,000 95.2MB

ただし、この結果はあくまで参考値です。メモリ消費量に関しては、RSS フィードの購読状況もそうですが、それ以上にメイン画面右側の WebView に表示される内容に非常に大きく依存します。そのため、現実問題としては、Capacity の値はそこまで気にする事はないかなと思います。

不要なキャッシュファイルの削除

最後は、不要なキャッシュファイルの削除機能に関する修正です。0.1.1β までのバージョンでは、特定のカテゴリに属する複数の RSS フィードをまとめて削除した場合、不要なキャッシュファイルが残ったままとなる不都合が確認されていました。この不都合は、前述した同期型オンラインストレージの監視下にあるフォルダをデータフォルダとして使用し始めると、ストレージ容量を必要以上に消費するなど大きな問題となり得るため、それまでに修正すべき内容として認識していました。0.2.0β では、該当部分の修正が完了し、正常に機能するようになりました。

0.2.0β で、各種データの管理機能に関わる基本的な部分に関しては、概ね修正が完了したかなと思います。今後は、キーボードショートカットを始めとした CubeRSS Reader の操作性の改善等に取り組んでいく予定です。