Evernoteのノートリンクが仕様変更で使い物にならないので何とかしようとした
まとめ
- Evernoteのノートリンクの仕様が変わって使い物にならなくなった
- 前の仕様でも動くので変換スクリプトを書いた
- ただし、Macではスクリプトの実行方法で問題あり
Evernoteのノートリンク仕様の変更
Evernoteでは図のように、「ノートリンクをコピー」で特定のノートに一対一対応するURIを取れます。
この機能でコピーされるのは、これまでは evernote:///という独自スキームが使われていました。
そのため、開こうとするとEvernoteアプリが立ち上がり、対応するノートを開いてくれていました。
AndroidやiPhoneでもEvernoteアプリをインストールしてあれば、
同じようにアプリでノートを開いてくれるため、とても便利でした。
しかし、最近の変更により、https://www.evernote.com/ へのリンクに変わってしまい、
ブラウザが起動してノートがEvernoteのサイト上で表示され、
そこからさらにEvernoteのアプリが開くという挙動になりました。
これにより、モバイル端末などではEvernoteへの通信時間が余計にかかるようになったうえに、
オフライン状態ではノートを開くことができなくなってしまいました。
正直使い物にならないレベルになってしまったのですが、
幸いなことにevernote:///スキームは未だ有効です。
また、必要な情報はどちらにも含まれているため、URIの変換スクリプトを書くことで対応可能です。
リンク置換スクリプトの作成
ノートリンクの仕様
以下は予想であり、正確なものではありません
Evernoteのhttpsリンクは以下のようになっています。
https://www.evernote.com/shard/s2/nl/ユーザ固有の文字列/ノート固有の文字列/
対して、evernote:///スキームは以下のようになっています。
evernote:///view/ユーザ固有の文字列/s2/ノート固有の文字列/ノート固有の文字列/
(ノート固有の文字列は二回とも同じ値になります)
どちらもユーザ固有の文字列とノート固有の文字列は含まれているため、相互に変換可能です。
Windowsならクリップボードの置換ソフトはたくさんあるのですが、
Macでは残念ながらまともな物はありませんでした。
一応、ClipMenuは正規表現で置換ができますが、
それを実行するまでにかなりキーストロークが必要なため、見送りました。
理想は自動置換、最低でもスクリプトを簡単に実行できるのが最低条件です。
リンク置換スクリプト
結局、クリップボードのURLをevernote:///に変換するスクリプトを作りました。
事前にclipboard gemをインストールしておく必要があります。
#!/bin/bash
pushd $(dirname $0)
bundle exec ruby -e "
require 'clipboard'
url = Clipboard.paste
r = Regexp.new(\"https://www.evernote.com/shard/s2/nl/([0-9]*)/(.*)/\")
result = r.match url
if result
new_url = \"evernote:///view/#{result[1]}/s2/#{result[2]}/#{result[2]}/\"
p new_url
Clipboard.copy new_url
end
"
popd
これをevernote.commandという名前で保存して、
Alfredなどから実行すればいける!!と思ったのですが、
実行すると新たなターミナルが起動してスクリプトが実行され、
終了後にターミナルがそのまま残るという状態になってしまいました。
毎回ターミナルを消すのは面倒すぎるので、とりあえずこの手法の採用は見送ることにします。