◆ 文字ならある程度なんとかなる
◆ 画像などは基本的にできない

記事のネタを Evernote で管理してることが多いのですが 気づかないうちに消えていていました
同期した時に自動でリロードしてくれないのもありますし 間違って消してしまうと 無料で使ってる場合は基本復活できないので危ないです

自動リロードしない問題

どこかでも書いたような気がしますけど Evernote を複数台の PC で使ってる時に起きる問題です

Evernote のソフトで開いてる状態のノートを別の PC で更新したとします
同期されても開いてるノートの自動リロードはされないので 変更があったことを気づかずに変更して同期すると 別の PC での変更はなかったものとして保存されます
「競合する変更」にもでてきません

最近はブログネタのノートくらいしか使ってないので 1 つのノートを開いたままで別の PC でも変更することがよくあるのですが 手動リロードはよく忘れるのでかなり困りものです

CTRL-Z が使える時

自動リロードしない以外では ノートのテキストや添付を間違って消してしまうこともあります
フォーカスがある場所を勘違いしてキーボードを打ったら変更したくないノートにフォーカスがあってた なんてないとは言い切れないです

すぐに気付けば CTRL-Z の「元に戻す」で戻せます

ですが 別のノートに切り替えたりするともう使えなくなるので 時間が立ってから気づくとアウトです

プレミアムならなんとかなる

ちょっとしたミスで復元で来ない上に 書き込み禁止という機能はないです
読み取り専用権限で共有して別アカウントから見るという裏ワザを使えば出来はなくはないですけど

明らかに使いづらい仕様ですが 内部ではバージョン管理されていて 昔のバージョンに戻すことができるんです

ですが プレミアム(有料会員)しか使えません

せっかく書いたものがちょっとしたミスで消えるかもしれなくて 復元したければ有料会員になれって 金払えアピールがちょっと汚いです

扱いづらい中途半端な HTML での保存ですし スペースが消えたりコード書くのに向いていなかったりなので 別のものに移ろうかを考えるくらいなのですが 今はなんとか復旧したいんです

データベースの場所

バージョン情報がローカルにも残ってないかとデータの保存場所を見てみます
場所はここです

C:\Users\USERNAME\AppData\Local\Evernote\Evernote\Databases

ここの Attachment フォルダに添付ファイルが入ってます
ただし 一度 Evernote にある状態で開いたものに限ります

ノートの途中にある添付っぽいものをダブルクリックで開いてれば OK です
開いてないとここに一時ファイルが保存されてないようです

SQLite3

他のファイルを見ると exb ファイルが並んでます

使えそうなデータは .exb と .exb.snippets の 2 つくらいです
バイナリデータですが 無理矢理エディタで開いて Evernote に保存してる文字を検索すればヒットすると思います

exb のほうは SQLite3 なので適当にビュワーを持ってくればみることができます
ですが 肝心のメッセージや添付ファイルはビュワーではみつからなかったです
バイナリデータとして保持されてるようです
ところどころ ビュワーを変えてもエラーがでるところがあるので SQLite 互換だけど特殊なフォーマットで SQLite のデータベースとしては見えない領域にそういうデータがあるというのもありえそうです

テキスト

exb ファイルの中に上書きや削除したはずのテキストも残っていました
全部と言えるかわかりませんが 消してしまったテキストの一部分を思い出して検索して 削除前のテキストが見つかれば ヒットしたところの周りを手動で切り出すことで対応できそうです

添付ファイル

画像などの添付ファイルが今回一番の目的です
結果から言うと 消したものは無理そうです

ファイル名だけ残っていたりはしたのですが 肝心のデータ本体はのこってなさそうでした
添付ファイルだと数十 MB や数百 MB ってこともありえますし わざわざ残さないのは仕方ないです

バイナリデータ

一応 今も保存されてるデータはどうなのかが気になってバイナリエディタ当たりで色々とやってみました

Evernote へ画像ファイルをコピペして保存すると PNG として保存されてるようです
データベースファイルから PNG ファイルのヘッダーを検索すると色々ヒットしたので ファイルを抽出できそうです

JavaScript で抽出

昔使っていた バイナリファイルから画像などのメディアファイルを抽出してくれるソフトを探したのですが見当たらなかったので JavaScript で自力でやりました
バイナリ処理が JavaScript で出来無いと思ったら大間違いですよ!

と言っても ファイルの開始部分と終端部分の決まっている固定のデータだけを目印に取り出すので
  • 画像ファイル外で PNG ファイルの開始データと同じデータがある
  • 画像ファイル内で PNG ファイルの終端データと同じデータがある

ということが起きると ちゃんと切り出せないです

結果

途中で切れていたり 最初の少しは普通なのですがそれ以外の9割近くがノイズだらけだったりと ちゃんと取り出せていないです

動作確認では PNG ファイルそのものや
cat * > merged
で作った PNG が複数入ったバイナリデータからの切り出しで問題なく切り出せてました

なので原因は Evernote の保存方法の問題のように思えます
昔のパソコン出してきたら入っていた画像ファイル抽出ソフトでも同じ結果だったので 上で書いたようなたまたま開始や終了と目印のデータを被ったのが原因ではなさそうです

まとめ

間違って消してしまって Ctrl-Z で復元できない状態になった場合は 文字だとなんとかなることもありますが 添付ファイルだと諦めるしかなさそうです
消してしまったのが とても重要なファイルなら一時的に有料会員なって復元するという手もあります

Database が置かれてるフォルダを最近の 30 日くらいバックアップとっておくのもありかもです

おまけ

PNG抽出

JavaScript で作った バイナリデータから PNG ファイルをとり出すやつです
ブラウザでできるところが便利です

exe ファイルを入れるとアイコンが取り出せるものもあります 

pngrip-sample