AlternoteでEvernoteに保存したMarkdownを,Markedでプレビューするやつを作った話.

概要

軽量EvernoteクライアントであるAlternoteを使ってMarkdownでメモをとり,
それをMarkdownビューワであるMarkedでプレビューするものを作った.

これは,設定さえしておけば,いつものメモ動作にHotkeyを一発加えるだけで実行できる.
また,最終的にEvernoteにデータが保持されるのであれば,エディタはなんでも良い.
以下の図のような感じでプレビューできる.右の黒いアプリがAlternoteで,左側のMarkdownビューワがMarkedである.

f:id:concre_shiitake:20150726170959p:plain

Markdownが好きだ

Markdownはいい感じだ.
メモをMarkdownで取ると,構造化されたメモがわりと簡単に取りやすい.
だからみんなMarkdownのこと結構好きだと思う. そんなこともあってオンラインストレージを使ったMarkdownメモツールというのがいくつかあって,ぼくもこれまで色々試してきた.

例えば,Vim用にはEverVimがあったり,
ブラウザから利用可能なwri.peがあったり,
MaciPhone用のアプリではDayOneがあったりする.

github.com

wri.pe

dayoneapp.com

と,色々試してきたし,どれも好きだったんだけどメモがとりにくかったり,シンタックスハイライトが微妙だったり,見返しづらかったりして結局定着しなかった(個人の感想です.)

で,最近はAlternoteというMac用の軽量Evernoteクライアントを使っていた.
Evernote,クライアントは重いしメモとるのめんどくさかったりと個人的にはだいぶ好きじゃないんだけど,Alternoteはそのへんがけっこうよかった.
ただ,EvernoteはなぜかMarkdownに対応してないので,そこをどうにかする必要があった.

Evernoteに書いたMarkdownをプレビューしてきた先人たち

まあこれは色々いらっしゃる.
個人的には,MacでMarkdown書くときは,Vimで書いてvim-quickrunでMarkedを呼び出してプレビューしていたので, 同じようにMarkedを使っている人を探した.

以下の方はEvernoteで最も最近更新されたメモをMarkedで表示するシェルスクリプトを書かれている.
ただEvernoteがバージョンアップしてディレクトリ構造が変わったのでこのスクリプトはもう動かなかった.

turubee.hatenablog.com

今回作ったものを利用する流れ

というわけで,先人のプログラムをForkして,以下のような流れで動くようにした.
今回新たに作成したプログラムは以下の2つ.

  • Evernote更新取得アプリ

    • Evernoteを開いて同期を行い,他のエディタで行ったEvernoterメモへの変更をクラウドからローカルに取り込むプログラム
  • Evernote更新検知アプリ

    • ローカルに保存されているEvernoteデータの更新を検知して,プレビューアプリを起動するプログラム

これらを利用する流れは以下のようになる.

  1. Evernote更新検知アプリを起動しておく.
  2. Alternoteでメモを書いて保存・同期する.
  3. Hotkeyを叩いて,Evernote更新取得アプリを起動.
  4. Evernote更新検知アプリが更新を検知して,Markedでプレビュー.

つまり,人が行う動作としては,

  1. Evernoteの更新を検知するアプリの起動(初回のみ)
  2. Alternoteでメモを書く
  3. 保存
  4. Hotkey押下

のみであり,これまでのメモ動作にHotkeyを加える形になる.
すると,以下の図のような感じでMarkedでプレビューが実行される.

f:id:concre_shiitake:20150726170959p:plain

プログラムの作成

Evernote更新検知アプリ

シェルスクリプトAutomatorを使ってアプリに固めたものを利用する.

turuさんのシェルスクリプトを基に最新版のEvernoteに対応させたプログラムを保存しておく.ID(ユーザ名ではなく数字7桁のID)は自分の環境に合わせたものをシェルスクリプトに記述する.
保存したら,Automatorを開き,アプリケーションの作成を選択.
以下の図のようにシェルスクリプトを登録しておく.ディレクトリは各自の環境に合わせて変更して欲しい.
あとは保存の際に保存形式をアプリケーション(.app)にして,/Applicationディレクトリとかに入れておく.デフォルトだと裏で動き続けるプログラムなので,ログイン時に起動させたり,Alternote起動させるときにいっしょに起動するなどして欲しい.

f:id:concre_shiitake:20150726173224p:plain

Evernote更新取得アプリ

Hotkeyで呼び出すプログラムを,サービスとしてAutomatorで作る.

EvernoteクライアントはAppleScirptをサポートしているので,以下のAppleScriptEvernoteの同期を実行することができる.

on run {input, parameters}
        tell application "Evernote"
    
            synchronize
    
            repeat until isSynchronizing is false
            end repeat
        end tell
    return input
end run

このスクリプトを組み込んだ以下の図のようなAutomatorサービスを作成し保存する.これは,Evernoteを起動し,同期を実行したらAlternoteを起動する,というプログラム.

f:id:concre_shiitake:20150726173442p:plain

サービスを保存したら,Macのシステム環境設定から,ショートカットキーで作成したサービスを呼び出すように,以下のように設定する.
(名前は自由に設定すれば良い.ここではAlternote_viewerという名前をつけていた.) Hotkeyは好みなので自由に変えて良い.

f:id:concre_shiitake:20150726173456p:plain

補足

今回,AlternoteをEvernoteエディタとして利用しているが,ここはVimでもEmacsでも,公式Evernoteクライアントでもなんでもいい.
(でもVimとかだったらquickrunからMarked呼び出したほうがラク)

公式クライアントを使う場合は Evernote更新検知アプリのみが必要になり,Evernote更新取得アプリは必要ない.

iPhoneについて

個人的にはiPhoneみたいなスマホでmarkdownをプレビューする必要はあんまりないと思ってる.
それよりも,markdownを使って出先でサクッとメモをとって,家のMacで読み返すっていう使い方をしてる.
ただ,iPhone向けのEvernoteクライアントはなんかしっくりくるのが見つかってないので,このへんもなんか考えたい.