nvALT

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に保存することができます。

nvALTのノートを任意のアプリで開きたい

上記の続編的な。

nvALTはテキストの集積場所であり、一種のハブと言えます。メモを正式な文書に書き起こしたり、Evernoteに投げたりとかで、ノートを他のアプリで開きたいときがままあります。

そこで、「Note > Edit With」で他のアプリから開いたりするわけですが、アプリを一覧から選ぶのが面倒くさい。

そこで、AppleScriptで解決したかったのですが……

nvALTはAppleScriptに対応していない

FoldingTextの場合、AppleScriptに対応しているのであっさり解決したのですが、nvALTはAppleScriptで「開いているファイル」を取得したりすることができません。

どうしたものかと思っていたところ、Markedに関連して配布されているAppleScriptで、「nvALTのノートをMarkedで開く」ということが実現されていました。

tell application "System Events"で検索フィールドのテキストを取得し、ユーザで定義した保存フォルダと拡張子を付加するという、なかなか涙ぐましい有り様です。

これを参考に、任意のアプリケーションで開くAlfred Workflowを組んでみました。

やってみた

スクリーンショット

Script Filter

こちらはFoldingTextのものと同じ。アプリケーションをインクリメンタルサーチします。

(2014-11-23修正)

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
q="{query}"
cd /Applications
# 省略表記
case "$q" in
st) q="Sublime Text" ;;
ft) q="FoldingText" ;;
as) q="AppleScript Editor" ;;
esac
while read App; do Apps+=("$App"); done < <(ls /Applications)
while read App; do Apps+=("$App"); done < <(ls /Applications/Utilities)
cat << EOB
<?xml version="1.0"?>
<items>
EOB
IFS=$'\n'
for App in `echo "${Apps[*]}" | sed 's/.app$//' | grep -i "$q"`
do
cat << EOB
<item uid="$App" arg="${App}" valid="YES" >
<title>Open current note in ${App}.app</title>
</item>
EOB
done
echo "</items>"

AppleScript

(2014-11-20修正)

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
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
if f is not false then
tell application q
activate
open f
end tell
end if
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

文字列置換ハンドラは以下を参考にしました。

なお、追加のハンドラをalfred_scriptハンドラ内に記述しないよう注意する必要があります。

nvALTはファイル名に関するエスケープ機能を持っておらず、タイトルにスラッシュを含むノートを、そのまま保存してしまいます。これは、Mac OS Xにより、コロンに置換されるため、対応する必要があります。

これで、任意のアプリでノートを開くことができます。

nvALTと1Writerでハッシュタグを利用する

nvALTのタグ機能

nvALTには、ノートを整理するためのタグ機能があります。

これはなかなか高機能で、Simplenoteと同期している場合にはタグも同期しますし、OpenMeta対応のため、Spotlightでも検索できます。

ところが…肝心のnvALT自体にタグ検索機能がありません。普通に検索したら引っかかりはするのですが、タイトルも本文も一緒くたです。ずーっとそんなワケないだろと思っているのですが、どれだけ調べてもタグ検索の方法が出てこないのです。

それはさすがに意味が分からないので、nvALTからタグだけを検索する方法を考えました。

nvALTでのハッシュタグの利用

といってもなんのことはない、ただのハッシュタグです。#hashtagというやつです。

この形式でタイトルなり本文に書き込んでおけば、容易にタグだけを検索することができます。

ただし、既存のタグをハッシュタグに自動置換することはできないので、すべて手動で書き込む必要がありますが。

1Writerでの利用

ここからが本題。


ver. 1.4.5 - ¥300( 仕事効率化 )
Ngoc Luu

1Writerはハッシュタグをサポートしており、以下のような機能があります。

  • 拡張キーボードからハッシュタグを入力
  • 既存ドキュメント内のハッシュタグを入力補完
  • 文書内のハッシュタグをタップで、そのハッシュタグを含む文書を検索(プレビュー時)

そのため、ノートへのハッシュタグ入力が容易であるのみならず、ハッシュタグの検索も容易に行うことができます。

そこで、iPhoneから簡単にハッシュタグ検索を行う方法を考えてみます。

1WriterでURLスキームを利用したハッシュタグ検索

もちろん普通に検索してもいいのですが、URLスキームから検索できると、用途が広がります。タスク管理アプリにURLを書いておいたりとか。

1WriterのURLスキームは以下のリンクで解説されています。

残念ながら、URLスキームから検索やハッシュタグによる絞り込みを直接実行することはできません。ハッシュタグをロングタップすると以下のようなメッセージが出るのですが、外部からは利用できないようです。

スクリーンショット

そこで、ハッシュタグ一覧を記したファイルを作っておき、以下のようなURLスキームを利用します。

onewriter://x-callback-url/open?path=Notes&name=hashtags.txt

こうすれば、URLスキームでタグ一覧を呼び出した後、ハッシュタグをタップするだけで絞り込みができます。ただし、プレビューモードにする必要があるため、ファイルを開いたときの動作をプレビューにしておくと楽です。

1Writerは積極的な機能追加が行われており、非常に高機能なテキストエディタに仕上がりつつあります。Dropbox連携するテキストエディタというジャンルでは最強候補に挙げていいでしょう。ぜひともお試しあれ。

nvALTへの各種操作を行うAlfred Workflow

URLスキームだけでも充分に便利だが

nvALTにはURLスキームが用意されており、以下のようなURLをブラウザなどで入力すると、nvALTをアクティベートすることができます。

URL 結果
nvalt:// 単純にアクティベート
nvalt://hogehoge nvALTでhogehogeを検索
nvalt://find/hogehoge nvALTでhogehogeを検索
nvalt://make Search or Createフィールドをクリアしてフォーカス

一見findいらねーじゃんと思いますが、これがないと「makeを検索」ができないんですよね。nvalt://find/makemakeを検索できます。

これだけでも充分に便利で、Alfredのカスタムウェブ検索として登録しておくこともできます。しかし、はなから新規ノートを作成したい場合、「検索→作成」とリターン1回余分なのが気になります。

また、単にアクティベートすることもできません。まあ、AlfredからnvALTを起動すればいいだけですが、キーワードを工夫しないと検索結果内で誤爆しがちです。

それじゃ、Alfred Workflowしてみよう。

Alfred Workflow

スクリーンショット

使い方

Alfred入力 結果
nv アクティベート
nv (shift) クリップボードから新規ノート作成
nv {query} 引数から検索
nv {query} (ctrl) 引数から新規ノート作成
nvp クリップボードから新規ノート作成
nvn {query} 引数から新規ノート作成

内容

Alfred Workflowにすることのメリットは、Argument Optional、つまり引数の入力を任意にできることです。そこで、1番目のアクション(シェルスクリプト)は以下のようにします。

1
2
3
4
5
6
q={query}
if [ -z "$q" ]; then
open nvALT://
else
open nvALT://find/$q
fi

引数が空ならnvALT://、それ以外ならnvALT://find/を叩くことで、Alfredテキストをnv makeとすれば、makeの検索もできます。

2番目のアクション(AppleScript)は、引数を元に新規ノートを作成します。

1
2
3
4
5
6
7
8
9
10
on alfred_script(q)
set the clipboard to q
tell application "nvalt"
activate
end tell
delay 2
tell application "System Events"
keystroke "v" using {command down , shift down}
end tell
end alfred_script
  1. 引数をクリップボードに格納
  2. nvALTをアクティベート
  3. ⇧⌘Vでクリップボードから新規ノート作成

3番目のアクション(AppleScript)は、クリップボードから新規ノートを作成します。

1
2
3
4
5
6
7
8
9
on alfred_script(q)
tell application "nvalt"
activate
end tell
delay 2
tell application "System Events"
keystroke "v" using {command down , shift down}
end tell
end alfred_script
  1. nvALTをアクティベート
  2. ⇧⌘Vでクリップボードから新規ノート作成

念のため、個別の起動キーワードも用意しておきました。

追記:AppleScriptじゃなくてよくね?

AppleScriptから新規ノートを作成しようとすると、どうしてもエンター一回押す必要があったり、⌘Vを送るのにウェイトを取る必要があります。

Storage設定がPlain text filesである前提であれば、普通にシェルスクリプトのリダイレクトでファイル作成すればよくね?

というわけで、入力テキストを元に新規ノートを作成するシェルスクリプトはこちら。

1
2
3
4
5
6
7
8
dir=~/Dropbox/Notes
q="{query}"
if [ -z "$q" ]; then
open nvALT://
else
echo "$q" >> $dir/"$q".txt
open nvALT://find/"$q"
fi

クリップボードから作成する場合はこちら。

1
2
3
4
5
dir=~/Dropbox/Notes
q="{query}"
title=`pbpaste | sed -n 1p`
pbpaste >> $dir/"$title".txt
open nvALT://find/"$title"

作成したノートにフォーカスが移らないのが痛しかゆしですが、処理は高速化できます。

追記2(2014-12-21):nvALTが起動してない場合に具合が悪い

nvALTが起動していないときにURLスキーム(nvalt://)を叩くと、ウインドウなしでnvALTが起動してしまうことに気付きました。この場合、アプリケーションを再起動しなければいけません。

よって、全てのbashスクリプトの先頭に、nvALTの起動状態を確認して起動させるスクリプトを追加しました。一例としてはこうです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
osascript << _EOB_
if application "nvALT" is not running then -- nvALTが起動中でない場合
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
_EOB_
q="{query}"
if [ -z "$q" ]; then
open nvALT://
else
open nvALT://find/$q
fi

これで、nvALTの起動を待ってからURLスキームを叩くことができます。

nvALTのURLスキームを利用してAlfredから簡単検索

nvALTにはURLスキームがあった!

早く言えシリーズ。

とにかくどこにもドキュメントがなくて、AlfredのWorkflow漁っててたまたま知ったんですが、あるんです。動くんです。

以下のようなURLを叩くと、nvALTで検索されるんです!

nvalt://find/検索ワード

頭抱えましたよ。それがやりたいがために、これまたクソほどもドキュメンテーションされてないLincastorをいじり回したり、Mac OS XのカスタムURLスキームの作り方を調べたりしてたというのに!

これをブラウザのURL欄なり、Alfredなりに入力してやればnvALTを検索できますし、リンクになっていればクリックするだけでnvALTが立ち上がって検索結果が表示されます。つまり、もちろんMac限定ですが、nvALTにリンクを張ることができるのです!

例えば、WorkFlowyにこの形式のリンクを入力していれば、タスクに関係するnvALTノートを簡単に検索できるわけです。ほんとにもう、早く言えよ!

もっと簡単に検索しよう

このままでも十分便利なのですが、ちと文字数が多いので、AlfredでカスタムWeb検索を作成しました。

URLをnvalt://find/{query}、Keywordをnvとかにすれば、Alfredからnv 検索ワードで検索することができます。

nvALTでは検索フィールドから新規ノートを作成するので、そのままエンターキーを押せばノート作成になります。

はーすっきりした。

タスク管理ツールの使い分け:Toodledo,WorkFlowy,nvALT

タスク管理のやり方を再検討してみた

Toodledoを知って以来、とりあえずタスクを全部Toodledoにぶち込むスタイルでしばらくやってみたのですが、そのうちうまく回らなくなってきました。

最大の問題は、そのうちやるべきだが、それは今すぐでもないし別に期限もないというタスクの扱いです。GTD的には週次レビューとかやってどうにかせいという話なのでしょうが、Toodledoではタスクの全体像が見えにくいので、どこから手を付けたものだかわからなくなるのです。

さらに、調べ物とかアイデアとか、とにかくメモというメモをnvALTにぶち込んだところ、これまた緊急度は低いがちゃんと片付けたほうがハッピーなメモが埋もれるという事態が発生しました。タグで管理すればよさそうですが、nvALTには単体でタグ検索ができないという意味不明な欠点があります。(そんなわけねーだろと思って色々調べましたが、どうも本当にできないようです。全文検索にタグ名が引っかかるだけ)

これはもう運用で解決すべきではないと思い、改めてタスク管理のあり方を見直してみたところ、使用するツールは以下の3つになりました。

  • Toodledo
  • WorkFlowy
  • nvALT

Toodledo:「すぐやること」と「繰り返しやること」

Toodledoの最大の長所は、柔軟な繰り返しルールと、豊富な他ツールとの連携です。

ゴミ出しとか散髪とかソシャゲーのログインとか、定期実行するタスクを管理するには、これ以上の(無料)ツールはありません。また、チェックリスト型のツールであり、登録方法が簡単かつ多様であることから、買い出しなどのすぐ終わるタスクの管理にも適します。

これらのタスクはToodledoに放り込んだ上で、Toodledo自体の通知機能や、Googleカレンダーへの連携などで処理します。

また、ToodledoはRSSフィードを発行できますので、これをIFTTT経由でDropboxのテキストファイルに追記していくことにより、nvALTにも読ませることができます。

運用上は、とにかく毎日リストを空にすること。そして、実行できなかったタスクを必ずリスケジュールすること。そして、それができる範囲でしか登録しないこと。入りきらないものや緊急性の低いものは、WorkFlowyに回します。

WorkFlowy:「そのうちやること」と「ちょっとずつやること」

WorkFlowyはタスク管理寄りのアウトラインプロセッサです。デスクトップ端末とiPhoneでスムーズに連動でき、ズームインする動きが素晴らしく、巨大なツリーを快適に管理できます。

これは、緊急度の低い大量のタスクを管理するには、明らかにToodledoより適しています。目的ごとにブランチを作成してタスクを記述していき、全体像を把握しながら取り組んでいくことができます。アウトラインプロセッサですから、取り組む順番の表現も容易です。

また、タグ機能を活用することで、さらにタスクの絞り込みが可能です。例えば、「出先」「自宅」などのいわゆるコンテクスト、「要調査」「調査済み」などの状況に応じたタスクを付けることで、容易に状況把握ができます。

さらに、WorkFlowyはWebアプリですから、例えば「タグ検索結果のURL」などが存在するわけで、これらをToodledoのノートなどに書き込むことで、アクセス経路を増やすことができます。

ただし、いくらズームインによる絞り込みが容易とはいえ、あまりに重要度の低いタスクまで入れるべきではありませんから、そういったものはnvALTに落とします。最近複数行選択からのコピー/カットができるようになったので、コピペも簡単です。

nvALT:あらゆる「メモ」

nvALTは、高速な全文検索と多様なノート作成機能、Markdownサポートにより、メモ取りには最適のアプリです。実体はDropbox上のテキストファイル(またはSimplenote)ですから、iPhoneからのアクセスも容易です。

ToodledoもWorkFlowyも、当然長文のメモを書き込むには適していませんから、とにかくメモというメモは全てnvALTに記述しておき、すぐに検索できるようにします。もっとも、あまりにメモが増えすぎると混乱してきますので、役目を終えたものからEvernoteに送り込み、nvALTからは削除してしまいます。nvALTに存在するのは、「アクティブな」メモだけです。

一応タグ機能はありますが、実際に検索するときはToodledoまたはWorkFlowyを見ながらですから、神経質にタグを付けることはありません。ただし、タスクという形に結びつかない創作メモなどは、容易に一覧できるようにタグを付けておきます。

運用基準

Toodledo>WorkFlowy>nvALTの順で緊急度が下がります。

Toodledoに登録するタスクは、とにかくすぐやるもの。その日のうちに終わらないタスクはそもそも登録しません。

WorkFlowyに登録するタスクは、進捗と期限を意識するもの。状況はタグで管理できるようにし、気が付いたときにやればいいようなタスクはnvALTに落とします。

nvALTには、進行中のタスクに関するメモを記述しておきます。タスクが完了した場合、関連するメモは全てEvernote送りにします。定期的に確認すべきメモにはタグを付けておき、メモを確認する行為を、必要であればToodledoまたはWorkFlowyに登録しておきます。

WorkFlowy登録リンク

これからお試しになる方、登録はぜひこちらからどうぞ。月間キャパシティが増えて私が喜びます。

Simplenoteやめました―nvALT中心のメモ環境

Simplenote中心のメモ環境

Simplenoteは、テキストのみを同期することに関しては、現状で最良といえるクラウドサービスです。

Evernoteに速度で大幅に勝り、タイトルを付ける必要もなく、いちおうMarkdownをサポートし、連携アプリも多い。アプリを通せばテキストファイルとしての保存もできます。

Android使いならGoogle Keepという選択肢もあったでしょうが、残念そこはiPhone。そこで、しばらくの間、私のありとあらゆるメモはSimplenoteに放り込まれた後、加工されていずこかへと消えていきました。

iPhone MacBook Air Windows
使用アプリ Simplenote nvALT Simplenote(ChromeApp)

次第に中心的な位置を占めていくnvALT

当初はSimplenoteクライアントとして利用し始めたnvALTでしたが、私は徐々にその虜になっていきました。

高速検索・高速メモ作成、基本的なMarkdown作成支援といった特長はもとより、重要なのは他アプリに渡すコマンドが存在することです。これによりnvALTは、FoldingTextでの編集、Byword経由でのEvernoteへの保存など、テキストをさまざまなアプリで取り回す上でのハブとして機能することになりました。

iOS版Simplenoteへの不満

私は、Markdownでメモを取る上での最大の利点は、リスト作成のしやすさだと思います。アウトラインプロセッサを利用する手もあるのですが、汎用的なデータフォーマットであるプレーンテキストで、通常のテキスト内に、簡単にアウトラインを記述することができるメリットは非常に大きいものです。

ここで「箇条書き」ではなく「アウトライン」という呼び方をしたのは、入れ子(ネスト)にすることを考慮してのことです。単なる箇条書きであれば、Markdownという形式にこだわる必要はありません。構造を視覚化したいのです。

まあ、トラディショナルなMarkdownには入れ子の書き方が指定されてなかったりもしますが、HTMLのULでできることがMarkdownでできてはならぬ理由もなく、たいていのMarkdownエディタ(パーサー)はタブまたはスペース4個によるインデントを、リストを入れ子にするフォーマットとして、適切に取り扱ってくれます。

ただし。iOS版のSimplenoteアプリでは、オートバレット(リストで改行したときに記号を補完)はしてくれるものの、簡単にインデントを行う方法がありません。

というより、これはiOSにおけるテキスト入力全般の問題なのですが、iPhoneのキーボードではタブ文字を入力できないからです。TextExpander Touchをサポートしてくれていれば、どうとでもなったのですが。

いちおうタブ文字を辞書登録したりして頑張ってはみたものの、1週間くらいで心が折れました。

というか、そもそもnvALTで他のアプリにノートを渡すにはローカルフォルダにプレーンテキストファイルを保存する設定にせねばならないため、どうせローカルのファイルはあるのです。だったら、Dropboxに保存して他のアプリを使えばいいじゃない!

SimplenoteとDropboxのコンフリクト

nvALTなりの、ローカルフォルダへのプレーンテキストファイル保存機能を持つSimplenoteクライアントを使えば、Simplenote内のノートをDropboxにも保存することができます。

(実は、SimplenoteのプレミアムアカウントにはDropbox保存サービスがあったらしいのですが、現在はプレミアムアカウントの登録自体が行われていません。)

ところが、実際にこれをやると、同期のコンフリクトによりファイルが複製される現象が頻発します。(nvALTでは警告が出る。)色んなアプリを試しましたが、まあアプリの問題でもありませんし、この問題は解消しませんでした。

Simplenoteを捨てよ、Dropboxに出よう

開かれたクラウドサービスであるDropboxであれば、アプリの選択肢は大幅に増えます。現在ではDropboxへの完全移行が完了しており、環境は以下のようになっています。

iPhone MacBook Air Windows
使用アプリ 1Writer/Notesy nvALT ResophNotes

1WriterとNotesyはいずれも拡張キーボードによるMarkdown作成支援機能を持ち、TextExpander Touchにも対応しています。また、常にファイルがDropbox上に存在することにより、どの端末でもデータの取り回しが容易です。

一昔前は、iPhoneのメモアプリでDropbox連携と言ったら、同期フォルダを選べないことが多かったのですが、現在ではそんなアプリはほとんどなくなりました。つまり、状況に応じて使うアプリを柔軟に選ぶことも可能なわけです。

なお、nvALTとSimplenoteで同期していた時に悩まされていた、タブ文字がスペースに置換される現象はすっかりなくなりました。どうやら、Simplenoteに起因する問題であった模様。

nvALTをめぐるタブとソフトタブの混乱

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

nvALT

nvALT

  • ElasticThreads and Brett Terpstra
  • 無料(執筆時点)

現在、MacのメモアプリとしてnvALTを利用しています。SimplenoteにもDropboxにも同期できて、Markdownも書けて検索も速くて他のアプリにも渡せるすごいアプリです。

ただし、ものすっごく挙動が怪しい点がいくつかあります。中でもかなりどうしようもないのが、Soft Tabs設定にまつわる問題です。

Soft Tabsとは?

MacでもWindowsでも、テキストエディタ等でタブキーを押すと、タブが入力されインデントされます。しかし、諸々の事情により、タブではなく半角スペースでインデントしたい場合があります。そのために、タブキーで半角スペースを入力する機能のことを、一般にSoft Tabsと言います。

多くの場合、Soft Tabs機能を持つアプリでは、挿入される半角スペースの数を指定できます。たとえばMarkdownリストのネストのためにSoft Tabsを利用する場合、半角スペースの数は4個であるべきです。

nvALTにおけるSoft Tabs問題

しかし、nvALTにおいては、Soft Tabsで挿入される半角スペースの数を指定することができません。まあ、それが2個とか4個で固定なら別にいいのですが、実際やってみると、その時の気分で3個とかになります。本当にいい奴なんだけれど、そこだけは本当に理解できない。

さすがにバグだろうと思ってググってはみたものの、全く情報が出てきませんでした。少なくともうちの環境では、nvALTのSoft Tabsは使い物になりません。

まあ、それならそれで使わなければいいんです。nvALTだけの話なら。

TabsとSoft Tabsの混乱

しかし、同じドキュメントを色んなアプリの間でぐるぐるしていると、逆にSoft Tabsしかできない奴がいたり、Tabsじゃないと不具合出す奴がいたりします。

  • Byword for Mac
    • 強制Soft Tabs
    • 読み込んだドキュメントのタブを半角スペースに強制変換
  • FoldingText
    • Soft Tabs不可
    • 半角スペースでネストされたリストを正常にハイライトできない
  • MarkdownPad2
    • タブでネストされたリストを正常にハイライトできない

nvALTを中心にドキュメントをぐるぐる回していると、ドキュメント内でタブと半角スペースが混じったりします。そうすると、リストの表示がガタガタになって大変困ります。

というか、Bywordに渡した覚えもないドキュメントに半角スペースが入ってたりするので、nvALT自体にそういう不具合があるような気も……。

困ったので、とりあえず全部タブに変換できるように、Automatorでサービスを作ってみました。これについては次回。

追記(2014/07/16)

Simplenoteとの同期をやめたら発生しなくなったので、どうやらSimplenote絡みの問題である模様。

Simplenoteクライアント比較(Mac)

参考:カッコイイMarkdownエディタの機能にいい感じの呼び名をつけよう - 豆腐メンタルは崩れない

ほぼ自分用メモ。

メモ取りにSimplenoteを活用している。ただし、Markdownを多用していると、Web版&公式Macアプリへの不満が出てきた。

  • 入力補完が一切ない
    • iOS版ではオートバレットできるのに
  • シンタックスハイライトがない
  • 公式クライアントではプレビューができない(Mac/iOSとも)

そこで、無料のものに限定して、サードパーティ製クライアントの機能を比較してみた。

機能比較表

アプリ タグ ピン プレーンテキスト保存 オートバレット タブキーインデント スマートハイライト タイトル同期 プレビュー
公式Mac App OK OK NG NG NG NG OK NG
公式web OK OK NG NG NG NG OK OK
nvALT OK NG OK OK OK NG NG OK
Nottingham OK OK OK NG NG NG NG OK
Metanota OK OK NG NG NG OK OK NG

個別評価

nvALT

  • オートバレット&タブキーインデントえらい
    • ただしソフトタブ幅不定
      • 仕様なのか不具合なのかもわからない
    • オートインデントがReturn連打では解除されない
      • Opt+Returnで解除
  • ショートカットでノート移動えらい
  • プレビューも可能
    • テンプレート/CSSを編集できるため、自分のブログにデザインを合わせたりできる
  • プレーンテキストとしてローカル保存可能
  • 新規ノート作成オペレーションが独特
    • ノート検索から存在しないノートタイトルを入力してReturn
  • [[ノートタイトル]]と書くとリンクされる
    • そこからノート作成も可能
  • TaskPaper記法対応
    • リストに @done を書くと完了タスク扱いに
  • ピンに対応していない
  • Simplenote側でタイトル変更しても同期しない
    • リネームは可能
  • 手動同期不可
    • たまに恐ろしく同期が遅い
  • 「Preview > Enable Markdown Completion」にチェックしておけば、シンタックス挿入できる
    • メニューバーに存在しないが、⇧⌘+で見出し(#)追加

入力補完と同期のトレードオフ

Nottingham

  • ピン対応えらい
  • 入力補完は皆無
  • プレビュー可能
  • プレーンテキストとしてローカル保存可能
  • 文中に既存のノートタイトルを書くと自動リンクされる
  • 新規ノート作成オペレーションはnvALT同様できらい
  • 同期が怪しい
    • Simplenote側でタイトル変更しても同期しない
      • リネームできないっぽい。そんなばかな
    • たまにファイルが増殖して悲惨な目に遭う
    • フォルダパスに日本語が含まれると同期しない
  • 重い

ピンに対応した上で、ローカル保存もできる。ただし、同期が怪しすぎる。

Metanota

  • ピン対応えらい
  • スマートハイライトえらい
  • ショートカットで新規ノート一発作成えらい
  • サードパーティで唯一、タイトルも含めた完全な同期が可能
  • フォント周りが気持ち悪い
    • サイズしか変更できない
    • 行間広すぎ
  • 3ペインきらい
  • 重い

スマートハイライトできる「完全な」Simplenote
ただし見た目と重さが酷すぎる。

まとめ

  • 入力補完とローカル保存のnvALT
  • ピン対応とローカル保存のNottigham
  • スマートハイライトと完全同期のMetanota
  • 個人的にはnvALT一択。
    • 入力補完って素晴らしい。
    • 実はローカル保存は母艦のWinに任せてしまっている。
      • Dropbox経由でMacにも飛んでくる。