MilkScriptを使ってタスク名の冒頭にキーワードを付与する

これからタスク管理アプリ『remember the milk(以下RTMと記述)』独自のスクリプトについて、いくつか使っているコードを紹介します。

もともと事務員やってて専門のプログラマーとかではないので、見る人が見れば「クソコードw」と嘲笑の的になりそうで怖いのですが、如何せんMilkScriptに関する記事が少なすぎる。むしろ見つからない。

鬼のようなカスタマイズ性を秘めているというのに、全世界でこの魅力に気づいているのはひょっとして私だけなのでは?と不安になったので、せめてサンプルコードを残しつつ、「こういう使い方をしているよ」という発信は残しておいたほうがいいのかなと記事をしたためております。

尚、ここでのコードをコピペするなどして使ってもらっても全然構いませんが、もし何らかの不具合が発生されました場合、当方一切の責任を負いかねますのでご了承ください。

『Star』をカスタマイズして、タスク名の冒頭にキーワードを付与する

もともと公式から提供されているサンプルに『Star』というスクリプトがあります。

MilkScript

選択したタスクの冒頭に何もついていなければ絵文字の☆を付け、逆に☆がついていればそれを外す。といったものです。

これを応用して書いたのが以下のコード。


// 選択タスクの数が1つでないなら、エラーにして終了。そうでないなら定数『selectedTask』に選択タスクを格納
if (rtm.getSelectedTasks().length !== 1) {
    throw new Error("タスクが選択されていない、または複数タスクが選択されています");
}
const [selectedTask] = rtm.getSelectedTasks();
// 選択タスクにノートがなければエラー処理。あれば定数『note』に最近更新されたノートを格納する
if (selectedTask.getNotes().length === 0) {
    throw new Error("選択タスクにノートがありません");
}
const note = selectedTask.getNotes()
    .reduce((result, note) =>
    result == null || note.getModifiedDate() > result.getModifiedDate() ?
        note : result, null);
// 選択タスクにサブタスクがなければエラー処理。あれば定数『subTasks』に格納する
if (selectedTask.getSubtasks() === 0) {
    throw new Error("選択されたタスクにサブタスクがありません");
}
let subTasks = selectedTask.getSubtasks();

const [context] = note.getContent().split('\n');
// キーワードを抽出する
let keyword = context.match('接頭辞');
if (keyword === null){
    throw new Error("ノートに接頭辞の表記がありません");
} else {
    keyword = context.substring(4,context.length).trim() + ': ';
}

//サブタスク群の名称変更
selectedTask.getSubtasks().forEach(subTask => {
    subTask.setName(keyword + subTask.getName());
});
                    

はたらき

選択したタスクのサブタスクのすべてにノートで指定したキーワードを付与する。といったものです。

選択したタスクのノートの1行目に『接頭辞: キーワード』などと入力されていれば、サブタスクすべての冒頭に『キーワード: ◯◯◯◯』と付与されます。

選択タスクが0または複数の場合、選択したタスクにサブタスクとノートがない場合、エラーになります。
また、複数ノートがある場合、更新が最新のものを調査され、1行目に『接頭辞:』と入力されてない場合もエラーとなります。

用途

後日、別のエントリーで書きますが、RTMで完了したタスク群を一括で取得してプロジェクトのレポートを書いたり、ライフログに使ったりしています。

例えば『ブログを書く』というタスクのサブタスクに『画像を用意する』『下書きを書く』『本稿を書く』『推敲する』『公開する』とあったとして、完了したサブタスクが単一で『画像を用意する』とあっても、画像をなんのために用意していたのか、後でレポートを見ても把握できません。

そこで、キーワードを『ブログ執筆』などにしておいて、『ブログ執筆: 画像を用意する』『ブログ執筆: 下書きを書く』『ブログ執筆: 本稿を書く』『ブログ執筆: 推敲する』『ブログ執筆: 公開する』とサブタスク名を一括置き換えすると、あとでレポート作成する時にわかりやすくなります。

スクリプト実行前

スクリプト実行後

※アレンジ元の『Star』ではスクリプト実行毎に、☆を付けたり消したりできますが、こちらのスクリプトは実行する度、どんどん冒頭にキーワードが追加されていくだけです。