
Raycast ScriptでNotionのTodoリストを追加する
2022-08-21
2023-01-15
はじめに
こんにちは、こふです。
スクリプトを動かし、Todo
リストを追加する方法を解説します。Alfred
を使うと有料
の機能が必要となりますが、Raycast
では無料
でできます。
- 前提
それでは解説を始めます。ステップ 1・2 は、Notion のデータベースに保存した記事の URL・タイトル一覧をファイル形式で出力する - こふぶろぐと共通です。
実際に利用した様子
スクリプトを入力して

追加の様子を確認して

Notion を見ると実際に追加されていることがわかります。

この中にはカテゴリを指定していない Todo
のみが表示されるようにしているので、追加後にここからカテゴリを適宜追加したり、不要なら後回しにセレクトを設定しています。
ちなみに、絵文字アイコンをロボットにすることで、この Todo
は Raycast
から追加したんだな〜とわかるようにしています。(本来なら Raycast
の画像を指定するのが最適ですね。)
ステップ 1:Integration を作成する
Notion API
を使うための API SECRET KEY
を取得します。
My integrations | Notion Developersにアクセスしてください。
権限は全て与えることとしますが、Read content / Update content
は不要です。個人的にこのトークンを併用しているため、僕はすべてにチェックしています(推奨はしません・・・)
用途ごとに Integration は分けることを推奨します。

ステップ 2:Integration をデータベースに招待する
記事を保存しているデータベースのページに Share
(共有)にその Integration
を招待してください。
ステップ 1 で作成した Integration
の名前を入力し、選んで招待しましょう。
ちなみに、データベース右上のボタンを押すと以下のようになります。

ステップ 3:Raycast Script を作成する
公式サイトにRaycast Scripts のはじめ方が載っていますが、英語なので、僕なりにここで記述します。
- Raycast を起動する
- Create Script Command を入力し選ぶ
- 作成画面に移る
- Bash を選び適当な名前を入力する

これだけです。
ステップ 4:コードを書く
掲載するコードをコピペしていただくと、すぐにできると思います。
Notion のデータベースの構造が僕と同じとは限りませんので、適宜切り貼りしましょう。
以下のファイルは同じディレクトリに配置します。
環境変数ファイル
.env1NOTION_API_KEY=secret_hogehoge 2TODO_DB_ID=hogehogehogehogehogehoge
追加用スクリプトファイル
properties
のところはProperty valuesを参考に、各自のカラムを指定してあげてください。
コードを載せた後に個別で解説しますので、わからない方はスクロールしてお読みください。
todo.sh1#!/bin/bash 2 3# Required parameters: 4# @raycast.schemaVersion 1 5# @raycast.title todo 6# @raycast.mode compact 7 8# Optional parameters: 9# @raycast.icon 🤖 10# @raycast.argument1 { "type": "text", "placeholder": "Input task name" } 11source .env 12 13curl 'https://api.notion.com/v1/pages' \ 14 -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ 15 -H "Content-Type: application/json" \ 16 -H "Notion-Version: 2022-06-28" \ 17 --data '{ 18 "parent": { "database_id": "'$TODO_DB_ID'" }, 19 "icon": { 20 "emoji": "🤖" 21 }, 22 "properties": { 23 "Title": { 24 "title": [ 25 {"text": {"content": "'$1'"}} 26 ] 27 }, 28 "Importance":{ 29 "select": { 30 "name": "Low" 31 } 32 }, 33 "Priority":{ 34 "select": { 35 "name": "Low" 36 } 37 }, 38 "Period":{ 39 "date": { 40 "start": "'$(date +%Y-%m-%d)'" 41 } 42 } 43 } 44}'
コード解説
処理したいことは、次のようになります。
スクリプト起動時にタイトルの文字列を受け取り、それを元に Todo のレコードを作成するが、その初期値を自分好みに設定する。ということです。
1# 環境変数ファイルを実行し、そのターミナル上でのみ値を持たせる 2source .env
1# @raycast.argument1 { "type": "text", "placeholder": "Input task name" } 2# 引数を受け取るRaycastScriptの用法
1# タイトルはNotionのデータベース作成時から削除できない必須の列で、その文字列はRaycastScriptで受け取った引数とする 2"Title": { 3 "title": [ 4 {"text": {"content": "'$1'"}} 5 ] 6}, 7# selectから設定したい値を選択する 8"Importance":{ 9 "select": { 10 "name": "Low" 11 } 12}, 13"Priority":{ 14 "select": { 15 "name": "Low" 16 } 17}, 18# Todoを行う期間を設定しており、デフォルトとして作成時点をとりあえず入れる 19"Period":{ 20 "date": { 21 "start": "'$(date +%Y-%m-%d)'" 22 } 23}
おわりに
これで Todo
リストをNotion
にパッと追加したい時に PC
に限り追加が可能になりました。