iOSのEvernote検索アプリeverPostの新バージョン開発中に、色々と問題があったことの反省

everPostというぼくがリリースしているEvernote検索iOSアプリがあるのですが、全然バージョンアップに時間をかけられずズルズルと来ていました。

大きくバージョンアップしてみようと思い立って、コツコツとロジックを改修したりして、結構いい感じにまとまり新しいバージョンをリリースしています。

everPost – Evernoteをお手軽操作 App
カテゴリ: 仕事効率化
価格: ¥200

ですが、途中には色々と問題があり、大きな問題としてはEvernoteのAPIの帯域制限にかかるようになったことでした。

帯域制限 – Evernote Developers

帯域制限は Evernote API に対して API キーごと、ユーザごと、時間枠ごとに適用されます。つまりサードパーティアプリが個々のユーザに対して特定の 1 時間枠にできる呼び出しが API によって制限されるということです。


APIの帯域制限は基本的に通信したデータ量と問い合わせの回数を監視しているはずなので、両方を減らして負荷を和らげる措置をとっておかなければなりません。

検索のAPIが一番負荷がかかるとのことですので、検索のAPIをそれほど頻繁に使わなければよいのですが、検索がこのアプリのキモでもあります。

ですので、APIに何度もアクセスしないというのは、何度も検索しないことと同じ意味になるので結構キツイです。

そこで、どこまで妥協できるかということを試行錯誤しました。
たくさんデータを要求して情報を得すぎると制限が怖い、反対にあまりに制限しすぎると面白く無い。というバランスの取り方が難しいかったです。
理想は、帯域制限を受けず思う存分検索できる状態を保つことです。
それを指標として、行き着いたのがサムネイルのダウンロードをやめるということです。
これであれば、制限にかかる回数が目に見えて減ったので効果があると思います。

他にも、試したのはノートをキャッシュしてノートのデータをアプリ内に保持しておくという方法です。

この場合、Evernote標準の検索構文を独自に解析して、ほぼ同等の検索結果を出力するという方法を取る必要があります。
テストでいくつか試して、大体はOKかなぁと思えるぐらいまでは実装しました。

これは、機能自体は残しているのですが、アプリの現バージョンでは公開していません。
理由は、解決できない問題があったからです。

同期のAPIを使うアプリ専用に、初回の認証後24時間は帯域制限を大幅に緩和するという機能があります。
これを使ってもノート数によっては、制限がかかることがあります。
結局一度に全てのノートを同期するのは、厳しいと判断しました。

Initial Sync Boost
サードパーティによる連携アプリケーションのうち、全て (あるいはほとんど) のユーザデータをローカルに維持、同期するものは、一番最初の同期の際に帯域制限を超過する可能性が少なくありません (一度に多くのデータを取得する必要があるため)。そこで、このような状況を避けることができるよう、一時的に帯域制限の上限を緩和させる「Initial Sync Boost」と呼ばれるメカニズムが実装されています。この上限の緩和は新規の認証トークンが発行されてから24時間のみ有効です。その期間が過ぎると、帯域制限は通常の状態に戻ることに注意してください。

もしかするとアプローチの仕方がまずかったのかもしれませんが、公式にある擬似コードのアルゴリズムを、ほぼそのまま使っているので見直してもわかりませんでした。

完全同期 – Evernote Developers

このあたりは、時間があるときに再度挑戦します。

と、ダラダラと反省していますが結構真剣に作り直したので、ぜひ使ってみてください!

everPost – Evernoteをお手軽操作 App
カテゴリ: 仕事効率化
価格: ¥200

これからも更新を続けていきますので、Feedlyへの登録をお願いします!

follow us in feedly

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です