5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mofmofAdvent Calendar 2024

Day 21

RustでNotionに記事を保存するCLIを作った

Last updated at Posted at 2024-12-20

作ったもの

clip-to-notionというCLIで、指定したURLのタイトルやメタデータを取得し、Notionのデータベースに保存することができます。

GitHubリポジトリはこちら

使い方の例

インストール:
cargo install clip-to-notion

設定コマンドでNotion APIキーやデータベースIDを登録(初回のみ):
ctn init

URLをNotionに保存:
ctn run https://example.com --tags foo,bar

なぜ作ったか

  • 読んだ記事と、その感想をメモしておきたい
  • 以前読んだ記事を振り返りやすくしたい
  • あとで読む記事を保存しておきたい
  • これらをブラウザを開かなくても実行できるようにしたい
    • CLIなら後述のRaycast Script Commandsから手軽に実行できる

できること

  • URLを渡すと、TitleとかDescriptionを良い感じに取ってきてNotion データベースに保存できる
  • 保存対象に合わせたフォーマットのNotion データベースを作れる

どのように使っているか

clip-to-notion (ctn) を Raycast Script Commands 経由で呼び出しています。

Raycast Script Commands

ctn コマンドでは、引数にURLを渡す必要があるが、 URLは事前にクリップボードにコピーされていることを前提として、ここでは pbpaste で取得します。

筆者のスクリプト

#!/usr/bin/env bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Clip to Notion
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🔖
# @raycast.argument1 { "type": "text", "placeholder": "tag1,tag2", "optional": true }
# @raycast.packageName Clip to Notion

# Documentation:
# @raycast.author tetzng
# @raycast.authorURL https://raycast.com/tetzng

export PATH="$HOME/.cargo/bin:$PATH"

url="$(pbpaste)"
# URL以外の文字列のときはctnコマンドが呼ばれないようにしている
if [[ -z "$url" ]]; then
    echo "Error: No URL provided and clipboard is empty."
    exit 1
elif ! [[ "$url" =~ ^https?:// ]]; then
    echo "Error: Invalid URL format."
    exit 1
fi

if [ -n "$1" ]; then
    # タグの表記ゆれを減らす(大文字を小文字に変換、スペースはハイフンに置き換え)
    tags=$(echo "$1" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')

    ctn run "$url" --tags "$tags" | jq -r '.properties.Name.title[0].plain_text as $name | "\($name)"'
else
    ctn run "$url" | jq -r '.properties.Name.title[0].plain_text as $name | "\($name)"'
fi

実際の手順

記事を読むのは、主にReeder Classicで、ブラウザ(Arc)からもたまに開くという感じで、だいたい下記のような手順です。おそらく他のアプリを使っていても、近しいことが実現できると思います。

  • 気になる記事を見つけたら、記事のURLをコピー
    • Arc Browserでは Command + Shift + C で現在のページのURLをコピーできる
    • Reeder Classicでは、Actions and Sharingの設定からCopy Linkにショートカットキーを割り当てられる。筆者は y キーに設定して使用している
  • Raycast Scriptをホットキーで呼び出して実行する
    • タグ付けオプションを用意したものの、考えるのが手間で、実際にはほとんど使用していない…

実際に使ってみて

  • クリップしたことで満足して、実際には後で読まないことも多い
  • Notionでメモを取る一方で、実際に読むのはブラウザなので、使い勝手が悪いと感じることもある
  • iPhoneから読みたい記事を見つけたときにクリップできない

まとめ

  • Rustは書いていて楽しい
  • Notionデータベースは沼
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?