10 年以上使っていた Evernote から iCloud のメモに移行した。

概要

最近 (Electron になった v10 以降) の Evernote が重すぎて、単純に起動するのにも待ち時間があり、起動中もあらゆる動作が重くてメモ用途には使うにはストレスを感じることが多く、どこかのタイミングで移行しようと思っていたので、時間を取ってがっつり移行をした。

Evernote が Electron を採用したことも最悪なのだが、M1 Mac が一般に発売されてから 1 年経とうとしているのにも関わらず一向に M1 対応される気配はなく x86_64 バイナリを Rosseta 2 経由で動かさざるをえないのも最悪で、とにかく重たいし、起動しているだけで本体がほんのり熱くなりバッテリをガンガン持っていく。ただのメモアプリとして使っているのにこれは良くない。

Activity Monitor.app で見た図が以下。

バッテリ影響が凄い図

Evernote がとにかく電力食いであることが分かる。ちなみに Docker も結構ひどい。

本家 Evernote も色々と認識をしているらしく、Apple Script で操作したいユーザーなどへの対応だったり、そもそも旧版の全機能を新版ではまだ実装し切っていないという事情もあり Evernote Legacy を配布している始末である。

2011 年の 3 月に登録してからずっと使い続け、2016 年の 6 月終わりからは課金もし続けてきましたが、遂にお別れです。

移行先が iCloud メモでいいのか。

逆説的ではあるが、もはやネイティブアプリをちゃんと作り続けるのは Apple だけという肌感覚があるため、移行先の検討はしなかった。

如何に iCloud メモに体の方を合わせにいくか、というマインドである。

あとは 2010 年の情勢とは違って iCloud がちゃんとしてきたというのもある。

iCloud メモに移行するにあたり、水平線とコードブロックが使えなくなるのがちょっと致命的ではあるが、まぁ無いものはしょうがないので受け入れることにした。

Evernote では --- と入力すれば <hr> の水平線で区切れたし、 ``` で囲えば等幅フォントのコードブロックとして書くことが出来て大変重宝していたのだが…。

Evernote のノートのエクスポートと暗号の復号について。

Evernote のノート類は enex 形式という xml ベースのメタデータ付きファイルにエクスポートすることができて、iCloud メモは enex ファイルを読み込めるので、ある程度メタデータを保ったまま移行することができる。

Evernote ではノートの一部分を選択的に暗号化することができて、秘匿したい情報は隠せるようになっていた。自分はこれを多用していたため大量の情報を復号する必要がでてきた。

復号化するにあたって、数が少なければ Evernote アプリ上で作業してもいいのだが、思ったよりも数があったので機械的やって楽をしたいとググったところ、似たようなことをやっている 先人のコード を見付けた。

動かそうとしたところ Python 2.7 系の環境が必要だったため色々と弄って遊んでいたら この記事 を書くに至ったのだけど、それはいいとして、元の実装が極めて非効率な実装だったので少し改造して こちら にまとめた。

元の実装は正規表現が大味で、文字列を先頭から舐めて最初にヒットした場所を復号し、もう 1 回先頭から舐めて…という挙動で、復号する度に最初から走査し直していた。これでは暗号化されてる箇所が多いと時間が掛かる。書き換えた方の実装では、暗号に該当する箇所を最初に全て列挙して、後ろから平文に置換していくようにしている。手持ちのデータでしか検証していないが、かなり高速化された。

文字列の長さや配列の個数が破壊される操作を回しながら行う場合は、逆順にして後ろから適用していくと壊れないし無駄がないという基本的なテクニックである。

復号したノートのインポートがたまに失敗する。

どうやら Evernote のクライアントの暗号化の実装がその時々で違っていたようで、単純に平文に戻したテキストで置換すると invalid な html になってしまうという問題がいくつかのノートで発生した。

しょうがないので目視で確認したり Evernote アプリ上で復号したのちメタデータを弄って日時などを戻してからリトライするなどする必要があった。

10 年続いてるサービスにデータの整合性を求めるのは厳しいですね。しょうがない。

こういうのを見るとクライアントアプリ作るのはかなり厳しい仕事になる思われる。中の人は頑張って欲しい。

HTML っぽい文字列が含まれるノートを iCloud メモにインポートするとタグが HTML として解釈されて消える。

見出しの通りで、いくつかのメモが被害を受けた。これは iCloud メモのインポーターの方が悪いのだが、数は多くなかったのとあまり重要なメモではなかったので放置することにした。

人によっては大問題かもしれない。

結局、移行するも全部のノートを目視チェックした。

手元の作業メモとかそういうのが多かったので目視チェックできる程度の数 (600 ちょい) だったとも言える。

データを綺麗に保っておく意識があって良かった。本当に…。

締め

  • Evernote に未来を感じない。
  • iCloud メモの起動の早さとレスポンスの良さが快適。

ということで、作業にかかった労力と一部データの破損を差し引いてもやってよかったかなという感じ。

Electron 製のアプリは極力排除したいが Slack と Discord と Docker Desktop あたりは最後まで残るだろう。とはいえ Slack も Discord も立ち上げ時が一番重くて常時起動時はそこまで重くないことと、何よりも他に代替がないことを加味すればまぁ許容していくしかない。それはそうと Discord はさっさと M1 ネイティブ対応をしてください。こういうの もあるけど微妙そうで手を出してはいない。

Evernote がバッテリ消費に強い影響があるとはいえ、同じく Electron 製で Intel バイナリな Discord の方は Activity Monitor.app で見ていてもバッテリへの影響がそれほど甚大ではないことを考えると、 Evernote の実装がシンプルにダメという可能性は大いにあるとは思う。

ちなみに自分の Mac で動いてるアプリが Electron なのかどうか判別するのに 5GUIs (GitHub) という便利なアプリがあり、M1 対応してるかどうかをチェックできる Silicon という便利なアプリもあって、個人的に愛用してます。

ところで Evernote の年額課金の返金チャレンジは。

返金期限は 課金されてから 60 日まで で、僕の場合は 8/27 くらいには手続きしないといけなかった模様。微妙にオーバーしてて見事に失敗。2022 年 6 月末までは有料ユーザーのままです。残念。