Raycast ScriptでNotionのTodoリストを追加するの絵文字

Raycast ScriptでNotionのTodoリストを追加する

2022-08-21

2022-08-21

はじめに

こんにちは、こふです。

スクリプトを動かし、Todo リストを追加する方法を解説します。Alfred を使うと有料の機能が必要となりますが、Raycast では無料でできます。

  • 前提
    • Raycast のインストール(MacOS のみ)
    • Notion のアカウント作成済み
    • シェルスクリプトの簡単な編集

それでは解説を始めます。ステップ 1・2 は、Notion のデータベースに保存した記事の URL・タイトル一覧をファイル形式で出力する - こふぶろぐと共通です。

Notion 関連

実際に利用した様子

スクリプトを入力して、

追加の様子を確認して、

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 のデータベースの構造が僕と同じとは限りませんので、適宜切り貼りしましょう。

以下のファイルは同じディレクトリに配置します。

環境変数ファイル

.env
NOTION_API_KEY=secret_hogehoge TODO_DB_ID=hogehogehogehogehogehoge

追加用スクリプトファイル

propertiesのところはProperty valuesを参考に、各自のカラムを指定してあげてください。

コードを載せた後に個別で解説しますので、わからない方はスクロールしてお読みください。

todo.sh
#!/bin/bash # Required parameters: # @raycast.schemaVersion 1 # @raycast.title todo # @raycast.mode compact # Optional parameters: # @raycast.icon 🤖 # @raycast.argument1 { "type": "text", "placeholder": "Input task name" } source .env curl 'https://api.notion.com/v1/pages' \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ -H "Content-Type: application/json" \ -H "Notion-Version: 2022-06-28" \ --data '{ "parent": { "database_id": "'$TODO_DB_ID'" }, "icon": { "emoji": "🤖" }, "properties": { "Title": { "title": [ {"text": {"content": "'$1'"}} ] }, "Importance":{ "select": { "name": "Low" } }, "Priority":{ "select": { "name": "Low" } }, "Period":{ "date": { "start": "'$(date +%Y-%m-%d)'" } } } }'

コード解説

処理したいことは、次のようになります。

スクリプト起動時にタイトルの文字列を受け取り、それを元に Todo のレコードを作成するが、その初期値を自分好みに設定する。ということです。

# 環境変数ファイルを実行し、そのターミナル上でのみ値を持たせる source .env
# @raycast.argument1 { "type": "text", "placeholder": "Input task name" } # 引数を受け取るRaycastScriptの用法
# タイトルはNotionのデータベース作成時から削除できない必須の列で、その文字列はRaycastScriptで受け取った引数とする "Title": { "title": [ {"text": {"content": "'$1'"}} ] }, # selectから設定したい値を選択する "Importance":{ "select": { "name": "Low" } }, "Priority":{ "select": { "name": "Low" } }, # Todoを行う期間を設定しており、デフォルトとして作成時点をとりあえず入れる "Period":{ "date": { "start": "'$(date +%Y-%m-%d)'" } }

さいごに

これで Todo リストを Notion にパッと追加したい時に PC に限り追加が可能になりました。

スマホでパッと思いついたことは GoogleTasks に追加しているのですが、この Todo を定期的に Notion に移行する仕組みを作ろうかな、とも思いました。



アバター

こふ

情報通信を専攻している大学生です。大学・趣味・アルバイトでプログラムを書いています。ITサービス・文章を創作することが好きです。

ぼくについて

共有する