RaycastからObsidianのデイリーノートへ最速でメモを取る
Summary
RaycastのCreate Script Command
機能を利用して、Cmd + m
一発でObsidianへメモを書けるように設定しました。
どのスクリーンでどのアプリを開いていても、任意のノートへ画面遷移なしで、3行までのメモを書き込めます🚀
実現した構成を簡単に説明しておきます。
- (Raycast)コマンドから、シェルスクリプトを引数付きで起動
- (スクリプト)引数の値をメモの内容として整形し、Advanced URIからQuickaddを呼び出し
- (Obsidian)バックグラウンドでQuickaddを起動して、渡されたメモを実際に書き込み
Background
LLMとの相性の良さによりPlain textの重要性が叫ばれている昨今、日々のメモを管理するためにObsidianを利用し始めた方も多いでしょう。自分もそのうちの一人です。
しかし、記録したい事がある度にObsidianを開いてメモるのは案外手間がかかりませんか...?
特に自分の環境では、Macbookとモニターを上下にレイアウトして、前者でdocや記事を参照しながら後者で作業をすることが多いので、メモの度にアプリを切り替えなければならない状態は避けたいというモチベーションがありました。
というわけで、Hotkey一発かつ画面遷移なしでデイリーノートにメモを追記する仕組みを作ってみたので、以下で具体的に紹介します。
Requirements
- Raycastから1アクションで起動できること
- メモは次の形式で記録されること
###### HH:MM
<複数行のメモ内容>
- その日のデイリーノートの
# Journal
セクション最下部に追記されること - 起動から書き込み完了まで、画面遷移やアプリのフォーカス移動が生じないこと
Dependencies
- Raycast
-
Obsidian
-
Advanced URI
- 一言で→ObsidianのリソースへURL経由でアクセスできるようになるプラグイン
-
QuickAdd
- 一言で→Markdown構造に基づいていい感じにメモを作成・追記するプラグイン
-
Advanced URI
Procedures
Obsidian configuration
Obsidianのコミュニティプラグインから"Advanced URI", "Quickadd"を検索してインストール、有効化します。
詳細な設定が必要なのはQuickaddの方です。
Quickaddの詳細は割愛します。
本記事の手順は"Quickadd is 何"が分からなくても再現可能ですが、気になる人向けに参考記事を貼っておきます。とても分かりやすいのでぜひ。
では設定を進めていきましょう✊
まずは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の全容
Raycast configuration
Raycastの Create Script Command
から、以下のシェルスクリプトを作成します。
#!/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
がサジェストされます。
入力欄のスイッチは、一般的なツール同様Tab
とShift+Tab
で可能です。
placeholderに従って入力を完了してReturn
を押下すると、QuickaddのChoiceで設定した通り、次のようにファイルに追記されます。
# Journal
###### 21:46
特殊文字も$%^^もスペース も
入力できます
###### 21:49
Quickaddの設定次第ですが、連続で実行しても
Jounalセクションの内容・子要素にかかわらず、
最下部にappendしてくれます
@raycast.argument
の仕様上、3行までしか書き込めないという制約はありますが、自分の「Webを閲覧しながらすぐにメモを取りたい」というニーズにはこれで十分でした🙆♂️
Raycast上でHotkeyを設定することで、Raycastの検索画面をすっ飛ばしてメモ入力を開始できます🔥
ex. Cmd+mをHotkeyに設定
自分が調べた際はRaycastとObsidianを連携して複数行のメモを扱う方法が見つからなかったので、本記事がどなたかの参考になれば幸いです!
(若干Hackyなので、よりスマートなやり方があればぜひコメントしていってください笑)
References
実装中に右往左往・試行錯誤していたログ
着想を得た先達の方々
ツールのReference
Discussion