メモ管理は Obsidian in Cursor が最強
はじめまして。松濤Vimmerと申します。
普段はWeb系の会社でフロントエンドエンジニア、デザイナー、PMなどしております。
早速ですが筆者が投稿した以下のツイートが反響を得ました。
投稿した当時はフォロワー10人ほどでしたが、元木さんをはじめ多くの方に拡散していただき8万インプレッションを超えることができました。
そこでお礼の意味をこめてこのツイートをもう少し詳しくまとめた記事を書きたく今回このような形で執筆させていただきました。
お願い多くの方にリポストで拡散していただきたく、「リポストで無料」という形を取らせていただきました。何卒ご了承ください。
無料公開に変更しました!是非最後までご一読ください。
※以下内容で間違っている内容であったり、改善の余地があったりする場合は https://x.com/shotovim のアカウント宛てにメンション、メッセージなど送っていただきたいです。
私のObsidianについて
Obsidian の運用
ノートの管理について
私はノートの管理を GitHub で行っています。同様に、モバイルとデスクトップ間の Obsidian の同期も GitHub を利用しています。Obsidian と GitHub の連携には、obsidian-git を使用しています。
以前は iCloud を使って管理・同期をしていましたが、以下の問題がありました。
同期の速度が非常に遅い
Mac と iPhone 間での同期しかできない
また、私は GitHub をよく使うため、これらの理由から GitHub 管理に移行しました。
GitHub を使うことで、モバイルでのメモの使用感が一段と良くなったように感じます。これは、モバイルで使用する際に Git からデータを pull することで、非常に高速に使用を開始できるからです(これは iCloud では実現できませんでした)。
ただし、GitHub 管理にも問題点を感じています。
画像ファイルを管理するとモバイル側で処理できない(タイムアウトになる)
モバイル側の編集内容とデスクトップ側の編集内容が競合することがある(コンフリクトする)
前者については解決しました(詳細は後ほど説明します)が、後者はまだ解決できていません。しかし、これらの問題点を考慮しても、GitHub 管理は優れた管理方法だと考えています。
画像の管理について
画像の管理は、AWSのS3を用いて全ての画像データをS3に保存しています。ObsidianとS3の連携には、s3-image-uploader を使用しています。画像をS3に格納することで、モバイル同期時にタイムアウトする問題に対応しました。
Kindle について
私はKindleで学んだことをハイライトし、そのハイライト部分をObsidianに出力しています。ObsidianとKindleの連携には、Kindle Highlightsを利用しています。記事では得られない多くの知識が本には含まれており、知識を蓄える上で非常に重宝しています。
Ankiについて
Ankiは分散学習が可能なフラッシュカードアプリです。
私は長期的に覚えたいことをAnkiを使って記憶しています。Ankiの運用もObsidianをベースにしており、Obsidianでデッキを作成し、Ankiと同期させるという流れを取っています。ObsidianとAnkiの同期には、Obsidian_to_Ankiを使用しています。Cursorを用いたAnkiのデッキ作成方法については、後ほど紹介します。
Cursor について
私は普段、メモはObsidianアプリを使用して取っています。しかし、Cursorを利用したい時や高度なVim操作を行いたい時には、Cursorを使用しています。Cursorの活用方法については、この後詳しく詳しく紹介しますので、ここでは割愛します。
Obsidianのノート構成
私のノートの構成は、Zettelkastenのフレームワークをカスタマイズしたものになっています。Zettelkastenについては、円谷さんの動画が非常にわかりやすいので、おすすめします。
構成図
.
├── Zettelkasten/
│ ├── FleetingNote/
│ ├── IndexNote/
│ ├── LiteratureNote/
│ ├── PermanentNote/
│ └── Zettelkastenの運用/
├── Daily/
├── MEMO(Thino)/
└── Template/
PermanentNote(最上位)
LiteratureNote
FleetingNote
Daily
Memo
IndexNote
各ノートの役割は次のとおりです。
PermanentNote(恒久ノート):最上位のノートで、保存用に使用します。LiteratureNoteやFleetingNoteをもとに内容をまとめて作成します。
LiteratureNote(文献ノート):参考資料や文献からの情報をまとめたノートです。しかし現状では記事を溜め込む場所になっており、完全には機能していません。
FleetingNote(一時ノート):一時的な思考やアイデアを記録するノートです。大きな括りで何か少しまとめたいことを記録していますが、こちらも完全には機能していません。
Daily(デイリーノート):さらに細かいメモ(殴り書き)を記録します。
Memo(メモ):ふと思ったことを記録します。
IndexNote(索引ノート):目次や索引として機能するノートです。
PermanentNoteはノート構成の最上位に位置し、LiteratureNoteやFleetingNoteから内容を統合して作成します。
また、DailyとMemoは基本的に独立しており、適宜LiteratureNoteと結びつけるようにしています。
構成理由
私がメモを管理する際にタグを用いる理由は、メモを効率的に管理したいからです。プログラミングでは多種多様なアーキテクチャが存在し、適材適所で選定する必要があります。アーキテクチャを適用することで、多くのファイルの責務の理解が早まり、チームでの開発促進につながります。しかし、メモ管理においては、これらの複雑なアーキテクチャは不要だと考えています。その理由は以下の2点です。
対象がチームではなく個人である
それぞれのノート(メモ)は独立している
これらの理由から、私は階層構造ではなく、タグを用いた管理方法を採用しました。ノートを探す最適な方法は検索であり、階層をたどるのは非効率だと考えています。
私は2年前まではNotionのデータベースで階層構造による管理をしていました。しかし、無駄な階層を次々と増やした結果、見たいメモを見失ってしまう問題に直面しました。そこで、タグを用い、Zettelkastenのフレームワークに沿って、基本的にフラットな構造で管理することを決断しました。
なお、Zettelkastenに馴染みがない方も多いと思われるので、以下では「メモ」=LiteratureNote、FleetingNote、「ノート」=PermanentNoteとして表記しています。
実践
ここからが本題となります。
1. Cursor で メモや記事 から まとめノートを作成する
ここでは、Cursorを使用してメモからまとめノートを作成する例を紹介します。具体的には、以下のパターンを想定しています。
Web上でクリップした記事をまとめる
Kindleのハイライトからまとめノートを作成する
日頃メモしている内容をまとめる
以下では、Web上でクリップした記事をまとめる例と、Kindleのハイライトをまとめる方法について紹介します。なお、メモをまとめる方法についても、大きなやり方の違いはありません。
Web上でクリップした記事をまとめる
1 . Obsidian Web Clipper で まとめたい記事を保存する
Obsidian Web Clipper というChrome 拡張を使用することで任意のWebページをObsidian上に保存することができます。
これを用いて複数記事を用意します。
2. 用意された複数の記事をCursor Composer Agentで1つのファイルにまとめる
ファイルの指定方法には、直接指定する方法と、Agentに任せる方法があります。
直接指定:ファイルが少ない場合に有効で、まとめたいファイルを確実に指定できます。
Agentに任せる:ファイル数が多い場合に有効です。一方でコードベースで探索するためプロンプトの文言を調整しないと、ファイルの漏れなどが発生する可能性があるため注意が必要です。
以下に、それぞれのパターンを挙げます。
直接ファイルを指定した場合
Agentに任せた場合
成功例
Reactという条件かつclippings タグがついたメモをすべて取得できている
失敗例
Reactという条件かつclippings タグがついたメモを1つしか取得できていない
Agentに任せた場合
成功例
「React」という条件かつ「clippings」タグがついたメモをすべて取得できている。
失敗例:
「React」という条件かつ「clippings」タグがついたメモを1つしか取得できていない。
このように、Agentに任せる場合、出力が失敗することがあるので注意が必要です。
3. 出力されたファイルをアップデートする
ここまででやりたいことの80%は完了しましたが、もう少し内容に磨きをかけたいと思います。具体的なコードが欲しいので、内容を肉付けします。
4. ファイル同士を紐づける
これは任意の作業ですが、私はZettelkastenのフレームワークに基づいてノートを作成しているため、参考にしたメモを今回のノートと紐づける必要があります。以下のようなプロンプトを使用することで、今回のノートに参考にしたメモを紐づけることが可能になります。(変更内容が多くない場合は、自分で追加しても構いません)
このフローによって完成したノートがこちらです。
Kindleハイライトからまとめノートを作成する
読書において、アウトプットが効果的であるというのが最近の通説です。読んだ内容を能動的にノートに書き出すことで、学んだことが整理されます。しかし、まとめノートをゼロから作成するのは腰が重く、何を書けばよいのか分からないことも多いでしょう。そこで、KindleハイライトとCursorを組み合わせて活用します。
Obsidianプラグイン:Kindle Highlights
Cursor:Cursor Composer Agent
こちらも先ほどの方法と大きくは変わらないため、異なる部分のみ紹介します。
1. Kindleでハイライトする
Kindleのアプリ内で、気になる箇所や重要なポイントをハイライトします。
2. Kindle Highlightsでハイライト内容をObsidianに取り込む
Kindle Highlightsプラグインを使用して、Kindleのハイライト内容をObsidianに取り込みます
設定は簡単です。
まず、出力したいメモの階層を設定し、Amazon のリージョン設定を行います。続いて、Amazon Kindle へのサインインなど初期設定を行うことで、Obsidian のサイドバーからワンクリックでハイライト内容を取り込むことが可能になります。
取り込んだ結果は以下のようになります。
Cursor Compose Agent で生成する
Cursor Compose Agent を使って生成する方法は、先ほどの手順を参考にしてください。私は Kindle の内容をまとめる際、理解度チェック問題を作成する形でまとめています。ここではその例をお見せします。
2. Cursor でタグ付け
ここでは、Cursor を用いて Obsidian ノート、メモにタグ付けする方法を紹介します。Obsidian では、各ノートにプロパティを設定することができます。プロパティを活用することで、ノート同士を紐づけたり、ファイルタイプを定義したりすることが可能です。特に、筆者はこのプロパティの中でもタグが非常に有用であると考えます。
「tag:~~」 を用いた効率的な検索が可能になる
フラットなノートの管理構造でも、タグを用いてカテゴリ分けができる
これらの点から、タグは検索性と管理の面で優れていると感じています。
一方で、タグ付けにはいくつかのデメリットも存在します。
タグ付け自体が手間であり、大量のノート、メモに対して一貫性を保つのが難しい
タグの種類が増えすぎると、管理が煩雑になり、目的のタグを見つけにくくなる
統一されたタグ付けのルールや命名規則を設定しないと、同義のタグが乱立し、検索効率が低下する
これらのデメリットを踏まえると、効率的なタグ付けを行うためには、事前にタグの設計や命名規則をしっかりと考えることが重要です。
そこで筆者は以下のルールでタグ運用しています。(この運用方法は絶賛施行中であり、筆者のタグもリファクタリング完了していません。)
タグの設計と命名規則
1. 一貫性のある命名
小文字統一:タグ名はすべて小文字で記述します。
例:#meeting、#project-alpha
スペースの禁止:タグ名にスペースは使用せず、単語間の区切りにはハイフン(-)やアンダースコア(_)を使用します。
例:#to-do、#research_notes
2. タグの種類の明確化
タグは内容タグを中心とし、状態タグや時間タグ、場所タグは使用禁止とします。
◯
内容タグ:ノートの主題やトピックを表すタグ。
例:#python、#データ分析
×
状態タグ:ノートの進捗や状態を示すタグ。
例:#未整理、#要修正、#完了
時間タグ:日時や期間に関するタグ。
例:#2023、#Q1、#2023/10/01
場所タグ:場所やロケーションに関するタグ。
例:#東京、#オフィス
3. 単数形と複数形の統一
基本は単数形:タグ名は基本的に単数形を使用します。
例:#note(×#notes)、#task(×#tasks)
4. 特殊文字の使用制限
禁止文字:タグ名にスペース、特殊記号、絵文字は使用しません。
許可文字:ハイフン(-)、アンダースコア(_)、スラッシュ(/)のみ使用可能です。
5. 新規タグ作成前の確認
既存タグの確認:新しいタグを作成する前に、同義または類似のタグがないか確認します。
目的:タグの重複や乱立を防ぎ、一貫性を保つため。
6. 定期的なタグの見直し
タグクリーンアップ:定期的にタグの一覧を見直し、不要なタグや重複しているタグを整理します。
頻度:毎月30日
7. タグ命名のガイドライン
具体的かつ簡潔に:タグ名はノートの内容を的確に表す、具体的で簡潔なものにします。
例:#マーケティング戦略(○)、#戦略(×:曖昧)
略語の使用:一般的に認識されている略語のみ使用します。
例:#AI(人工知能)、#UI(ユーザーインターフェース)
8. 固有名詞の取り扱い
正式名称を使用:人物名や組織名、地名などの固有名詞は正式名称を使用します。
例:#山田太郎、#株式会社テック
9. タグの複数付与
関連タグの併用:必要に応じて複数のタグをノートに付与します。
ただし付与するタグの数は最大で5つまでとします。
目的:多面的な検索を可能にし、ノートの発見性を高めるため。
10. タグ一覧の共有
ドキュメント化:使用しているタグの一覧とその説明をドキュメント化し、アクセス可能な場所に保管します。
indexNote > タグ一覧 から閲覧可能です。
11. 禁止タグ
デフォルトで存在するテンプレートの見出しである、
- TODO
- ROUTINE
- daily-routineなど
- JOURNAL
に関するタグに含んではいけない。
その他
- STUDY
- EXERCISE
は毎日行うものであるためタグから除外する。
これらルールにより
タグの種類が増えすぎると、管理が煩雑になり、目的のタグを見つけにくくなる
統一されたタグ付けのルールや命名規則を設定しないと、同義のタグが乱立し、検索効率が低下する
の問題への対応が可能になります。
一方で先に上げたタグ付け自体が手間であり、大量のノートに対して一貫性を保つのが難しいという課題を解決するために、Cursor Compose Agent が役立ちます。
以下の例では、指定した期間のノートを Cursor Agent が探索し、各ノートの内容から適切なタグを割り当てる処理を行っています。このとき、タグ運用のルールを適用することで、一貫したタグを付与することができます。
〜省略〜
この流れでタグ付けルールに従って、Cursor Agent が自動でタグを付与してくれます。
これにより
といった問題への対処が可能になり、タグのメリットを最大限活かした運用が可能になります。
3. Cursor で Anki デッキを作成する
ここでは Cursor を用いて Anki のデッキを作成する例を紹介します。
例
Duolingo で苦手な単語を Anki で学習する
テスト内容を Anki で学習する
このようなパターンを想定しています。
筆者は Duolingo ユーザーなため「 Duolingo で苦手な単語を Anki で学習する 」について紹介します。
1 Duolingo から単語を取得
2 Cursor Chat でコピーした単語を Anki フォーマットに乗せる
筆者が使用している Anki フォーマットは以下です。こちらのフォーマットを基に Cursor でデッキを作成してもらいます。
START
基本 (裏表反転カード付き)
表面:
{{韓国語}}
裏面
{{日本語}}
Tags: 韓国語
END
3 Obsidian_to_Anki で Anki と同期させ一意の ID と紐づける
Obisidian_to_Anki をサイドバーから実行することで ID が割り当てられます。
Obsidian で Anki のデッキを作ることで AI の恩恵を最大限受けることができます。いままで手作業で行っていた単語カード作成を自動で行うことができるのでおすすめです。
まとめ
今回は Cursor と Obsidian を用いてできる Tips を3つ紹介しました。
筆者はCursor と Obsidian を組み合わせることで今回紹介した以外にも便利なことがたくさんできると考えています。
一方で Cursor の現状として思うような出力にならないということが挙げられると思います。
筆者は Obsidian in Cursor で重要なことはより Cursor が理解しやすいように
作成したノートに必ず適切なタグをつけることだと考えています。
統計を出したわけではあませんが体感、適切なタグをつけた方が Agent の
出力結果の正確性が高い気がします。
適切なタグを付与して便利なメモ管理生活を楽しみましょう。