はじめに
今日はいつもの 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 を作成することか可能になります。
設定画面の General はこんな感じです。私は Hotkey を⌘のダブルタップにしています。ダブルタップしてもいいのですが、左右の⌘を同時にタップするのがお気に入りです。
あと、よく利用しているのが Clipboard History です。
そして今回紹介する Workflows はこちらです。以前作っていたものが Notion tools です。今回は新規に hkob’s Notion tools を作っています。
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 を選択します。
詳細設定に必要な項目を設定します。
Launchpad を開く Workflow
まずは、Notion API が絡まない Launchpad ページをショートカットで開く flow を作成します。Input から Hotkey を選択し、Control + ⌘ + L をトリガーに設定します。
次に Actions の Open URL を繋げます。URL のところには直接 Launchpad の URL を入れるのではなく、 {var:TOP_PAGE}
のように環境変数から取得します。
環境変数は右上の [x][f:id:hkob:20240427210702p:plain]
のマークから設定します。
Environment Variable のタブを選択すると環境変数を設定することができます。ここには現在の Workflows で使っているものが全部掲載されています。今後また増える可能性もありますが、まとめて説明しておきます。
- MY_TZ: 時刻を設定するときのタイムゾーンを設定しています。日本であればここに書かれているように
+09:00
とします。 - NOTION_API_KEY: 後で Notion API を利用するときのインテグレーションキーを記述します。他人に渡すときにこれが流出しないように「Don’t Export」にチェックを入れておきます。
- NOTION_CALENDAR: イベントを登録したいカレンダーの名前を設定します。私の場合は、
Notion
というカレンダー名にしています。 TASK_DB_ID: タスクデータベースの ID です。タスクデータベースをフルページで開いた時の URL が以下のようになっているとき、
/
の後ろから?
の前までがデータベース ID となります。この例では1fd72fc2a18247e2a9d347b67e5f9cf0
となります。https://www.notion.so/hkob/1fd72fc2a18247e2a9d347b67e5f9cf0?v=bba84cac03054dd0892e4bd317345e7f&pvs=4
TOP_PAGE: こちらが先ほどの Workflow で使った Launchpad のページ URL です。
- X_DB_ID: X のポストを保存するデータベースの ID です。
最終的に Workflow は以下のようになりました。これでどのアプリが起動している状態でも、 ^⌘L
をタイプすると Launchpad が Arc で開きます。
クリップボードからタスクを作成する Workflow
次にクリップボードの内容をタイトルにしたタスクを作成する Workflow を作ります。こちらは NotionRubyMapping を活用します。フローの流れは以下のようになります。
まず、Hotkey は ^⌘T
としました。
次は Utilities にある Arg and Vars です。次のスクリプトにクリップボードの内容を渡すために title という環境変数に代入します。クリップボードから値を取得するには {clipboard:0}
とすればよいです。
次は Actions にある Run Script です。ここで Language はシステムの Ruby である /usr/bin/ruby
としています。これを使うために上で NotionRubyMapping をシステム Ruby にインストールしました。
スクリプトをコピーできるようにテキストで記述しておきます。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}
)をそのまま表示します。
おわりに
最初の Workflow は NotionRubyMapping を使っていなかったので、今回は二つ紹介しました。