番外編: Alfred によるタスク作成: NotionRubyMapping 解説 (65)

はじめに

今日はいつもの NotionRubyMapping のメソッド解説を中断して、Notion座談会で紹介した Alfred の Workflow の解説をします。

実は先日のアップデートで iOS、 iPadOS、WatchOS のショートカットにより Notion のデータベースにページを追加できるようになったため、ページ作成のために Notion API を使う必要が必要なくなりました。macOS はその恩恵に授かれないのですが、逆により強力な Alfred の Workflow を作り直すことにしました。そもそもショートカットを使い始めるまでは Alfred を使っていたのですが、当時は NotionRubyMapping もなく、かなり複雑なコードを書いていました。今回は、NotionRubyMapping を使って Alfred の Workflow を新規に作り直すことにしました。今日から少しずつ小出しに解説していきます。

Alfred について

Alfred は macOS の機能を拡張するアプリです。多くの人はアプリケーションを起動する Launcher として利用しています。一部の機能は無料で利用できますが、有料の PowerPack を購入すると、Clipboard History を利用できたり、今回解説する Workflow を作成することか可能になります。

Alfred

設定画面の General はこんな感じです。私は Hotkey を⌘のダブルタップにしています。ダブルタップしてもいいのですが、左右の⌘を同時にタップするのがお気に入りです。

General

あと、よく利用しているのが Clipboard History です。

Clipboard history

そして今回紹介する Workflows はこちらです。以前作っていたものが Notion tools です。今回は新規に hkob’s Notion tools を作っています。

Workflows

NotionRubyMapping の準備

macOS のデフォルトシステムに入っている ruby は以下のように 2.6.10p210 という非常に古いものです。そのためほとんどの人は rbenv などで最新版の Ruby を入れておりそちらを使っていると思います。

$ /usr/bin/ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]

ただ、Alfred から rbenv などでインストールした Ruby を起動させるのは手間がかかります。それほど最新の機能を使うわけではないので、NotionRubyMapping をシステムの方の Ruby にインストールしてしまいましょう。システムの Ruby へのインストールは管理者権限が必要なので、sudo が必要になります。パスワードが聞かれるのでログイン時のパスワードを入れてください。

$ sudo /usr/bin/gem install notion_ruby_mapping
Password:
Successfully installed notion_ruby_mapping-0.8.5
Parsing documentation for notion_ruby_mapping-0.8.5
Done installing documentation for notion_ruby_mapping after 0 seconds
1 gem installed

Workflow の作成

hkob’s Notion tools を作成した時の作業記録にスクリーンショットが残されているので、それを使って解説します。最初に「+」から、Blank Workflow を選択します。

Blank Workflow

詳細設定に必要な項目を設定します。

詳細設定

Launchpad を開く Workflow

まずは、Notion API が絡まない Launchpad ページをショートカットで開く flow を作成します。Input から Hotkey を選択し、Control + ⌘ + L をトリガーに設定します。

Hotkey

次に Actions の Open URL を繋げます。URL のところには直接 Launchpad の URL を入れるのではなく、 {var:TOP_PAGE} のように環境変数から取得します。

Open URL

環境変数は右上の [x][f:id:hkob:20240427210702p:plain] のマークから設定します。

[x]

Environment Variable のタブを選択すると環境変数を設定することができます。ここには現在の Workflows で使っているものが全部掲載されています。今後また増える可能性もありますが、まとめて説明しておきます。

Environment Variable

  1. MY_TZ: 時刻を設定するときのタイムゾーンを設定しています。日本であればここに書かれているように +09:00 とします。
  2. NOTION_API_KEY: 後で Notion API を利用するときのインテグレーションキーを記述します。他人に渡すときにこれが流出しないように「Don’t Export」にチェックを入れておきます。
  3. NOTION_CALENDAR: イベントを登録したいカレンダーの名前を設定します。私の場合は、 Notion というカレンダー名にしています。
  4. TASK_DB_ID: タスクデータベースの ID です。タスクデータベースをフルページで開いた時の URL が以下のようになっているとき、 / の後ろから ? の前までがデータベース ID となります。この例では 1fd72fc2a18247e2a9d347b67e5f9cf0 となります。

     https://www.notion.so/hkob/1fd72fc2a18247e2a9d347b67e5f9cf0?v=bba84cac03054dd0892e4bd317345e7f&pvs=4
    
  5. TOP_PAGE: こちらが先ほどの Workflow で使った Launchpad のページ URL です。

  6. X_DB_ID: X のポストを保存するデータベースの ID です。

最終的に Workflow は以下のようになりました。これでどのアプリが起動している状態でも、 ^⌘L をタイプすると Launchpad が Arc で開きます。

Launchpad workflow

クリップボードからタスクを作成する Workflow

次にクリップボードの内容をタイトルにしたタスクを作成する Workflow を作ります。こちらは NotionRubyMapping を活用します。フローの流れは以下のようになります。

New task workflow

まず、Hotkey は ^⌘T としました。

Hotkey

次は Utilities にある Arg and Vars です。次のスクリプトにクリップボードの内容を渡すために title という環境変数に代入します。クリップボードから値を取得するには {clipboard:0} とすればよいです。

Arg and Vars

次は Actions にある Run Script です。ここで Language はシステムの Ruby である /usr/bin/ruby としています。これを使うために上で NotionRubyMapping をシステム Ruby にインストールしました。

Run Script

スクリプトをコピーできるようにテキストで記述しておきます。create_child_page はまだ解説していませんが、データベースにページを追加するメソッドです。人に渡すことを考えると Task name の部分も環境変数に入れてもよかったかもしれません。この部分はタイトルのプロパティ名を入れてください。最後に作成したページの URL を表示していますが、これが次のアクションの入力になります。

require "notion_ruby_mapping"
include NotionRubyMapping

NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] }
title = ENV["title"]
db = Database.find ENV["TASK_DB_ID"]
page = db.create_child_page do |p, pp|
  pp["Task name"].text_objects << title
end
print page.url

最後の Open URL は前のスクリプトの出力 ({query})をそのまま表示します。

Open URL

おわりに

最初の Workflow は NotionRubyMapping を使っていなかったので、今回は二つ紹介しました。