- Evernoteのチェックボックスを使う
- 定期的に同じ形式のノートを作る
こういった使い方をしている人はたくさんいると思います。前者は買い物リスト、後者は日記が定番でしょうか。
チェックボックスを使うだけならEvernoteのエディタでチェックボックスを置くだけでいいですし、同じ形式のノートを作るならDashなどのスにペットアプリを使えば簡単です。
ところがこれらを組み合わせようとすると急に大変になります。毎日チェックボックス付きの日記を書きたい、というような場合です。まあこれは僕の話なんですが。
そもそもチェックボックス付きのスニペットというのは作ることができません。Evernoteのチェックボックスをテキストエディターにコピーすると[]
となりますが、その逆は成り立たないのでテキスト貼り付けでチェックボックスを置くことはできないのです。
「テンプレート用のノートを一個作っておいてそれをコピーして毎日使えばいいじゃん」と思うのがほとんどの人ですが、極度の効率厨である僕にとってはそんなことやってられません。コマンド一発でその日の日付入りのノートを作って欲しいのです。
前置きが長くなりました。結論を言えば、enmlとAutomatorとAppleScriptを使います。
enmlってなに?
Evernoteのノートエクスポート機能を使うとXML形式で出力されるはずです。
例えばこんなノート。
エクスポートするとこのように出力されます。これがenmlで、チェックボックスなどのEvernote独自の要素もタグを使って表現できています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export3.dtd">
<en-export export-date="20140218T010326Z" application="Evernote" version="Evernote Mac 5.5.0 (402474)">
<note><title>タイトルタイトル</title><content><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<b>太字<br/></b>
<div><br/>
<div><en-todo/>ほげ
<div><en-todo/>ふが<br/></div>
<div><en-todo/>foo<br/></div>
<div><en-todo/>bar<br/></div>
<div><br/></div>
</div>
</div>
</en-note>
]]></content><created>20140218T010211Z</created><updated>20140218T010237Z</updated><note-attributes><author>author</author><reminder-order>0</reminder-order></note-attributes></note>
</en-export>☄
Automatorの全体の流れ
この2つのアクションを使います。
- シェルスクリプトを実行
- AppleScriptを実行
シェルスクリプトを実行でノートのタイトルに使う日付の文字列、ノートの本文にするenml形式の文字列を出力し、AppleScriptを実行でEvernoteにノートを作るという流れです。
AppleScriptでEvernoteにノートを作る
まずは後半のノートを作るところから紹介します。コードの全体はこれ
on run {input, parameters}
set ttl to item 1 of input
set body to item 2 of input
tell application "Evernote"
set notebook1 to notebook "notebookname"
set note1 to create note title ttl with enml body notebook notebook1
open note window with note1
end tell
end run
順番に解説していきます。
最初の2行で標準入力の1行目と2行目をttl(タイトル)
とbody(本文)
に割り当てています。title
がEvernote側で使われているので苦肉の策でttl
としています。
set ttl to item 1 of input
set body to item 2 of input
次のブロックでEvernoteに対して命令を行うということを示しています。ブロック内に書いたコードはEvernoteに対して実行されます。
tell application "Evernote"
end tell☄
実際にノートを作るところ。ノートブックを指定し、ttl
とbody
を持つノートを作ります。最後に作ったノートを開いておしまい。
set notebook1 to notebook "notebookname"
set note1 to create note title ttl with enml body notebook notebook1
open note window with note1
本文と日付を出力するスクリプト
AppleScriptに渡すタイトルと本文を出力スクリプトを書きます。なんでもいいですが、ぼくは慣れているのでRubyを使いました。本文には先ほど紹介したenmlの<en-note></en-note>
タグの内部の文字列を使います。
やっていることは日付の文字列生成・出力と本文の出力です。本文は本当は外部ファイルとかにしたほうがいいですね。
wdays = ["日", "月", "火", "水", "木", "金", "土"]
day = Time.now
wday = wdays[day.wday]
date_string = day.strftime("%Y/%m/%d(#{wday})")
body = <<-EOS
<b>太字<br/></b><div><br/><div><en-todo/>ほげ<div><en-todo/>ふが<br/></div><div><en-todo/>foo<br/></div><div><en-todo/>bar<br/></div><div><br/></div></div></div>
EOS
puts "#{date_string}の日記"
puts body
このスクリプトをAutomatorの1つ目のアクション、シェルスクリプトを実行
で実行します。
シェルを/usr/bin/ruby
にして直接書いてもいいし、/bin/sh
にしておいて/path/to/ruby /path/to/script.rb
などとしてあげても大丈夫です。
仕上げ:アプリケーションにする
Automatorで作ったワークフローをアプリケーション形式に変換し、アプリケーションディレクトリに置いておきましょう。そうするとSpotlightなりAlfredなりでコマンド一発で起動でき、Evernote新規作成されたノートのウィンドウが開いてすぐに書き始められます。
さいごにコメント
AppleScript書いたけど相当だるいです。アプリケーションを操作するためには使わざるを得ないんだけど、別の手段も用意されていると嬉しい。URLスキームでいろいろできるとかね。