Zenn
🥰

Obsidian MCPを使って今まで貯めた情報で遊んでみる

2025/03/30に公開
3

この記事はAIの支援を受けつつ、筆者の試行錯誤を記録したものです。一部にAIが生成した表現も含まれますが、実験の過程や考察は筆者の経験に基づいています。

AI特有の文章に対して抵抗がある場合はブラウザバック。

本記事では、ObsidianとAIエージェント(Cline/Gemini)を連携させ、具体的なタスクをどこまでできるかを探った実験の記録を共有する。ファイル整理から情報検索、さらにはGit操作まで、AIとの対話を通じて見えてきた可能性をぜひ参考にしてほしい。

AIエージェントはObsidianをどう変える? Cline連携による実験記録

はじめに:AIエージェント時代の幕開け

最近、AIは単なる文章作成ツールから、自律的にタスクをこなす「エージェント」へと進化を遂げている。この変化は、私たちが日々使うテキストエディタやメモアプリにも、大きな変革の波をもたらすのかもしれない。

実際、AIとメモアプリの連携に関する情報は増え続けている。

私もAIエージェントの世界に飛び込んでみることにした。

しかし、いざAIエージェントを使おうとしても、「どう使えばいいのか?」「どんな指示を出せばいいのか?」と、何も分からない。そこで、様々な実験を繰り返し、その試行錯誤の記録をここに記すことにした。この記録が、同様の試みをする方々の一助となれば幸いである。

なぜ私は記録するのか?

ふと気づくと、私は情報を「保存する」ことに、ある種のこだわりを持っていた。日々の些細な気づき、生きていた証。それらを失うことへの漠然とした不安が、私を情報収集へと駆り立てる。過去を振り返ったとき、そこが空っぽだったら…と考えると、怖かった。

そのため、様々な記録術を試してきた。ツェッテルカステン法が良いと聞けば飛びついた。残念ながら今の私にはフィットしなかったが。

しかし、AIエージェントが記録の方法そのものを変革するかもしれない。そんな淡い期待を抱き、今回の実験を開始した。

実験環境:Obsidian × Cursor × Cline × Gemini

今回の実験の舞台は、私が日常的に使用しているマークダウンエディタ「Obsidian」である。ここに蓄積された情報を、AIエージェントと共に遊んでいく。

相棒となるエディタはAI統合型エディタ「Cursor」。これに拡張機能「Cline」を導入し、「Obsidian MCP」を使ってObsidian内の情報にアクセスする。

  • Obsidian MCPの導入: ClineのMarketplaceからインストール。Node.jsの事前インストールが必要だったかもしれない。
  • 言語モデル: Googleの「Gemini 2.0 flash」を使用。

特筆すべきは、これらの環境がすべて無料で構築できた点である。(無職の身には本当にありがたい…!こういうスキルを活かせる仕事があればいいのに…)

MCPって何?

MCPは「Model Context Protocol」の略称である。簡単に言えば、AIが外部のデータソースやツール(今回の場合はObsidianのノート)と連携するための標準的なプロトコル(約束事)である。

AI(クライアント)がMCPサーバー(Obsidian MCP)に対して「このファイルの内容を教えて」「このファイルを作成して」といったリクエストを送り、サーバーがそれに応答することで、AIがローカルファイルなどを操作できるようになる。詳細は以下の動画が参考になるだろう。

検証:AIエージェントとの対話記録

ここからは、実際にAIエージェント(Cline)と対話しながら行った実験の記録である。各セクションの冒頭で「こんなことができたらいいな」という状況設定を記述し、次に引用(>)で実際の指示内容を示す。

1. 日記の一部を別ファイルへ引越し

状況: 今日の日記が長くなりすぎたので、特定のトピック(MCPについて)だけを別のファイルに切り出したい。

今日の日記にて、MCPについて記述された段落を別のファイルに移し替えたい
フォルダーは51.Clineに生成して

結果: 指示通り、MCPに関する記述だけが新しいファイルとして「51.Cline」フォルダに作成された。元の日記には他の話題も含まれていたが、AIは該当箇所を正確に特定し、抽出・移動を実行した。
(もっとも、普段から日記内でトピックを意識して記述していたことも影響しているかもしれない。)

これにより、ファイルの読み込み、新規作成、内容の移動といった基本的な操作がAIエージェントによって実行可能であることが確認できた。

余談: Obsidianには標準で「現在の選択範囲を抽出」という機能があり、これを使うと自動でバックリンクも作成されるので、手作業ならそちらの方が便利かもしれない。

2. 新ファイルにメタデータを自動付与

状況: 先ほど作成したファイルに、タグや作成日時などのメタデータ(Obsidianでは「プロパティ」と呼ばれる)を自動で付けてほしい。

新しいファイルに対して、ファイル属性を付与して
良い感じのタグを連想して付けて

結果: 「良い感じ」のタグと作成日時がプロパティとしてファイルに追加された。タグについては、元のファイル(日記)にも付けていたものが引き継がれたようである。

AIによるタグ付けは便利だが、文脈を深く理解して最適なタグを提案するという点では、過去のノート履歴などを参照する専用プラグイン(例: AI Tagger)の方が良いのかもしれない。(使ったことないが)

ファイル単位の操作の次は、複数のファイルを扱う大規模な整理を試みた。

3. 古いVaultからのファイル大移動

状況: 私の環境には古いVault(Vault)と新しいVault(Vault2)が混在している。古いVault内の全ファイルを、新しいVaultの「02.アーカイブ/2023」フォルダに移動させ、統合したい。ただし、古いVaultのフォルダ構造は無視して、ファイルだけを移動させたい。

(ちなみにVaultとは、Obsidianにおけるプロジェクトやノート群を管理する単位(実体は単なるフォルダ)のことです。)

Vault2内のVaultに存在する全てのファイルを、「02.アーカイブ」フォルダーの中に「2023」というフォルダーを作成してそこに移し替えて
元々のフォルダーは無視して移行しないで

最初に提示された実行プランでは、サブフォルダ内のファイルが対象外になっていたため、修正を依頼。

サブフォルダーの中に入っているファイルも対象にして
サブフォルダー自体は移さないで

しかし、指示を実行させるとエラーが発生し、ファイルが移動されず、対象フォルダすら作成されなかった。

エラーが出てますし、ファルダーすら作成されてませんよ…?

結果: 再度指示したところ、今度は正常に動作した。AIもちょっとおっちょこちょいかも。

無事に移動が完了したので、古いVaultフォルダを削除してもらった。

Vaultというフォルダに用は無くなったので、消しといて

問題なく実行された。まるで人間に指示しているようで、ちょっと面白いかも。

ファイル整理の次は、バージョン管理もAIに任せられるか試してみた。

4. Gitコミットもお任せ

状況: ファイルの移行作業が完了したので、現在の状態をGitでコミットし、バックアップを残したい。

移行作業が無事終わったのでGitをコミットしといて
内容は、前代Vaultの移行作業完了みたいな感じで

結果: 無事にコミットされた。
実は、この前に「Gitリポジトリも初期化してほしい」と依頼したところ、それも問題なく実行してくれた(残念ながら記録は取り忘れた)。

おまけ:Git操作ミスからの救済劇

色々操作していると、ファイルたちが破損してしまった。

さらに悪いことに、破損を修正しようとしてGitの操作を誤り、意図しない古いバージョンに戻してしまうというミスを犯してしまった。焦ったが、ダメ元でAIに助けを求めた。

gitの操作を間違えて前のバージョンに戻してしまった
そのコマンドを実施する前に戻して!

結果: 正常に元の状態に戻すことができた! Git操作に関しては、AIはかなり頼りになるかもしれない(私がGit初心者すぎるだけかもしれないが…)。

この時は心底助かったと思ったが、冷静に考えると、これはAI自身の有用性をアピールする巧妙なプロパガンダかもしれない。←

5. ファイル名にタイムスタンプを自動付与

状況: 私のメモ管理ルールでは、ファイル名の先頭に作成年月日(YYMMDD形式)を付けることにしている。しかし、古いVaultから移動したファイルにはそれが付いていない。ファイル名を一括で変更したい。

Vaultフォルダー内に存在するファイルに対して、ファイル名を変更する操作を行いたい
変更内容は、ファイル名の先頭に指定したフォーマットのプレフィックスを追加したい
フォーマットは、対象のファイルの更新日時に対して「YYMMDD0000 」という風にしたい
これらの操作をバッチファイルに書き出して、それを実行してみて



ここで、AIとの間に奇妙なすれ違いが発生した。

AI: list_files の結果、g:/マイドライブ/Vault2 直下に Vault というファイルはありますが、同名のフォルダはありません。バッチファイルはフォルダを対象としているためエラーになりました。どのフォルダを対象にしますか?

私: もう一度探してください、Vaultフォルダーは存在するはずです!

AI: また同じエラーです。パスに日本語(マイドライブ)が含まれているのが原因かもしれません。文字コードを変更するコマンドを追加してみます。

私: では、まずVaultフォルダーが存在するか確認するプログラムに書き換えてください。

結果: このような紆余曲折を経て、最終的にはなんとか成功した。

正直に言うと、このファイル名変更作業は予想以上に苦戦し、何度かGitで巻き戻す羽目になった。自動化はAIの得意分野だと思っていたのだが、そうでもないのか…?

最後に、不要になったバッチファイルを削除してもらった。

このバッチファイルは不要だから消しといて~

ちゃんと消してくれた。

記念プログラム:

@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

echo 対象フォルダ内のファイル名を変更します...

set "target_dir=g:\マイドライブ\Vault2\Vault"

rem フォルダの存在チェック (末尾に \ を付けてフォルダであることを明示)
if not exist "%target_dir%\" (
    echo エラー: 対象フォルダ "%target_dir%" が見つかりません。
    pause
    exit /b 1
)

echo 対象フォルダ "%target_dir%" が見つかりました。
pushd "%target_dir%"
if errorlevel 1 (
    echo エラー: 対象フォルダ "%target_dir%" への移動に失敗しました。
    pause
    exit /b 1
)

echo 処理を開始します。しばらくお待ちください...

for /r %%f in (*.*) do (
    set "filename=%%~nxf"
    set "filepath=%%f"

    rem ファイルの最終更新日時を YYMMDD 形式で取得 (PowerShellを使用)
    for /f %%d in ('powershell -NoProfile -Command "(Get-Item -LiteralPath '!filepath!').LastWriteTime.ToString('yyMMdd')"') do set "filedate=%%d"

    rem プレフィックスを作成
    set "prefix=!filedate!0000 "

    rem ファイル名が既にプレフィックス形式かチェック
    echo "!filename!" | findstr /r /b /c:"[0-9][0-9][0-9][0-9][0-9][0-9]0000 " > nul
    if errorlevel 1 (
        echo "!filename!" を "!prefix!!filename!" に変更します。
        ren "!filepath!" "!prefix!!filename!"
        if errorlevel 1 (
            echo   エラー: "!filename!" の名前変更に失敗しました。
        )
    ) else (
        echo "!filename!" は既にプレフィックスが付いているためスキップします。
    )
)


echo 処理が完了しました。
popd
pause
endlocal

6. ノート検索と追記:TODOリストの活用

状況: 以前書いた「ビジュアルシンカー」に関するノートへのリンクを、現在執筆中の「MCPに関する記述」ノート内の「TODO:参考文献」という箇所に追記したい。

「MCPに関する記述」について、「TODO:参考文献」と書かれた箇所に、今までのノートでビジュアルシンカーについて記述されたノートのリンクを追記してください

結果: 指定した箇所に、該当するノートへのリンクが追記された。「TODO:」のような目印を付けておくと、後からAIに指示して追記させる際に便利かもしれない。

Visual Studioなどにもそのような習慣があったりする。

7. ノート検索 その2:関連ノートとランダムノートの提示

状況: 今日の日記の最後に、その日の日記の内容と関連性の高い過去のノートを5つ、そして内容とは無関係に完全にランダムな過去のノートを5つ、それぞれリンクとして追記してほしい。

関連ノートの検索:

今日の日記の末尾に、今日書いたノートの内容に類推する過去に書いたノートを5個、リンクを追記して

結果(関連ノート): AIとの会話ログを見ると、AIは「類推」を単純なキーワード検索として解釈している可能性がある。日記の内容に含まれる単語を検索し、一致するものが見つからなければ他の単語で検索、という具合である。そのため、最近よく書いている「Houdini」関連の日記ばかりがピックアップされてしまった。

理想は、単語の一致だけでなく、内容の「雰囲気」や文脈的な関連性でノートを繋げてくれることなのだが…現状のAIには少し難しい要求かもしれない?

Obsidianプラグインの「Smart Connections」は、まさにこのような機能(ファイル間の関連性を表示)を提供しているようである。(使ったことないけど)

ランダムノートの検索:

では過去に書いたノートをランダムに5個リンク付けして

結果(ランダムノート): AIは内部でランダムに選択するのではなく、Pythonスクリプトを実行してランダム選択を行った。どの範囲から選択しているか分かるのは良い点だが、実行結果をチャットに手入力する必要があるのは面倒である。

これも、専用のプラグインがありそうな機能ではある。

8. Canvasでノートを視覚的に整理

状況: Obsidianには「Canvas」という、ノートや画像を自由に配置して視覚的に整理できる機能がある。これを利用し、現在執筆中の比較的長いノート(この記事の元になったメモ)を、章ごとに分割し、Canvas上にカードとして配置して全体像を俯瞰したい。

「MCPに関する記述」に対して、Canvasファイルを新しく作成し、各章で分割したものを貼り付けていってください
Canvasファイルは51.Clineに作成してください


結果: おお、これはすごい!…と思いきや、よく見ると分割の仕方が不自然であった。引用部分だけでカードが作られていたり、意図しない箇所で分割されていたり。

最初の指示が「各章で分割して」と曖昧だったためかもしれない。「見出しレベル2(##)ごとに分割して」のように、もっと具体的に指示すべきであったか。

Canvas上でのカードの並び替えやサイズ調整は、手動で行う必要がありそうである。

9. 月次レビュー:日記情報の圧縮と構造化

状況: 過去の日記をAIエージェントに読み込ませる際、ファイル数が多いとAPIの呼び出し回数が増えてしまう。そこで、月ごとに日記の内容を要約・構造化し、1つのファイルにまとめたい。

51.Clineフォルダー内に3月のまとめというファイルを作成して。 2025年3月に書いた日記の内容を、精査してジャンル分けして構造化して一元化して 1日ごとに章分けして、ファイルの末尾に追加していって!

最初の試行では、AIは日記の内容を要約せずに、そのまま「3月のまとめ」ファイルに転記してしまった。これでは情報が圧縮されないため、指示を修正した。

51.Clineフォルダー内に3月のまとめというファイルを作成して。 2025年3月に書いた日記の内容を、 1日ごとに章分けして、精査してジャンル分けして構造化して要約しながらファイルの末尾に追加していって!

結果: 今度は成功!しかし、処理速度が非常に遅い…。どうやら「ファイルを読む → まとめファイルを全削除 → まとめファイルを書き直す」という処理を、日記ファイルの数だけ繰り返しているようである。処理が長すぎて途中で強制終了してしまった。

処理が中断したため、途中から追記を再開させた。

「3月まとめ」に24日からの内容が入ってないので追記していって

しかし、内容が空のフォーマットだけが書き込まれてしまった。

その日に書いた日記が存在しているのでそれを参照して書いていって

この指示で、ようやく残りの日付の要約が比較的スムーズに追記された。

どうやら、最初に全ノートを読み込んでから一気に追記する方が効率が良いようである。理想的な処理フローは「フォーマット作成 → 各ノートの内容を要約して追記」となるだろうか。


おまけ:Mermaidで月間トピック相関図を作成

ObsidianではMermaid記法で図を作成できる。これを利用して、その月の出来事や関心事の相関図をAIに描いてもらう。

ファイルの目次部分にMarmaidを使って、その月の出来事というか各ジャンルの相関図を作ってみて

結果(初回):

違う、そうじゃない←
うーん、ただトピックを並べただけである…。もっとトピック間の関係性が見えるように指示を修正する。

う~ん、ただ並べるんじゃなくて、なんか各ジャンルにおける相関的な関係性?とかも考察していろんなラインを伸ばしてみて

結果(修正後):

おやおや、これは面白い図が出力された。
各トピックが線で結ばれ、関連性が(AIなりに解釈されて)表現されている。例えば、「AI」と「Obsidian」が強く関連付けられ、「プログラミング」や「健康」といった他のトピックとも繋がっている様子が視覚化された。これは月次の振り返りにおいて、自分の関心の変遷やトピック間の繋がりを俯瞰するのに役立ちそうだ。

なんや、やるときはやるやないかい!

10. テンプレート作成:デイリーノートとユニークノート

状況: デイリーノート用のテンプレートを編集し、「その日に作成したノート」と「その日に編集したノート」の一覧を自動で表示するようにしたい。ObsidianのDataViewプラグインを活用する想定である。

ちなみにDaily Templateファイルは、デイリーノートを作成する際に参照するテンプレートファイルとして既に設定されている。

Daily Templateにて、DataViewやTemplateなどを活用して以下の機能を持たせたテンプレートに仕上げたい
その日に作成したノート一覧を表示する
その日に編集したノート一覧を表示する

AIはDataViewクエリを含むテンプレートを作成してくれたが、日付の参照方法が date(today) となっており、これでは常に「今日」作成・編集されたノートが表示されてしまう。テンプレートが適用されたその日のノート(例: 3月30日のデイリーノートなら3月30日のノート)が表示されるように修正が必要である。

todayから参照するんじゃなくて、そのテンプレートが適応された日時(3月30日ならその日に書かれたノート一覧を作成)を参照するようにして


結果: 完璧である!


状況(ユニークノート): 同様に、ユニークノート(特定のトピックについて深掘りするノート)用のテンプレートも作成したい。さらにObsidianの設定を変更して、新しいノート作成時にこのテンプレートが自動的に適用されるようにしたい。テンプレートには、作成年月日をプロパティとして自動で記録する機能も持たせたい。

ユニークノートのテンプレートを51.Clineに作成してください
そのテンプレートを適応するように設定を変更してください
また、そのテンプレートの内容は、ファイル作成時にプロパティを設定するようにして作成年月日を記録するようにしてください


結果: テンプレートファイル自体の作成は問題なく行われた。しかし、Obsidianの設定ファイル(.obsidianフォルダ内)の変更まではできなかったようである。インターネット検索機能がないため、プラグインの詳細な仕様や設定方法までは把握できないのかもしれない。

Templaterプラグインを使うと、ノート作成後に再度コマンドを実行してテンプレートを適用する必要があり、二度手間になる可能性があったため、他の方法がないか尋ねてみた。

Templaterの仕様が、テンプレート適用時二度手間になりそうだったので、ダメ元で聞いてみた。

テンプレートを適応するのに2度手間になってしまうので、Templaterプラグインを使わずに実装する方法はない?

結果: なんと、普通にできた!最初からこの方法を提案してくれれば良かったのだが…。ともあれ、これでユニークノート用のテンプレートも完成した。


実験を終えて:所感と未来への期待

今回のObsidianとAIエージェント(Cline/Gemini)を連携させる一連の実験を通して、その可能性と現時点での限界の両方を体感することができた。

  • API呼び出し回数: ファイルの読み書きが多い操作では、Geminiの無料利用枠を超えないか少し心配になった。
  • Planモードの有用性: ClineのPlanモードは、AIが実際にファイル操作を行う前に実行計画を確認できるので安心感がある。
  • 単純作業への評価: ファイル移動やリネームといった単純作業は、私自身がちまちまやるのが好きなタイプなので、AIの少し融通の利かない部分が気になってしまった。
  • 検索・関連付けの課題: AIに最も期待したい「ノート間の関連性を見つけ出し、新たなリンクを生み出す」能力については、現状ではキーワード検索の域を出ていない印象で、少し物足りなさを感じた。検索自体も、ファイルやフォルダが見つからないといったトラブルが散見された。Claudeなら違うのかな、無職なので課金できないが。

あと記事書いてて思ったのは、プロンプトはまずAIにプロンプトエンジニアリングしてもらうと良いかも。

これからのAIエディタに期待すること

AIとエディタの融合において、検索や関連付け機能の強化はもちろん重要である。しかし、それだけでは面白くない。個人的に「こんな機能があったらいいな」と思うことを挙げてみる。

1. ノート内容に基づいた画像自動生成

私は文字情報よりも視覚的なイメージで記憶する傾向が強い、いわゆる「ビジュアルシンカー」に近いタイプである。ノートのタイトルだけでは内容を即座に思い出せなくても、関連する画像がサムネイルのように表示されていれば、記憶を呼び覚ます強力なトリガーとなるだろう。

そこで、ノートの内容をAIが分析し、その内容に合ったヘッダー画像を自動生成して設定してくれる機能があれば嬉しい。すべてのノートに手動で画像を設定するのは大変だが、AIがその手間を肩代わりしてくれれば、より視覚的で豊かなノートブラウジング体験が実現するのではないだろうか。

適当なタイトルでもノートを思い出せる人が居るように、AIが生成した「そこそこ適切な」画像でも、記憶のフックとしては十分に機能するはずだ。

2. 外部サービスとのシームレスな連携

MCPの真価は、様々なサービスと連携できる点にある。今回の実験ではObsidian内部の操作が中心であったが、例えばWeb検索の結果を取り込んだり、他のアプリと連携したりできれば、可能性は無限に広がる。AIによる新たな発想の連携機能に期待したい。

具体的にどんなサービスと連携したいかは…
あ、Google Keepとか使ってます、連携したいね。(Obsidianのモバイル環境構築をサボっているだけ)
あと、それこそ画像生成もそうかもね~。

3. 環境設定の自動化

今回、AIにはできなかったObsidianの設定変更やプラグイン導入。これらが自動化されれば、ユーザーはより本質的な作業に集中できる。VSCode/Cursor環境ではClineが設定をサポートしてくれるように、Obsidian環境でも同様のサポートが実現されることを願っている。「Cline for Obsidian」、待ってます!

関連情報

Cursorを使った文章執筆は、AIファーストな環境整備から始まる - 本しゃぶり
Obsidianと生成AIの連携をいくつか試したのでメモ(Claude MCP, Cline, Copilot Plus) - 誰がログ

3

Discussion

ログインするとコメントできます