はじめに
Notion Tips の第187回目は、macOS サービスを作業記録用に改良: Notion Tips (178) - hkob’s blog で解説した Automator で作成された macOS のサービスを、ショートカットで作り直してみます。この記事ではショートカットを部分ごとに解説していますが、一番最後にショートカット自体を配布しているので、単に使いたい人はそちらをダウンロードして使ってください。
サービスメニューの設定
ショートカットを作成したら、一番最初に「サービスメニュー」の設定を行います。「クイックアクションとして使用」の中にある「サービスメニュー」にチェックを入れます。今回は、ショートカットキーとして「Cmd-Ctrl-N」としてみました。何かとぶつかりそうですが、その場合にはまた変えてみます。

サービスからのテキストの取得
以下のようにクイックアクションの入力を改行で分割し、最初の行を取得してみました。また、NOTION_API_KEY も設定しておきます。今回、それぞれのアクションの結果の名前がわかるように「マジック変数を選択」画面を掲載することにします。

実際にサービスが使えるようになっているかは、アプリのメニューから確認できます。サービスに対応したアプリであれば、このように一覧から実行できます。また、先ほどショートカットを設定したので、NotionCodeBlockShortcut の部分にショートカットも設定されていることが確認できます。

言語の選択部分
言語の選択部分はリストから選択するようにしました。

「リストから選択」の部分では、このように「---」の後に、「リストからの項目」を表示しています。これは上で取得した入力の最初の行になります。

実際に実行するとこのような形で最初の行が表示されます。キーボードで何文字かタイプすると絞り込みができます。

最も最近更新したページを取得
次に最も最近更新したページを取得します。これには search endpoint を使います。結果の JSON から page_id と url を取得しておきます。

Rich text array の作成
Notion API の RichText には 2000 文字の制限があります。Automator では Javascript で 1990 文字ごとに切り取る処理をしていましたが、ショートカットでは難しそうでした。そこで、改行ごとに分割したテキストごとに Rich text を作成していくことにします。ショートカットではリストの取り扱いが面倒なので、単に文字列の連結で rich_text_array を作成しました。ネックなのは最後の項目にも「,」が付いてしまうことです。この部分は後で辻褄合わせをします。(2025/1/1 修正: "のエスケープしかしておらず、\ のエスケープを忘れていました。こちらは修正しています)

Block 追加の JSON 作成
今回は箇条書きに現在の時刻を刻印し、サブブロックにコードブロックを追加します。children から下の部分がコードブロックの部分です。表示しきれなかったので、二つのスクリーンショットに分割して掲載します。こちらは前半です。

こちらは後半部分と、実際の Notion API 呼び出しの部分です。先ほど rich_text_array が最後に「,」で終わってしまうので、からの Rich text を追加しています。また、私は Notion アプリを使っているので、https の部分を notion に置き換えていますが、ブラウザを利用している人は、単に url を開くとしてください。

ショートカットの配布
作成したものはこちらに置いておきます。インストールするとインテグレーションキーを聞かれるので、設定すれば完了です。(2025/1/1 修正: スクリプトを修正したものに置き換えています)
おわりに
先日、Automator による Quick Action を紹介しましたが、いずれ Automator は使えなくなる可能性が高いので、是非ショートカットの方に移行してください。