Evernote

nvALTのノートをGeeknoteでEvernoteに保存するAlfred Workflow

からの続編。もともとはこれがやりたかった。

スクリーンショット

AppleScriptは以下。

(2014-11-29修正)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
property nvNoteFolder : "~/Dropbox/Notes/" -- include trailing slash
property nvNoteExtension : ".txt" -- include leading dot
-----------------------------
on alfred_script(q)
-- ファイルパスを取得
set nvNoteFolder to do shell script "echo " & nvNoteFolder ----フォルダパスをチルダ展開
set f to false
if application "nvALT" is running then -- nvALTが起動中かどうか
else -- 起動中でない場合
launch application "nvALT" -- 起動
repeat -- 検索フィールドが存在するかチェック
tell application "System Events" to exists text field 1 of group 1 of toolbar 1 of window 1 of application process "nvALT"
if result is true then exit repeat
delay 0.5
end repeat
end if
tell application "System Events" to tell process "nvALT"
set p to value of text field 1 of group 1 of toolbar 1 of window 1 -- 検索フィールドの内容を取得
set p to replaceText(p, "/", ":") of me -- /を:に置換
try -- 指定フォルダ、指定拡張子に基づきファイル取得試行
set f to POSIX file (nvNoteFolder & p & nvNoteExtension) as alias
end try
if f is false then -- 失敗した場合
try -- 指定拡張子の代わりに.txtを付けてみる
set f to POSIX file (nvNoteFolder & p & ".txt") as alias
end try
end if
if f is false then -- また失敗した場合、ダイアログを出す
set _res to display dialog nvNoteFolder & p & nvNoteExtension & "を開けません" buttons {"OK"}
return
end if
end tell
-- Geeknoteでポスト
if f is not false then
set pFile to POSIX path of f
set pFile to quoted form of pFile
tell application "iTerm"
tell the first terminal
-- iTermで新規セッションを開く
launch session "Default Session"
tell the last session
-- GeeknoteでEvernoteに保存
write text "gn " & pFile & " && rm " & pFile & " && logout"
end tell
end tell
end tell
end if
-- nvALTをアクティベート
tell application "nvALT"
activate
end tell
end alfred_script
-- 任意のデータから特定の文字列を置換
on replaceText(origData, origText, repText)
set curDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to {origText}
set origData to text items of origData
set AppleScript's text item delimiters to {repText}
set origData to origData as text
set AppleScript's text item delimiters to curDelim
return origData
end replaceText

Geeknoteに投げる部分をdo shell scriptでやると、Input stream is emptyとか言われて詰みます。

やむなく、iTerm2をAppleScriptで操作する形にしました。

シェルスクリプトを全部AppleScript内に書くと気が狂うので、.bashrcに以下のシェル関数を記述しておきます。

1
2
3
4
5
6
gn () {
file=${1##*/} #フルパスをファイル名に変換
name=${file%.*} #ファイル名から拡張子を除く
cont=`cat "$1"` #ファイル内容を取得
geeknote create --title "$name" --content "$cont" #GeeknoteでEvernoteに保存
}

余計なセッションが開くのが気に食わないですが、自動で閉じるのでまあ許そう。

これで、キーワード一発でnvALTのノートを(HTML変換して!)Evernoteに保存することができます。

ターミナルでMarkdownファイルをEvernoteにHTML変換して保存する

Bywordから保存したりするのがクソ面倒なので。

MacBook Airのストレージがかなしいので、公式クライアントは使いません。

1.Pandocを利用してメールで投稿するシェル関数

Pandocを絡めて、HTMLメールのデータを標準出力し、それを直接sendmailにパイプしています。タイトルは、bashの変数展開でファイル名から拡張子を削除したものです。

Markdownを変換してHTMLを出力できるなら、別にPandocじゃなくてもいいです。

1
2
3
4
5
m2e () {
to=(Evernote投稿アドレス)
pandoc -f markdown -t html "$1" | (echo "To: $to"; echo "Subject: ${1%%.*}"; echo 'Mime-Version: 1.0'; echo 'Content-Type: text/html'; xargs echo ) | /usr/sbin/sendmail -t
rm "$1"
}

m2e hoge.txtという感じで、Markdownファイル(拡張子問わず)を渡すとメールでEvernoteに保存し、元ファイルは削除します。

ぶっちゃけタイトルの文字化けとか全然解決してないけど、とりあえず作動確認。

2.Geeknoteを使う

Geeknoteはターミナルから利用できるスゴイEvernoteクライアントです。恐ろしいことに、Markdownパーサを内蔵しており、そのままMarkdownで書けます。

(ただし、Markdown構文チェックがかなり辛辣で、ちょっとでも気に食わないとプレーンテキストで保存してくれます。特にリスト前後の改行を忘れないようにしましょう。)

普通にVim等のエディタから本文を作成することもできますが、今回は既存のMarkdownファイルを投稿します。

Geeknoteのセットアップは完了しているものとして。

1
geeknote create --title "Geeknote cat test" --content "`cat hoge.md`"

こんな具合で普通に保存できます。

タイトル入力を省略するためにシェル関数化。

1
2
3
4
5
6
gn () {
file=${1##*/}
name=${file%.*}
cont=`cat "$1"`
geeknote create --title "$name" --content "$cont"
}

こっちのほうが断然楽ですね。文字化け問題も、私の環境では起こりませんでした。

Geeknote最強!

MacBook AirでEvernoteクライアントを活用するためのサブアカウント

貧ストレージのPCでもEvernoteクライアントを使いたい

MacBook Airのようなストレージの小さい端末でEvernoteクライアントを利用すると、すべてのデータがダウンロードされるため、ストレージが圧迫されることがあります。

「閲覧」に関してはブラウザからでもそれなりにこなせるのですが、「アップロード」に関しては、クライアントを通さないと選択肢が非常に少なくなります。よくあるEvernoteハック的なテクニックも、多くはクライアントがインストールされていることを前提としたものです。

かといって、現状では「アップロードはするがダウンロードはしない」という選択肢はありません。では、十分なストレージ容量がない場合、クライアントを利用することはできないのでしょうか。

貧ストレージ用のサブアカウントを作成する

このような場合、サブアカウントを作成することで、不必要なまでにローカルストレージを圧迫せずにクライアントを利用することができます。

しかし、当然メインのアカウントには追加されないため、このままではせっかく同期したデータも十分に活用することができません。

クライアントで複数のアカウントを利用

PC用Evernoteや、いくつかのモバイル向けサードパーティ製クライアントでは、アカウントの切り替え機能を実装しています。母艦PCがある場合、そちらで両方のアカウントを登録しておけば、MacBook Airから同期したコンテンツも閲覧・編集することができます。

また、無料アカウントでは切り替えのたびにサインインが必要ですが、プレミアムアカウントなら省略することができます。

プレミアムアカウントの共有ノートブックを利用する

さらに、プレミアムアカウントの場合、共有ノートブックを利用することでさらにシームレスに複数のアカウントを利用できます。

あるアカウントで共有ノートブックを作成した場合、作成者アカウントが無料の場合は、共有先のアカウントは閲覧しかできません。しかし、作成者アカウントがプレミアムの場合、共有先アカウントでも編集することができます。

そのため、メインアカウントをプレミアムにし、作成した共有ノートブックをサブアカウントに共有することで、アカウントを切り替えることなく、メインアカウントから全てのコンテンツを扱うことができます。

ぼくたちにはEvernote Cloudが足りない

クラウドストレージとローカル容量

ムーアの法則にどこまで従っているか知りませんが、パソコンのハードディスク容量はガンガン増え、価格も下がっています。「母艦」的なデスクトップ端末で容量不足に悩むことは、ひところに比べればかなり少なくなっているといえるでしょう。

一方、MacBook Airのヒット以来、ゼロスピンドル型のいわゆるウルトラブックが主流のひとつとなり、モバイルPCのストレージ容量はむしろ少なくなっています。

さらに、クラウドストレージサービスの普及により、「母艦」のデータにモバイルからアクセスすることも容易になりました。

結果として、クラウドストレージによって同期されたファイルによって、ローカルのストレージ容量が圧迫される事態が、一般的に起こるようになっています。

「全てを記憶する」Evernote

Evernoteもまた、ある種のクラウドストレージサービスと解釈することができます。

Evernoteは、月ごとの転送制限こそあれど、そのストレージ容量は無限です。基本的にはテキスト文書の保存に適したサービスとはいえ、「倉庫」的な運用も多いに考えられます。
例えば、画像ファイルをホスティングするサービスは多数ありますが、これらのサービスでは画像をひとまとめにしたり、目的の画像を検索することが困難です。Evernoteの高い検索能力を考えれば、このような使用方法は非常に有用であるといえます。

特にプレミアムユーザーの場合、端末のローカルストレージ容量を遥かに超えるデータがEvernoteに保存されていることも少なくないでしょう。個々の端末においては、「全てを記憶する」ことが不可能になるわけです。

クラウド利用に対応しない公式クライアント

しかし、EvernoteのWindows/Macクライアントにおいては、ローカルに保存しないオプションが存在しません。逆に、クラウドに同期しないローカルノートブックを設定することはできるのですが。

iOSクライアントでは、特別にキャッシュするよう設定したファイルを除き、データはローカルに保持されません。ケータイなら当然という見方もありますが、今時、ケータイ以下のストレージしか持たない「パソコン」は少なくありません。

モバイル端末向けにはサードパーティ製のクライアントアプリも多数あるのですが、このような需要に対応した、ローカルストレージへの同期を前提としないPC向けクライアントは(そもそもサードパーティ製クライアント自体が)非常に少なく、機能もあまりに限定的です。

Evernoteにはブラウザからもアクセスできるので、このような場合、クライアントを利用せずに済ませることもできますが、そうすると、クライアント経由のアップロードができなくなります。ウェブクリップを除けば、クライアントなしで簡便にコンテンツをアップロードする方法はメールのみです。

だから、ぼくたちにはEvernote Cloudが足りない

要するに、クラウドノートブック設定できろということです。

プレミアムユーザー限定でもいいので、なんとかならんものでしょうか。

“Evernote for Mac”がインストールされてないMacからEvernoteにメモするにはIFTTTでよかった

(はてなブログからの移行記事です。正常に表示されていない場合、ご連絡いただけると助かります。)


ver. 2.2 - 無料( 仕事効率化 )
IFTTT

いちいちWeb版にアクセスするのかったるいなーと思ってたんですよ。かといって、世の中の大半のハックはクライアント必須だし。MacBook Airにクライアントなんか入れられますかっての、ストレージ破裂しますわ。

というわけで考えていたら、以下のレシピを思いっきり再発明してしまいましたわい。

というわけで簡単に利用方法まとめ。

  1. OS X 17.2以降のMacでGoogleアカウントにログイン(Mavericksだと、「システム環境設定→インターネットアカウント→+」)
  2. メモにチェック
  3. IFTTTでGmail/Evernoteチャンネルをアクティベート
  4. 上記レシピを有効化
  5. 普通にメモに書く

以上です。iOSのメモをGoogleに同期していれば、同様に利用できます。

仕組みとしては、Gmailに同期されたメモに「Notes」というラベルが付くのを利用して、「Notes」ラベルを検出するとEvernoteに渡しているだけですね。レシピを改変すれば、特定のノートブック名/タグを与えることも可能です。

もうちょっと工夫するなら、Notebook/tagにSubjectを入れておくと、メモの1行目(GmailにおけるSubject)を利用してノートブック名/タグを与えることができますね。

注意点

なお、以下の点には注意が必要です。見ようによっては便利な点でもありますが、

  • Evernoteに保存されたメモはそのまま残る
  • 残ったメモを編集すると新規ノートとして保存される

恐らく、メモの同期時に、Gmail側では削除+新規作成する仕組みになっているのでしょう。まあ、メールデータですからね。

同じ題名のノートは追記されるようにしたいが……

Appendはどうやら、ノート名に日本語があると発動しない(新しくノートを作成してしまう)ので、ここはハマらないよう注意してほしい。

PocketをEvernoteに保存する時には、ノートを1つにまとめることにした。 | 歩けば僕の足跡

というわけで、日本語タイトルだとできませんでした。クソが!

テキストからタイトル、ノートブック名、タグを抽出してEvernoteに保存するTextwellアクション「EvernoteCreate」を作りました

(はてなブログからの移行記事です。正常に表示されていない場合、ご連絡いただけると助かります。)


ver. 1.2.4 - ¥300( 仕事効率化 )
Sociomedia

いや、結局EvernoteSaveの改造ですけども。

アレですね、ブログずーっと書いてなくて最近再開しましたが、過去ログがないと記事の文脈が全然見えないですね。なんの役に立つのかとか。

とりあえずインポート用リンクとソース

インポート用リンク: <http://tinyurl.com/k5jo2cg≥

T( ‘evernote’, {
// 1行目がタイトル
title: T.line(1),
// 4行目以降が本文
body: T.lines(4),
// 2行目がノートブック名、3行目がタグ
notebook: T.line(2),
tags: T.line(3),
direct: true,
// Evernoteに保存したら全文をクリア
option: ‘clearAll’
} );

使い方

1行目をタイトル、2行目をノートブック名、3行目をタグとして、4行目以降をEvernoteに保存します。

実行後は全文クリアします。

ノートブック、タグの新規作成が可能です。うっかり2行目から本文を始めるとわけわかんないノートブックとタグが生成されます(既にやらかした)。

2、3行目を空にした場合、それぞれ自動的に「デフォルトノートブック」「タグなし」で保存されます。

Markdown Preview等で取得したHTMLソースを保存しても、リッチテキストにはなりません。

Evernoteにサクっと投稿するiOSアプリは多数ありますが、ノートブックが固定だったり、タップ操作での既存タグ選択しかできないものが少なくありません。以下のようなお悩みをお持ちの方は、ぜひこのアクションをご利用ください。

  • ノートブック、タグが多すぎて選ぶのがタルい
  • まだEvernote使い始めで、じゃんじゃん新規ノートブック、タグを作成したい
  • 既存のテキストデータからノートブック名、タグを抽出したい