📝

RaycastからObsidianのデイリーノートへ最速でメモを取る

に公開

Summary

RaycastのCreate Script Command機能を利用して、Cmd + m一発でObsidianへメモを書けるように設定しました。
どのスクリーンでどのアプリを開いていても、任意のノートへ画面遷移なしで、3行までのメモを書き込めます🚀
動作イメージ

実現した構成を簡単に説明しておきます。

  1. (Raycast)コマンドから、シェルスクリプトを引数付きで起動
  2. (スクリプト)引数の値をメモの内容として整形し、Advanced URIからQuickaddを呼び出し
  3. (Obsidian)バックグラウンドでQuickaddを起動して、渡されたメモを実際に書き込み

Background

LLMとの相性の良さによりPlain textの重要性が叫ばれている昨今、日々のメモを管理するためにObsidianを利用し始めた方も多いでしょう。自分もそのうちの一人です。
しかし、記録したい事がある度にObsidianを開いてメモるのは案外手間がかかりませんか...?
特に自分の環境では、Macbookとモニターを上下にレイアウトして、前者でdocや記事を参照しながら後者で作業をすることが多いので、メモの度にアプリを切り替えなければならない状態は避けたいというモチベーションがありました。

というわけで、Hotkey一発かつ画面遷移なしでデイリーノートにメモを追記する仕組みを作ってみたので、以下で具体的に紹介します。

Requirements

  1. Raycastから1アクションで起動できること
  2. メモは次の形式で記録されること
###### HH:MM
<複数行のメモ内容>
  1. その日のデイリーノートの # Journal セクション最下部に追記されること
  2. 起動から書き込み完了まで、画面遷移やアプリのフォーカス移動が生じないこと

Dependencies

  • Raycast
  • Obsidian
    • Advanced URI
      • 一言で→ObsidianのリソースへURL経由でアクセスできるようになるプラグイン
    • QuickAdd
      • 一言で→Markdown構造に基づいていい感じにメモを作成・追記するプラグイン

Procedures

Obsidian configuration

Obsidianのコミュニティプラグインから"Advanced URI", "Quickadd"を検索してインストール、有効化します。
詳細な設定が必要なのはQuickaddの方です。
Quickaddの詳細は割愛します。
本記事の手順は"Quickadd is 何"が分からなくても再現可能ですが、気になる人向けに参考記事を貼っておきます。とても分かりやすいのでぜひ。
https://pouhon.net/obsidian-quickadd/6908/

では設定を進めていきましょう✊
まずはSettingから、好きな名前でCaptureタイプのChoiceを作成します。
ここではRaycast-fleetingとしました。

次に、作成したChoiceの中身を設定していきます。重要なのは以下の項目です。

  • Capture To:書き込み先ファイルの指定。ここではデイリーノート
  • Insert after:ファイル中の追記位置指定。ここでは# Journalというh1要素。
  • Insert at end of section:指定したヘッダ要素の最下部に追記(Enabled)
  • Consider subsections:指定したヘッダ要素の子要素を考慮して追記(Enabled)
  • Capture Format:追記する内容のフォーマット。ここでは以下のように定義。
###### {{time}}
{{VALUE:raycast_input}}

Obsidian側の設定はOKです!
これで、要件2, 3を満たしつつ、Advanced-URIのパラメータとして渡されるメモをQuickaddで受け取り、デイリーノートへ書き込む準備ができました。

(FYI)今回私が設定したChoiceの全容

Choice設定1
Choice設定2

Raycast configuration

Raycastの Create Script Command から、以下のシェルスクリプトを作成します。

append-memos-to-daily-note.sh
#!/bin/bash

# RaycastからObsidianのQuickaddを利用してDaily Noteにメモを追加するためのスクリプト

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Append memos
# @raycast.mode compact

# Optional parameters:
# @raycast.icon 📝
# @raycast.argument1 { "type": "text", "placeholder": "1行目" }
# @raycast.argument2 { "type": "text", "placeholder": "2行目", "optional": true }
# @raycast.argument3 { "type": "text", "placeholder": "3行目", "optional": true }

USER_INPUT="$1"
if [ -n "$2" ]; then
  USER_INPUT="$USER_INPUT"$'\n'"$2"
fi
if [ -n "$3" ]; then
  USER_INPUT="$USER_INPUT"$'\n'"$3"
fi

ENCODED_CONTENT=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))" <<< "$USER_INPUT")

URI="obsidian://quickadd?choice=Raycast-fleeting&value-raycast_input=$ENCODED_CONTENT"

open --background "$URI"

実装のポイント

  • @raycast.argumentで引数を受け付け、各々を1~3行目として複数行の文字列に結合。
  • Advanced-URIのクエリパラメータでスペース等を扱うために、Pythonワンライナーでエンコード。
  • open --backgroundにより、画面遷移・フォーカスの移動無しで書き込みを実行。

Result

Raycastを起動し、@raycast.titleで指定したコマンド名をタイプすると、作成したScript Commandがサジェストされます。
呼び出し画面
入力欄のスイッチは、一般的なツール同様TabShift+Tabで可能です。

placeholderに従って入力を完了してReturnを押下すると、QuickaddのChoiceで設定した通り、次のようにファイルに追記されます。

# Journal
###### 21:46
特殊文字も$%^^もスペース も
入力できます

###### 21:49
Quickaddの設定次第ですが、連続で実行しても
Jounalセクションの内容・子要素にかかわらず、
最下部にappendしてくれます

@raycast.argumentの仕様上、3行までしか書き込めないという制約はありますが、自分の「Webを閲覧しながらすぐにメモを取りたい」というニーズにはこれで十分でした🙆‍♂️
Raycast上でHotkeyを設定することで、Raycastの検索画面をすっ飛ばしてメモ入力を開始できます🔥
Hotkey設定
ex. Cmd+mをHotkeyに設定

自分が調べた際はRaycastとObsidianを連携して複数行のメモを扱う方法が見つからなかったので、本記事がどなたかの参考になれば幸いです!
(若干Hackyなので、よりスマートなやり方があればぜひコメントしていってください笑)

References

実装中に右往左往・試行錯誤していたログ
https://zenn.dev/soomattsu/scraps/9f407c029eb4f3

着想を得た先達の方々
https://zenn.dev/wagomu/articles/20231001_raycast_obsidian_memos
https://zenn.dev/cactatsu/articles/62fa23a98659b5#core-plugins

ツールのReference
https://quickadd.obsidian.guide/docs/Advanced/ObsidianUri
https://github.com/raycast/script-commands?tab=readme-ov-file#create-your-own-script-commands

Discussion