はじめに
hkob の雑記録の第254回目は、昨日作成した Task 登録の一元化ワークフローに、Do it now を追加しました。これだけだとあまりに短いので、既存タスクに日付を設定すると同時にカレンダーにも同時登録する機能も追加しています。
昨日作成したワークフロー
昨日作成したワークフローをここに示します。全てタスク登録は Cmd-Ctrl-t だけとし、日付や時刻を設定したら、カレンダータスクとみなし、タスクとカレンダーを同時登録します。何も入力しなかった場合には、いつかやるタスクとみなし、タスクのみを登録します。

昨日の終わりにに記載しましたが、タスク登録にはもう一つあり、「いますぐやるタスク」がありました。現在こちらは、「do タスク名」とすることで、開始時刻が現在時刻となり、1時間の長さのタスクが作成されます。こちらはカレンダーには登録しません。その当時に書いた記事はこちらです。
Do it now の追加
今回更新したワークフロー全体はこちらになります。Do it now の部分は一番上のラインになりました。これまで通り、「do タスク名」でも登録可能です。

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

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

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

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

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

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

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

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 がすっきりしたと思います。