Listacular

Listacularの諸々のバグが直ったので改めて紹介しよう

これまでのあらすじ!

iOS用Todo.txt/TaskPaperクライアント


ver. 1.55 - 無料( 仕事効率化 )
Andrew McKinney

著名なタスク管理メソッドのひとつであるTodo.txt。iOS用にも、公式クライアントであるTodo.txt Touchをはじめ、いくつかのクライアントが用意されています。

また、同様のメソッドであり、Mac用のアプリを中心として利用されるTaskPaperも、公式後継アプリであるTaskmatorなどのクライアントアプリが存在します。

そんな中、私があえてこのListacularを推すのは、なによりもプッシュ通知機能の存在ゆえです。

Listacularによるプッシュ通知

Listacularは、テキストベースのタスク管理アプリです。よって、当然ながら、通知もテキストの記述を元に行われます。

Listacularでタスクを左スワイプすると、カレンダーと時刻入力ドラム、およびアラームスイッチが現れ、タッチインターフェイスで期限を入力することができます。

入力結果は、テキスト上では@due(2014-11-11 22:00)@remind(2014-11-11 22:00)といったタグで表現されます。これにより、Listacular上で期限管理が行われるだけでなく、@remindタグについては、プッシュ通知も受け取ることができます。

すなわち、テキストベースのプッシュ通知! 夢が拡がる話です。

最近まで、肝心のこの機能がバグでろくすっぽ働かなかったのですが、バージョン1.5.5アップデートでスッキリ解消しました。

どこからでも追記→iPhoneで通知

これらは、全てDropbox上のテキストファイルとして記録されるため、様々な手段でタスクの追加→通知を行うことができます。

数々のTodo.txt/TaskPaperクライアントはもちろんのこと、IFTTTや、Alfred Workflowによる追記も可能です。例えば、IFTTTのDate & Timeチャンネルを利用すれば、いわゆる繰り返しタスクの追加もできますし、拙作のAlfred Workflow(catfist/Alfred-Add-to-Listacular)もご利用いただけます。

また、URLスキームからの追記も可能なため、iPhone内だけでも様々な連携が考えられます。TextwellDrafts 4からの追記などは、すぐ思いつくところですね。

ただし:同期は手動

現状、Listacularの唯一にして最大の欠点といえるのが、バックグラウンド同期が不可能な点です。どこからでも追記ができるのですが、追記した後は、Listacularを起動して同期を行う必要があります。

日常的に起動してタスクをチェックしていれば、なんてことはないのですが……通知任せでリストは見ないなんて運用をしていると、肝心の通知が受け取れない可能性があるため、要注意です。

手動といえば……話題はズレますが、ロングタップすると、タスクの手動並べ替えが可能な点は、地味にうれしいですね。

テキストベースで自由度の高いタスク管理を!

テキストベースのタスク管理は、ウェブベースのタスク管理サービスと比べ、機能面では劣る点も多いです。

しかし、その自由度、検索も置換もコピペも思いのままという融通性の高さは、ウェブベースサービスにはない魅力といえます。

そうした利点を残しつつ、プッシュ通知という最大の欠点を補うListacularは、テキストベースのタスク管理におけるキラーアプリとなりうる存在ではないでしょうか。

皆様も、GTDならぬDIY的タスク管理に取り組んでみてはいかがでしょうか。

Listacularの「最後の空行問題」に対処する


ver. 1.50 - 無料( 仕事効率化 )
Andrew McKinney

ListacularのTodo.txtに追加するAlfred Workflow

というのを作ったわけですが。

この際、最後の空行問題が発生しました。

最後の空行問題とは?

そもそも、ある定義においては、行とは最後に改行記号を含むものです。

ということで POSIX 的に行は改行で終了していて、テキストファイルは行の集合だからファイル末尾には必ず改行が来ると

これはbashにおいても同様で、テキストファイルは空行で終わることを前提にしています。

例えば、以下のようなsample.txtがあるとします。

1
2
3
aaa
bbb
ccc(ここに改行がない)

これにecho "ddd" >> sample.txtといったコマンドで(行を)追記する場合、以下のような結果になります。

1
2
3
aaa
bbb
ccc(ここに改行がない)ddd

リダイレクトされた出力(echo "ddd")には改行が含まれるので、さらにecho "eee" >> sample.txtとすると、以下のような結果になります。

1
2
3
4
aaa
bbb
ccc(ここに改行がない)ddd
eee

問題は、Listacularがこのような行の定義に沿わないことです。具体的には、以下のような仕様になっています。

  • 最終行が空行であっても、ひとつのアイテムとして扱う
  • 一番下にアイテムを追加すると、テキストファイルとしては改行を含まない

このため、Listacularで扱うファイルにスクリプトで追加しようとすると、少々厄介なことになります。

対応1:「最後が空行であること」を判定する

対処の前提として、「最後が空行であること」をスクリプトで判定する必要があります。

ターミナルからbashを使う場合はわりと簡単だったのですが、なぜかそのまんまAlfred Workflowでやってもうまくいかず苦労しました。ともあれ結果として、以下のようなWorkflowで判定に成功しました。

スクリーンショット

/bin/bashスクリプトの内容は以下の通りです。

1
2
3
4
5
6
7
todotxt=~/Documents/test.txt
l1=`tail -c 1 $todotxt`
if [ -n "$l1" ];then
echo NG:最後が空行でない
else
echo OK:最後が空行
fi

処理としては、以下のことを行っています。

  • test.txtの「最後の1バイト」を取得
  • 「最後の1バイト」が「空白文字でない文字を含むか」を判定
  • 判定結果を出力

対応2:空行を補う

これを応用し、最後が空行の場合のみ、空行を補うようにします。

1
2
3
4
l1=`tail -c 1 $todotxt`
if [ -n "$l1" ];then
echo "" >> $todotxt
fi

空行を補うには、空文字列を追記します。空文字列(のエコー)にも改行が含まれるので、結果として必ず最後が空行になり、正常に追記することができます。

対応3:追記に改行を含めない

これは、echoコマンドの-nオプションで実現できます。

つまり、以下のようにすればOKです。

1
echo -n "$foo" >> $todotxt

この場合、Listacular側でも「空アイテム」が生まれません。

まとめ

これを実際のスクリプトに組み込みます。

スクリーンショット

/bin/bashスクリプトの内容は以下の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
# Set your Listacular folder path
todotxt=~/Dropbox/todo/todo.txt
IFS=','
read type pre task <<< "{query}"
l1=`tail -c 1 $todotxt`
if [ -n "$l1" ];then
echo "" >> $todotxt
fi
echo -n "${pre}${task}" >> $todotxt
echo "${type}: ${task}"

これで、自然にTodo.txtへの追記ができるようになりました。

Listacularで通知できる形式でTodo.txtに追記するAlfred Workflow

Listacularで通知するタスクを楽に追加したい


ver. 1.50 - 無料( 仕事効率化 )
Andrew McKinney

Listacularは、私が確認した限り、テキストファイルの記述ベースで通知を受け取ることのできる唯一のアプリです。

具体的には、各タスクに@due(2014-10-09 20:00)といった記述をすることで期限切れを管理し、@remind(2014-10-09 20:00)といった記述をすることで期限に通知を受け取ることができます。

そこで、簡単に通知を受け取ることができるよう、Alfred Workflowを作ってみました。doing.txtを少し参考にしました。

概要

Githubで公開しました。

スクリーンショット

使い方

利用可能なフォーマットは以下の通りです。(本日が2014-01-01の場合)

Alfredテキスト 出力
txt some task,+1,2100 - some task @remind(2014-01-02 21:00)
txt some task,,2100 - some task @remind(2014-01-01 21:00)
txt some task,+1 - some task @due(2014-01-02 23:59)
txt some task - some task
txt some task @due(2014-01-01 21:00) - some task @due(2014-01-01 21:00)
txt some notice @n some notice

-で始まる行は、Listacularではチェックリストになります。つまり、@nを加えた場合は、完了管理をしない注意書きになります。

「日付だけを入力するなら通知はいらない」「時刻を入力するなら通知が必要」と考えて、タグを割り振っています。

出力結果は、通知センターに表示されます。

課題

  • 時刻のh,hh入力への対応
  • 時刻の「〜後」入力への対応
  • 第2引数の「日付のみ」「時刻のみ」両対応
  • TaskPaperフォーマットへの対応?

iPhoneでテキストベースのリマインダーをセットするにはListacularだった


ver. 1.50 - 無料( 仕事効率化 )
Andrew McKinney

iPhoneでDropbox上のテキストから通知を受け取りたい


ver. 2.3.2 - ¥1,000( 仕事効率化 )
Hog Bay Software

ver. 1.9 - ¥200( 仕事効率化 )
Gina Trapani

最近タスク管理の方法を色々考えているのですが、その中でTodo.txtやTaskpaperといった、プレーンテキストベースのタスク管理メソッド(アプリ)も検討しました。

しかし、どうしても引っかかるのが通知を受け取れないこと。全部が全部通知したいならこの手のものはそもそも検討しませんが、中には通知したいものもあるわけです。それも、モバイルで受け取りたい。

AndroidならTaskerというのもあるそうですが、あいにくとiPhoneなので自由度の高い環境はない。なにかないかと探していたら、灯台下暗しというか、Listacularがまさにソレでした。

Taskpaper for iOSとしてのListacular

今年初めに、私も愛用するFoldingTextのHog Bay SoftwareがiOS向けアプリから撤退するという事件がありました。その際、iPhone用TaskPaperの代替アプリとして公式に提案されていたのがListacularです。Listacular側でも、TaskPaperフォーマットにアップデートで対応しました。

私もTaskPaperについて調べた際にその存在は知っていて、実際に試してもみたのですが、通知ができるというのは思いきり見落としていました。そこで、Listacularにおける通知機能と、他デバイスとの連携についてまとめてみます。

Listacularの通知機能

Listacularで普通にタスクを追加した後、左スワイプすると「期限」および「アラート」を設定することができます。下記の例は、txt形式でリストを作成しています。

期限

アラート

設定後のリスト

ベルマークをタップするとアラートを追加することができます。

期限を設定した場合、期限切れになると、ホーム画面のアイコンバッジやアプリ内でoverdueとして表示されます。さらにアラートを設定してある場合、iPhoneでプッシュ通知を受けとることができ、通知センターにも表示されます。

期限切れ

そして、このsample.txtをデスクトップ端末で開くと、以下のような内容になっています。

- test2 @due(2014-10-01 22:00)
- test  @remind(2014-10-01 22:00)

非常にシンプルです。ファイル実体は単なるDropbox上のテキストファイルなので、iPhoneの他のアプリから記述することもできますし、当然、デスクトップ側から追記することも容易です。

Macからの追加

最終的にListacularで通知を受け取れるようにするとして、デスクトップ側、特にMacからであれば、簡単にタスクを追加する方法は色々あります。

もともとこのタグフォーマットはTaskPaperのものなので、TaskPaperで作成したタスクリストをListacularに読み込ませれば、iPhoneで通知を受け取ることができます。

Todo.txtの場合、もともと期限フォーマットがありませんが、まあそんなのは勝手に書けばいいだけです。勝手に拡張できる自由度の高さが、テキストフォーマットの最大の魅力であるわけですから。

Alfred Workflowからの追加を考えるのであれば、TaskPaperフォーマットを利用したタイムトラッキングツールである、doing.txtが参考になります。

このままだとタグの括弧(bracket)がエスケープされてしまうので、スクリプトのEscaping: Bracketsのチェックを外します。すると、doing test2 @remind(2014-10-01 22:00)といった形でAlfredから入力すれば、アラート付きのタスクを追加できます。

(2014-11-04 追記)Listacular補助用Alfred WorkflowをGithubで公開しています。

ただし、めっちゃくちゃ不安定

どうもiOS8のせいなような気がしますが、不安定さがヤバいです。

  • 期限を設定するとき、時刻ドラムをタップすると100%フリーズ
  • 通知が来たり来なかったりする
    • ロック中は100%来ない
  • 期限を過ぎたときの反応が遅い
  • そもそもバックグラウンド同期しないっぽい

現状では頼り切れないと言わざるを得ない。

が、求める機能を備えていることは間違いないので、アップデートを注視していこうと思います。

(2014-11-04 追記)バージョン1.55アップデートで、上記不具合はほぼ解消しました。

ただし、バックグラウンド同期ができないのは相変わらずなので、他のデバイスからタスクを追加した場合、Listacularで手動同期する必要があります。