Alfred による Task 登録の一元化(さらに拡張) : hkob の雑記録 (254)

はじめに

hkob の雑記録の第254回目は、昨日作成した Task 登録の一元化ワークフローに、Do it now を追加しました。これだけだとあまりに短いので、既存タスクに日付を設定すると同時にカレンダーにも同時登録する機能も追加しています。

昨日作成したワークフロー

昨日作成したワークフローをここに示します。全てタスク登録は Cmd-Ctrl-t だけとし、日付や時刻を設定したら、カレンダータスクとみなし、タスクとカレンダーを同時登録します。何も入力しなかった場合には、いつかやるタスクとみなし、タスクのみを登録します。

昨日作成したワークフロー

昨日の終わりにに記載しましたが、タスク登録にはもう一つあり、「いますぐやるタスク」がありました。現在こちらは、「do タスク名」とすることで、開始時刻が現在時刻となり、1時間の長さのタスクが作成されます。こちらはカレンダーには登録しません。その当時に書いた記事はこちらです。

hkob.hatenablog.com

Do it now の追加

今回更新したワークフロー全体はこちらになります。Do it now の部分は一番上のラインになりました。これまで通り、「do タスク名」でも登録可能です。

今回更新したワークフロー

今回は、Cmd-Ctrl-t からもいますぐやるタスクを登録できるようにしました。条件分岐の部分が三分岐になっていることがわかります。今回、キーワードとしてはコマンドと同じ「do」にしてみました。

三分岐

その後につながっている Arg and Vars は変数の title を query にしているだけです。

title を query に設定

実行すると以下のようなダイアログが出てくるので、このように do とタイプします。

実行画面

既存タスクに日付を設定

現在オートメーションで日付をメンションから簡単に設定できるようにしていましたが、それだとカレンダーには登録されませんでした。今回の後から日付を設定する機能は同じように使えそうだと思ったので、同様に実装してみました。該当部分だけ抜き出すと以下のようになります。

既存タスクに日付を設定ワークフロー

Hotkey はなんでもいいので、とりあえず順番で F5 にしてみました。その後、Notion アプリに制御を切り替えます。ここで、Cmd-L をタイプすることで URL を取得したかったのですが、なぜか Dispatch Key Combo で Cmd-L が働きませんでした。そこで、以下のような AppleScript で対応することにしました。単に無理やりキーを押しているだけです。

Cmd-L を Notion に送る AppleScript

時刻入力部分は説明コメント以外の部分は全く同じです。

時刻入力部分

Ruby script には query しか渡せないので、Arg and Vars に clipboard に入れた URL と入力した文字列を連結しています。

URL と入力した文字列を連結

Ruby script は新規タスクを作成する場合とほぼ同様です。

Ruby script

スクリプトは以下のようになっています。新規タスク作成と異なり、URL からページを取得し、日付プロパティを更新するように変更しています。また、終了後に「タスク名 日付など」という文字列データを、次のアクションへの query に渡しています。作成した文字列は Task and Calendar で入力される文字列と同じなので、AppleScript のカレンダー登録にそのまま横流しします。

require "date"
require "notion_ruby_mapping"
include NotionRubyMapping
NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] }
MY_TZ = ENV["MY_TZ"]

date = nil
end_time = nil
start_time = nil
words = ARGV[0].split " "
url = words.shift
other = words.join " "

end_time = (words.pop + MY_TZ) if words[-1] =~ /\d+:\d+/
if end_time
  start_time = (words.pop + MY_TZ) if words[-1] =~ /\d+:\d+/
  unless start_time
    start_time = end_time
    end_time = nil
  end
end

begin
  date = Date.parse words[-1]
  # If the above Date.parse was success, the last parameter will remove.
  words.pop
rescue
end
date ||= Date.today

datetime = {start: [date, start_time].compact.join(" ")}
datetime[:end] = [date, end_time].join(" ") if end_time
page = Page.find url
pp = page.properties
sd = pp["Date"]
sd.start_date = DateTime.parse("#{date} #{start_time}")
sd.end_date = DateTime.parse("#{date} #{end_time}") if end_time
pp["Assignee"].people = ENV["USER_ID"]
page.save
print [page.title, other].join " "

おわりに

昨日おわりに書いたように Do it now を取り込むと同時に、いつかやるタスクに後から時刻設定&カレンダー登録ができるようになりました。かなり Workflow がすっきりしたと思います。

hkob.notion.site