読者です 読者をやめる 読者になる 読者になる

ふんわりした生活

本を読んだり仕事でやってみたことなどの日常から、ふんわりと気づきなどを書いていきます

MacならコマンドラインからEvernoteにノート追加しても文字化けしない

なんとかコマンドラインからサクッとノート追加できないものかなーと思ってEvernoteの公式ドキュメントを眺めていたら、Macの項目もWindowsのすぐそばにありました。

見てみると、AppleScriptツールを書くことができるようです。

そういうことで、スクリプトエディタにデビューしてみることになりました。

スクリプトエディタで記述する

AppleScriptMacを自動化するためのスクリプト環境のようです。 公式ドキュメントにもサンプルが載ってます。

Mac - Evernote Developers

こんな感じにすると、ノートを追加することができます。

tell application "Evernote"
    create note title "Note 1" with text "Here is my new text note" notebook notebook1
end tell

わたしも詳しくありませんが、「tell application」から「end tell」がVBAなんかでいう「with object」から「end with」みたいなものでしょうかね。

そして命令も独特で、「create note」の部分がメソッドです。 「title」はタイトル、「with text」はコンテンツ、「notebook」はどのノートブックに追加するか、だそうです。

あまりにも普通の英文に見えて、かなり戸惑いました。

JavaScriptでも書くことはできる

ところで、以前にQiitaで見かけたことのある記事を思い出しました。

qiita.com

JavaScriptならもっととっつきやすいのかな…?と要らぬ好奇心が湧いてきたので、もう一度公式ドキュメントを見てみることにしました。

バージョン 1.11.0 の Evernote for Mac クライアントでは、 AppleScriptのサポートを大幅に拡張しています。

あ、ですよね。

と思いつつも調べてみました。

スクリプトエディタは対象となるアプリをライブラリに登録してやると、サポートされているメソッドのドキュメントを読むことができます(英語ですけど)。

まずはスクリプトエディタの「ウィンドウ」>「ライブラリ」からライブラリダイアログを表示してやります。

f:id:m0t0k1m0t0k1:20151104140047j:plain

次に、表示されたダイアログにEvernoteアプリがなければプラスが書かれたボタンをクリックすることで、ファインダーから選択することができます。

f:id:m0t0k1m0t0k1:20151104140055j:plain

ライブラリに追加されたら、本棚っぽいボタンをクリックするとドキュメントビューア的なウィンドウが表示されます。

f:id:m0t0k1m0t0k1:20151104140101j:plain

ドキュメントはメソッドなどの内容をクリックしていくことで閲覧することができます。

f:id:m0t0k1m0t0k1:20151104140108j:plain

ここで、注目すべきは言語選択ができるプルダウンがあるということです。 ここから「JavaScript」を選択することができます。 やった!

f:id:m0t0k1m0t0k1:20151104140112j:plain

実際に書いてみよう

メソッドの引数にはJSON形式?で渡してやることができます。 ある意味わかりやすいかもしれません。

なにはともあれ、最初はアプリをオブジェクトにします。

var evernote = Application("Evernote");

これでEvernoteの制御をするためのものは変数「evernote」にセットされました。 次はノートを追加します。

そのままのネーミングですが、createNoteメソッドを使います。 タイトルやコンテンツ、それからどのノートブックに追加するかというサンプルを公式ドキュメントから引用してきた内容そのままで書き直してみます。

evernote.createNote({
    title: "Note 1",
    withText: "Here is my new text note",
    notebook: notebook1
});

これでnotebook1というノートブックにノートが追加されます。

Macだと全編UTF-8で統一されているせいか、「withText」に日本語の内容を入れても文字化けしませんでした。

コマンドラインから使いたい

これまたQiitaにあった内容で恐縮ですが、「run」という関数を作ってやることでコマンドラインから引数を与えて実行することができます。

function run(argv){
    var title = argv[0];
    var content = argv[1];
    var evernote = Application("Evernote");
    var res = evernote.createNote({
        withText: argv[1],
        title: argv[0]
    });
    console.log("OK");
}

ちょっと手抜きですが、1つ目の引数にはノートのタイトルを、2つ目の引数にはメモする内容を指定することにしました。

あら?ノートブックを指定するところを省略していますね。 こうするとどうやらデフォルトに指定されているノートブックに登録されるようです。

あとはこれを保存します。 保存メニューから保存すると、「scpt」という拡張子のファイルになります。 今回は「evernote.scpt」という名前で保存しました。

ではコマンドラインからの実行をやってみます。

osascript -l JavaScript evernote.scpt "this is Title" "日本語でも大丈夫です!"

さきほどファイルに保存したスクリプトファイルを実行するには「osascript」というコマンドをつかって実行します。

続く「-l」は「osascript」にどの言語で実行すればいいかを指示するものになります。 これがWindowsとは違って非常に厳密でして、要するに大文字小文字を区別します。 当たり前なんですけどね…

ですから「JavaScript」としてください。

あとはスクリプトファイル名、そしてそれに与える引数ですね。

さきほどのスクリプトで、「argv」というのがありましたが、これがコマンドラインからスクリプトへ渡ってくる引数になります。

「argv[0]」は引数の1番目という意味になります。 なぜゼロ始まりなのかというと、プログラミング言語ではそうしたケースが多いから、としか言いようがありません…

ということで、与える順番を変えてしまうと内容とタイトルが逆になってしまいます。 この辺りは改善の余地があります。

最後に

もうEvernoteにはMacから、OneNoteにはWindowsから、と割り切ったほうが便利なのかもしれませんが、まだ少し未練がありますね…

蛇足ですが、今回はテキストノートを中心にやってきました。 もちろんURLやHTML、ファイル添付もできますのでご安心ください(?)。

痒いところまで手を伸ばそうと思うと、作り込まれたツールなりアプリなりをつかったほうがよいのかもしれません。 でもショートカット的に使うことができるのはありがたいですね。

AppleScript: The Definitive Guide: Scripting and Automating Your Mac (Definitive Guides)

AppleScript: The Definitive Guide: Scripting and Automating Your Mac (Definitive Guides)

EVERNOTE「超」仕事術

EVERNOTE「超」仕事術

Evernote スゴ技BOOK

Evernote スゴ技BOOK