はじめに
NotionRubyMapping 69回目は GTD における「いつかやる」タスクを「次のアクション」に昇華する処理を Alfred で実現します。これまでは、これを以下のようなボタンで処理していました。ボタンを押すだけで、以下のプロパティを二つ設定します。
- スプリントプロパティ: バックログ → 現在のスプリント
- プロジェクトプロパティ: 未設定 → 曜日ごとのプロジェクト
しかし、ボタンのプロパティの値は固定の値しか設定できないことが問題になります。そのため、毎朝このボタンプロパティを開き、プロジェクトを変更していました。月曜日にスプリントが更新されるとスプリントも変更する必要があります。個々の作業は簡単なのですが、設定が面倒で結局ドラッグアンドドロップで移動することでプロパティを設定することも少なくありませんでした。今回はこの処理を Alfred で自動化します。

データベースIDの準備
すでに TASK_DB_ID は設定済でしたが、今回 SPRINT_DB_ID と PROJECT_DB_ID を用意しました。

Alfred の実装
今回の Workflow は以下のようになります。最後はいつものように Open URL につながっています。遠いので省略しています。

最初のブロックは今回初登場の External Torriger です。Identifier は next_action にしてみました。

alfred://runtrigger/jp.ac.metro-cit.hkob/next_action/?argument=test
次のブロックはいつもの Ruby script です。

スクリプトは以下のようになりました。日付の曜日から wday を取り出し、project の wday と一致するプロジェクトを抽出します。その後、Sprint status が Current になっている現在の Sprint を抽出します。操作するページの ID は先ほどの External Trigger から渡されるので、ページを取得します。そのページの Sprint と Project の id をそれぞれ登録することで、次のアクションに移動します。私のシステムでは、「いつかやる」タスクが次のアクションに移動した場合、そのままそのタスクを開始することが多いので、「Next Step」チェックボックスもオンにしてしまいます。これによって、Notion のオートメーションが発火し、自動的にタスク開始時間が記録され、タスクのステータスも Inprogress に変わります。
require "date" require "notion_ruby_mapping" include NotionRubyMapping NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] } url = ARGV.first page = Page.find url wday = Date.today.wday project_db = Database.find(ENV["PROJECT_DB_ID"]) pnp = project_db.properties["wday"] project = project_db.query_database(pnp.filter_equals wday).first sprint_db = Database.find(ENV["SPRINT_DB_ID"]) ssp = sprint_db.properties["Sprint status"] sprint = sprint_db.query_database(ssp.filter_equals "Current").first pp = page.properties pp["Sprint"].relation = sprint.id pp["Project"].relation = project.id pp["Next Step"].checkbox = true page.save print page.url
URL handler を発火させる GAS
問題は Notion からは直接 URL handler を発火させることはできません。なんとかならないかと思ったら、こんな記事を見つけました。思い切りそのまま使わせてもらいました。
スクリプトは以下のようになります。以前使っていた GAS のスクリプトは doGet は使っていなかったので、そのまま流用しました。
function doGet(e) { // リクエストからパラメータを取得 var url = e.parameter.url; // カスタムURLスキームにこれらのパラメータを組み込む var customUrlScheme = 'alfred://runtrigger/jp.ac.metro-cit.hkob/next_action/?argument='+encodeURIComponent(url); // HTMLとJavaScriptを使用してリダイレクト var html = ` <html> <head> </head> <body> <p>Redirecting...</p> <a id="url_link">自動的に遷移しない場合こちらをクリック</a> <script> document.getElementById("url_link").setAttribute("href","${customUrlScheme}") window.location.href = "${customUrlScheme}"; </script> </body> </html> `; return HtmlService.createHtmlOutput(html); }
そのままデプロイして、アプリケーション URL をコピーしました。
Notion Formula によるリンク作成
あとは、この GAS を呼び出す Formula を作成するだけです。

Formula は以下のようになります。
link("→ Next Action", "https://script.google.com/macros/s/デプロイのID/exec?url=" + id())
結果として「いつかやる」タスクの表示はこんな感じになりました。「→ Next Action」をクリックすると、GAS から直接 Alfred が起動します。これにより Sprint と Project が設定された上で、Next step チェックボックスがオンになります。その結果、今度は Notion automation が発動し、ステータスが Inprogress となり、開始時刻が Start date に記録されます。

おわりに
今回は、「いつかやる」を「次のアクション」に移動し、タスクを自動的に開始する Workflow を紹介しました。